SYMBOL INDEX (6736 symbols across 295 files) FILE: .github/scripts/aggregate_evals.py function _format_table (line 12) | def _format_table(rows: list[dict[str, object]], headers: list[str]) -> ... function _load_category_labels (line 50) | def _load_category_labels() -> dict[str, str]: function _build_category_table (line 63) | def _build_category_table(rows: list[dict[str, object]]) -> list[str]: function main (line 97) | def main() -> None: FILE: .github/scripts/check_extras_sync.py function _normalize (line 19) | def _normalize(name: str) -> str: function _parse_dep (line 28) | def _parse_dep(dep: str) -> tuple[str, str]: function main (line 46) | def main(pyproject_path: Path) -> int: FILE: .github/scripts/check_version_equality.py function _get_pyproject_version (line 21) | def _get_pyproject_version(path: Path) -> str: function _get_version_py (line 39) | def _get_version_py(path: Path) -> str: function main (line 59) | def main() -> int: FILE: .github/scripts/models.py class Model (line 30) | class Model(NamedTuple): function _filter_by_tag (line 181) | def _filter_by_tag(prefix: str, tag: str | None) -> list[str]: function _resolve_models (line 188) | def _resolve_models(workflow: str, selection: str) -> list[str]: function main (line 222) | def main() -> None: FILE: .github/scripts/pr-labeler.js function loadConfig (line 9) | function loadConfig() { function init (line 35) | function init(github, owner, repo, config, core) { function loadAndInit (line 273) | function loadAndInit(github, owner, repo, core) { FILE: examples/content-builder-agent/content_writer.py function web_search (line 45) | def web_search( function generate_cover (line 74) | def generate_cover(prompt: str, slug: str) -> str: function generate_social_image (line 104) | def generate_social_image(prompt: str, platform: str, slug: str) -> str: function load_subagents (line 134) | def load_subagents(config_path: Path) -> list: function create_content_writer (line 166) | def create_content_writer(): class AgentDisplay (line 177) | class AgentDisplay: method __init__ (line 180) | def __init__(self): method update_status (line 185) | def update_status(self, status: str): method print_message (line 189) | def print_message(self, msg): function main (line 239) | async def main(): FILE: examples/deep_research/research_agent/tools.py function fetch_webpage_content (line 16) | def fetch_webpage_content(url: str, timeout: float = 10.0) -> str: function tavily_search (line 39) | def tavily_search( function think_tool (line 92) | def think_tool(reflection: str) -> str: FILE: examples/deep_research/utils.py function format_message_content (line 12) | def format_message_content(message): function format_messages (line 47) | def format_messages(messages): function format_message (line 63) | def format_message(messages): function show_prompt (line 68) | def show_prompt(prompt_text: str, title: str = "Prompt", border_style: s... FILE: examples/nvidia_deep_agent/src/agent.py class Context (line 32) | class Context(TypedDict, total=False): FILE: examples/nvidia_deep_agent/src/backend.py function _seed_sandbox (line 35) | def _seed_sandbox(backend: ModalSandbox) -> None: function create_backend (line 67) | def create_backend(runtime): FILE: examples/nvidia_deep_agent/src/tools.py function fetch_webpage_content (line 16) | def fetch_webpage_content(url: str, timeout: float = 10.0) -> str: function tavily_search (line 39) | def tavily_search( FILE: examples/ralph_mode/ralph_mode.py function ralph (line 46) | async def ralph( function main (line 156) | def main() -> None: FILE: examples/text-to-sql-agent/agent.py function create_sql_deep_agent (line 20) | def create_sql_deep_agent(): function main (line 52) | def main(): FILE: libs/acp/deepagents_acp/__main__.py function main (line 8) | def main() -> None: FILE: libs/acp/deepagents_acp/server.py class AgentSessionContext (line 74) | class AgentSessionContext: class AgentServerACP (line 81) | class AgentServerACP(ACPAgent): method __init__ (line 86) | def __init__( method on_connect (line 115) | def on_connect(self, conn: Client) -> None: method initialize (line 119) | async def initialize( method new_session (line 136) | async def new_session( method set_session_mode (line 158) | async def set_session_mode( method cancel (line 175) | async def cancel(self, session_id: str, **kwargs: Any) -> None: # noq... method _log_text (line 179) | async def _log_text(self, session_id: str, text: str) -> None: method _all_tasks_completed (line 184) | def _all_tasks_completed(self, plan: list[dict[str, Any]]) -> bool: method _clear_plan (line 198) | async def _clear_plan(self, session_id: str) -> None: method _handle_todo_update (line 216) | async def _handle_todo_update( method _process_tool_call_chunks (line 269) | async def _process_tool_call_chunks( method _create_tool_call_start (line 337) | def _create_tool_call_start( method _reset_agent (line 420) | def _reset_agent(self, session_id: str) -> None: method prompt (line 432) | async def prompt( # noqa: C901, PLR0912, PLR0915 # Complex streaming... method _handle_interrupts (line 625) | async def _handle_interrupts( # noqa: C901, PLR0912, PLR0915 # Compl... function _serve_test_agent (line 801) | async def _serve_test_agent() -> None: FILE: libs/acp/deepagents_acp/utils.py function convert_text_block_to_content_blocks (line 18) | def convert_text_block_to_content_blocks(block: TextContentBlock) -> lis... function convert_image_block_to_content_blocks (line 23) | def convert_image_block_to_content_blocks(block: ImageContentBlock) -> l... function convert_audio_block_to_content_blocks (line 34) | def convert_audio_block_to_content_blocks(block: AudioContentBlock) -> l... function convert_resource_block_to_content_blocks (line 44) | def convert_resource_block_to_content_blocks( function convert_embedded_resource_block_to_content_blocks (line 73) | def convert_embedded_resource_block_to_content_blocks( function extract_command_types (line 101) | def extract_command_types(command: str) -> list[str]: # noqa: C901, PLR... function truncate_execute_command_for_display (line 278) | def truncate_execute_command_for_display(command: str) -> str: function format_execute_result (line 285) | def format_execute_result(command: str, result: str) -> str: FILE: libs/acp/examples/demo_agent.py function _get_interrupt_config (line 24) | def _get_interrupt_config(mode_id: str) -> dict: function _serve_example_agent (line 42) | async def _serve_example_agent() -> None: function main (line 107) | def main() -> None: FILE: libs/acp/examples/local_context.py class _ExecutableBackend (line 39) | class _ExecutableBackend(Protocol): method execute (line 42) | def execute(self, command: str) -> ExecuteResponse: ... function _section_header (line 60) | def _section_header() -> str: function _section_project (line 80) | def _section_project() -> str: function _section_package_managers (line 120) | def _section_package_managers() -> str: function _section_runtimes (line 150) | def _section_runtimes() -> str: function _section_git (line 170) | def _section_git() -> str: function _section_test_command (line 202) | def _section_test_command() -> str: function _section_files (line 224) | def _section_files() -> str: function _section_tree (line 254) | def _section_tree() -> str: function _section_makefile (line 277) | def _section_makefile() -> str: function build_detect_script (line 300) | def build_detect_script() -> str: class LocalContextState (line 328) | class LocalContextState(AgentState): class LocalContextMiddleware (line 350) | class LocalContextMiddleware(AgentMiddleware): method __init__ (line 363) | def __init__(self, backend: _ExecutableBackend) -> None: method _run_detect_script (line 371) | def _run_detect_script(self) -> str | None: method before_agent (line 404) | def before_agent( # type: ignore[override] method _get_modified_request (line 460) | def _get_modified_request(request: ModelRequest) -> ModelRequest | None: method wrap_model_call (line 479) | def wrap_model_call( method awrap_model_call (line 496) | async def awrap_model_call( FILE: libs/acp/tests/chat_model.py class GenericFakeChatModel (line 17) | class GenericFakeChatModel(BaseChatModel): method _generate (line 64) | def _generate( method _stream (line 76) | def _stream( method _llm_type (line 199) | def _llm_type(self) -> str: method bind_tools (line 202) | def bind_tools( FILE: libs/acp/tests/test_agent.py class FakeACPClient (line 37) | class FakeACPClient(Client): method __init__ (line 38) | def __init__( method session_update (line 46) | async def session_update(self, session_id: str, update: Any, source: s... method request_permission (line 56) | async def request_permission( function test_acp_agent_prompt_streams_text (line 79) | async def test_acp_agent_prompt_streams_text() -> None: function test_acp_agent_cancel_stops_prompt (line 105) | async def test_acp_agent_cancel_stops_prompt() -> None: function test_acp_agent_prompt_streams_list_content_blocks (line 127) | async def test_acp_agent_prompt_streams_list_content_blocks() -> None: function test_acp_agent_initialize_and_modes (line 176) | async def test_acp_agent_initialize_and_modes() -> None: function write_file_tool (line 193) | def write_file_tool(file_path: str, content: str) -> str: function test_acp_agent_hitl_requests_permission_via_public_api (line 197) | async def test_acp_agent_hitl_requests_permission_via_public_api() -> None: function test_acp_deep_agent_hitl_interrupt_on_edit_file_requests_permission (line 240) | async def test_acp_deep_agent_hitl_interrupt_on_edit_file_requests_permi... function test_acp_agent_tool_call_chunk_starts_tool_call (line 286) | async def test_acp_agent_tool_call_chunk_starts_tool_call() -> None: function test_acp_agent_tool_result_completes_tool_call (line 323) | async def test_acp_agent_tool_result_completes_tool_call() -> None: function test_acp_agent_multimodal_prompt_blocks_do_not_error (line 378) | async def test_acp_agent_multimodal_prompt_blocks_do_not_error() -> None: function test_acp_agent_end_to_end_clears_plan (line 412) | async def test_acp_agent_end_to_end_clears_plan() -> None: function test_acp_agent_hitl_approve_always_execute_auto_approves_next_time (line 469) | async def test_acp_agent_hitl_approve_always_execute_auto_approves_next_... function test_acp_agent_hitl_approve_always_tool_auto_approves_next_time (line 531) | async def test_acp_agent_hitl_approve_always_tool_auto_approves_next_tim... function test_acp_agent_hitl_client_cancel_raises_request_error (line 584) | async def test_acp_agent_hitl_client_cancel_raises_request_error() -> None: function test_acp_agent_nested_agent_tool_call_returns_final_text (line 632) | async def test_acp_agent_nested_agent_tool_call_returns_final_text() -> ... function test_acp_agent_with_prebuilt_langchain_agent_end_to_end (line 681) | async def test_acp_agent_with_prebuilt_langchain_agent_end_to_end() -> N... function test_acp_langchain_create_agent_nested_agent_tool_call_messages (line 704) | async def test_acp_langchain_create_agent_nested_agent_tool_call_message... function test_set_session_mode_resets_agent_with_new_mode (line 770) | async def test_set_session_mode_resets_agent_with_new_mode() -> None: function test_reset_agent_with_compiled_state_graph (line 833) | async def test_reset_agent_with_compiled_state_graph() -> None: function test_reset_agent_preserves_session_cwd (line 855) | async def test_reset_agent_preserves_session_cwd() -> None: function test_acp_agent_hitl_requests_permission_only_once (line 895) | async def test_acp_agent_hitl_requests_permission_only_once() -> None: FILE: libs/acp/tests/test_command_allowlist.py class TestExtractCommandTypes (line 12) | class TestExtractCommandTypes: method test_simple_non_sensitive_command (line 15) | def test_simple_non_sensitive_command(self): method test_npm_commands_with_subcommands (line 21) | def test_npm_commands_with_subcommands(self): method test_python_with_module_flag (line 28) | def test_python_with_module_flag(self): method test_python_with_code_flag (line 34) | def test_python_with_code_flag(self): method test_python_script_execution (line 43) | def test_python_script_execution(self): method test_node_commands (line 48) | def test_node_commands(self): method test_npx_with_package (line 58) | def test_npx_with_package(self): method test_yarn_commands (line 63) | def test_yarn_commands(self): method test_uv_commands (line 69) | def test_uv_commands(self): method test_command_with_and_operator (line 77) | def test_command_with_and_operator(self): method test_command_with_pipes_and_and_operator (line 90) | def test_command_with_pipes_and_and_operator(self): method test_empty_command (line 96) | def test_empty_command(self): method test_command_with_trailing_and_operator (line 101) | def test_command_with_trailing_and_operator(self): method test_duplicate_commands_preserved (line 106) | def test_duplicate_commands_preserved(self): method test_complex_real_world_command (line 114) | def test_complex_real_world_command(self): method test_security_python_different_modules (line 119) | def test_security_python_different_modules(self): method test_security_npm_different_subcommands (line 127) | def test_security_npm_different_subcommands(self): class TestCommandTypeAllowlist (line 135) | class TestCommandTypeAllowlist: method test_allowed_command_types_initialized (line 138) | def test_allowed_command_types_initialized(self): method test_can_add_allowed_command_type (line 147) | def test_can_add_allowed_command_type(self): method test_command_types_are_session_specific (line 170) | def test_command_types_are_session_specific(self): method test_multiple_command_types_in_single_command (line 193) | def test_multiple_command_types_in_single_command(self): method test_security_python_pytest_vs_pip (line 226) | def test_security_python_pytest_vs_pip(self): method test_security_npm_install_vs_run (line 259) | def test_security_npm_install_vs_run(self): method test_security_uv_run_pytest_vs_python (line 284) | def test_security_uv_run_pytest_vs_python(self): FILE: libs/acp/tests/test_main.py function test_import_main_module (line 4) | def test_import_main_module() -> None: FILE: libs/acp/tests/test_utils.py function test_convert_text_block_to_content_blocks (line 19) | def test_convert_text_block_to_content_blocks() -> None: function test_convert_image_block_to_content_blocks_with_data (line 24) | def test_convert_image_block_to_content_blocks_with_data() -> None: function test_convert_image_block_to_content_blocks_without_data_falls_back_to_text (line 31) | def test_convert_image_block_to_content_blocks_without_data_falls_back_t... function test_convert_resource_block_to_content_blocks_truncates_root_dir (line 38) | def test_convert_resource_block_to_content_blocks_truncates_root_dir() -... function test_convert_embedded_resource_block_to_content_blocks_text (line 50) | def test_convert_embedded_resource_block_to_content_blocks_text() -> None: FILE: libs/cli/deepagents_cli/__init__.py function __getattr__ (line 18) | def __getattr__(name: str) -> Callable[[], None]: FILE: libs/cli/deepagents_cli/_ask_user_types.py class Choice (line 16) | class Choice(TypedDict): class Question (line 22) | class Question(TypedDict): class AskUserRequest (line 59) | class AskUserRequest(TypedDict): class AskUserAnswered (line 69) | class AskUserAnswered(TypedDict): class AskUserCancelled (line 79) | class AskUserCancelled(TypedDict): FILE: libs/cli/deepagents_cli/_cli_context.py class CLIContext (line 15) | class CLIContext(TypedDict, total=False): FILE: libs/cli/deepagents_cli/_debug.py function configure_debug_logging (line 16) | def configure_debug_logging(target: logging.Logger) -> None: FILE: libs/cli/deepagents_cli/_server_config.py function _read_env_bool (line 30) | def _read_env_bool(suffix: str, *, default: bool = False) -> bool: function _read_env_json (line 49) | def _read_env_json(suffix: str) -> Any: # noqa: ANN401 function _read_env_str (line 74) | def _read_env_str(suffix: str) -> str | None: function _read_env_optional_bool (line 86) | def _read_env_optional_bool(suffix: str) -> bool | None: class ServerConfig (line 105) | class ServerConfig: method __post_init__ (line 132) | def __post_init__(self) -> None: method to_env (line 141) | def to_env(self) -> dict[str, str | None]: method from_env (line 180) | def from_env(cls) -> ServerConfig: method from_cli_args (line 215) | def from_cli_args( function _normalize_path (line 288) | def _normalize_path( FILE: libs/cli/deepagents_cli/_session_stats.py class ModelStats (line 19) | class ModelStats: class SessionStats (line 34) | class SessionStats: method record_request (line 56) | def record_request( method merge (line 82) | def merge(self, other: SessionStats) -> None: function format_token_count (line 101) | def format_token_count(count: int) -> str: FILE: libs/cli/deepagents_cli/_testing_models.py class DeterministicIntegrationChatModel (line 21) | class DeterministicIntegrationChatModel(GenericFakeChatModel): method bind_tools (line 65) | def bind_tools( method _generate (line 75) | def _generate( method _llm_type (line 106) | def _llm_type(self) -> str: method _stringify_message (line 111) | def _stringify_message(message: BaseMessage) -> str: method _looks_like_summary_request (line 133) | def _looks_like_summary_request(prompt: str) -> bool: FILE: libs/cli/deepagents_cli/agent.py function load_async_subagents (line 68) | def load_async_subagents(config_path: Path | None = None) -> list[AsyncS... function list_agents (line 136) | def list_agents(*, output_format: OutputFormat = "text") -> None: function reset_agent (line 211) | def reset_agent( function build_model_identity_section (line 280) | def build_model_identity_section( function get_system_prompt (line 308) | def get_system_prompt( function _format_write_file_description (line 443) | def _format_write_file_description( function _format_edit_file_description (line 461) | def _format_edit_file_description( function _format_web_search_description (line 477) | def _format_web_search_description( function _format_fetch_url_description (line 495) | def _format_fetch_url_description( function _format_task_description (line 529) | def _format_task_description( function _format_execute_description (line 562) | def _format_execute_description( function _add_interrupt_on (line 593) | def _add_interrupt_on() -> dict[str, InterruptOnConfig]: function create_cli_agent (line 665) | def create_cli_agent( FILE: libs/cli/deepagents_cli/app.py function _write_iterm_escape (line 113) | def _write_iterm_escape(sequence: str) -> None: function _restore_cursor_guide (line 138) | def _restore_cursor_guide() -> None: function _extract_model_params_flag (line 149) | def _extract_model_params_flag(raw_arg: str) -> tuple[str, dict[str, Any... class QueuedMessage (line 258) | class QueuedMessage: class DeferredAction (line 273) | class DeferredAction: class TextualTokenTracker (line 283) | class TextualTokenTracker: method __init__ (line 286) | def __init__( method add (line 296) | def add(self, total_tokens: int, _output_tokens: int = 0) -> None: method reset (line 306) | def reset(self) -> None: method hide (line 311) | def hide(self) -> None: method show (line 316) | def show(self) -> None: function _new_thread_id (line 321) | def _new_thread_id() -> str: class TextualSessionState (line 332) | class TextualSessionState: method __init__ (line 335) | def __init__( method reset_thread (line 350) | def reset_thread(self) -> str: class DeepAgentsApp (line 368) | class DeepAgentsApp(App): class ServerReady (line 424) | class ServerReady(Message): method __init__ (line 427) | def __init__( # noqa: D107 class ServerStartFailed (line 438) | class ServerStartFailed(Message): method __init__ (line 441) | def __init__(self, error: Exception) -> None: # noqa: D107 method __init__ (line 445) | def __init__( method _remote_agent (line 572) | def _remote_agent(self) -> RemoteAgent | None: method compose (line 592) | def compose(self) -> ComposeResult: method on_mount (line 620) | async def on_mount(self) -> None: method _resolve_git_branch_and_continue (line 656) | async def _resolve_git_branch_and_continue(self) -> None: method _post_paint_init (line 696) | async def _post_paint_init(self) -> None: method _init_session_state (line 768) | async def _init_session_state(self) -> None: method _check_optional_tools_background (line 787) | async def _check_optional_tools_background(self) -> None: method _init_agent_adapter (line 817) | def _init_agent_adapter(self) -> None: method _resolve_resume_thread (line 845) | async def _resolve_resume_thread(self) -> None: method _start_server_background (line 922) | async def _start_server_background(self) -> None: method on_deep_agents_app_server_ready (line 1000) | def on_deep_agents_app_server_ready(self, event: ServerReady) -> None: method on_deep_agents_app_server_start_failed (line 1058) | def on_deep_agents_app_server_start_failed(self, event: ServerStartFai... method _prewarm_deferred_imports (line 1083) | def _prewarm_deferred_imports() -> None: method _prewarm_threads_cache (line 1128) | async def _prewarm_threads_cache(self) -> None: # noqa: PLR6301 # Wo... method _prewarm_model_caches (line 1137) | async def _prewarm_model_caches(self) -> None: method _check_for_updates (line 1152) | async def _check_for_updates(self) -> None: method _show_whats_new (line 1213) | async def _show_whats_new(self) -> None: method _handle_update_command (line 1244) | async def _handle_update_command(self) -> None: method on_scroll_up (line 1288) | def on_scroll_up(self, _event: ScrollUp) -> None: method _update_status (line 1292) | def _update_status(self, message: str) -> None: method _update_tokens (line 1297) | def _update_tokens(self, count: int) -> None: method _hide_tokens (line 1302) | def _hide_tokens(self) -> None: method _check_hydration_needed (line 1307) | def _check_hydration_needed(self) -> None: method _hydrate_messages_above (line 1327) | async def _hydrate_messages_above(self) -> None: method _mount_before_queued (line 1403) | async def _mount_before_queued(self, container: Container, widget: Wid... method _is_spinner_at_correct_position (line 1430) | def _is_spinner_at_correct_position(self, container: Container) -> bool: method _set_spinner (line 1456) | async def _set_spinner(self, status: SpinnerStatus) -> None: method _request_approval (line 1485) | async def _request_approval( method _mount_approval_widget (line 1596) | async def _mount_approval_widget( method _deferred_show_approval (line 1624) | async def _deferred_show_approval( method _on_auto_approve_enabled (line 1673) | def _on_auto_approve_enabled(self) -> None: method _remove_ask_user_widget (line 1687) | async def _remove_ask_user_widget( # noqa: PLR6301 # Shared helper u... method _request_ask_user (line 1708) | async def _request_ask_user( method on_ask_user_menu_answered (line 1768) | async def on_ask_user_menu_answered( method on_ask_user_menu_cancelled (line 1781) | async def on_ask_user_menu_cancelled( method _process_message (line 1794) | async def _process_message(self, value: str, mode: InputMode) -> None: method _can_bypass_queue (line 1811) | def _can_bypass_queue(self, value: str) -> bool: method on_chat_input_submitted (line 1835) | async def on_chat_input_submitted(self, event: ChatInput.Submitted) ->... method on_chat_input_mode_changed (line 1878) | def on_chat_input_mode_changed(self, event: ChatInput.ModeChanged) -> ... method on_chat_input_typing (line 1883) | def on_chat_input_typing( method _is_user_typing (line 1890) | def _is_user_typing(self) -> bool: method on_approval_menu_decided (line 1901) | async def on_approval_menu_decided( method _handle_shell_command (line 1928) | async def _handle_shell_command(self, command: str) -> None: method _run_shell_task (line 1948) | async def _run_shell_task(self, command: str) -> None: method _cleanup_shell_task (line 2009) | async def _cleanup_shell_task(self) -> None: method _kill_shell_process (line 2034) | async def _kill_shell_process(self) -> None: method _open_url_command (line 2076) | async def _open_url_command(self, command: str, cmd: str) -> None: method _build_thread_message (line 2116) | async def _build_thread_message(prefix: str, thread_id: str) -> str | ... method _handle_trace_command (line 2147) | async def _handle_trace_command(self, command: str) -> None: method _handle_command (line 2187) | async def _handle_command(self, command: str) -> None: method _get_conversation_token_count (line 2428) | async def _get_conversation_token_count(self) -> int | None: method _resolve_offload_budget_str (line 2455) | def _resolve_offload_budget_str(self) -> str | None: method _handle_offload (line 2488) | async def _handle_offload(self) -> None: method _handle_user_message (line 2617) | async def _handle_user_message(self, message: str) -> None: method _run_agent_task (line 2648) | async def _run_agent_task(self, message: str) -> None: method _process_next_from_queue (line 2694) | async def _process_next_from_queue(self) -> None: method _cleanup_agent_task (line 2728) | async def _cleanup_agent_task(self) -> None: method _convert_messages_to_data (line 2759) | def _convert_messages_to_data(messages: list[Any]) -> list[MessageData]: method _get_thread_state_values (line 2857) | async def _get_thread_state_values(self, thread_id: str) -> dict[str, ... method _fetch_thread_history_data (line 2903) | async def _fetch_thread_history_data(self, thread_id: str) -> list[Mes... method _read_channel_values_from_checkpointer (line 2934) | async def _read_channel_values_from_checkpointer(thread_id: str) -> di... method _upgrade_thread_message_link (line 2971) | async def _upgrade_thread_message_link( method _schedule_thread_message_link (line 3009) | def _schedule_thread_message_link( method _load_thread_history (line 3032) | async def _load_thread_history( method _mount_message (line 3131) | async def _mount_message( method _prune_old_messages (line 3182) | async def _prune_old_messages(self) -> None: method _set_active_message (line 3218) | def _set_active_message(self, message_id: str | None) -> None: method _sync_message_content (line 3226) | def _sync_message_content(self, message_id: str, content: str) -> None: method _clear_messages (line 3242) | async def _clear_messages(self) -> None: method _pop_last_queued_message (line 3255) | def _pop_last_queued_message(self) -> None: method _discard_queue (line 3292) | def _discard_queue(self) -> None: method _defer_action (line 3300) | def _defer_action(self, action: DeferredAction) -> None: method _maybe_drain_deferred (line 3314) | async def _maybe_drain_deferred(self) -> None: method _drain_deferred_actions (line 3319) | async def _drain_deferred_actions(self) -> None: method _cancel_worker (line 3340) | def _cancel_worker(self, worker: Worker[None] | None) -> None: method action_quit_or_interrupt (line 3350) | def action_quit_or_interrupt(self) -> None: method _arm_quit_pending (line 3394) | def _arm_quit_pending(self, shortcut: str) -> None: method action_interrupt (line 3405) | def action_interrupt(self) -> None: method action_quit_app (line 3470) | def action_quit_app(self) -> None: method exit (line 3488) | def exit( method action_toggle_auto_approve (line 3532) | def action_toggle_auto_approve(self) -> None: method action_toggle_tool_output (line 3558) | def action_toggle_tool_output(self) -> None: method action_approval_up (line 3573) | def action_approval_up(self) -> None: method action_approval_down (line 3580) | def action_approval_down(self) -> None: method action_approval_select (line 3585) | def action_approval_select(self) -> None: method _is_input_focused (line 3591) | def _is_input_focused(self) -> bool: method action_approval_yes (line 3605) | def action_approval_yes(self) -> None: method action_approval_auto (line 3610) | def action_approval_auto(self) -> None: method action_approval_no (line 3615) | def action_approval_no(self) -> None: method action_approval_escape (line 3620) | def action_approval_escape(self) -> None: method action_open_editor (line 3625) | async def action_open_editor(self) -> None: method on_paste (line 3655) | def on_paste(self, event: Paste) -> None: method on_app_focus (line 3669) | def on_app_focus(self) -> None: method on_click (line 3685) | def on_click(self, _event: Click) -> None: method on_mouse_up (line 3694) | def on_mouse_up(self, event: MouseUp) -> None: # noqa: ARG002 # Text... method _show_model_selector (line 3704) | async def _show_model_selector( method _show_mcp_viewer (line 3756) | async def _show_mcp_viewer(self) -> None: method _show_thread_selector (line 3768) | async def _show_thread_selector(self) -> None: method _update_welcome_banner (line 3805) | def _update_welcome_banner( method _resume_thread (line 3828) | async def _resume_thread(self, thread_id: str) -> None: method _switch_model (line 3939) | async def _switch_model( method _set_default_model (line 4073) | async def _set_default_model(self, model_spec: str) -> None: method _clear_default_model (line 4102) | async def _clear_default_model(self) -> None: class AppResult (line 4127) | class AppResult: function run_textual_app (line 4144) | async def run_textual_app( FILE: libs/cli/deepagents_cli/ask_user.py function _validate_questions (line 63) | def _validate_questions(questions: list[Question]) -> None: function _parse_answers (line 100) | def _parse_answers( class AskUserMiddleware (line 205) | class AskUserMiddleware(AgentMiddleware[Any, ContextT, ResponseT]): method __init__ (line 213) | def __init__( method wrap_model_call (line 257) | def wrap_model_call( method awrap_model_call (line 279) | async def awrap_model_call( FILE: libs/cli/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py function _validate_name (line 192) | def _validate_name(name: str) -> tuple[bool, str]: function title_case_skill_name (line 225) | def title_case_skill_name(skill_name): function init_skill (line 234) | def init_skill(skill_name, path): function main (line 322) | def main(): FILE: libs/cli/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py function validate_skill (line 20) | def validate_skill(skill_path): FILE: libs/cli/deepagents_cli/clipboard.py function _copy_osc52 (line 21) | def _copy_osc52(text: str) -> None: function _shorten_preview (line 33) | def _shorten_preview(texts: list[str]) -> str: function copy_selection_to_clipboard (line 46) | def copy_selection_to_clipboard(app: App) -> None: FILE: libs/cli/deepagents_cli/command_registry.py class BypassTier (line 14) | class BypassTier(StrEnum): class SlashCommand (line 34) | class SlashCommand: function _build_bypass_set (line 158) | def _build_bypass_set(tier: BypassTier) -> frozenset[str]: FILE: libs/cli/deepagents_cli/config.py function _find_dotenv_from_start_path (line 52) | def _find_dotenv_from_start_path(start_path: Path) -> Path | None: function _load_dotenv (line 73) | def _load_dotenv(*, start_path: Path | None = None, override: bool = Fal... function _ensure_bootstrap (line 94) | def _ensure_bootstrap() -> None: class CharsetMode (line 192) | class CharsetMode(StrEnum): class Glyphs (line 201) | class Glyphs: function _resolve_editable_info (line 299) | def _resolve_editable_info() -> tuple[bool, str | None]: function _is_editable_install (line 337) | def _is_editable_install() -> bool: function _get_editable_install_path (line 348) | def _get_editable_install_path() -> str | None: function _detect_charset_mode (line 357) | def _detect_charset_mode() -> CharsetMode: function get_glyphs (line 379) | def get_glyphs() -> Glyphs: function reset_glyphs_cache (line 394) | def reset_glyphs_cache() -> None: function is_ascii_mode (line 400) | def is_ascii_mode() -> bool: function newline_shortcut (line 412) | def newline_shortcut() -> str: function get_banner (line 460) | def get_banner() -> str: class _ShellAllowAll (line 496) | class _ShellAllowAll(list): # noqa: FURB189 # sentinel type, not a gen... function parse_shell_allow_list (line 509) | def parse_shell_allow_list(allow_list_str: str | None) -> list[str] | None: class Settings (line 570) | class Settings: method from_environment (line 624) | def from_environment(cls, *, start_path: Path | None = None) -> Settings: method reload_from_environment (line 676) | def reload_from_environment(self, *, start_path: Path | None = None) -... method has_openai (line 784) | def has_openai(self) -> bool: method has_anthropic (line 789) | def has_anthropic(self) -> bool: method has_google (line 794) | def has_google(self) -> bool: method has_nvidia (line 799) | def has_nvidia(self) -> bool: method has_vertex_ai (line 804) | def has_vertex_ai(self) -> bool: method has_tavily (line 814) | def has_tavily(self) -> bool: method user_deepagents_dir (line 819) | def user_deepagents_dir(self) -> Path: method get_user_agent_md_path (line 828) | def get_user_agent_md_path(agent_name: str) -> Path: method get_project_agent_md_path (line 841) | def get_project_agent_md_path(self) -> list[Path]: method _is_valid_agent_name (line 863) | def _is_valid_agent_name(agent_name: str) -> bool: method get_agent_dir (line 874) | def get_agent_dir(self, agent_name: str) -> Path: method ensure_agent_dir (line 894) | def ensure_agent_dir(self, agent_name: str) -> Path: method get_user_skills_dir (line 916) | def get_user_skills_dir(self, agent_name: str) -> Path: method ensure_user_skills_dir (line 927) | def ensure_user_skills_dir(self, agent_name: str) -> Path: method get_project_skills_dir (line 940) | def get_project_skills_dir(self) -> Path | None: method ensure_project_skills_dir (line 950) | def ensure_project_skills_dir(self) -> Path | None: method get_user_agents_dir (line 964) | def get_user_agents_dir(self, agent_name: str) -> Path: method get_project_agents_dir (line 975) | def get_project_agents_dir(self) -> Path | None: method user_agents_dir (line 986) | def user_agents_dir(self) -> Path: method get_user_agent_skills_dir (line 994) | def get_user_agent_skills_dir(self) -> Path: method get_project_agent_skills_dir (line 1004) | def get_project_agent_skills_dir(self) -> Path | None: method get_built_in_skills_dir (line 1017) | def get_built_in_skills_dir() -> Path: class SessionState (line 1026) | class SessionState: method __init__ (line 1037) | def __init__(self, auto_approve: bool = False, no_splash: bool = False... method toggle_auto_approve (line 1056) | def toggle_auto_approve(self) -> bool: function contains_dangerous_patterns (line 1152) | def contains_dangerous_patterns(command: str) -> bool: function is_shell_command_allowed (line 1180) | def is_shell_command_allowed(command: str, allow_list: list[str] | None)... function get_langsmith_project_name (line 1248) | def get_langsmith_project_name() -> str | None: function fetch_langsmith_project_url (line 1277) | def fetch_langsmith_project_url(project_name: str) -> str | None: function build_langsmith_thread_url (line 1357) | def build_langsmith_thread_url(thread_id: str) -> str | None: function reset_langsmith_url_cache (line 1381) | def reset_langsmith_url_cache() -> None: function get_default_coding_instructions (line 1387) | def get_default_coding_instructions() -> str: function detect_provider (line 1400) | def detect_provider(model_name: str) -> str | None: function _get_default_model_spec (line 1442) | def _get_default_model_spec() -> str: function _apply_openrouter_defaults (line 1496) | def _apply_openrouter_defaults(kwargs: dict[str, Any]) -> None: function _get_provider_kwargs (line 1525) | def _get_provider_kwargs( function _create_model_from_class (line 1562) | def _create_model_from_class( function _create_model_via_init (line 1625) | def _create_model_via_init( class ModelResult (line 1692) | class ModelResult: method apply_to_settings (line 1710) | def apply_to_settings(self) -> None: function _apply_profile_overrides (line 1718) | def _apply_profile_overrides( function create_model (line 1767) | def create_model( function validate_model_capabilities (line 1893) | def validate_model_capabilities(model: BaseChatModel, model_name: str) -... function _get_console (line 1946) | def _get_console() -> Console: function _get_settings (line 1969) | def _get_settings() -> Settings: function __getattr__ (line 1999) | def __getattr__(name: str) -> Settings | Console: FILE: libs/cli/deepagents_cli/configurable_model.py function _is_anthropic_model (line 27) | def _is_anthropic_model(model: object) -> bool: function _apply_overrides (line 52) | def _apply_overrides(request: ModelRequest) -> ModelRequest: class ConfigurableModelMiddleware (line 144) | class ConfigurableModelMiddleware(AgentMiddleware): method wrap_model_call (line 147) | def wrap_model_call( # noqa: PLR6301 method awrap_model_call (line 155) | async def awrap_model_call( # noqa: PLR6301 FILE: libs/cli/deepagents_cli/editor.py function resolve_editor (line 30) | def resolve_editor() -> list[str] | None: function _prepare_command (line 48) | def _prepare_command(cmd: list[str], filepath: str) -> list[str]: function open_in_editor (line 73) | def open_in_editor(current_text: str) -> str | None: FILE: libs/cli/deepagents_cli/file_ops.py class ApprovalPreview (line 20) | class ApprovalPreview: function _safe_read (line 30) | def _safe_read(path: Path) -> str | None: function _count_lines (line 43) | def _count_lines(text: str) -> int: function compute_unified_diff (line 54) | def compute_unified_diff( class FileOpMetrics (line 96) | class FileOpMetrics: class FileOperationRecord (line 109) | class FileOperationRecord: function resolve_physical_path (line 127) | def resolve_physical_path( function format_display_path (line 152) | def format_display_path(path_str: str | None) -> str: function build_approval_preview (line 169) | def build_approval_preview( class FileOpTracker (line 273) | class FileOpTracker: method __init__ (line 276) | def __init__( method start_operation (line 285) | def start_operation( method complete_with_message (line 325) | def complete_with_message(self, tool_message: Any) -> FileOperationRec... method mark_hitl_approved (line 427) | def mark_hitl_approved(self, tool_name: str, args: dict[str, Any]) -> ... method _populate_after_content (line 440) | def _populate_after_content(self, record: FileOperationRecord) -> None: method _finalize (line 471) | def _finalize(self, record: FileOperationRecord) -> None: FILE: libs/cli/deepagents_cli/hooks.py function _load_hooks (line 35) | def _load_hooks() -> list[dict[str, Any]]: function _run_single_hook (line 81) | def _run_single_hook(command: list[str], event: str, payload_bytes: byte... function _dispatch_hook_sync (line 115) | def _dispatch_hook_sync( function dispatch_hook (line 158) | async def dispatch_hook(event: str, payload: dict[str, Any]) -> None: function dispatch_hook_fire_and_forget (line 187) | def dispatch_hook_fire_and_forget(event: str, payload: dict[str, Any]) -... FILE: libs/cli/deepagents_cli/input.py class ParsedPastedPathPayload (line 92) | class ParsedPastedPathPayload: class MediaTracker (line 107) | class MediaTracker: method __init__ (line 110) | def __init__(self) -> None: method add_media (line 121) | def add_media(self, data: ImageData | VideoData, kind: MediaKind) -> str: method add_image (line 143) | def add_image(self, image_data: ImageData) -> str: method add_video (line 154) | def add_video(self, video_data: VideoData) -> str: method get_media (line 165) | def get_media(self, kind: MediaKind) -> list[ImageData] | list[VideoDa... method get_images (line 178) | def get_images(self) -> list[ImageData]: method get_videos (line 186) | def get_videos(self) -> list[VideoData]: method clear (line 194) | def clear(self) -> None: method sync_to_text (line 201) | def sync_to_text(self, text: str) -> None: method _sync_kind_images (line 212) | def _sync_kind_images(self, text: str) -> bool: method _sync_kind_videos (line 231) | def _sync_kind_videos(self, text: str) -> bool: method _max_placeholder_id (line 251) | def _max_placeholder_id( function parse_file_mentions (line 274) | def parse_file_mentions(text: str) -> tuple[str, list[Path]]: function parse_pasted_file_paths (line 334) | def parse_pasted_file_paths(text: str) -> list[Path]: function parse_pasted_path_payload (line 383) | def parse_pasted_path_payload( function parse_single_pasted_file_path (line 420) | def parse_single_pasted_file_path(text: str) -> Path | None: function extract_leading_pasted_file_path (line 439) | def extract_leading_pasted_file_path(text: str) -> tuple[Path, int] | None: function normalize_pasted_path (line 473) | def normalize_pasted_path(text: str) -> Path | None: function _split_paste_line (line 527) | def _split_paste_line(line: str) -> list[str]: function _token_to_path (line 543) | def _token_to_path(token: str) -> Path | None: function _leading_token_end (line 581) | def _leading_token_end(text: str) -> int | None: function _extract_unquoted_leading_path_with_spaces (line 617) | def _extract_unquoted_leading_path_with_spaces(text: str) -> tuple[Path,... function _normalize_windows_pasted_path (line 650) | def _normalize_windows_pasted_path(text: str) -> Path | None: function _normalize_posix_pasted_path (line 665) | def _normalize_posix_pasted_path(text: str) -> Path | None: function _resolve_existing_pasted_path (line 688) | def _resolve_existing_pasted_path(path: Path) -> Path | None: function _normalize_unicode_spaces (line 720) | def _normalize_unicode_spaces(text: str) -> str: function _resolve_with_unicode_space_variants (line 732) | def _resolve_with_unicode_space_variants(path: Path) -> Path | None: FILE: libs/cli/deepagents_cli/integrations/sandbox_factory.py function _run_sandbox_setup (line 35) | def _run_sandbox_setup(backend: SandboxBackendProtocol, setup_script_pat... function create_sandbox (line 84) | def create_sandbox( function _get_available_sandbox_types (line 145) | def _get_available_sandbox_types() -> list[str]: function get_default_working_dir (line 154) | def get_default_working_dir(provider: str) -> str: function _import_provider_module (line 178) | def _import_provider_module( class _LangSmithProvider (line 214) | class _LangSmithProvider(SandboxProvider): method __init__ (line 220) | def __init__(self, api_key: str | None = None) -> None: method get_or_create (line 237) | def get_or_create( method delete (line 312) | def delete(self, *, sandbox_id: str, **kwargs: Any) -> None: # noqa: ... method _resolve_template (line 322) | def _resolve_template( method _ensure_template (line 343) | def _ensure_template( class _DaytonaProvider (line 372) | class _DaytonaProvider(SandboxProvider): method __init__ (line 375) | def __init__(self) -> None: method get_or_create (line 393) | def get_or_create( method delete (line 446) | def delete(self, *, sandbox_id: str, **kwargs: Any) -> None: # noqa: ... class _ModalProvider (line 452) | class _ModalProvider(SandboxProvider): method __init__ (line 455) | def __init__(self) -> None: method get_or_create (line 467) | def get_or_create( method delete (line 521) | def delete(self, *, sandbox_id: str, **kwargs: Any) -> None: # noqa: ... class _RunloopProvider (line 527) | class _RunloopProvider(SandboxProvider): method __init__ (line 530) | def __init__(self) -> None: method get_or_create (line 543) | def get_or_create( method delete (line 596) | def delete(self, *, sandbox_id: str, **kwargs: Any) -> None: # noqa: ... function _get_provider (line 601) | def _get_provider(provider_name: str) -> SandboxProvider: function verify_sandbox_deps (line 629) | def verify_sandbox_deps(provider: str) -> None: FILE: libs/cli/deepagents_cli/integrations/sandbox_provider.py class SandboxError (line 13) | class SandboxError(Exception): method original_exc (line 17) | def original_exc(self) -> BaseException | None: class SandboxNotFoundError (line 22) | class SandboxNotFoundError(SandboxError): class SandboxProvider (line 26) | class SandboxProvider(ABC): method get_or_create (line 30) | def get_or_create( method delete (line 40) | def delete( method aget_or_create (line 49) | async def aget_or_create( method adelete (line 64) | async def adelete( FILE: libs/cli/deepagents_cli/local_context.py function _build_mcp_context (line 43) | def _build_mcp_context(servers: list[MCPServerInfo]) -> str: class _ExecutableBackend (line 80) | class _ExecutableBackend(Protocol): method execute (line 83) | def execute(self, command: str) -> ExecuteResponse: ... function _section_header (line 102) | def _section_header() -> str: function _section_project (line 122) | def _section_project() -> str: function _section_package_managers (line 162) | def _section_package_managers() -> str: function _section_runtimes (line 192) | def _section_runtimes() -> str: function _section_git (line 212) | def _section_git() -> str: function _section_test_command (line 244) | def _section_test_command() -> str: function _section_files (line 266) | def _section_files() -> str: function _section_tree (line 296) | def _section_tree() -> str: function _section_makefile (line 319) | def _section_makefile() -> str: function build_detect_script (line 342) | def build_detect_script() -> str: class LocalContextState (line 390) | class LocalContextState(AgentState): class LocalContextMiddleware (line 412) | class LocalContextMiddleware(AgentMiddleware): method __init__ (line 425) | def __init__( method _run_detect_script (line 440) | def _run_detect_script(self) -> str | None: method before_agent (line 476) | def before_agent( # type: ignore[override] method _get_modified_request (line 531) | def _get_modified_request(self, request: ModelRequest) -> ModelRequest... method wrap_model_call (line 551) | def wrap_model_call( method awrap_model_call (line 568) | async def awrap_model_call( FILE: libs/cli/deepagents_cli/main.py function check_cli_dependencies (line 41) | def check_cli_dependencies() -> None: function _ripgrep_install_hint (line 78) | def _ripgrep_install_hint() -> str: function check_optional_tools (line 117) | def check_optional_tools(*, config_path: Path | None = None) -> list[str]: function format_tool_warning_tui (line 139) | def format_tool_warning_tui(tool: str) -> str: function format_tool_warning_cli (line 158) | def format_tool_warning_cli(tool: str) -> str: function _preload_session_mcp_server_info (line 179) | async def _preload_session_mcp_server_info( function parse_args (line 231) | def parse_args() -> argparse.Namespace: function run_textual_cli_async (line 605) | async def run_textual_cli_async( function _run_acp_cli_async (line 751) | async def _run_acp_cli_async( function apply_stdin_pipe (line 868) | def apply_stdin_pipe(args: argparse.Namespace) -> None: function _print_session_stats (line 984) | def _print_session_stats(stats: Any, console: Any) -> None: # noqa: ANN401 function _check_mcp_project_trust (line 998) | def _check_mcp_project_trust(*, trust_flag: bool = False) -> bool | None: function cli_main (line 1083) | def cli_main() -> None: FILE: libs/cli/deepagents_cli/mcp_tools.py class MCPToolInfo (line 29) | class MCPToolInfo: class MCPServerInfo (line 40) | class MCPServerInfo: function _resolve_server_type (line 57) | def _resolve_server_type(server_config: dict[str, Any]) -> str: function _validate_server_config (line 74) | def _validate_server_config(server_name: str, server_config: dict[str, A... function load_mcp_config (line 127) | def load_mcp_config(config_path: str) -> dict[str, Any]: function _resolve_project_config_base (line 184) | def _resolve_project_config_base(project_context: ProjectContext | None)... function discover_mcp_configs (line 201) | def discover_mcp_configs( function classify_discovered_configs (line 237) | def classify_discovered_configs( function extract_stdio_server_commands (line 265) | def extract_stdio_server_commands( function _filter_project_stdio_servers (line 288) | def _filter_project_stdio_servers(config: dict[str, Any]) -> dict[str, A... function merge_mcp_configs (line 310) | def merge_mcp_configs(configs: list[dict[str, Any]]) -> dict[str, Any]: function load_mcp_config_lenient (line 330) | def load_mcp_config_lenient(config_path: Path) -> dict[str, Any] | None: class MCPSessionManager (line 355) | class MCPSessionManager: method __init__ (line 363) | def __init__(self) -> None: method cleanup (line 368) | async def cleanup(self) -> None: function _check_stdio_server (line 373) | def _check_stdio_server(server_name: str, server_config: dict[str, Any])... function _check_remote_server (line 395) | async def _check_remote_server(server_name: str, server_config: dict[str... function _load_tools_from_config (line 428) | async def _load_tools_from_config( function get_mcp_tools (line 548) | async def get_mcp_tools( function resolve_and_load_mcp_tools (line 576) | async def resolve_and_load_mcp_tools( FILE: libs/cli/deepagents_cli/mcp_trust.py function compute_config_fingerprint (line 27) | def compute_config_fingerprint(config_paths: list[Path]) -> str: function _load_config (line 45) | def _load_config(config_path: Path) -> dict[str, Any]: function _save_config (line 63) | def _save_config(data: dict[str, Any], config_path: Path) -> bool: function is_project_mcp_trusted (line 94) | def is_project_mcp_trusted( function trust_project_mcp (line 118) | def trust_project_mcp( function revoke_project_mcp_trust (line 146) | def revoke_project_mcp_trust( FILE: libs/cli/deepagents_cli/media_utils.py function _get_executable (line 53) | def _get_executable(name: str) -> str | None: class ImageData (line 66) | class ImageData: method to_message_content (line 73) | def to_message_content(self) -> dict: class VideoData (line 86) | class VideoData: method to_message_content (line 93) | def to_message_content(self) -> "VideoContentBlock": function get_clipboard_image (line 107) | def get_clipboard_image() -> ImageData | None: function get_image_from_path (line 126) | def get_image_from_path(path: pathlib.Path) -> ImageData | None: function _detect_video_format (line 176) | def _detect_video_format(data: bytes) -> str | None: function get_video_from_path (line 201) | def get_video_from_path(path: pathlib.Path) -> VideoData | None: function get_media_from_path (line 260) | def get_media_from_path(path: pathlib.Path) -> ImageData | VideoData | N... function _get_macos_clipboard_image (line 275) | def _get_macos_clipboard_image() -> ImageData | None: function _get_clipboard_via_osascript (line 324) | def _get_clipboard_via_osascript() -> ImageData | None: function encode_to_base64 (line 440) | def encode_to_base64(data: bytes) -> str: function create_multimodal_content (line 452) | def create_multimodal_content( FILE: libs/cli/deepagents_cli/model_config.py class ModelConfigError (line 28) | class ModelConfigError(Exception): class ModelSpec (line 33) | class ModelSpec: method __post_init__ (line 52) | def __post_init__(self) -> None: method parse (line 66) | def parse(cls, spec: str) -> ModelSpec: method try_parse (line 88) | def try_parse(cls, spec: str) -> ModelSpec | None: method __str__ (line 102) | def __str__(self) -> str: class ModelProfileEntry (line 107) | class ModelProfileEntry(TypedDict): class ProviderConfig (line 121) | class ProviderConfig(TypedDict, total=False): function clear_caches (line 226) | def clear_caches() -> None: function _get_builtin_providers (line 240) | def _get_builtin_providers() -> dict[str, Any]: function _get_provider_profile_modules (line 266) | def _get_provider_profile_modules() -> list[tuple[str, str]]: function _load_provider_profiles (line 292) | def _load_provider_profiles(module_path: str) -> dict[str, Any]: function _profile_module_from_class_path (line 346) | def _profile_module_from_class_path(class_path: str) -> str | None: function get_available_models (line 365) | def get_available_models() -> dict[str, list[str]]: function _build_entry (line 491) | def _build_entry( function get_model_profiles (line 517) | def get_model_profiles( function has_provider_credentials (line 652) | def has_provider_credentials(provider: str) -> bool | None: function get_credential_env_var (line 703) | def get_credential_env_var(provider: str) -> str | None: class ModelConfig (line 723) | class ModelConfig: method __post_init__ (line 740) | def __post_init__(self) -> None: method load (line 746) | def load(cls, config_path: Path | None = None) -> ModelConfig: method _validate (line 810) | def _validate(self) -> None: method is_provider_enabled (line 865) | def is_provider_enabled(self, provider_name: str) -> bool: method get_all_models (line 883) | def get_all_models(self) -> list[tuple[str, str]]: method get_provider_for_model (line 899) | def get_provider_for_model(self, model_name: str) -> str | None: method has_credentials (line 915) | def has_credentials(self, provider_name: str) -> bool | None: method get_base_url (line 939) | def get_base_url(self, provider_name: str) -> str | None: method get_api_key_env (line 951) | def get_api_key_env(self, provider_name: str) -> str | None: method get_class_path (line 963) | def get_class_path(self, provider_name: str) -> str | None: method get_kwargs (line 975) | def get_kwargs( method get_profile_overrides (line 1002) | def get_profile_overrides( function _save_model_field (line 1030) | def _save_model_field( function save_default_model (line 1083) | def save_default_model(model_spec: str, config_path: Path | None = None)... function clear_default_model (line 1104) | def clear_default_model(config_path: Path | None = None) -> bool: function is_warning_suppressed (line 1152) | def is_warning_suppressed(key: str, config_path: Path | None = None) -> ... function suppress_warning (line 1196) | def suppress_warning(key: str, config_path: Path | None = None) -> bool: class ThreadConfig (line 1258) | class ThreadConfig(NamedTuple): function load_thread_config (line 1274) | def load_thread_config(config_path: Path | None = None) -> ThreadConfig: function invalidate_thread_config_cache (line 1337) | def invalidate_thread_config_cache() -> None: function load_thread_columns (line 1343) | def load_thread_columns(config_path: Path | None = None) -> dict[str, bo... function save_thread_columns (line 1371) | def save_thread_columns( function load_thread_relative_time (line 1415) | def load_thread_relative_time(config_path: Path | None = None) -> bool: function save_thread_relative_time (line 1439) | def save_thread_relative_time(enabled: bool, config_path: Path | None = ... function load_thread_sort_order (line 1477) | def load_thread_sort_order(config_path: Path | None = None) -> str: function save_thread_sort_order (line 1501) | def save_thread_sort_order(sort_order: str, config_path: Path | None = N... function save_recent_model (line 1547) | def save_recent_model(model_spec: str, config_path: Path | None = None) ... FILE: libs/cli/deepagents_cli/non_interactive.py class HITLIterationLimitError (line 72) | class HITLIterationLimitError(RuntimeError): function _write_text (line 92) | def _write_text(text: str) -> None: function _write_newline (line 106) | def _write_newline() -> None: class _ConsoleSpinner (line 112) | class _ConsoleSpinner: method __init__ (line 119) | def __init__(self, console: Console) -> None: method start (line 123) | def start(self, message: str = "Working...") -> None: method stop (line 146) | def stop(self) -> None: class StreamState (line 158) | class StreamState: class ThreadUrlLookupState (line 207) | class ThreadUrlLookupState: function _start_langsmith_thread_url_lookup (line 218) | def _start_langsmith_thread_url_lookup(thread_id: str) -> ThreadUrlLooku... function _process_interrupts (line 245) | def _process_interrupts( function _process_ai_message (line 285) | def _process_ai_message( function _process_message_chunk (line 355) | def _process_message_chunk( function _process_stream_chunk (line 402) | def _process_stream_chunk( function _make_hitl_decision (line 445) | def _make_hitl_decision( function _collect_action_request_warnings (line 515) | def _collect_action_request_warnings(action_request: ActionRequest) -> l... function _process_hitl_interrupts (line 550) | def _process_hitl_interrupts(state: StreamState, console: Console) -> None: function _stream_agent (line 571) | async def _stream_agent( function _run_agent_loop (line 606) | async def _run_agent_loop( function _build_non_interactive_header (line 698) | def _build_non_interactive_header( function run_non_interactive (line 744) | async def run_non_interactive( FILE: libs/cli/deepagents_cli/offload.py class OffloadResult (line 36) | class OffloadResult: class OffloadThresholdNotMet (line 62) | class OffloadThresholdNotMet: class OffloadModelError (line 79) | class OffloadModelError(Exception): function format_offload_limit (line 88) | def format_offload_limit( function offload_messages_to_backend (line 122) | async def offload_messages_to_backend( function perform_offload (line 210) | async def perform_offload( FILE: libs/cli/deepagents_cli/output.py function add_json_output_arg (line 18) | def add_json_output_arg( function write_json (line 49) | def write_json(command: str, data: list | dict) -> None: FILE: libs/cli/deepagents_cli/project_utils.py class ProjectContext (line 21) | class ProjectContext: method __post_init__ (line 32) | def __post_init__(self) -> None: method from_user_cwd (line 46) | def from_user_cwd(cls, user_cwd: str | Path) -> ProjectContext: method resolve_user_path (line 61) | def resolve_user_path(self, path: str | Path) -> Path: method project_agent_md_paths (line 75) | def project_agent_md_paths(self) -> list[Path]: method project_skills_dir (line 81) | def project_skills_dir(self) -> Path | None: method project_agents_dir (line 87) | def project_agents_dir(self) -> Path | None: method project_agent_skills_dir (line 93) | def project_agent_skills_dir(self) -> Path | None: function get_server_project_context (line 100) | def get_server_project_context( function find_project_root (line 135) | def find_project_root(start_path: str | Path | None = None) -> Path | None: function find_project_agent_md (line 159) | def find_project_agent_md(project_root: Path) -> list[Path]: FILE: libs/cli/deepagents_cli/remote_client.py function _require_thread_id (line 23) | def _require_thread_id(config: dict[str, Any] | None) -> str: class RemoteAgent (line 42) | class RemoteAgent: method __init__ (line 51) | def __init__( method _get_graph (line 78) | def _get_graph(self) -> Any: # noqa: ANN401 method astream (line 95) | async def astream( method aget_state (line 179) | async def aget_state( method aupdate_state (line 215) | async def aupdate_state( method aensure_thread (line 243) | async def aensure_thread(self, config: dict[str, Any]) -> None: method with_config (line 286) | def with_config(self, config: dict[str, Any]) -> RemoteAgent: # noqa:... function _prepare_config (line 303) | def _prepare_config(config: dict[str, Any] | None) -> dict[str, Any]: function _convert_interrupts (line 318) | def _convert_interrupts(raw: Any) -> list[Any]: # noqa: ANN401 function _convert_ai_message (line 357) | def _convert_ai_message(data: dict[str, Any]) -> Any: # noqa: ANN401 function _convert_human_message (line 427) | def _convert_human_message(data: dict[str, Any]) -> Any: # noqa: ANN401 function _convert_tool_message (line 452) | def _convert_tool_message(data: dict[str, Any]) -> Any: # noqa: ANN401 function _convert_message_data (line 497) | def _convert_message_data(data: dict[str, Any]) -> Any: # noqa: ANN401 FILE: libs/cli/deepagents_cli/server.py function _port_in_use (line 34) | def _port_in_use(host: str, port: int) -> bool: function _find_free_port (line 55) | def _find_free_port(host: str) -> int: function get_server_url (line 71) | def get_server_url(host: str = _DEFAULT_HOST, port: int = _DEFAULT_PORT)... function generate_langgraph_json (line 84) | def generate_langgraph_json( function _scoped_env_overrides (line 126) | def _scoped_env_overrides( function wait_for_server_healthy (line 164) | async def wait_for_server_healthy( function _build_server_cmd (line 226) | def _build_server_cmd(config_path: Path, *, host: str, port: int) -> lis... function _build_server_env (line 253) | def _build_server_env() -> dict[str, str]: class ServerProcess (line 280) | class ServerProcess: method __init__ (line 289) | def __init__( method url (line 319) | def url(self) -> str: method running (line 324) | def running(self) -> bool: method _read_log_file (line 328) | def _read_log_file(self) -> str: method start (line 349) | async def start( method _stop_process (line 412) | def _stop_process(self) -> None: method stop (line 449) | def stop(self) -> None: method update_env (line 471) | def update_env(self, **overrides: str) -> None: method restart (line 483) | async def restart(self, *, timeout: float = _HEALTH_TIMEOUT) -> None: ... method __aenter__ (line 502) | async def __aenter__(self) -> Self: method __aexit__ (line 511) | async def __aexit__(self, *args: object) -> None: FILE: libs/cli/deepagents_cli/server_graph.py function _build_tools (line 31) | def _build_tools( function make_graph (line 93) | def make_graph() -> Any: # noqa: ANN401 FILE: libs/cli/deepagents_cli/server_manager.py function _set_or_clear_server_env (line 40) | def _set_or_clear_server_env(name: str, value: str | None) -> None: function _apply_server_config (line 54) | def _apply_server_config(config: ServerConfig) -> None: function _capture_project_context (line 69) | def _capture_project_context() -> ProjectContext | None: function _scaffold_workspace (line 87) | def _scaffold_workspace(work_dir: Path) -> None: function _write_checkpointer (line 114) | def _write_checkpointer(work_dir: Path) -> None: function _write_pyproject (line 159) | def _write_pyproject(work_dir: Path) -> None: function start_server_and_get_agent (line 189) | async def start_server_and_get_agent( function server_session (line 280) | async def server_session( FILE: libs/cli/deepagents_cli/sessions.py function _patch_aiosqlite (line 34) | def _patch_aiosqlite() -> None: function _connect (line 65) | async def _connect() -> AsyncIterator[aiosqlite.Connection]: class ThreadInfo (line 82) | class ThreadInfo(TypedDict): class _CheckpointSummary (line 113) | class _CheckpointSummary(NamedTuple): function format_timestamp (line 123) | def format_timestamp(iso_timestamp: str | None) -> str: function format_relative_timestamp (line 151) | def format_relative_timestamp(iso_timestamp: str | None) -> str: function format_path (line 194) | def format_path(path: str | None) -> str: function get_db_path (line 224) | def get_db_path() -> Path: function generate_thread_id (line 235) | def generate_thread_id() -> str: function _table_exists (line 246) | async def _table_exists(conn: aiosqlite.Connection, table: str) -> bool: function list_threads (line 257) | async def list_threads( function populate_thread_message_counts (line 344) | async def populate_thread_message_counts(threads: list[ThreadInfo]) -> l... function populate_thread_checkpoint_details (line 364) | async def populate_thread_checkpoint_details( function prewarm_thread_message_counts (line 396) | async def prewarm_thread_message_counts(limit: int | None = None) -> None: function get_cached_threads (line 431) | def get_cached_threads( function apply_cached_thread_message_counts (line 473) | def apply_cached_thread_message_counts(threads: list[ThreadInfo]) -> int: function apply_cached_thread_initial_prompts (line 496) | def apply_cached_thread_initial_prompts(threads: list[ThreadInfo]) -> int: function _populate_message_counts (line 519) | async def _populate_message_counts( function _get_jsonplus_serializer (line 532) | async def _get_jsonplus_serializer() -> JsonPlusSerializer: function _create_jsonplus_serializer (line 543) | def _create_jsonplus_serializer() -> JsonPlusSerializer: function _cache_message_count (line 554) | def _cache_message_count(thread_id: str, freshness: str | None, count: i... function _cache_initial_prompt (line 564) | def _cache_initial_prompt( function _thread_freshness (line 578) | def _thread_freshness(thread: ThreadInfo) -> str | None: function _cache_recent_threads (line 583) | def _cache_recent_threads( function _copy_threads (line 597) | def _copy_threads(threads: list[ThreadInfo]) -> list[ThreadInfo]: function _count_messages_from_checkpoint (line 602) | async def _count_messages_from_checkpoint( function _extract_initial_prompt (line 624) | async def _extract_initial_prompt( function populate_thread_initial_prompts (line 643) | async def populate_thread_initial_prompts(threads: list[ThreadInfo]) -> ... function _populate_checkpoint_fields (line 661) | async def _populate_checkpoint_fields( function _load_latest_checkpoint_summaries_batch (line 729) | async def _load_latest_checkpoint_summaries_batch( function _load_latest_checkpoint_summary (line 791) | async def _load_latest_checkpoint_summary( function _summarize_checkpoint (line 828) | def _summarize_checkpoint(data: object) -> _CheckpointSummary: function _checkpoint_messages (line 841) | def _checkpoint_messages(data: object) -> list[object]: function _initial_prompt_from_messages (line 859) | def _initial_prompt_from_messages(messages: list[object]) -> str | None: function _coerce_prompt_text (line 867) | def _coerce_prompt_text(content: object) -> str | None: function get_most_recent (line 891) | async def get_most_recent(agent_name: str | None = None) -> str | None: function get_thread_agent (line 920) | async def get_thread_agent(thread_id: str) -> str | None: function thread_exists (line 941) | async def thread_exists(thread_id: str) -> bool: function find_similar_threads (line 957) | async def find_similar_threads(thread_id: str, limit: int = 3) -> list[s... function delete_thread (line 984) | async def delete_thread(thread_id: str) -> bool: function get_checkpointer (line 1010) | async def get_checkpointer() -> AsyncIterator[AsyncSqliteSaver]: function get_thread_limit (line 1027) | def get_thread_limit() -> int: function list_threads_command (line 1052) | async def list_threads_command( function delete_thread_command (line 1197) | async def delete_thread_command( FILE: libs/cli/deepagents_cli/skills/commands.py function _validate_name (line 28) | def _validate_name(name: str) -> tuple[bool, str]: function _validate_skill_path (line 85) | def _validate_skill_path(skill_dir: Path, base_dir: Path) -> tuple[bool,... function _format_info_fields (line 109) | def _format_info_fields(skill: SkillMetadata) -> list[tuple[str, str]]: function _list (line 142) | def _list( function _generate_template (line 328) | def _generate_template(skill_name: str) -> str: function _create (line 400) | def _create( function _info (line 509) | def _info( function _delete (line 643) | def _delete( function setup_skills_parser (line 825) | def setup_skills_parser( function execute_skills_command (line 982) | def execute_skills_command(args: argparse.Namespace) -> None: FILE: libs/cli/deepagents_cli/skills/load.py class ExtendedSkillMetadata (line 31) | class ExtendedSkillMetadata(SkillMetadata): function list_skills (line 45) | def list_skills( FILE: libs/cli/deepagents_cli/subagents.py class SubagentMetadata (line 34) | class SubagentMetadata(TypedDict): function _parse_subagent_file (line 56) | def _parse_subagent_file(file_path: Path) -> SubagentMetadata | None: function _load_subagents_from_dir (line 110) | def _load_subagents_from_dir( function list_subagents (line 146) | def list_subagents( FILE: libs/cli/deepagents_cli/textual_adapter.py function _get_hitl_request_adapter (line 64) | def _get_hitl_request_adapter(hitl_request_type: type) -> TypeAdapter: function _format_duration (line 82) | def _format_duration(seconds: float) -> str: function print_usage_table (line 101) | def print_usage_table( function _get_git_branch (line 180) | def _get_git_branch() -> str | None: function _build_stream_config (line 210) | def _build_stream_config( function _is_summarization_chunk (line 257) | def _is_summarization_chunk(metadata: dict | None) -> bool: class TextualUIAdapter (line 276) | class TextualUIAdapter: method __init__ (line 326) | def __init__( method set_token_tracker (line 373) | def set_token_tracker(self, tracker: Any) -> None: # noqa: ANN401 # ... method finalize_pending_tools_with_error (line 377) | def finalize_pending_tools_with_error(self, error: str) -> None: function _build_interrupted_ai_message (line 395) | def _build_interrupted_ai_message( function _read_mentioned_file (line 433) | def _read_mentioned_file(file_path: Path, max_embed_bytes: int) -> str: function execute_task_textual (line 456) | async def execute_task_textual( function _flush_assistant_text_ns (line 1335) | async def _flush_assistant_text_ns( FILE: libs/cli/deepagents_cli/tool_display.py function _format_timeout (line 22) | def _format_timeout(seconds: int) -> str: function _coerce_timeout_seconds (line 41) | def _coerce_timeout_seconds(timeout: int | str | None) -> int | None: function truncate_value (line 66) | def truncate_value(value: str, max_length: int = MAX_ARG_LENGTH) -> str: function _sanitize_display_value (line 77) | def _sanitize_display_value(value: object, *, max_length: int = MAX_ARG_... function format_tool_display (line 98) | def format_tool_display(tool_name: str, tool_args: dict) -> str: function _format_content_block (line 251) | def _format_content_block(block: dict) -> str: function format_tool_message_content (line 286) | def format_tool_message_content(content: Any) -> str: # noqa: ANN401 #... FILE: libs/cli/deepagents_cli/tools.py function _get_tavily_client (line 14) | def _get_tavily_client() -> TavilyClient | None: function http_request (line 35) | def http_request( function web_search (line 104) | def web_search( # noqa: ANN201 # Return type depends on dynamic tool c... function fetch_url (line 183) | def fetch_url(url: str, timeout: int = 30) -> dict[str, Any]: FILE: libs/cli/deepagents_cli/ui.py function _print_option_section (line 21) | def _print_option_section(*lines: str, title: str = "Options") -> None: function show_help (line 35) | def show_help() -> None: function show_list_help (line 145) | def show_list_help() -> None: function show_reset_help (line 165) | def show_reset_help() -> None: function show_skills_help (line 192) | def show_skills_help() -> None: function show_skills_list_help (line 238) | def show_skills_list_help() -> None: function show_skills_create_help (line 251) | def show_skills_create_help() -> None: function show_skills_info_help (line 269) | def show_skills_info_help() -> None: function show_skills_delete_help (line 282) | def show_skills_delete_help() -> None: function show_threads_help (line 301) | def show_threads_help() -> None: function show_threads_delete_help (line 325) | def show_threads_delete_help() -> None: function show_threads_list_help (line 338) | def show_threads_list_help() -> None: FILE: libs/cli/deepagents_cli/unicode_security.py class UnicodeIssue (line 85) | class UnicodeIssue: method __post_init__ (line 100) | def __post_init__(self) -> None: # noqa: D105 class UrlSafetyResult (line 117) | class UrlSafetyResult: function detect_dangerous_unicode (line 140) | def detect_dangerous_unicode(text: str) -> list[UnicodeIssue]: function strip_dangerous_unicode (line 164) | def strip_dangerous_unicode(text: str) -> str: function render_with_unicode_markers (line 176) | def render_with_unicode_markers(text: str) -> str: function summarize_issues (line 198) | def summarize_issues(issues: list[UnicodeIssue], *, max_items: int = 3) ... function format_warning_detail (line 230) | def format_warning_detail(warnings: tuple[str, ...], *, max_shown: int =... function check_url_safety (line 248) | def check_url_safety(url: str) -> UrlSafetyResult: function _decode_hostname (line 315) | def _decode_hostname(hostname: str) -> tuple[str, list[str]]: function _split_hostname_labels (line 335) | def _split_hostname_labels(hostname: str) -> list[str]: function _is_local_or_ip_hostname (line 344) | def _is_local_or_ip_hostname(hostname: str) -> bool: function _scripts_in_label (line 364) | def _scripts_in_label(label: str) -> set[str]: function _label_has_suspicious_confusable_mix (line 379) | def _label_has_suspicious_confusable_mix(label: str) -> bool: function _char_script (line 396) | def _char_script(character: str) -> str: function _format_codepoint (line 437) | def _format_codepoint(character: str) -> str: function _unicode_name (line 446) | def _unicode_name(character: str) -> str: function iter_string_values (line 460) | def iter_string_values( function _iter_string_values_from_list (line 484) | def _iter_string_values_from_list( function looks_like_url_key (line 508) | def looks_like_url_key(arg_path: str) -> bool: FILE: libs/cli/deepagents_cli/update_check.py function _parse_version (line 51) | def _parse_version(v: str) -> tuple[int, ...]: function get_latest_version (line 63) | def get_latest_version(*, bypass_cache: bool = False) -> str | None: function is_update_available (line 115) | def is_update_available(*, bypass_cache: bool = False) -> tuple[bool, st... function detect_install_method (line 146) | def detect_install_method() -> InstallMethod: function upgrade_command (line 173) | def upgrade_command(method: InstallMethod | None = None) -> str: function perform_upgrade (line 188) | async def perform_upgrade() -> tuple[bool, str]: function is_update_check_enabled (line 245) | def is_update_check_enabled() -> bool: function is_auto_update_enabled (line 258) | def is_auto_update_enabled() -> bool: function _read_update_config (line 277) | def _read_update_config() -> dict[str, bool]: function get_seen_version (line 300) | def get_seen_version() -> str | None: function mark_version_seen (line 311) | def mark_version_seen(version: str) -> None: function should_show_whats_new (line 323) | def should_show_whats_new() -> bool: FILE: libs/cli/deepagents_cli/widgets/_links.py function open_style_link (line 17) | def open_style_link(event: Click) -> None: FILE: libs/cli/deepagents_cli/widgets/approval.py class ApprovalMenu (line 42) | class ApprovalMenu(Container): class Decided (line 74) | class Decided(Message): method __init__ (line 77) | def __init__(self, decision: dict[str, str]) -> None: method __init__ (line 90) | def __init__( method set_future (line 129) | def set_future(self, future: asyncio.Future[dict[str, str]]) -> None: method _check_expandable_command (line 133) | def _check_expandable_command(self) -> bool: method _get_command_display (line 147) | def _get_command_display(self, *, expanded: bool) -> Content: method compose (line 203) | def compose(self) -> ComposeResult: method on_mount (line 276) | async def on_mount(self) -> None: method _update_tool_info (line 286) | async def _update_tool_info(self) -> None: method _update_options (line 325) | def _update_options(self) -> None: method action_move_up (line 352) | def action_move_up(self) -> None: method action_move_down (line 357) | def action_move_down(self) -> None: method action_select (line 362) | def action_select(self) -> None: method action_select_approve (line 366) | def action_select_approve(self) -> None: method action_select_auto (line 372) | def action_select_auto(self) -> None: method action_select_reject (line 378) | def action_select_reject(self) -> None: method action_toggle_expand (line 384) | def action_toggle_expand(self) -> None: method _handle_selection (line 393) | def _handle_selection(self, option: int) -> None: method _collect_security_warnings (line 409) | def _collect_security_warnings(self) -> list[str]: method on_blur (line 440) | def on_blur(self, event: events.Blur) -> None: # noqa: ARG002 # Text... FILE: libs/cli/deepagents_cli/widgets/ask_user.py class AskUserMenu (line 35) | class AskUserMenu(Container): class Answered (line 50) | class Answered(Message): method __init__ (line 53) | def __init__(self, answers: list[str]) -> None: # noqa: D107 class Cancelled (line 57) | class Cancelled(Message): method __init__ (line 60) | def __init__(self) -> None: # noqa: D107 method __init__ (line 63) | def __init__( # noqa: D107 method set_future (line 78) | def set_future(self, future: asyncio.Future[AskUserWidgetResult]) -> N... method compose (line 82) | def compose(self) -> ComposeResult: # noqa: D102 method on_mount (line 111) | async def on_mount(self) -> None: # noqa: D102 method focus_active (line 116) | def focus_active(self) -> None: method on_input_submitted (line 120) | def on_input_submitted(self, event: Input.Submitted) -> None: # noqa:... method confirm_and_advance (line 132) | def confirm_and_advance(self, index: int) -> None: method _set_active_question (line 161) | def _set_active_question(self, index: int) -> None: method _submit (line 173) | def _submit(self) -> None: method action_next_question (line 181) | def action_next_question(self) -> None: method action_previous_question (line 186) | def action_previous_question(self) -> None: method action_cancel (line 191) | def action_cancel(self) -> None: # noqa: D102 method on_blur (line 199) | def on_blur(self, event: events.Blur) -> None: # noqa: PLR6301 # Tex... class _ChoiceOption (line 204) | class _ChoiceOption(Static): method __init__ (line 207) | def __init__( method toggle (line 215) | def toggle(self) -> None: method select (line 220) | def select(self) -> None: method deselect (line 225) | def deselect(self) -> None: method _render (line 230) | def _render(self) -> Content: class _QuestionWidget (line 241) | class _QuestionWidget(Vertical): method __init__ (line 255) | def __init__(self, question: Question, index: int, **kwargs: Any) -> N... method compose (line 271) | def compose(self) -> ComposeResult: method focus_input (line 303) | def focus_input(self) -> None: method get_answer (line 312) | def get_answer(self) -> str: method action_move_up (line 325) | def action_move_up(self) -> None: method action_move_down (line 345) | def action_move_down(self) -> None: method action_select_or_submit (line 355) | def action_select_or_submit(self) -> None: method _find_menu (line 372) | def _find_menu(self) -> AskUserMenu | None: method _update_choice_selection (line 384) | def _update_choice_selection(self) -> None: FILE: libs/cli/deepagents_cli/widgets/autocomplete.py function _get_git_executable (line 23) | def _get_git_executable() -> str | None: class CompletionResult (line 36) | class CompletionResult(StrEnum): class CompletionView (line 44) | class CompletionView(Protocol): method render_completion_suggestions (line 47) | def render_completion_suggestions( method clear_completion_suggestions (line 58) | def clear_completion_suggestions(self) -> None: method replace_completion_range (line 62) | def replace_completion_range(self, start: int, end: int, replacement: ... class CompletionController (line 73) | class CompletionController(Protocol): method can_handle (line 76) | def can_handle(self, text: str, cursor_index: int) -> bool: method on_text_changed (line 80) | def on_text_changed(self, text: str, cursor_index: int) -> None: method on_key (line 84) | def on_key( method reset (line 90) | def reset(self) -> None: class SlashCommandController (line 110) | class SlashCommandController: method __init__ (line 113) | def __init__( method can_handle (line 130) | def can_handle(text: str, cursor_index: int) -> bool: # noqa: ARG004 ... method reset (line 138) | def reset(self) -> None: method _score_command (line 146) | def _score_command(search: str, cmd: str, desc: str, keywords: str = "... method on_text_changed (line 186) | def on_text_changed(self, text: str, cursor_index: int) -> None: method on_key (line 223) | def on_key( method _move_selection (line 255) | def _move_selection(self, delta: int) -> None: method _apply_selected_completion (line 265) | def _apply_selected_completion(self, cursor_index: int) -> bool: function _get_project_files (line 296) | def _get_project_files(root: Path) -> list[str]: function _fuzzy_score (line 336) | def _fuzzy_score(query: str, candidate: str) -> float: function _is_dotpath (line 383) | def _is_dotpath(path: str) -> bool: function _path_depth (line 392) | def _path_depth(path: str) -> int: function _fuzzy_search (line 401) | def _fuzzy_search( class FuzzyFileController (line 440) | class FuzzyFileController: method __init__ (line 443) | def __init__( method _get_files (line 461) | def _get_files(self) -> list[str]: method refresh_cache (line 471) | def refresh_cache(self) -> None: method warm_cache (line 475) | async def warm_cache(self) -> None: method can_handle (line 486) | def can_handle(text: str, cursor_index: int) -> bool: method reset (line 507) | def reset(self) -> None: method on_text_changed (line 514) | def on_text_changed(self, text: str, cursor_index: int) -> None: method _get_fuzzy_suggestions (line 535) | def _get_fuzzy_suggestions(self, search: str) -> list[tuple[str, str]]: method on_key (line 557) | def on_key( method _move_selection (line 585) | def _move_selection(self, delta: int) -> None: method _apply_selected_completion (line 595) | def _apply_selected_completion(self, text: str, cursor_index: int) -> ... class MultiCompletionManager (line 626) | class MultiCompletionManager: method __init__ (line 629) | def __init__(self, controllers: list[CompletionController]) -> None: method on_text_changed (line 638) | def on_text_changed(self, text: str, cursor_index: int) -> None: method on_key (line 663) | def on_key( method reset (line 675) | def reset(self) -> None: FILE: libs/cli/deepagents_cli/widgets/chat_input.py function _default_history_path (line 41) | def _default_history_path() -> Path: class CompletionOption (line 78) | class CompletionOption(Static): class Clicked (line 101) | class Clicked(Message): method __init__ (line 104) | def __init__(self, index: int) -> None: method __init__ (line 109) | def __init__( method on_mount (line 132) | def on_mount(self) -> None: method _update_display (line 136) | def _update_display(self) -> None: method set_selected (line 159) | def set_selected(self, *, selected: bool) -> None: method set_content (line 165) | def set_content( method on_click (line 175) | def on_click(self, event: Click) -> None: class CompletionPopup (line 181) | class CompletionPopup(VerticalScroll): class OptionClicked (line 192) | class OptionClicked(Message): method __init__ (line 195) | def __init__(self, index: int) -> None: method __init__ (line 200) | def __init__(self, **kwargs: Any) -> None: method update_suggestions (line 210) | def update_suggestions( method _rebuild_options (line 227) | async def _rebuild_options(self, generation: int) -> None: method update_selection (line 289) | def update_selection(self, selected_index: int) -> None: method on_completion_option_clicked (line 308) | def on_completion_option_clicked(self, event: CompletionOption.Clicked... method hide (line 313) | def hide(self) -> None: method show (line 319) | def show(self) -> None: class ChatTextArea (line 324) | class ChatTextArea(TextArea): class Submitted (line 367) | class Submitted(Message): method __init__ (line 370) | def __init__(self, value: str) -> None: class HistoryPrevious (line 375) | class HistoryPrevious(Message): method __init__ (line 378) | def __init__(self, current_text: str) -> None: class HistoryNext (line 383) | class HistoryNext(Message): class PastedPaths (line 386) | class PastedPaths(Message): method __init__ (line 389) | def __init__(self, raw_text: str, paths: list[Path]) -> None: class Typing (line 395) | class Typing(Message): method __init__ (line 402) | def __init__(self, **kwargs: Any) -> None: method set_app_focus (line 420) | def set_app_focus(self, *, has_focus: bool) -> None: method set_completion_active (line 432) | def set_completion_active(self, *, active: bool) -> None: method action_insert_newline (line 436) | def action_insert_newline(self) -> None: method _cancel_paste_burst_timer (line 440) | def _cancel_paste_burst_timer(self) -> None: method _schedule_paste_burst_flush (line 447) | def _schedule_paste_burst_flush(self) -> None: method _start_paste_burst (line 454) | def _start_paste_burst(self, char: str, now: float) -> None: method _append_paste_burst (line 460) | def _append_paste_burst(self, text: str, now: float) -> None: method _should_start_paste_burst (line 469) | def _should_start_paste_burst(self, char: str) -> bool: method _flush_paste_burst (line 482) | async def _flush_paste_burst(self) -> None: method _delete_preceding_backslash (line 507) | def _delete_preceding_backslash(self) -> bool: method _on_key (line 531) | async def _on_key(self, event: events.Key) -> None: method _delete_image_placeholder (line 668) | def _delete_image_placeholder(self, *, backwards: bool) -> bool: method _find_image_placeholder_span (line 693) | def _find_image_placeholder_span( method _on_paste (line 725) | async def _on_paste(self, event: events.Paste) -> None: method set_text_from_history (line 747) | def set_text_from_history(self, text: str) -> None: method clear_text (line 761) | def clear_text(self) -> None: class _CompletionViewAdapter (line 776) | class _CompletionViewAdapter: method __init__ (line 779) | def __init__(self, chat_input: ChatInput) -> None: method render_completion_suggestions (line 783) | def render_completion_suggestions( method clear_completion_suggestions (line 789) | def clear_completion_suggestions(self) -> None: method replace_completion_range (line 793) | def replace_completion_range(self, start: int, end: int, replacement: ... class ChatInput (line 802) | class ChatInput(Vertical): class Submitted (line 868) | class Submitted(Message): method __init__ (line 871) | def __init__(self, value: str, mode: str = "normal") -> None: class ModeChanged (line 877) | class ModeChanged(Message): method __init__ (line 880) | def __init__(self, mode: str) -> None: class Typing (line 885) | class Typing(Message): method __init__ (line 895) | def __init__( method compose (line 949) | def compose(self) -> ComposeResult: # noqa: PLR6301 # Textual widget... method on_mount (line 961) | def on_mount(self) -> None: method on_text_area_changed (line 989) | def on_text_area_changed(self, event: TextArea.Changed) -> None: method _parse_dropped_path_payload (line 1052) | def _parse_dropped_path_payload( method _parse_dropped_path_payload_with_command_recovery (line 1064) | def _parse_dropped_path_payload_with_command_recovery( method _extract_leading_dropped_path_with_command_recovery (line 1100) | def _extract_leading_dropped_path_with_command_recovery( method _is_existing_path_payload (line 1135) | def _is_existing_path_payload(text: str) -> bool: method _is_dropped_path_payload (line 1143) | def _is_dropped_path_payload(self, text: str) -> bool: method _strip_mode_prefix (line 1154) | def _strip_mode_prefix(self) -> None: method _completion_text_and_cursor (line 1177) | def _completion_text_and_cursor(self) -> tuple[str, int]: method _completion_index_to_text_index (line 1196) | def _completion_index_to_text_index(self, index: int) -> int: method _submit_value (line 1222) | def _submit_value(self, value: str) -> None: method _sync_media_tracker_to_text (line 1256) | def _sync_media_tracker_to_text(self, text: str) -> None: method on_chat_text_area_typing (line 1276) | def on_chat_text_area_typing( method on_chat_text_area_submitted (line 1283) | def on_chat_text_area_submitted(self, event: ChatTextArea.Submitted) -... method on_chat_text_area_history_previous (line 1291) | def on_chat_text_area_history_previous( method on_chat_text_area_history_next (line 1306) | def on_chat_text_area_history_next( method on_chat_text_area_pasted_paths (line 1324) | def on_chat_text_area_pasted_paths(self, event: ChatTextArea.PastedPat... method handle_external_paste (line 1331) | def handle_external_paste(self, pasted: str) -> bool: method _apply_inline_dropped_path_replacement (line 1356) | def _apply_inline_dropped_path_replacement(self, text: str) -> bool: method _insert_pasted_paths (line 1389) | def _insert_pasted_paths(self, raw_text: str, paths: list[Path]) -> None: method _build_path_replacement (line 1406) | def _build_path_replacement( method _replace_submitted_paths_with_images (line 1478) | def _replace_submitted_paths_with_images(self, value: str) -> str: method _history_entry_mode_and_text (line 1527) | def _history_entry_mode_and_text(entry: str) -> tuple[str, str]: method on_key (line 1543) | async def on_key(self, event: events.Key) -> None: method _get_cursor_offset (line 1582) | def _get_cursor_offset(self) -> int: method watch_mode (line 1604) | def watch_mode(self, mode: str) -> None: method focus_input (line 1626) | def focus_input(self) -> None: method value (line 1632) | def value(self) -> str: method value (line 1643) | def value(self, val: str) -> None: method input_widget (line 1649) | def input_widget(self) -> ChatTextArea | None: method set_disabled (line 1657) | def set_disabled(self, *, disabled: bool) -> None: method set_cursor_active (line 1666) | def set_cursor_active(self, *, active: bool) -> None: method exit_mode (line 1675) | def exit_mode(self) -> bool: method dismiss_completion (line 1689) | def dismiss_completion(self) -> bool: method render_completion_suggestions (line 1708) | def render_completion_suggestions( method clear_completion_suggestions (line 1726) | def clear_completion_suggestions(self) -> None: method on_completion_popup_option_clicked (line 1737) | def on_completion_popup_option_clicked( method replace_completion_range (line 1778) | def replace_completion_range(self, start: int, end: int, replacement: ... FILE: libs/cli/deepagents_cli/widgets/diff.py function format_diff_textual (line 18) | def format_diff_textual(diff: str, max_lines: int | None = 100) -> Content: class EnhancedDiff (line 131) | class EnhancedDiff(Vertical): method __init__ (line 158) | def __init__( method _compute_stats (line 179) | def _compute_stats(self) -> tuple[int, int]: method on_mount (line 194) | def on_mount(self) -> None: method compose (line 199) | def compose(self) -> ComposeResult: FILE: libs/cli/deepagents_cli/widgets/history.py class HistoryManager (line 15) | class HistoryManager: method __init__ (line 22) | def __init__(self, history_file: Path, max_entries: int = 100) -> None: method _load_history (line 37) | def _load_history(self) -> None: method _append_to_file (line 63) | def _append_to_file(self, text: str) -> None: method _compact_history (line 76) | def _compact_history(self) -> None: method add (line 93) | def add(self, text: str) -> None: method get_previous (line 120) | def get_previous(self, current_input: str, *, query: str = "") -> str ... method get_next (line 154) | def get_next(self) -> str | None: method in_history (line 180) | def in_history(self) -> bool: method reset_navigation (line 184) | def reset_navigation(self) -> None: FILE: libs/cli/deepagents_cli/widgets/loading.py class Spinner (line 18) | class Spinner: method __init__ (line 21) | def __init__(self) -> None: method frames (line 26) | def frames(self) -> tuple[str, ...]: method next_frame (line 30) | def next_frame(self) -> str: method current_frame (line 41) | def current_frame(self) -> str: class LoadingWidget (line 50) | class LoadingWidget(Static): method __init__ (line 85) | def __init__(self, status: str = "Thinking") -> None: method compose (line 101) | def compose(self) -> ComposeResult: method on_mount (line 121) | def on_mount(self) -> None: method _update_animation (line 126) | def _update_animation(self) -> None: method set_status (line 139) | def set_status(self, status: str) -> None: method pause (line 149) | def pause(self, status: str = "Awaiting decision") -> None: method resume (line 166) | def resume(self) -> None: method stop (line 173) | def stop(self) -> None: FILE: libs/cli/deepagents_cli/widgets/mcp_viewer.py class MCPToolItem (line 24) | class MCPToolItem(Static): method __init__ (line 27) | def __init__( method _format_collapsed (line 55) | def _format_collapsed(self, name: str, description: str) -> Content: method _format_expanded (line 83) | def _format_expanded(name: str, description: str) -> Content: method toggle_expand (line 101) | def toggle_expand(self) -> None: method on_mount (line 112) | def on_mount(self) -> None: method on_resize (line 117) | def on_resize(self) -> None: method on_click (line 122) | def on_click(self, event: Click) -> None: class MCPViewerScreen (line 135) | class MCPViewerScreen(ModalScreen[None]): method __init__ (line 225) | def __init__(self, server_info: list[MCPServerInfo]) -> None: method compose (line 236) | def compose(self) -> ComposeResult: method on_mount (line 301) | async def on_mount(self) -> None: method _move_to (line 307) | def _move_to(self, index: int) -> None: method _move_selection (line 323) | def _move_selection(self, delta: int) -> None: method action_move_up (line 335) | def action_move_up(self) -> None: method action_move_down (line 339) | def action_move_down(self) -> None: method action_toggle_expand (line 343) | def action_toggle_expand(self) -> None: method action_page_up (line 348) | def action_page_up(self) -> None: method action_page_down (line 353) | def action_page_down(self) -> None: method action_cancel (line 358) | def action_cancel(self) -> None: FILE: libs/cli/deepagents_cli/widgets/message_store.py class MessageType (line 40) | class MessageType(StrEnum): class ToolStatus (line 52) | class ToolStatus(StrEnum): class MessageData (line 64) | class MessageData: method __post_init__ (line 129) | def __post_init__(self) -> None: method to_widget (line 139) | def to_widget(self) -> Widget: method from_widget (line 201) | def from_widget(cls, widget: Widget) -> MessageData: class MessageStore (line 305) | class MessageStore: method __init__ (line 323) | def __init__(self) -> None: method total_count (line 333) | def total_count(self) -> int: method visible_count (line 338) | def visible_count(self) -> int: method has_messages_above (line 343) | def has_messages_above(self) -> bool: method has_messages_below (line 348) | def has_messages_below(self) -> bool: method append (line 352) | def append(self, message: MessageData) -> None: method bulk_load (line 361) | def bulk_load( method get_message (line 390) | def get_message(self, message_id: str) -> MessageData | None: method get_message_at_index (line 404) | def get_message_at_index(self, index: int) -> MessageData | None: method update_message (line 417) | def update_message(self, message_id: str, **updates: Any) -> bool: method set_active_message (line 446) | def set_active_message(self, message_id: str | None) -> None: method is_active (line 456) | def is_active(self, message_id: str) -> bool: method window_exceeded (line 467) | def window_exceeded(self) -> bool: method get_messages_to_prune (line 475) | def get_messages_to_prune(self, count: int | None = None) -> list[Mess... method mark_pruned (line 508) | def mark_pruned(self, message_ids: list[str]) -> None: method get_messages_to_hydrate (line 524) | def get_messages_to_hydrate(self, count: int | None = None) -> list[Me... method mark_hydrated (line 542) | def mark_hydrated(self, count: int) -> None: method should_hydrate_above (line 550) | def should_hydrate_above( method should_prune_below (line 569) | def should_prune_below( method clear (line 594) | def clear(self) -> None: method get_visible_range (line 601) | def get_visible_range(self) -> tuple[int, int]: method get_all_messages (line 609) | def get_all_messages(self) -> list[MessageData]: method get_visible_messages (line 617) | def get_visible_messages(self) -> list[MessageData]: FILE: libs/cli/deepagents_cli/widgets/messages.py function _show_timestamp_toast (line 40) | def _show_timestamp_toast(widget: Static | Vertical) -> None: class _TimestampClickMixin (line 66) | class _TimestampClickMixin: method on_click (line 75) | def on_click(self, event: Click) -> None: # noqa: ARG002 # Textual e... function _mode_color (line 80) | def _mode_color(mode: str | None) -> str: class FormattedOutput (line 101) | class FormattedOutput: class UserMessage (line 142) | class UserMessage(_TimestampClickMixin, Static): method __init__ (line 155) | def __init__(self, content: str, **kwargs: Any) -> None: method on_mount (line 165) | def on_mount(self) -> None: method compose (line 172) | def compose(self) -> ComposeResult: class QueuedUserMessage (line 224) | class QueuedUserMessage(Static): method __init__ (line 241) | def __init__(self, content: str, **kwargs: Any) -> None: method on_mount (line 251) | def on_mount(self) -> None: method compose (line 256) | def compose(self) -> ComposeResult: class AssistantMessage (line 273) | class AssistantMessage(_TimestampClickMixin, Vertical): method __init__ (line 293) | def __init__(self, content: str = "", **kwargs: Any) -> None: method compose (line 305) | def compose(self) -> ComposeResult: # noqa: PLR6301 # Textual widget... method on_mount (line 315) | def on_mount(self) -> None: method _get_markdown (line 321) | def _get_markdown(self) -> Markdown: method _ensure_stream (line 333) | def _ensure_stream(self) -> MarkdownStream: method append_content (line 345) | async def append_content(self, text: str) -> None: method write_initial_content (line 360) | async def write_initial_content(self) -> None: method stop_stream (line 366) | async def stop_stream(self) -> None: method set_content (line 372) | async def set_content(self, content: str) -> None: class ToolCallMessage (line 386) | class ToolCallMessage(Vertical): method __init__ (line 458) | def __init__( method compose (line 491) | def compose(self) -> ComposeResult: method on_mount (line 524) | def on_mount(self) -> None: method _restore_deferred_state (line 542) | def _restore_deferred_state(self) -> None: method set_running (line 603) | def set_running(self) -> None: method _update_running_animation (line 619) | def _update_running_animation(self) -> None: method _stop_animation (line 636) | def _stop_animation(self) -> None: method set_success (line 642) | def set_success(self, result: str = "") -> None: method set_error (line 657) | def set_error(self, error: str) -> None: method set_rejected (line 685) | def set_rejected(self) -> None: method set_skipped (line 697) | def set_skipped(self) -> None: method toggle_output (line 707) | def toggle_output(self) -> None: method on_click (line 714) | def on_click(self, event: Click) -> None: method _format_output (line 722) | def _format_output( method _prefix_output (line 775) | def _prefix_output(self, content: Content) -> Content: # noqa: PLR630... method _format_todos_output (line 793) | def _format_todos_output( method _parse_todo_items (line 825) | def _parse_todo_items(self, output: str) -> list | None: # noqa: PLR6... method _build_todo_stats (line 843) | def _build_todo_stats(self, items: list) -> Content: # noqa: PLR6301 ... method _format_single_todo (line 866) | def _format_single_todo(self, item: dict | str) -> Content: # noqa: P... method _format_ls_output (line 898) | def _format_ls_output( # noqa: PLR6301 # Grouped as method for widge... method _format_file_output (line 937) | def _format_file_output( # noqa: PLR6301 # Grouped as method for wid... method _format_search_output (line 957) | def _format_search_output( # noqa: PLR6301 # Grouped as method for w... method _format_shell_output (line 1007) | def _format_shell_output( # noqa: PLR6301 # Grouped as method for wi... method _format_web_output (line 1033) | def _format_web_output( method _try_parse_web_data (line 1049) | def _try_parse_web_data(output: str) -> dict | None: method _format_web_dict (line 1062) | def _format_web_dict(self, data: dict, *, is_preview: bool) -> Formatt... method _format_web_search_results (line 1104) | def _format_web_search_results( # noqa: PLR6301 # Grouped as method ... method _format_lines_output (line 1130) | def _format_lines_output( # noqa: PLR6301 # Grouped as method for wi... method _format_task_output (line 1146) | def _format_task_output( # noqa: PLR6301 # Grouped as method for wid... method _update_output_display (line 1166) | def _update_output_display(self) -> None: method has_output (line 1231) | def has_output(self) -> bool: method _filtered_args (line 1239) | def _filtered_args(self) -> dict[str, Any]: class DiffMessage (line 1255) | class DiffMessage(_TimestampClickMixin, Static): method __init__ (line 1292) | def __init__(self, diff_content: str, file_path: str = "", **kwargs: A... method compose (line 1304) | def compose(self) -> ComposeResult: method on_mount (line 1320) | def on_mount(self) -> None: class ErrorMessage (line 1326) | class ErrorMessage(_TimestampClickMixin, Static): method __init__ (line 1340) | def __init__(self, error: str, **kwargs: Any) -> None: method on_mount (line 1354) | def on_mount(self) -> None: class AppMessage (line 1360) | class AppMessage(Static): method __init__ (line 1379) | def __init__(self, message: str | Content, **kwargs: Any) -> None: method on_click (line 1395) | def on_click(self, event: Click) -> None: class SummarizationMessage (line 1401) | class SummarizationMessage(AppMessage): method __init__ (line 1416) | def __init__(self, message: str | Content | None = None, **kwargs: Any... FILE: libs/cli/deepagents_cli/widgets/model_selector.py class ModelOption (line 36) | class ModelOption(Static): method __init__ (line 39) | def __init__( class Clicked (line 67) | class Clicked(Message): method __init__ (line 70) | def __init__(self, model_spec: str, provider: str, index: int) -> None: method on_click (line 83) | def on_click(self, event: Click) -> None: class ModelSelectorScreen (line 93) | class ModelSelectorScreen(ModalScreen[tuple[str, str] | None]): method __init__ (line 202) | def __init__( method _find_current_model_index (line 242) | def _find_current_model_index(self) -> int: method compose (line 257) | def compose(self) -> ComposeResult: method on_mount (line 299) | async def on_mount(self) -> None: method on_input_changed (line 312) | def on_input_changed(self, event: Input.Changed) -> None: method on_input_submitted (line 322) | def on_input_submitted(self, event: Input.Submitted) -> None: method on_model_option_clicked (line 331) | def on_model_option_clicked(self, event: ModelOption.Clicked) -> None: method _update_filtered_list (line 340) | def _update_filtered_list(self) -> None: method _update_display (line 376) | async def _update_display(self) -> None: method _format_option_label (line 504) | def _format_option_label( method _format_footer (line 549) | def _format_footer( method _get_model_status (line 659) | def _get_model_status(self, model_spec: str) -> str | None: method _update_footer (line 677) | def _update_footer(self) -> None: method _move_selection (line 693) | def _move_selection(self, delta: int) -> None: method action_move_up (line 744) | def action_move_up(self) -> None: method action_move_down (line 748) | def action_move_down(self) -> None: method action_tab_complete (line 752) | def action_tab_complete(self) -> None: method _visible_page_size (line 761) | def _visible_page_size(self) -> int: method action_page_up (line 786) | def action_page_up(self) -> None: method action_page_down (line 796) | def action_page_down(self) -> None: method action_select (line 807) | def action_select(self) -> None: method action_set_default (line 825) | async def action_set_default(self) -> None: method _restore_help_text (line 864) | def _restore_help_text(self) -> None: method action_cancel (line 876) | def action_cancel(self) -> None: FILE: libs/cli/deepagents_cli/widgets/status.py class ModelLabel (line 27) | class ModelLabel(Widget): method get_content_width (line 38) | def get_content_width(self, container: Size, viewport: Size) -> int: ... method render (line 53) | def render(self) -> RenderResult: class StatusBar (line 72) | class StatusBar(Horizontal): method __init__ (line 170) | def __init__(self, cwd: str | Path | None = None, **kwargs: Any) -> None: method compose (line 181) | def compose(self) -> ComposeResult: # noqa: PLR6301 — Textual widget ... method on_resize (line 206) | def on_resize(self, event: events.Resize) -> None: method on_mount (line 221) | def on_mount(self) -> None: method watch_mode (line 231) | def watch_mode(self, mode: str) -> None: method watch_auto_approve (line 249) | def watch_auto_approve(self, new_value: bool) -> None: method watch_cwd (line 264) | def watch_cwd(self, new_value: str) -> None: method watch_branch (line 272) | def watch_branch(self, new_value: str) -> None: method watch_status_message (line 281) | def watch_status_message(self, new_value: str) -> None: method _format_cwd (line 296) | def _format_cwd(self, cwd_path: str = "") -> str: method set_mode (line 312) | def set_mode(self, mode: str) -> None: method set_auto_approve (line 320) | def set_auto_approve(self, *, enabled: bool) -> None: method set_status_message (line 328) | def set_status_message(self, message: str) -> None: method watch_tokens (line 336) | def watch_tokens(self, new_value: int) -> None: method set_tokens (line 352) | def set_tokens(self, count: int) -> None: method hide_tokens (line 360) | def hide_tokens(self) -> None: method set_model (line 364) | def set_model(self, *, provider: str, model: str) -> None: FILE: libs/cli/deepagents_cli/widgets/thread_selector.py function _apply_column_width (line 110) | def _apply_column_width( function _active_sort_key (line 127) | def _active_sort_key(sort_by_updated: bool) -> str: function _visible_column_keys (line 132) | def _visible_column_keys(columns: dict[str, bool]) -> list[str]: function _collapse_whitespace (line 144) | def _collapse_whitespace(value: str) -> str: function _truncate_value (line 156) | def _truncate_value(value: str, width: int | None) -> str: function _format_column_value (line 180) | def _format_column_value( function _format_header_label (line 227) | def _format_header_label(key: str) -> str: function _header_cell_classes (line 232) | def _header_cell_classes(key: str, *, sort_key: str) -> str: class ThreadOption (line 248) | class ThreadOption(Horizontal): method __init__ (line 251) | def __init__( class Clicked (line 285) | class Clicked(Message): method __init__ (line 288) | def __init__(self, thread_id: str, index: int) -> None: method compose (line 299) | def compose(self) -> ComposeResult: method _cursor_text (line 322) | def _cursor_text(self) -> str: method set_selected (line 326) | def set_selected(self, selected: bool) -> None: method on_click (line 344) | def on_click(self, event: Click) -> None: class DeleteThreadConfirmScreen (line 354) | class DeleteThreadConfirmScreen(ModalScreen[bool]): method __init__ (line 387) | def __init__(self, thread_id: str) -> None: method compose (line 396) | def compose(self) -> ComposeResult: method action_confirm (line 415) | def action_confirm(self) -> None: method action_cancel (line 419) | def action_cancel(self) -> None: class ThreadSelectorScreen (line 424) | class ThreadSelectorScreen(ModalScreen[str | None]): method __init__ (line 623) | def __init__( method _switch_id (line 671) | def _switch_id(column_key: str) -> str: method _switch_column_key (line 676) | def _switch_column_key(switch_id: str | None) -> str | None: method _sync_selected_index (line 689) | def _sync_selected_index(self) -> None: method _build_title (line 697) | def _build_title(self, thread_url: str | None = None) -> str | Content: method _build_help_text (line 720) | def _build_help_text(self) -> str: method _effective_thread_limit (line 743) | def _effective_thread_limit(self) -> int: method _format_sort_toggle_label (line 751) | def _format_sort_toggle_label(self) -> str: method _get_filter_input (line 756) | def _get_filter_input(self) -> Input: method _filter_focus_order (line 762) | def _filter_focus_order(self) -> list[Input | Checkbox]: method compose (line 780) | def compose(self) -> ComposeResult: method on_mount (line 871) | async def on_mount(self) -> None: method on_input_changed (line 894) | def on_input_changed(self, event: Input.Changed) -> None: method on_input_submitted (line 903) | def on_input_submitted(self, event: Input.Submitted) -> None: method on_key (line 912) | def on_key(self, event: Key) -> None: method _collapse_search_selection (line 934) | def _collapse_search_selection(self) -> None: method on_checkbox_changed (line 941) | def on_checkbox_changed(self, event: Checkbox.Changed) -> None: method _update_filtered_list (line 995) | def _update_filtered_list(self) -> None: method _compute_column_widths (line 1043) | def _compute_column_widths(self) -> dict[str, int | None]: method _get_search_text (line 1086) | def _get_search_text(thread: ThreadInfo) -> str: method _schedule_filter_and_rebuild (line 1109) | def _schedule_filter_and_rebuild(self) -> None: method _filter_and_build (line 1117) | async def _filter_and_build(self) -> None: method _compute_filtered (line 1135) | def _compute_filtered( method _schedule_list_rebuild (line 1190) | def _schedule_list_rebuild(self) -> None: method _pending_checkpoint_fields (line 1198) | def _pending_checkpoint_fields(self) -> tuple[bool, bool]: method _populate_visible_checkpoint_details (line 1208) | async def _populate_visible_checkpoint_details(self) -> tuple[bool, bo... method _schedule_checkpoint_enrichment (line 1227) | def _schedule_checkpoint_enrichment(self) -> None: method _threads_match (line 1239) | def _threads_match(old: list[ThreadInfo], new: list[ThreadInfo]) -> bool: method _load_threads (line 1258) | async def _load_threads(self) -> None: method _load_checkpoint_details (line 1328) | async def _load_checkpoint_details(self) -> None: method _refresh_cell_labels (line 1366) | def _refresh_cell_labels(self) -> None: method _resolve_thread_url (line 1379) | def _resolve_thread_url(self) -> None: method _fetch_thread_url (line 1385) | async def _fetch_thread_url(self) -> None: method _show_mount_error (line 1418) | async def _show_mount_error(self, detail: str) -> None: method _build_list (line 1445) | async def _build_list(self, *, recompute_widths: bool = True) -> None: method _create_option_widgets (line 1479) | def _create_option_widgets(self) -> tuple[list[ThreadOption], ThreadOp... method _scroll_selected_into_view (line 1514) | def _scroll_selected_into_view(self) -> None: method _update_help_widgets (line 1530) | def _update_help_widgets(self) -> None: method _schedule_header_rebuild (line 1546) | def _schedule_header_rebuild(self) -> None: method _rebuild_header (line 1554) | async def _rebuild_header(self) -> None: method _apply_sort (line 1576) | def _apply_sort(self) -> None: method _move_selection (line 1583) | def _move_selection(self, delta: int) -> None: method action_move_up (line 1606) | def action_move_up(self) -> None: method action_move_down (line 1612) | def action_move_down(self) -> None: method _visible_page_size (line 1618) | def _visible_page_size(self) -> int: method action_page_up (line 1639) | def action_page_up(self) -> None: method action_page_down (line 1649) | def action_page_down(self) -> None: method action_select (line 1660) | def action_select(self) -> None: method action_focus_next_filter (line 1668) | def action_focus_next_filter(self) -> None: method action_focus_previous_filter (line 1681) | def action_focus_previous_filter(self) -> None: method action_toggle_sort (line 1694) | def action_toggle_sort(self) -> None: method _persist_sort_order (line 1708) | def _persist_sort_order(self, order: str) -> None: method action_delete_thread (line 1720) | def action_delete_thread(self) -> None: method is_delete_confirmation_open (line 1733) | def is_delete_confirmation_open(self) -> bool: method _on_delete_confirmed (line 1737) | def _on_delete_confirmed(self, thread_id: str, confirmed: bool | None)... method _handle_delete_confirm (line 1754) | async def _handle_delete_confirm(self, thread_id: str) -> None: method on_click (line 1800) | def on_click(self, event: Click) -> None: # noqa: PLR6301 # Textual ... method on_thread_option_clicked (line 1804) | def on_thread_option_clicked(self, event: ThreadOption.Clicked) -> None: method action_cancel (line 1816) | def action_cancel(self) -> None: FILE: libs/cli/deepagents_cli/widgets/tool_renderers.py class ToolRenderer (line 18) | class ToolRenderer: method get_approval_widget (line 22) | def get_approval_widget( class WriteFileRenderer (line 36) | class WriteFileRenderer(ToolRenderer): method get_approval_widget (line 40) | def get_approval_widget( # noqa: D102 # Protocol method — docstring ... class EditFileRenderer (line 60) | class EditFileRenderer(ToolRenderer): method get_approval_widget (line 64) | def get_approval_widget( # noqa: D102 # Protocol method — docstring ... method _generate_diff (line 83) | def _generate_diff(old_string: str, new_string: str) -> list[str]: function get_renderer (line 118) | def get_renderer(tool_name: str) -> ToolRenderer: FILE: libs/cli/deepagents_cli/widgets/tool_widgets.py class ToolApprovalWidget (line 21) | class ToolApprovalWidget(Vertical): method __init__ (line 24) | def __init__(self, data: dict[str, Any]) -> None: method compose (line 29) | def compose(self) -> ComposeResult: # noqa: PLR6301 # Textual widget... class GenericApprovalWidget (line 38) | class GenericApprovalWidget(ToolApprovalWidget): method compose (line 41) | def compose(self) -> ComposeResult: class WriteFileApprovalWidget (line 59) | class WriteFileApprovalWidget(ToolApprovalWidget): method compose (line 62) | def compose(self) -> ComposeResult: class EditFileApprovalWidget (line 92) | class EditFileApprovalWidget(ToolApprovalWidget): method compose (line 95) | def compose(self) -> ComposeResult: method _count_stats (line 130) | def _count_stats( method _format_stats (line 155) | def _format_stats(additions: int, deletions: int) -> Content: method _render_diff_lines_only (line 172) | def _render_diff_lines_only(self, diff_lines: list[str]) -> ComposeRes... method _render_strings_only (line 197) | def _render_strings_only(self, old_string: str, new_string: str) -> Co... method _render_diff_line (line 213) | def _render_diff_line(line: str) -> Static | None: method _render_string_lines (line 240) | def _render_string_lines(text: str, *, is_addition: bool) -> ComposeRe... FILE: libs/cli/deepagents_cli/widgets/welcome.py class WelcomeBanner (line 45) | class WelcomeBanner(Static): method __init__ (line 62) | def __init__( method on_mount (line 101) | def on_mount(self) -> None: method _fetch_and_update (line 106) | async def _fetch_and_update(self) -> None: method update_thread_id (line 121) | def update_thread_id(self, thread_id: str) -> None: method set_connected (line 130) | def set_connected(self, mcp_tool_count: int = 0) -> None: method set_failed (line 141) | def set_failed(self, error: str) -> None: method on_click (line 152) | def on_click(self, event: Click) -> None: # noqa: PLR6301 # Textual ... method _build_banner (line 156) | def _build_banner(self, project_url: str | None = None) -> Content: function build_failure_footer (line 241) | def build_failure_footer(error: str) -> Content: function build_connecting_footer (line 257) | def build_connecting_footer( function build_welcome_footer (line 280) | def build_welcome_footer() -> Content: FILE: libs/cli/examples/skills/arxiv-search/arxiv_search.py function query_arxiv (line 10) | def query_arxiv(query: str, max_papers: int = 10) -> str: function main (line 44) | def main() -> None: FILE: libs/cli/examples/skills/skill-creator/scripts/init_skill.py function title_case_skill_name (line 190) | def title_case_skill_name(skill_name): function init_skill (line 199) | def init_skill(skill_name, path): function main (line 278) | def main(): FILE: libs/cli/examples/skills/skill-creator/scripts/quick_validate.py function validate_skill (line 20) | def validate_skill(skill_path): FILE: libs/cli/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py function _evict_modules (line 47) | def _evict_modules() -> None: function _clean_module_cache (line 58) | def _clean_module_cache() -> Iterator[None]: class TestStartupPathBenchmarks (line 73) | class TestStartupPathBenchmarks: method test_import_app (line 76) | def test_import_app(self, benchmark: BenchmarkFixture) -> None: method test_import_main (line 85) | def test_import_main(self, benchmark: BenchmarkFixture) -> None: method test_import_cli_context (line 94) | def test_import_cli_context(self, benchmark: BenchmarkFixture) -> None: method test_import_ask_user_types (line 103) | def test_import_ask_user_types(self, benchmark: BenchmarkFixture) -> N... method test_import_textual_adapter (line 112) | def test_import_textual_adapter(self, benchmark: BenchmarkFixture) -> ... method test_import_tool_display (line 121) | def test_import_tool_display(self, benchmark: BenchmarkFixture) -> None: method test_import_config (line 130) | def test_import_config(self, benchmark: BenchmarkFixture) -> None: method test_import_ui (line 139) | def test_import_ui(self, benchmark: BenchmarkFixture) -> None: method test_import_file_ops (line 148) | def test_import_file_ops(self, benchmark: BenchmarkFixture) -> None: class TestRuntimePathBenchmarks (line 166) | class TestRuntimePathBenchmarks: method test_import_configurable_model (line 169) | def test_import_configurable_model(self, benchmark: BenchmarkFixture) ... method test_import_ask_user (line 178) | def test_import_ask_user(self, benchmark: BenchmarkFixture) -> None: FILE: libs/cli/tests/integration_tests/benchmarks/test_startup_benchmarks.py function _run_python (line 75) | def _run_python(code: str, *, timeout: int = 60) -> subprocess.Completed... function _get_loaded_modules (line 94) | def _get_loaded_modules(import_statement: str) -> set[str]: class TestImportIsolation (line 131) | class TestImportIsolation: method test_no_heavy_imports_on_lightweight_path (line 166) | def test_no_heavy_imports_on_lightweight_path(self, import_stmt: str) ... class TestCLIStartupTime (line 187) | class TestCLIStartupTime: method _time_cli_command (line 196) | def _time_cli_command(args: str) -> float: method test_help_under_threshold (line 221) | def test_help_under_threshold(self) -> None: method test_version_under_threshold (line 230) | def test_version_under_threshold(self) -> None: class TestImportTiming (line 246) | class TestImportTiming: method test_module_import_time (line 270) | def test_module_import_time(self, module: str) -> None: class TestDeferredImportsWork (line 298) | class TestDeferredImportsWork: method test_agent_import_loads_langchain (line 306) | def test_agent_import_loads_langchain(self) -> None: method test_sessions_import_available (line 314) | def test_sessions_import_available(self) -> None: method test_configurable_model_middleware_loads_langchain (line 321) | def test_configurable_model_middleware_loads_langchain(self) -> None: method test_ask_user_middleware_loads_langchain (line 331) | def test_ask_user_middleware_loads_langchain(self) -> None: FILE: libs/cli/tests/integration_tests/conftest.py function langsmith_client (line 11) | def langsmith_client() -> Generator[Client | None, None, None]: function flush_langsmith_after_test (line 32) | def flush_langsmith_after_test(langsmith_client: Client) -> Generator[No... FILE: libs/cli/tests/integration_tests/test_acp_mode.py class _AcpSmokeClient (line 22) | class _AcpSmokeClient(Client): method request_permission (line 23) | async def request_permission(self, *args: Any, **kwargs: Any) -> Any: ... method write_text_file (line 27) | async def write_text_file(self, *args: Any, **kwargs: Any) -> Any: # ... method read_text_file (line 31) | async def read_text_file(self, *args: Any, **kwargs: Any) -> Any: # n... method create_terminal (line 35) | async def create_terminal(self, *args: Any, **kwargs: Any) -> Any: # ... method terminal_output (line 39) | async def terminal_output(self, *args: Any, **kwargs: Any) -> Any: # ... method release_terminal (line 43) | async def release_terminal(self, *args: Any, **kwargs: Any) -> Any: #... method wait_for_terminal_exit (line 47) | async def wait_for_terminal_exit(self, *args: Any, **kwargs: Any) -> A... method kill_terminal (line 51) | async def kill_terminal(self, *args: Any, **kwargs: Any) -> Any: # no... method ext_method (line 55) | async def ext_method(self, method: str, params: dict) -> dict: # noqa... method ext_notification (line 58) | async def ext_notification(self, method: str, params: dict) -> None: ... function test_cli_acp_mode_starts_session_and_exits (line 62) | async def test_cli_acp_mode_starts_session_and_exits() -> None: FILE: libs/cli/tests/integration_tests/test_compact_resume.py function _write_model_config (line 15) | def _write_model_config(home_dir: Path) -> None: function _build_long_prompt (line 29) | def _build_long_prompt(turn: int) -> str: function _run_turn (line 38) | async def _run_turn(agent, *, thread_id: str, assistant_id: str, prompt:... function _event_field (line 54) | def _event_field(event: object, key: str) -> object | None: function test_compact_resumed_thread_uses_persisted_history (line 62) | async def test_compact_resumed_thread_uses_persisted_history( FILE: libs/cli/tests/integration_tests/test_sandbox_factory.py class BaseSandboxIntegrationTest (line 20) | class BaseSandboxIntegrationTest(ABC): method sandbox (line 29) | def sandbox(self) -> Iterator[SandboxBackendProtocol]: method test_sandbox_creation (line 33) | def test_sandbox_creation(self, sandbox: SandboxBackendProtocol) -> None: method test_upload_single_file (line 39) | def test_upload_single_file(self, sandbox: SandboxBackendProtocol) -> ... method test_download_single_file (line 53) | def test_download_single_file(self, sandbox: SandboxBackendProtocol) -... method test_upload_download_roundtrip (line 68) | def test_upload_download_roundtrip(self, sandbox: SandboxBackendProtoc... method test_upload_multiple_files (line 82) | def test_upload_multiple_files(self, sandbox: SandboxBackendProtocol) ... method test_download_multiple_files (line 97) | def test_download_multiple_files(self, sandbox: SandboxBackendProtocol... method test_download_nonexistent_file (line 119) | def test_download_nonexistent_file(self, sandbox: SandboxBackendProtoc... method test_upload_binary_content (line 130) | def test_upload_binary_content(self, sandbox: SandboxBackendProtocol) ... method test_partial_success_upload (line 145) | def test_partial_success_upload(self, sandbox: SandboxBackendProtocol)... method test_partial_success_download (line 161) | def test_partial_success_download(self, sandbox: SandboxBackendProtoco... method test_download_error_file_not_found (line 183) | def test_download_error_file_not_found( method test_download_error_is_directory (line 199) | def test_download_error_is_directory(self, sandbox: SandboxBackendProt... method test_upload_error_parent_not_found (line 216) | def test_upload_error_parent_not_found( method test_upload_error_invalid_path (line 243) | def test_upload_error_invalid_path(self, sandbox: SandboxBackendProtoc... method test_download_error_invalid_path (line 257) | def test_download_error_invalid_path(self, sandbox: SandboxBackendProt... method test_upload_to_existing_directory_path (line 272) | def test_upload_to_existing_directory_path( class TestRunLoopIntegration (line 291) | class TestRunLoopIntegration(BaseSandboxIntegrationTest): method sandbox (line 295) | def sandbox(self) -> Iterator[BaseSandbox]: class TestDaytonaIntegration (line 301) | class TestDaytonaIntegration(BaseSandboxIntegrationTest): method sandbox (line 305) | def sandbox(self) -> Iterator[BaseSandbox]: class TestModalIntegration (line 311) | class TestModalIntegration(BaseSandboxIntegrationTest): method sandbox (line 315) | def sandbox(self) -> Iterator[BaseSandbox]: class TestLangSmithIntegration (line 321) | class TestLangSmithIntegration(BaseSandboxIntegrationTest): method sandbox (line 325) | def sandbox(self) -> Iterator[BaseSandbox]: FILE: libs/cli/tests/integration_tests/test_sandbox_operations.py class TestSandboxOperations (line 23) | class TestSandboxOperations: method sandbox (line 27) | def sandbox(self) -> Iterator[SandboxBackendProtocol]: method setup_test_dir (line 33) | def setup_test_dir(self, sandbox: SandboxBackendProtocol) -> None: method test_write_new_file (line 41) | def test_write_new_file(self, sandbox: SandboxBackendProtocol) -> None: method test_write_creates_parent_dirs (line 54) | def test_write_creates_parent_dirs(self, sandbox: SandboxBackendProtoc... method test_write_existing_file_fails (line 66) | def test_write_existing_file_fails(self, sandbox: SandboxBackendProtoc... method test_write_special_characters (line 81) | def test_write_special_characters(self, sandbox: SandboxBackendProtoco... method test_write_empty_file (line 96) | def test_write_empty_file(self, sandbox: SandboxBackendProtocol) -> None: method test_write_path_with_spaces (line 110) | def test_write_path_with_spaces(self, sandbox: SandboxBackendProtocol)... method test_write_unicode_content (line 122) | def test_write_unicode_content(self, sandbox: SandboxBackendProtocol) ... method test_write_consecutive_slashes_in_path (line 134) | def test_write_consecutive_slashes_in_path( method test_write_very_long_content (line 148) | def test_write_very_long_content(self, sandbox: SandboxBackendProtocol... method test_write_content_with_only_newlines (line 162) | def test_write_content_with_only_newlines( method test_read_basic_file (line 177) | def test_read_basic_file(self, sandbox: SandboxBackendProtocol) -> None: method test_read_nonexistent_file (line 192) | def test_read_nonexistent_file(self, sandbox: SandboxBackendProtocol) ... method test_read_empty_file (line 201) | def test_read_empty_file(self, sandbox: SandboxBackendProtocol) -> None: method test_read_with_offset (line 214) | def test_read_with_offset(self, sandbox: SandboxBackendProtocol) -> None: method test_read_with_limit (line 229) | def test_read_with_limit(self, sandbox: SandboxBackendProtocol) -> None: method test_read_with_offset_and_limit (line 245) | def test_read_with_offset_and_limit(self, sandbox: SandboxBackendProto... method test_read_unicode_content (line 262) | def test_read_unicode_content(self, sandbox: SandboxBackendProtocol) -... method test_read_file_with_very_long_lines (line 277) | def test_read_file_with_very_long_lines( method test_read_with_zero_limit (line 295) | def test_read_with_zero_limit(self, sandbox: SandboxBackendProtocol) -... method test_read_offset_beyond_file_length (line 311) | def test_read_offset_beyond_file_length( method test_read_offset_at_exact_file_length (line 331) | def test_read_offset_at_exact_file_length( method test_read_very_large_file_in_chunks (line 350) | def test_read_very_large_file_in_chunks( method test_edit_single_occurrence (line 387) | def test_edit_single_occurrence(self, sandbox: SandboxBackendProtocol)... method test_edit_multiple_occurrences_without_replace_all (line 405) | def test_edit_multiple_occurrences_without_replace_all( method test_edit_multiple_occurrences_with_replace_all (line 425) | def test_edit_multiple_occurrences_with_replace_all( method test_edit_string_not_found (line 445) | def test_edit_string_not_found(self, sandbox: SandboxBackendProtocol) ... method test_edit_nonexistent_file (line 456) | def test_edit_nonexistent_file(self, sandbox: SandboxBackendProtocol) ... method test_edit_special_characters (line 465) | def test_edit_special_characters(self, sandbox: SandboxBackendProtocol... method test_edit_multiline_support (line 487) | def test_edit_multiline_support(self, sandbox: SandboxBackendProtocol)... method test_edit_with_empty_new_string (line 507) | def test_edit_with_empty_new_string(self, sandbox: SandboxBackendProto... method test_edit_identical_strings (line 525) | def test_edit_identical_strings(self, sandbox: SandboxBackendProtocol)... method test_edit_unicode_content (line 542) | def test_edit_unicode_content(self, sandbox: SandboxBackendProtocol) -... method test_edit_whitespace_only_strings (line 559) | def test_edit_whitespace_only_strings( method test_edit_with_very_long_strings (line 577) | def test_edit_with_very_long_strings(self, sandbox: SandboxBackendProt... method test_edit_line_ending_preservation (line 596) | def test_edit_line_ending_preservation( method test_edit_partial_line_match (line 615) | def test_edit_partial_line_match(self, sandbox: SandboxBackendProtocol... method test_ls_path_is_absolute (line 634) | def test_ls_path_is_absolute(self, sandbox: SandboxBackendProtocol) ->... method test_ls_basic_directory (line 644) | def test_ls_basic_directory(self, sandbox: SandboxBackendProtocol) -> ... method test_ls_empty_directory (line 667) | def test_ls_empty_directory(self, sandbox: SandboxBackendProtocol) -> ... method test_ls_nonexistent_directory (line 676) | def test_ls_nonexistent_directory(self, sandbox: SandboxBackendProtoco... method test_ls_hidden_files (line 684) | def test_ls_hidden_files(self, sandbox: SandboxBackendProtocol) -> None: method test_ls_directory_with_spaces (line 698) | def test_ls_directory_with_spaces(self, sandbox: SandboxBackendProtoco... method test_ls_unicode_filenames (line 712) | def test_ls_unicode_filenames(self, sandbox: SandboxBackendProtocol) -... method test_ls_large_directory (line 726) | def test_ls_large_directory(self, sandbox: SandboxBackendProtocol) -> ... method test_ls_path_with_trailing_slash (line 746) | def test_ls_path_with_trailing_slash(self, sandbox: SandboxBackendProt... method test_ls_special_characters_in_filenames (line 760) | def test_ls_special_characters_in_filenames( method test_grep_basic_search (line 781) | def test_grep_basic_search(self, sandbox: SandboxBackendProtocol) -> N... method test_grep_with_glob_pattern (line 801) | def test_grep_with_glob_pattern(self, sandbox: SandboxBackendProtocol)... method test_grep_no_matches (line 815) | def test_grep_no_matches(self, sandbox: SandboxBackendProtocol) -> None: method test_grep_multiple_matches_per_file (line 826) | def test_grep_multiple_matches_per_file( method test_grep_literal_string_matching (line 843) | def test_grep_literal_string_matching( method test_grep_unicode_pattern (line 858) | def test_grep_unicode_pattern(self, sandbox: SandboxBackendProtocol) -... method test_grep_case_sensitivity (line 870) | def test_grep_case_sensitivity(self, sandbox: SandboxBackendProtocol) ... method test_grep_with_special_characters (line 883) | def test_grep_with_special_characters( method test_grep_empty_directory (line 905) | def test_grep_empty_directory(self, sandbox: SandboxBackendProtocol) -... method test_grep_across_nested_directories (line 915) | def test_grep_across_nested_directories( method test_grep_with_multiline_matches (line 931) | def test_grep_with_multiline_matches(self, sandbox: SandboxBackendProt... method test_glob_basic_pattern (line 946) | def test_glob_basic_pattern(self, sandbox: SandboxBackendProtocol) -> ... method test_glob_recursive_pattern (line 963) | def test_glob_recursive_pattern(self, sandbox: SandboxBackendProtocol)... method test_glob_no_matches (line 979) | def test_glob_no_matches(self, sandbox: SandboxBackendProtocol) -> None: method test_glob_with_directories (line 990) | def test_glob_with_directories(self, sandbox: SandboxBackendProtocol) ... method test_glob_specific_extension (line 1006) | def test_glob_specific_extension(self, sandbox: SandboxBackendProtocol... method test_glob_hidden_files_explicitly (line 1020) | def test_glob_hidden_files_explicitly( method test_glob_with_character_class (line 1039) | def test_glob_with_character_class(self, sandbox: SandboxBackendProtoc... method test_glob_with_question_mark (line 1058) | def test_glob_with_question_mark(self, sandbox: SandboxBackendProtocol... method test_glob_multiple_extensions (line 1074) | def test_glob_multiple_extensions(self, sandbox: SandboxBackendProtoco... method test_glob_deeply_nested_pattern (line 1092) | def test_glob_deeply_nested_pattern(self, sandbox: SandboxBackendProto... method test_glob_with_no_path_argument (line 1105) | def test_glob_with_no_path_argument(self, sandbox: SandboxBackendProto... method test_write_read_edit_workflow (line 1119) | def test_write_read_edit_workflow(self, sandbox: SandboxBackendProtoco... method test_complex_directory_operations (line 1146) | def test_complex_directory_operations( FILE: libs/cli/tests/unit_tests/conftest.py function _warm_model_caches (line 15) | def _warm_model_caches() -> None: function _clear_langsmith_env (line 35) | def _clear_langsmith_env(monkeypatch: pytest.MonkeyPatch) -> None: function _isolate_history (line 58) | def _isolate_history(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) ->... FILE: libs/cli/tests/unit_tests/skills/test_commands.py class TestValidateSkillName (line 26) | class TestValidateSkillName: method test_valid_skill_names (line 29) | def test_valid_skill_names(self): method test_invalid_names_per_spec (line 50) | def test_invalid_names_per_spec(self): method test_path_traversal_attacks (line 65) | def test_path_traversal_attacks(self): method test_absolute_paths (line 83) | def test_absolute_paths(self): method test_path_separators (line 96) | def test_path_separators(self): method test_invalid_characters (line 109) | def test_invalid_characters(self): method test_unicode_lowercase_accepted (line 136) | def test_unicode_lowercase_accepted(self) -> None: method test_unicode_uppercase_rejected (line 153) | def test_unicode_uppercase_rejected(self) -> None: method test_cjk_rejected (line 164) | def test_cjk_rejected(self) -> None: method test_emoji_rejected (line 175) | def test_emoji_rejected(self) -> None: method test_empty_names (line 186) | def test_empty_names(self): class TestValidateSkillPath (line 200) | class TestValidateSkillPath: method test_valid_path_within_base (line 203) | def test_valid_path_within_base(self, tmp_path: Path) -> None: method test_path_traversal_outside_base (line 213) | def test_path_traversal_outside_base(self, tmp_path: Path) -> None: method test_symlink_path_traversal (line 224) | def test_symlink_path_traversal(self, tmp_path: Path) -> None: method test_nonexistent_path_validation (line 244) | def test_nonexistent_path_validation(self, tmp_path: Path) -> None: class TestIntegrationSecurity (line 256) | class TestIntegrationSecurity: method test_combined_validation (line 259) | def test_combined_validation(self, tmp_path: Path) -> None: class TestGenerateTemplate (line 288) | class TestGenerateTemplate: method test_template_parseable_by_middleware (line 295) | def test_template_parseable_by_middleware(self): method test_template_body_has_no_when_to_use_section (line 310) | def test_template_body_has_no_when_to_use_section(self): method test_template_description_includes_trigger_guidance (line 322) | def test_template_description_includes_trigger_guidance(self): function _make_skill (line 334) | def _make_skill( class TestFormatInfoFields (line 369) | class TestFormatInfoFields: method test_all_fields_present (line 372) | def test_all_fields_present(self) -> None: method test_no_optional_fields (line 394) | def test_no_optional_fields(self) -> None: method test_license_only (line 400) | def test_license_only(self) -> None: method test_compatibility_only (line 407) | def test_compatibility_only(self) -> None: method test_allowed_tools_only (line 414) | def test_allowed_tools_only(self) -> None: method test_metadata_only (line 421) | def test_metadata_only(self) -> None: method test_field_order (line 428) | def test_field_order(self) -> None: class TestSkillsHelpFlag (line 446) | class TestSkillsHelpFlag: method test_skills_help_shows_subcommands (line 449) | def test_skills_help_shows_subcommands(self) -> None: method test_skills_list_help_shows_list_options (line 480) | def test_skills_list_help_shows_list_options(self) -> None: class TestThreadsHelpFlag (line 504) | class TestThreadsHelpFlag: method test_threads_help_shows_threads_content (line 507) | def test_threads_help_shows_threads_content(self) -> None: class TestThreadsListAlias (line 536) | class TestThreadsListAlias: method test_threads_ls_alias_parsed (line 539) | def test_threads_ls_alias_parsed(self) -> None: method test_threads_list_still_works (line 546) | def test_threads_list_still_works(self) -> None: class TestSkillsListAlias (line 554) | class TestSkillsListAlias: method test_skills_ls_alias_parsed (line 557) | def test_skills_ls_alias_parsed(self) -> None: method test_skills_list_still_works (line 564) | def test_skills_list_still_works(self) -> None: class TestInfoShadowWarning (line 572) | class TestInfoShadowWarning: method _make_skill_dir (line 575) | def _make_skill_dir(self, parent: Path, name: str, description: str) -... method test_shadow_note_shown_when_project_overrides_user (line 589) | def test_shadow_note_shown_when_project_overrides_user( method test_no_shadow_note_when_no_conflict (line 628) | def test_no_shadow_note_when_no_conflict(self, tmp_path: Path) -> None: class TestInfoBuiltInSkill (line 666) | class TestInfoBuiltInSkill: method _make_skill_dir (line 669) | def _make_skill_dir(self, parent: Path, name: str, description: str) -... method test_built_in_skill_shows_correct_label (line 683) | def test_built_in_skill_shows_correct_label(self, tmp_path: Path) -> N... method test_built_in_skill_no_shadow_warning (line 719) | def test_built_in_skill_no_shadow_warning(self, tmp_path: Path) -> None: class TestListBuiltInSkillsDisplay (line 759) | class TestListBuiltInSkillsDisplay: method _make_skill_dir (line 762) | def _make_skill_dir(self, parent: Path, name: str, description: str) -... method test_built_in_section_rendered (line 770) | def test_built_in_section_rendered(self, tmp_path: Path) -> None: method test_built_in_section_omits_path (line 806) | def test_built_in_section_omits_path(self, tmp_path: Path) -> None: class TestSkillsLsDispatch (line 843) | class TestSkillsLsDispatch: method test_ls_dispatches_to_list (line 846) | def test_ls_dispatches_to_list(self, tmp_path: Path) -> None: class TestDeleteSkill (line 886) | class TestDeleteSkill: method _create_test_skill (line 890) | def _create_test_skill(skills_dir: Path, skill_name: str) -> Path: method test_delete_existing_skill_with_force (line 915) | def test_delete_existing_skill_with_force(self, tmp_path: Path) -> None: method test_delete_nonexistent_skill (line 933) | def test_delete_nonexistent_skill(self, tmp_path: Path) -> None: method test_delete_with_confirmation_accepted (line 961) | def test_delete_with_confirmation_accepted( method test_delete_with_confirmation_no (line 982) | def test_delete_with_confirmation_no(self, tmp_path: Path) -> None: method test_delete_with_confirmation_empty_input (line 1001) | def test_delete_with_confirmation_empty_input(self, tmp_path: Path) ->... method test_delete_with_keyboard_interrupt (line 1020) | def test_delete_with_keyboard_interrupt(self, tmp_path: Path) -> None: method test_delete_with_eof_error (line 1039) | def test_delete_with_eof_error(self, tmp_path: Path) -> None: method test_delete_invalid_skill_name (line 1058) | def test_delete_invalid_skill_name(self, tmp_path: Path) -> None: method test_delete_project_skill (line 1095) | def test_delete_project_skill(self, tmp_path: Path) -> None: method test_delete_project_skill_not_in_project (line 1114) | def test_delete_project_skill_not_in_project(self, tmp_path: Path) -> ... method test_delete_skill_with_supporting_files (line 1137) | def test_delete_skill_with_supporting_files(self, tmp_path: Path) -> N... method test_delete_skill_for_specific_agent (line 1163) | def test_delete_skill_for_specific_agent(self, tmp_path: Path) -> None: method test_delete_rmtree_os_error (line 1187) | def test_delete_rmtree_os_error(self, tmp_path: Path) -> None: method test_delete_refuses_when_base_dir_none (line 1221) | def test_delete_refuses_when_base_dir_none(self, tmp_path: Path) -> None: class TestDeleteArgparsing (line 1251) | class TestDeleteArgparsing: method test_delete_args_parsed (line 1254) | def test_delete_args_parsed(self) -> None: method test_delete_args_defaults (line 1267) | def test_delete_args_defaults(self) -> None: method test_delete_help_shows_delete_options (line 1275) | def test_delete_help_shows_delete_options(self) -> None: method test_execute_skills_command_dispatches_delete (line 1292) | def test_execute_skills_command_dispatches_delete(self, tmp_path: Path... FILE: libs/cli/tests/unit_tests/skills/test_load.py function _create_skill (line 11) | def _create_skill(skill_dir: Path, name: str, description: str) -> None: class TestListSkillsSingleDirectory (line 28) | class TestListSkillsSingleDirectory: method test_list_skills_empty_directory (line 31) | def test_list_skills_empty_directory(self, tmp_path: Path) -> None: method test_list_skills_with_valid_skill (line 39) | def test_list_skills_with_valid_skill(self, tmp_path: Path) -> None: method test_list_skills_source_parameter (line 65) | def test_list_skills_source_parameter(self, tmp_path: Path) -> None: method test_list_skills_missing_frontmatter (line 87) | def test_list_skills_missing_frontmatter(self, tmp_path: Path) -> None: method test_list_skills_missing_required_fields (line 101) | def test_list_skills_missing_required_fields(self, tmp_path: Path) -> ... method test_list_skills_nonexistent_directory (line 127) | def test_list_skills_nonexistent_directory(self, tmp_path: Path) -> None: class TestListSkillsMultipleDirectories (line 134) | class TestListSkillsMultipleDirectories: method test_list_skills_user_only (line 137) | def test_list_skills_user_only(self, tmp_path: Path) -> None: method test_list_skills_project_only (line 156) | def test_list_skills_project_only(self, tmp_path: Path) -> None: method test_list_skills_both_sources (line 175) | def test_list_skills_both_sources(self, tmp_path: Path) -> None: method test_list_skills_project_overrides_user (line 215) | def test_list_skills_project_overrides_user(self, tmp_path: Path) -> N... method test_list_skills_empty_directories (line 250) | def test_list_skills_empty_directories(self, tmp_path: Path) -> None: method test_list_skills_no_directories (line 260) | def test_list_skills_no_directories(self): method test_list_skills_multiple_user_skills (line 265) | def test_list_skills_multiple_user_skills(self, tmp_path: Path) -> None: method test_list_skills_mixed_valid_invalid (line 286) | def test_list_skills_mixed_valid_invalid(self, tmp_path: Path) -> None: class TestListSkillsAliasDirectories (line 315) | class TestListSkillsAliasDirectories: method test_user_agent_skills_dir_precedence (line 318) | def test_user_agent_skills_dir_precedence(self, tmp_path: Path) -> None: method test_project_agent_skills_dir_precedence (line 347) | def test_project_agent_skills_dir_precedence(self, tmp_path: Path) -> ... method test_full_precedence_chain (line 376) | def test_full_precedence_chain(self, tmp_path: Path) -> None: method test_mixed_sources_with_aliases (line 417) | def test_mixed_sources_with_aliases(self, tmp_path: Path) -> None: method test_alias_directories_only (line 468) | def test_alias_directories_only(self, tmp_path: Path) -> None: method test_nonexistent_alias_directories (line 495) | def test_nonexistent_alias_directories(self, tmp_path: Path) -> None: class TestListSkillsBuiltIn (line 510) | class TestListSkillsBuiltIn: method test_built_in_skills_discovered (line 513) | def test_built_in_skills_discovered(self, tmp_path: Path) -> None: method test_built_in_lowest_precedence (line 531) | def test_built_in_lowest_precedence(self, tmp_path: Path) -> None: method test_project_overrides_built_in (line 557) | def test_project_overrides_built_in(self, tmp_path: Path) -> None: method test_built_in_coexists_with_other_skills (line 583) | def test_built_in_coexists_with_other_skills(self, tmp_path: Path) -> ... method test_nonexistent_built_in_dir (line 622) | def test_nonexistent_built_in_dir(self, tmp_path: Path) -> None: method test_real_skill_creator_ships (line 633) | def test_real_skill_creator_ships(self) -> None: method test_oserror_in_one_source_does_not_break_others (line 659) | def test_oserror_in_one_source_does_not_break_others(self, tmp_path: P... FILE: libs/cli/tests/unit_tests/skills/test_skills_json.py class TestSkillsListJson (line 11) | class TestSkillsListJson: method test_json_output_with_skills (line 14) | def test_json_output_with_skills(self, tmp_path: Path) -> None: method test_json_output_empty (line 43) | def test_json_output_empty(self, tmp_path: Path) -> None: class TestSkillsInfoJson (line 63) | class TestSkillsInfoJson: method test_json_output (line 66) | def test_json_output(self, tmp_path: Path) -> None: class TestSkillsCreateJson (line 95) | class TestSkillsCreateJson: method test_json_output (line 98) | def test_json_output(self, tmp_path: Path) -> None: class TestSkillsDeleteJson (line 119) | class TestSkillsDeleteJson: method test_json_output (line 122) | def test_json_output(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_agent.py function _make_fake_chat_model (line 32) | def _make_fake_chat_model() -> GenericFakeChatModel: function test_format_write_file_description_create_new_file (line 39) | def test_format_write_file_description_create_new_file(tmp_path: Path) -... function test_format_write_file_description_overwrite_existing_file (line 63) | def test_format_write_file_description_overwrite_existing_file(tmp_path:... function test_format_edit_file_description_single_occurrence (line 89) | def test_format_edit_file_description_single_occurrence(): function test_format_edit_file_description_all_occurrences (line 113) | def test_format_edit_file_description_all_occurrences(): function test_format_web_search_description (line 137) | def test_format_web_search_description(): function test_format_web_search_description_default_max_results (line 160) | def test_format_web_search_description_default_max_results(): function test_format_fetch_url_description (line 181) | def test_format_fetch_url_description(): function test_format_fetch_url_description_default_timeout (line 205) | def test_format_fetch_url_description_default_timeout(): function test_format_task_description (line 226) | def test_format_task_description(): function test_format_task_description_truncates_long_description (line 254) | def test_format_task_description_truncates_long_description(): function test_format_execute_description (line 279) | def test_format_execute_description(): function test_format_execute_description_with_hidden_unicode (line 300) | def test_format_execute_description_with_hidden_unicode(): function test_format_fetch_url_description_with_suspicious_url (line 319) | def test_format_fetch_url_description_with_suspicious_url(): function test_format_fetch_url_description_with_hidden_unicode_in_url (line 335) | def test_format_fetch_url_description_with_hidden_unicode_in_url(): class TestGetSystemPromptModelIdentity (line 352) | class TestGetSystemPromptModelIdentity: method test_includes_model_identity_when_all_settings_present (line 355) | def test_includes_model_identity_when_all_settings_present(self) -> None: method test_excludes_model_identity_when_model_name_is_none (line 370) | def test_excludes_model_identity_when_model_name_is_none(self) -> None: method test_excludes_provider_when_not_set (line 382) | def test_excludes_provider_when_not_set(self) -> None: method test_excludes_context_limit_when_not_set (line 397) | def test_excludes_context_limit_when_not_set(self) -> None: method test_model_identity_with_only_model_name (line 412) | def test_model_identity_with_only_model_name(self) -> None: class TestGetSystemPromptNonInteractive (line 428) | class TestGetSystemPromptNonInteractive: method test_interactive_prompt_mentions_interactive_cli (line 431) | def test_interactive_prompt_mentions_interactive_cli(self) -> None: method test_non_interactive_prompt_mentions_headless (line 441) | def test_non_interactive_prompt_mentions_headless(self) -> None: method test_non_interactive_prompt_does_not_ask_questions (line 451) | def test_non_interactive_prompt_does_not_ask_questions(self) -> None: method test_non_interactive_prompt_instructs_autonomous_execution (line 460) | def test_non_interactive_prompt_instructs_autonomous_execution(self) -... method test_non_interactive_prompt_requires_non_interactive_commands (line 470) | def test_non_interactive_prompt_requires_non_interactive_commands(self... method test_default_is_interactive (line 480) | def test_default_is_interactive(self) -> None: class TestGetSystemPromptCwdOSError (line 490) | class TestGetSystemPromptCwdOSError: method test_falls_back_on_cwd_oserror (line 493) | def test_falls_back_on_cwd_oserror(self) -> None: class TestGetSystemPromptPlaceholderValidation (line 507) | class TestGetSystemPromptPlaceholderValidation: method test_no_unreplaced_placeholders_in_interactive (line 510) | def test_no_unreplaced_placeholders_in_interactive(self) -> None: method test_no_unreplaced_placeholders_in_non_interactive (line 522) | def test_no_unreplaced_placeholders_in_non_interactive(self) -> None: class TestCreateCliAgentInteractiveForwarding (line 534) | class TestCreateCliAgentInteractiveForwarding: method test_forwards_interactive_false_to_get_system_prompt (line 537) | def test_forwards_interactive_false_to_get_system_prompt( method test_explicit_system_prompt_ignores_interactive (line 591) | def test_explicit_system_prompt_ignores_interactive(self, tmp_path: Pa... class TestDefaultAgentName (line 643) | class TestDefaultAgentName: method test_default_agent_name_value (line 646) | def test_default_agent_name_value(self) -> None: class TestListAgents (line 655) | class TestListAgents: method test_default_agent_marked (line 658) | def test_default_agent_marked(self, tmp_path: Path) -> None: method test_non_default_agent_not_marked (line 700) | def test_non_default_agent_not_marked(self, tmp_path: Path) -> None: class TestListAgentsJson (line 729) | class TestListAgentsJson: method test_json_output_with_agents (line 732) | def test_json_output_with_agents(self, tmp_path: Path) -> None: method test_json_output_empty (line 771) | def test_json_output_empty(self, tmp_path: Path) -> None: class TestResetAgentJson (line 793) | class TestResetAgentJson: method test_json_output_default_reset (line 796) | def test_json_output_default_reset(self, tmp_path: Path) -> None: class TestCreateCliAgentSkillsSources (line 823) | class TestCreateCliAgentSkillsSources: method test_skills_source_precedence_order (line 826) | def test_skills_source_precedence_order(self, tmp_path: Path) -> None: class TestCreateCliAgentMemorySources (line 903) | class TestCreateCliAgentMemorySources: method test_project_agent_md_paths_in_memory_sources (line 906) | def test_project_agent_md_paths_in_memory_sources(self, tmp_path: Path... method test_empty_project_paths_no_extra_sources (line 978) | def test_empty_project_paths_no_extra_sources(self, tmp_path: Path) ->... class TestCreateCliAgentProjectContext (line 1041) | class TestCreateCliAgentProjectContext: method test_project_context_drives_project_skills_and_subagents (line 1044) | def test_project_context_drives_project_skills_and_subagents( method test_project_context_drives_project_agents_md_paths (line 1126) | def test_project_context_drives_project_agents_md_paths( method test_project_context_sets_local_shell_root_dir (line 1199) | def test_project_context_sets_local_shell_root_dir(self, tmp_path: Pat... method test_cwd_sets_local_filesystem_root_dir_without_shell (line 1256) | def test_cwd_sets_local_filesystem_root_dir_without_shell( class TestMiddlewareStackConformance (line 1308) | class TestMiddlewareStackConformance: method test_all_middleware_inherit_agent_middleware (line 1311) | def test_all_middleware_inherit_agent_middleware(self, tmp_path: Path)... class TestLoadAsyncSubagents (line 1378) | class TestLoadAsyncSubagents: method test_returns_empty_when_no_file (line 1379) | def test_returns_empty_when_no_file(self, tmp_path: Path) -> None: method test_returns_empty_when_no_section (line 1383) | def test_returns_empty_when_no_section(self, tmp_path: Path) -> None: method test_loads_valid_async_subagent (line 1389) | def test_loads_valid_async_subagent(self, tmp_path: Path) -> None: method test_loads_multiple_subagents (line 1404) | def test_loads_multiple_subagents(self, tmp_path: Path) -> None: method test_skips_entry_missing_required_fields (line 1422) | def test_skips_entry_missing_required_fields(self, tmp_path: Path) -> ... method test_includes_optional_headers (line 1430) | def test_includes_optional_headers(self, tmp_path: Path) -> None: method test_handles_invalid_toml (line 1445) | def test_handles_invalid_toml(self, tmp_path: Path) -> None: class TestLsEntriesShim (line 1452) | class TestLsEntriesShim: method test_remove_ls_entries_shim_when_sdk_pin_is_bumped (line 1460) | def test_remove_ls_entries_shim_when_sdk_pin_is_bumped(self) -> None: FILE: libs/cli/tests/unit_tests/test_app.py class TestInitialPromptOnMount (line 46) | class TestInitialPromptOnMount: method test_initial_prompt_triggers_handle_user_message (line 49) | async def test_initial_prompt_triggers_handle_user_message(self) -> None: class TestAppCSSValidation (line 73) | class TestAppCSSValidation: method test_app_css_validates_on_mount (line 76) | async def test_app_css_validates_on_mount(self) -> None: class TestThreadCachePrewarm (line 90) | class TestThreadCachePrewarm: method test_prewarm_uses_current_thread_limit (line 93) | async def test_prewarm_uses_current_thread_limit(self) -> None: method test_show_thread_selector_uses_cached_rows (line 108) | async def test_show_thread_selector_uses_cached_rows(self) -> None: class TestAppBindings (line 146) | class TestAppBindings: method test_ctrl_c_binding_has_priority (line 149) | def test_ctrl_c_binding_has_priority(self) -> None: method test_toggle_tool_output_has_ctrl_o_binding (line 159) | def test_toggle_tool_output_has_ctrl_o_binding(self) -> None: method test_ctrl_e_not_bound (line 169) | def test_ctrl_e_not_bound(self) -> None: class TestITerm2CursorGuide (line 176) | class TestITerm2CursorGuide: method test_escape_sequences_are_valid (line 179) | def test_escape_sequences_are_valid(self) -> None: method test_write_iterm_escape_does_nothing_when_not_iterm (line 192) | def test_write_iterm_escape_does_nothing_when_not_iterm(self) -> None: method test_write_iterm_escape_writes_sequence_when_iterm (line 202) | def test_write_iterm_escape_writes_sequence_when_iterm(self) -> None: method test_write_iterm_escape_handles_oserror_gracefully (line 212) | def test_write_iterm_escape_handles_oserror_gracefully(self) -> None: method test_write_iterm_escape_handles_none_stderr (line 222) | def test_write_iterm_escape_handles_none_stderr(self) -> None: class TestITerm2Detection (line 231) | class TestITerm2Detection: method test_detection_requires_tty (line 234) | def test_detection_requires_tty(self) -> None: method test_detection_via_lc_terminal (line 253) | def test_detection_via_lc_terminal(self) -> None: method test_detection_via_term_program (line 271) | def test_detection_via_term_program(self) -> None: class TestModalScreenEscapeDismissal (line 289) | class TestModalScreenEscapeDismissal: method test_escape_dismisses_modal_screen (line 293) | async def test_escape_dismisses_modal_screen() -> None: class TestModalScreenCtrlDHandling (line 352) | class TestModalScreenCtrlDHandling: method test_ctrl_d_deletes_in_thread_selector_instead_of_quitting (line 355) | async def test_ctrl_d_deletes_in_thread_selector_instead_of_quitting(s... method test_escape_closes_thread_delete_confirm_without_dismissing_modal (line 392) | async def test_escape_closes_thread_delete_confirm_without_dismissing_... method test_ctrl_d_twice_quits_from_delete_confirmation (line 435) | async def test_ctrl_d_twice_quits_from_delete_confirmation(self) -> None: method test_ctrl_c_still_works_from_delete_confirmation (line 489) | async def test_ctrl_c_still_works_from_delete_confirmation(self) -> None: method test_ctrl_d_quits_from_model_selector_with_input_focused (line 541) | async def test_ctrl_d_quits_from_model_selector_with_input_focused( method test_ctrl_d_quits_from_mcp_viewer (line 567) | async def test_ctrl_d_quits_from_mcp_viewer(self) -> None: class TestModalScreenShiftTabHandling (line 600) | class TestModalScreenShiftTabHandling: method test_shift_tab_moves_backward_in_thread_selector (line 603) | async def test_shift_tab_moves_backward_in_thread_selector(self) -> None: class TestModalScreenCtrlCHandling (line 641) | class TestModalScreenCtrlCHandling: method test_ctrl_c_quits_from_thread_selector_with_input_focused (line 644) | async def test_ctrl_c_quits_from_thread_selector_with_input_focused( method test_ctrl_c_quits_from_model_selector_with_input_focused (line 689) | async def test_ctrl_c_quits_from_model_selector_with_input_focused( method test_ctrl_c_quits_from_mcp_viewer (line 726) | async def test_ctrl_c_quits_from_mcp_viewer(self) -> None: class TestMountMessageNoMatches (line 770) | class TestMountMessageNoMatches: method test_mount_message_no_crash_when_messages_missing (line 778) | async def test_mount_message_no_crash_when_messages_missing(self) -> N... method test_mount_error_message_no_crash_when_messages_missing (line 799) | async def test_mount_error_message_no_crash_when_messages_missing( class TestQueuedMessage (line 819) | class TestQueuedMessage: method test_frozen (line 822) | def test_frozen(self) -> None: method test_fields (line 828) | def test_fields(self) -> None: class TestMessageQueue (line 835) | class TestMessageQueue: method test_message_queued_when_agent_running (line 838) | async def test_message_queued_when_agent_running(self) -> None: method test_message_queued_while_connecting (line 852) | async def test_message_queued_while_connecting(self) -> None: method test_message_blocked_while_thread_switching (line 867) | async def test_message_blocked_while_thread_switching(self) -> None: method test_queued_widget_mounted (line 886) | async def test_queued_widget_mounted(self) -> None: method test_immediate_processing_when_agent_idle (line 900) | async def test_immediate_processing_when_agent_idle(self) -> None: method test_fifo_order (line 916) | async def test_fifo_order(self) -> None: method test_escape_pops_last_queued_message (line 932) | async def test_escape_pops_last_queued_message(self) -> None: method test_escape_restores_text_to_empty_input (line 963) | async def test_escape_restores_text_to_empty_input(self) -> None: method test_escape_preserves_existing_input_text (line 982) | async def test_escape_preserves_existing_input_text(self) -> None: method test_escape_pop_shows_toast (line 1002) | async def test_escape_pop_shows_toast(self) -> None: method test_escape_pop_single_then_interrupt (line 1030) | async def test_escape_pop_single_then_interrupt(self) -> None: method test_escape_pop_handles_widget_desync (line 1049) | async def test_escape_pop_handles_widget_desync(self) -> None: method test_interrupt_dismisses_completion_without_stopping_agent (line 1065) | async def test_interrupt_dismisses_completion_without_stopping_agent(s... method test_interrupt_falls_through_when_no_completion (line 1089) | async def test_interrupt_falls_through_when_no_completion(self) -> None: method test_queue_cleared_on_ctrl_c (line 1107) | async def test_queue_cleared_on_ctrl_c(self) -> None: method test_process_next_from_queue_removes_widget (line 1124) | async def test_process_next_from_queue_removes_widget(self) -> None: method test_shell_command_continues_chain (line 1142) | async def test_shell_command_continues_chain(self) -> None: class TestAskUserLifecycle (line 1164) | class TestAskUserLifecycle: method test_request_ask_user_timeout_cleans_old_widget (line 1167) | async def test_request_ask_user_timeout_cleans_old_widget(self) -> None: method test_on_ask_user_menu_answered_ignores_remove_errors (line 1185) | async def test_on_ask_user_menu_answered_ignores_remove_errors(self) -... method test_on_ask_user_menu_cancelled_ignores_remove_errors (line 1201) | async def test_on_ask_user_menu_cancelled_ignores_remove_errors(self) ... class TestTraceCommand (line 1218) | class TestTraceCommand: method test_trace_opens_browser_when_configured (line 1221) | async def test_trace_opens_browser_when_configured(self) -> None: method test_trace_shows_error_when_not_configured (line 1248) | async def test_trace_shows_error_when_not_configured(self) -> None: method test_trace_shows_error_when_no_session (line 1265) | async def test_trace_shows_error_when_no_session(self) -> None: method test_trace_shows_link_when_browser_fails (line 1278) | async def test_trace_shows_link_when_browser_fails(self) -> None: method test_trace_shows_error_when_url_build_raises (line 1304) | async def test_trace_shows_error_when_url_build_raises(self) -> None: method test_trace_routed_from_handle_command (line 1321) | async def test_trace_routed_from_handle_command(self) -> None: class TestRunAgentTaskMediaTracker (line 1335) | class TestRunAgentTaskMediaTracker: method test_run_agent_task_passes_image_tracker (line 1338) | async def test_run_agent_task_passes_image_tracker(self) -> None: method test_run_agent_task_finalizes_pending_tools_on_error (line 1356) | async def test_run_agent_task_finalizes_pending_tools_on_error(self) -... class TestAppFocusRestoresChatInput (line 1381) | class TestAppFocusRestoresChatInput: method test_app_focus_restores_chat_input (line 1384) | async def test_app_focus_restores_chat_input(self) -> None: method test_app_focus_skips_when_modal_open (line 1402) | async def test_app_focus_skips_when_modal_open(self) -> None: method test_app_focus_skips_when_approval_pending (line 1423) | async def test_app_focus_skips_when_approval_pending(self) -> None: class TestPasteRouting (line 1439) | class TestPasteRouting: method test_on_paste_routes_unfocused_event_to_chat_input (line 1442) | async def test_on_paste_routes_unfocused_event_to_chat_input(self) -> ... method test_on_paste_does_not_route_when_input_already_focused (line 1464) | async def test_on_paste_does_not_route_when_input_already_focused(self... class TestShellCommandInterrupt (line 1487) | class TestShellCommandInterrupt: method test_escape_cancels_shell_worker (line 1490) | async def test_escape_cancels_shell_worker(self) -> None: method test_ctrl_c_cancels_shell_worker (line 1505) | async def test_ctrl_c_cancels_shell_worker(self) -> None: method test_process_killed_on_cancelled_error (line 1524) | async def test_process_killed_on_cancelled_error(self) -> None: method test_cleanup_clears_state (line 1549) | async def test_cleanup_clears_state(self) -> None: method test_messages_queued_during_shell (line 1566) | async def test_messages_queued_during_shell(self) -> None: method test_queue_drains_after_shell_completes (line 1579) | async def test_queue_drains_after_shell_completes(self) -> None: method test_interrupted_shows_message (line 1602) | async def test_interrupted_shows_message(self) -> None: method test_timeout_kills_and_shows_error (line 1623) | async def test_timeout_kills_and_shows_error(self) -> None: method test_posix_killpg_called (line 1650) | async def test_posix_killpg_called(self) -> None: method test_sigkill_escalation (line 1673) | async def test_sigkill_escalation(self) -> None: method test_no_op_when_no_shell_running (line 1699) | async def test_no_op_when_no_shell_running(self) -> None: method test_oserror_shows_error_message (line 1710) | async def test_oserror_shows_error_message(self) -> None: method test_handle_shell_command_sets_running_state (line 1727) | async def test_handle_shell_command_sets_running_state(self) -> None: method test_kill_noop_when_already_exited (line 1744) | async def test_kill_noop_when_already_exited(self) -> None: method test_end_to_end_escape_during_shell (line 1761) | async def test_end_to_end_escape_during_shell(self) -> None: class TestInterruptApprovalPriority (line 1778) | class TestInterruptApprovalPriority: method test_escape_rejects_approval_before_canceling_worker (line 1781) | async def test_escape_rejects_approval_before_canceling_worker(self) -... method test_escape_pops_queue_before_cancelling_worker (line 1799) | async def test_escape_pops_queue_before_cancelling_worker(self) -> None: method test_escape_rejects_approval_when_no_worker (line 1835) | async def test_escape_rejects_approval_when_no_worker(self) -> None: method test_ctrl_c_rejects_approval_before_canceling_worker (line 1851) | async def test_ctrl_c_rejects_approval_before_canceling_worker(self) -... class TestIsUserTyping (line 1871) | class TestIsUserTyping: method test_returns_false_when_never_typed (line 1874) | def test_returns_false_when_never_typed(self) -> None: method test_returns_true_within_threshold (line 1879) | def test_returns_true_within_threshold(self) -> None: method test_returns_false_after_threshold (line 1885) | def test_returns_false_after_threshold(self) -> None: method test_boundary_just_within_threshold (line 1891) | def test_boundary_just_within_threshold(self) -> None: class TestRequestApprovalBranching (line 1898) | class TestRequestApprovalBranching: method test_placeholder_mounted_when_typing (line 1901) | async def test_placeholder_mounted_when_typing(self) -> None: method test_placeholder_mount_failure_falls_back_to_menu (line 1950) | async def test_placeholder_mount_failure_falls_back_to_menu(self) -> N... method test_menu_mounted_directly_when_not_typing (line 1993) | async def test_menu_mounted_directly_when_not_typing(self) -> None: class TestDeferredShowApproval (line 2028) | class TestDeferredShowApproval: method test_swaps_placeholder_for_menu_after_idle (line 2031) | async def test_swaps_placeholder_for_menu_after_idle(self) -> None: method test_bails_if_placeholder_detached_and_cancels_future (line 2075) | async def test_bails_if_placeholder_detached_and_cancels_future(self) ... method test_timeout_shows_approval_after_deadline (line 2108) | async def test_timeout_shows_approval_after_deadline(self) -> None: class TestOnChatInputTyping (line 2153) | class TestOnChatInputTyping: method test_sets_last_typed_at (line 2156) | def test_sets_last_typed_at(self) -> None: method test_updates_on_subsequent_calls (line 2169) | def test_updates_on_subsequent_calls(self) -> None: class TestOnApprovalMenuDecidedCleanup (line 2185) | class TestOnApprovalMenuDecidedCleanup: method test_removes_attached_placeholder (line 2188) | async def test_removes_attached_placeholder(self) -> None: method test_nulls_detached_placeholder (line 2211) | async def test_nulls_detached_placeholder(self) -> None: method test_no_placeholder_works_normally (line 2227) | async def test_no_placeholder_works_normally(self) -> None: class TestActionOpenEditor (line 2240) | class TestActionOpenEditor: method test_updates_text_on_successful_edit (line 2243) | async def test_updates_text_on_successful_edit(self) -> None: method test_no_update_when_editor_returns_none (line 2260) | async def test_no_update_when_editor_returns_none(self) -> None: method test_early_return_when_chat_input_is_none (line 2277) | async def test_early_return_when_chat_input_is_none(self) -> None: method test_early_return_when_text_area_is_none (line 2284) | async def test_early_return_when_text_area_is_none(self) -> None: method test_notifies_on_exception (line 2292) | async def test_notifies_on_exception(self) -> None: class TestEditorSlashCommand (line 2315) | class TestEditorSlashCommand: method test_editor_command_calls_action (line 2318) | async def test_editor_command_calls_action(self) -> None: class TestFetchThreadHistoryData (line 2326) | class TestFetchThreadHistoryData: method test_dict_messages_converted_to_message_objects (line 2329) | async def test_dict_messages_converted_to_message_objects(self) -> None: method test_server_mode_falls_back_to_checkpointer (line 2360) | async def test_server_mode_falls_back_to_checkpointer(self) -> None: class TestRemoteAgent (line 2396) | class TestRemoteAgent: method test_returns_instance_with_remote_agent (line 2399) | def test_returns_instance_with_remote_agent(self) -> None: method test_none_when_agent_is_none (line 2407) | def test_none_when_agent_is_none(self) -> None: method test_none_with_non_remote_agent (line 2411) | def test_none_with_non_remote_agent(self) -> None: method test_none_with_mock_spec_pregel (line 2417) | def test_none_with_mock_spec_pregel(self) -> None: class TestSlashCommandBypass (line 2424) | class TestSlashCommandBypass: method test_quit_bypasses_queue_when_agent_running (line 2427) | async def test_quit_bypasses_queue_when_agent_running(self) -> None: method test_quit_bypasses_queue_when_connecting (line 2441) | async def test_quit_bypasses_queue_when_connecting(self) -> None: method test_quit_bypasses_thread_switching (line 2455) | async def test_quit_bypasses_thread_switching(self) -> None: method test_q_alias_bypasses_queue (line 2468) | async def test_q_alias_bypasses_queue(self) -> None: method test_version_executes_during_connecting (line 2482) | async def test_version_executes_during_connecting(self) -> None: method test_version_queues_during_agent_running (line 2496) | async def test_version_queues_during_agent_running(self) -> None: method test_model_no_args_opens_selector_during_agent_running (line 2509) | async def test_model_no_args_opens_selector_during_agent_running(self)... method test_model_no_args_opens_selector_during_connecting (line 2523) | async def test_model_no_args_opens_selector_during_connecting(self) ->... method test_model_with_args_still_queues (line 2536) | async def test_model_with_args_still_queues(self) -> None: method test_threads_opens_selector_during_agent_running (line 2549) | async def test_threads_opens_selector_during_agent_running(self) -> None: method test_threads_opens_selector_during_connecting (line 2563) | async def test_threads_opens_selector_during_connecting(self) -> None: method test_threads_blocked_during_thread_switching (line 2576) | async def test_threads_blocked_during_thread_switching(self) -> None: method test_model_blocked_during_thread_switching (line 2590) | async def test_model_blocked_during_thread_switching(self) -> None: class TestBypassFrozensetDrift (line 2605) | class TestBypassFrozensetDrift: method _handled_commands (line 2615) | def _handled_commands() -> set[str]: method test_all_bypass_commands_are_handled (line 2632) | def test_all_bypass_commands_are_handled(self) -> None: method test_all_handled_commands_are_classified (line 2651) | def test_all_handled_commands_are_classified(self) -> None: class TestDeferredActions (line 2663) | class TestDeferredActions: method test_deferred_actions_drain_after_agent_cleanup (line 2666) | async def test_deferred_actions_drain_after_agent_cleanup(self) -> None: method test_deferred_actions_drain_after_shell_cleanup (line 2688) | async def test_deferred_actions_drain_after_shell_cleanup(self) -> None: method test_deferred_actions_not_drained_while_connecting (line 2709) | async def test_deferred_actions_not_drained_while_connecting(self) -> ... method test_deferred_actions_cleared_on_interrupt (line 2731) | async def test_deferred_actions_cleared_on_interrupt(self) -> None: method test_deferred_actions_cleared_on_server_failure (line 2747) | async def test_deferred_actions_cleared_on_server_failure(self) -> None: method test_failing_deferred_action_does_not_block_others (line 2767) | async def test_failing_deferred_action_does_not_block_others(self) -> ... method test_defer_action_deduplicates_by_kind (line 2794) | async def test_defer_action_deduplicates_by_kind(self) -> None: method test_can_bypass_queue_version_only_connecting (line 2815) | async def test_can_bypass_queue_version_only_connecting(self) -> None: method test_can_bypass_queue_bare_model_bypasses (line 2841) | async def test_can_bypass_queue_bare_model_bypasses(self) -> None: method test_can_bypass_queue_model_with_args_no_bypass (line 2849) | async def test_can_bypass_queue_model_with_args_no_bypass(self) -> None: method test_model_with_args_still_queues (line 2857) | async def test_model_with_args_still_queues(self) -> None: method test_side_effect_free_bypasses_queue (line 2870) | async def test_side_effect_free_bypasses_queue(self) -> None: method test_queued_commands_do_not_bypass (line 2878) | async def test_queued_commands_do_not_bypass(self) -> None: method test_can_bypass_queue_empty_string (line 2886) | async def test_can_bypass_queue_empty_string(self) -> None: method test_defer_action_mixed_kinds_preserves_ordering (line 2893) | async def test_defer_action_mixed_kinds_preserves_ordering(self) -> None: FILE: libs/cli/tests/unit_tests/test_approval.py class TestCheckExpandableCommand (line 14) | class TestCheckExpandableCommand: method test_shell_command_over_threshold_is_expandable (line 17) | def test_shell_command_over_threshold_is_expandable(self) -> None: method test_shell_command_at_threshold_not_expandable (line 23) | def test_shell_command_at_threshold_not_expandable(self) -> None: method test_shell_command_under_threshold_not_expandable (line 29) | def test_shell_command_under_threshold_not_expandable(self) -> None: method test_execute_tool_is_expandable (line 34) | def test_execute_tool_is_expandable(self) -> None: method test_non_shell_tool_not_expandable (line 40) | def test_non_shell_tool_not_expandable(self) -> None: method test_multiple_requests_not_expandable (line 46) | def test_multiple_requests_not_expandable(self) -> None: method test_missing_command_arg_not_expandable (line 57) | def test_missing_command_arg_not_expandable(self) -> None: class TestGetCommandDisplay (line 63) | class TestGetCommandDisplay: method test_short_command_shows_full (line 66) | def test_short_command_shows_full(self) -> None: method test_long_command_truncated_when_not_expanded (line 73) | def test_long_command_truncated_when_not_expanded(self) -> None: method test_long_command_shows_full_when_expanded (line 83) | def test_long_command_shows_full_when_expanded(self) -> None: method test_short_command_shows_full_even_when_expanded_true (line 92) | def test_short_command_shows_full_even_when_expanded_true(self) -> None: method test_command_at_boundary_plus_one_is_expandable (line 100) | def test_command_at_boundary_plus_one_is_expandable(self) -> None: method test_none_command_value_handled (line 109) | def test_none_command_value_handled(self) -> None: method test_integer_command_value_handled (line 116) | def test_integer_command_value_handled(self) -> None: method test_command_display_escapes_markup_tags (line 123) | def test_command_display_escapes_markup_tags(self) -> None: method test_command_display_with_hidden_unicode_shows_warning (line 130) | def test_command_display_with_hidden_unicode_shows_warning(self) -> None: class TestToggleExpand (line 141) | class TestToggleExpand: method test_toggle_changes_expanded_state (line 144) | def test_toggle_changes_expanded_state(self) -> None: method test_toggle_updates_widget_with_correct_content (line 157) | def test_toggle_updates_widget_with_correct_content(self) -> None: method test_toggle_does_nothing_for_non_expandable (line 178) | def test_toggle_does_nothing_for_non_expandable(self) -> None: method test_toggle_does_nothing_without_widget (line 187) | def test_toggle_does_nothing_without_widget(self) -> None: class TestToolSetConsistency (line 199) | class TestToolSetConsistency: method test_bash_tool_is_expandable (line 202) | def test_bash_tool_is_expandable(self) -> None: method test_bash_short_command_not_expandable (line 213) | def test_bash_short_command_not_expandable(self) -> None: method test_execute_tool_is_minimal (line 218) | def test_execute_tool_is_minimal(self) -> None: class TestSecurityWarnings (line 228) | class TestSecurityWarnings: method test_collects_hidden_unicode_warning (line 231) | def test_collects_hidden_unicode_warning(self) -> None: method test_collects_url_warning_for_suspicious_domain (line 237) | def test_collects_url_warning_for_suspicious_domain(self) -> None: class TestGetCommandDisplayGuard (line 247) | class TestGetCommandDisplayGuard: method test_raises_on_empty_action_requests (line 250) | def test_raises_on_empty_action_requests(self) -> None: class TestOptionOrdering (line 259) | class TestOptionOrdering: method test_decision_map_index_maps_to_correct_type (line 270) | def test_decision_map_index_maps_to_correct_type( method test_action_select_sets_correct_index (line 292) | def test_action_select_sets_correct_index( method test_key_binding_resolves_correct_decision (line 312) | async def test_key_binding_resolves_correct_decision( FILE: libs/cli/tests/unit_tests/test_args.py class TestInitialPromptArg (line 16) | class TestInitialPromptArg: method test_short_flag (line 19) | def test_short_flag(self) -> None: method test_long_flag (line 25) | def test_long_flag(self) -> None: method test_no_flag (line 31) | def test_no_flag(self) -> None: method test_with_other_args (line 37) | def test_with_other_args(self) -> None: method test_empty_string (line 46) | def test_empty_string(self) -> None: class TestResumeArg (line 53) | class TestResumeArg: method test_short_flag_no_value (line 56) | def test_short_flag_no_value(self) -> None: method test_short_flag_with_value (line 62) | def test_short_flag_with_value(self) -> None: method test_long_flag_no_value (line 68) | def test_long_flag_no_value(self) -> None: method test_long_flag_with_value (line 74) | def test_long_flag_with_value(self) -> None: method test_no_flag (line 80) | def test_no_flag(self) -> None: method test_with_other_args (line 86) | def test_with_other_args(self) -> None: method test_resume_with_message (line 95) | def test_resume_with_message(self) -> None: class TestTopLevelHelp (line 105) | class TestTopLevelHelp: method test_top_level_help_exits_cleanly (line 108) | def test_top_level_help_exits_cleanly(self) -> None: method test_help_subcommand_parses (line 127) | def test_help_subcommand_parses(self) -> None: class TestSubcommandHelpFlags (line 137) | class TestSubcommandHelpFlags: method _run_help (line 140) | def _run_help( method test_list_help (line 165) | def test_list_help(self) -> None: method test_reset_help (line 173) | def test_reset_help(self) -> None: method test_threads_list_help (line 181) | def test_threads_list_help(self) -> None: method test_threads_delete_help (line 189) | def test_threads_delete_help(self) -> None: class TestShortFlags (line 198) | class TestShortFlags: method test_short_agent_flag (line 201) | def test_short_agent_flag(self) -> None: method test_short_model_flag (line 207) | def test_short_model_flag(self) -> None: method test_agent_default_value (line 213) | def test_agent_default_value(self) -> None: method test_short_version_flag (line 219) | def test_short_version_flag(self) -> None: method test_short_auto_approve_flag (line 228) | def test_short_auto_approve_flag(self) -> None: method test_short_shell_allow_list_flag (line 234) | def test_short_shell_allow_list_flag(self) -> None: class TestQuietArg (line 241) | class TestQuietArg: method test_short_flag (line 244) | def test_short_flag(self) -> None: method test_long_flag (line 250) | def test_long_flag(self) -> None: method test_no_flag_defaults_false (line 256) | def test_no_flag_defaults_false(self) -> None: method test_combined_with_non_interactive (line 262) | def test_combined_with_non_interactive(self) -> None: method test_quiet_without_non_interactive_parses (line 269) | def test_quiet_without_non_interactive_parses(self) -> None: class TestNoMcpArg (line 281) | class TestNoMcpArg: method test_no_mcp_flag_parsed (line 284) | def test_no_mcp_flag_parsed(self) -> None: method test_no_mcp_default_false (line 290) | def test_no_mcp_default_false(self) -> None: method test_no_mcp_and_mcp_config_mutual_exclusion (line 296) | def test_no_mcp_and_mcp_config_mutual_exclusion(self) -> None: function test_default_agent_name_matches_canonical (line 314) | def test_default_agent_name_matches_canonical() -> None: class TestHelpScreenDrift (line 319) | class TestHelpScreenDrift: method test_all_parser_flags_appear_in_help (line 327) | def test_all_parser_flags_appear_in_help(self) -> None: method test_threads_list_flags_appear_in_help (line 359) | def test_threads_list_flags_appear_in_help(self) -> None: class TestJsonArg (line 394) | class TestJsonArg: method test_default_text (line 397) | def test_default_text(self) -> None: method test_json_shortcut (line 403) | def test_json_shortcut(self) -> None: method test_json_before_subcommand (line 409) | def test_json_before_subcommand(self) -> None: method test_json_after_subcommand (line 416) | def test_json_after_subcommand(self) -> None: method test_output_format_flag_removed (line 423) | def test_output_format_flag_removed(self) -> None: method test_json_after_nested_subcommand (line 432) | def test_json_after_nested_subcommand(self) -> None: FILE: libs/cli/tests/unit_tests/test_ask_user.py class _AskUserTestApp (line 18) | class _AskUserTestApp(App[None]): method __init__ (line 19) | def __init__(self, questions: list[Question]) -> None: method compose (line 23) | def compose(self) -> ComposeResult: class TestAskUserToolDisplay (line 27) | class TestAskUserToolDisplay: method test_format_single_question (line 30) | def test_format_single_question(self) -> None: method test_format_multiple_questions (line 42) | def test_format_multiple_questions(self) -> None: method test_format_empty_questions (line 59) | def test_format_empty_questions(self) -> None: method test_format_no_questions_key (line 64) | def test_format_no_questions_key(self) -> None: class TestAskUserMenu (line 69) | class TestAskUserMenu: method test_find_menu_logs_when_hierarchy_is_missing (line 70) | def test_find_menu_logs_when_hierarchy_is_missing( method test_text_input_receives_focus_on_mount (line 80) | async def test_text_input_receives_focus_on_mount(self) -> None: method test_multiple_choice_question_widget_receives_focus_on_mount (line 90) | async def test_multiple_choice_question_widget_receives_focus_on_mount( method test_text_question_submits_typed_answer (line 110) | async def test_text_question_submits_typed_answer(self) -> None: method test_escape_cancels_and_resolves_future (line 131) | async def test_escape_cancels_and_resolves_future(self) -> None: method test_multiple_choice_submits_without_text_input (line 150) | async def test_multiple_choice_submits_without_text_input(self) -> None: method test_multiple_choice_other_accepts_custom_text (line 175) | async def test_multiple_choice_other_accepts_custom_text(self) -> None: method test_enter_advances_sequentially_through_mc_questions (line 209) | async def test_enter_advances_sequentially_through_mc_questions(self) ... method test_active_question_has_visual_indicator (line 269) | async def test_active_question_has_visual_indicator(self) -> None: method test_tab_advances_to_next_question (line 286) | async def test_tab_advances_to_next_question(self) -> None: method test_tab_clamps_at_last_question (line 310) | async def test_tab_clamps_at_last_question(self) -> None: method test_tab_noop_for_single_question (line 333) | async def test_tab_noop_for_single_question(self) -> None: method test_previous_question_navigates_backward (line 346) | async def test_previous_question_navigates_backward(self) -> None: method test_previous_question_clamps_at_first (line 372) | async def test_previous_question_clamps_at_first(self) -> None: method test_help_text_shows_tab_hint_for_multiple (line 390) | async def test_help_text_shows_tab_hint_for_multiple(self) -> None: method test_help_text_omits_tab_hint_for_single (line 405) | async def test_help_text_omits_tab_hint_for_single(self) -> None: method test_required_label_shown_for_required_question (line 415) | async def test_required_label_shown_for_required_question(self) -> None: method test_required_label_hidden_for_optional_question (line 426) | async def test_required_label_hidden_for_optional_question(self) -> None: method test_required_is_true_by_default (line 439) | async def test_required_is_true_by_default(self) -> None: method test_optional_question_submits_with_empty_answer (line 451) | async def test_optional_question_submits_with_empty_answer(self) -> None: method test_required_question_blocks_empty_submit (line 472) | async def test_required_question_blocks_empty_submit(self) -> None: method test_up_from_other_input_selects_last_choice_directly (line 490) | async def test_up_from_other_input_selects_last_choice_directly(self) ... method test_return_to_mc_other_refocuses_input (line 522) | async def test_return_to_mc_other_refocuses_input(self) -> None: method test_cancel_after_submit_does_not_override_answer (line 558) | async def test_cancel_after_submit_does_not_override_answer(self) -> N... method test_submit_after_cancel_does_not_override_cancel (line 582) | async def test_submit_after_cancel_does_not_override_cancel(self) -> N... FILE: libs/cli/tests/unit_tests/test_ask_user_middleware.py function _extract_tool_message_content (line 21) | def _extract_tool_message_content(command: Command[object]) -> str: class TestValidateQuestions (line 32) | class TestValidateQuestions: method test_rejects_empty_questions (line 35) | def test_rejects_empty_questions(self) -> None: method test_rejects_empty_question_text (line 39) | def test_rejects_empty_question_text(self) -> None: method test_rejects_multiple_choice_without_choices (line 43) | def test_rejects_multiple_choice_without_choices(self) -> None: method test_rejects_text_question_with_choices (line 49) | def test_rejects_text_question_with_choices(self) -> None: method test_accepts_valid_question_set (line 61) | def test_accepts_valid_question_set(self) -> None: class TestParseAnswers (line 74) | class TestParseAnswers: method test_parses_answered_payload (line 77) | def test_parses_answered_payload(self) -> None: method test_cancelled_status_uses_cancelled_placeholder (line 86) | def test_cancelled_status_uses_cancelled_placeholder(self) -> None: method test_error_status_uses_error_placeholder (line 94) | def test_error_status_uses_error_placeholder(self) -> None: method test_malformed_payload_is_explicit_error (line 105) | def test_malformed_payload_is_explicit_error(self) -> None: method test_missing_answers_on_answered_status_is_explicit_error (line 116) | def test_missing_answers_on_answered_status_is_explicit_error(self) ->... method test_non_list_answers_payload_is_explicit_error (line 127) | def test_non_list_answers_payload_is_explicit_error(self) -> None: method test_unknown_status_is_explicit_error (line 138) | def test_unknown_status_is_explicit_error(self) -> None: method test_answer_count_mismatch_falls_back_to_no_answer (line 149) | def test_answer_count_mismatch_falls_back_to_no_answer(self) -> None: class TestWrapModelCall (line 163) | class TestWrapModelCall: method test_wrap_model_call_appends_system_prompt (line 166) | def test_wrap_model_call_appends_system_prompt(self) -> None: method test_wrap_model_call_creates_system_prompt_when_missing (line 186) | def test_wrap_model_call_creates_system_prompt_when_missing(self) -> N... method test_awrap_model_call_appends_system_prompt (line 203) | async def test_awrap_model_call_appends_system_prompt(self) -> None: FILE: libs/cli/tests/unit_tests/test_autocomplete.py class TestFuzzyScore (line 22) | class TestFuzzyScore: method test_exact_filename_match_at_start (line 25) | def test_exact_filename_match_at_start(self): method test_exact_filename_match_anywhere (line 30) | def test_exact_filename_match_anywhere(self): method test_word_boundary_match (line 35) | def test_word_boundary_match(self): method test_path_match_lower_than_filename (line 41) | def test_path_match_lower_than_filename(self): method test_no_match_returns_low_score (line 47) | def test_no_match_returns_low_score(self): method test_case_insensitive (line 52) | def test_case_insensitive(self): method test_shorter_paths_preferred (line 59) | def test_shorter_paths_preferred(self): method test_backslash_normalization (line 65) | def test_backslash_normalization(self): method test_mixed_separator_normalization (line 72) | def test_mixed_separator_normalization(self): class TestFuzzySearch (line 78) | class TestFuzzySearch: method sample_files (line 82) | def sample_files(self): method test_empty_query_returns_root_files_first (line 97) | def test_empty_query_returns_root_files_first(self, sample_files): method test_exact_match_ranked_first (line 104) | def test_exact_match_ranked_first(self, sample_files): method test_filters_dotfiles_by_default (line 109) | def test_filters_dotfiles_by_default(self, sample_files): method test_includes_dotfiles_when_query_starts_with_dot (line 114) | def test_includes_dotfiles_when_query_starts_with_dot(self, sample_fil... method test_respects_limit (line 119) | def test_respects_limit(self, sample_files): method test_filters_low_score_matches (line 124) | def test_filters_low_score_matches(self, sample_files): method test_utils_matches_multiple_files (line 129) | def test_utils_matches_multiple_files(self, sample_files): class TestHelperFunctions (line 136) | class TestHelperFunctions: method test_is_dotpath_detects_dotfiles (line 139) | def test_is_dotpath_detects_dotfiles(self): method test_is_dotpath_allows_normal_files (line 145) | def test_is_dotpath_allows_normal_files(self): method test_path_depth_counts_slashes (line 151) | def test_path_depth_counts_slashes(self): class TestSlashCommandController (line 159) | class TestSlashCommandController: method mock_view (line 163) | def mock_view(self): method controller (line 168) | def controller(self, mock_view): method test_can_handle_slash_prefix (line 172) | def test_can_handle_slash_prefix(self, controller): method test_cannot_handle_non_slash (line 178) | def test_cannot_handle_non_slash(self, controller): method test_filters_commands_by_prefix (line 184) | def test_filters_commands_by_prefix(self, controller, mock_view): method test_filters_version_command_by_prefix (line 193) | def test_filters_version_command_by_prefix(self, controller, mock_view): method test_shows_all_commands_on_slash_only (line 201) | def test_shows_all_commands_on_slash_only(self, controller, mock_view): method test_clears_on_no_match (line 209) | def test_clears_on_no_match(self, controller, mock_view): method test_reset_clears_state (line 219) | def test_reset_clears_state(self, controller, mock_view): method test_suggestions_return_after_reset (line 226) | def test_suggestions_return_after_reset(self, controller, mock_view): method test_hidden_keyword_match_continue (line 240) | def test_hidden_keyword_match_continue(self, controller, mock_view): method test_substring_description_match_exit (line 248) | def test_substring_description_match_exit(self, controller, mock_view): method test_substring_description_match_new (line 256) | def test_substring_description_match_new(self, controller, mock_view): method test_substring_name_match (line 264) | def test_substring_name_match(self, controller, mock_view): method test_true_fuzzy_match_via_misspelling (line 272) | def test_true_fuzzy_match_via_misspelling(self, controller, mock_view): method test_prefix_match_ranks_first (line 280) | def test_prefix_match_ranks_first(self, controller, mock_view): method test_no_match_clears (line 289) | def test_no_match_clears(self, controller, mock_view): method test_double_reset_is_safe (line 298) | def test_double_reset_is_safe(self, controller): class TestScoreCommand (line 306) | class TestScoreCommand: method score (line 310) | def score(search: str, cmd: str, desc: str, keywords: str = "") -> float: method test_prefix_returns_200 (line 314) | def test_prefix_returns_200(self): method test_substring_name_returns_150 (line 317) | def test_substring_name_returns_150(self): method test_substring_desc_word_boundary_returns_110 (line 320) | def test_substring_desc_word_boundary_returns_110(self): method test_substring_desc_mid_word_returns_90 (line 323) | def test_substring_desc_mid_word_returns_90(self): method test_no_match_returns_zero (line 327) | def test_no_match_returns_zero(self): method test_fuzzy_above_threshold (line 330) | def test_fuzzy_above_threshold(self): method test_hidden_keyword_prefix_match (line 334) | def test_hidden_keyword_prefix_match(self): method test_hidden_keyword_substring_match (line 339) | def test_hidden_keyword_substring_match(self): method test_hidden_keyword_ignored_when_empty (line 344) | def test_hidden_keyword_ignored_when_empty(self): method test_hidden_keyword_requires_min_length (line 347) | def test_hidden_keyword_requires_min_length(self): method test_tiers_ordering (line 351) | def test_tiers_ordering(self): class TestFuzzyFileControllerCanHandle (line 363) | class TestFuzzyFileControllerCanHandle: method mock_view (line 367) | def mock_view(self): method controller (line 372) | def controller(self, mock_view, tmp_path): method test_handles_at_symbol (line 376) | def test_handles_at_symbol(self, controller): method test_handles_at_mid_text (line 382) | def test_handles_at_mid_text(self, controller): method test_no_handle_without_at (line 387) | def test_no_handle_without_at(self, controller): method test_no_handle_at_after_cursor (line 392) | def test_no_handle_at_after_cursor(self, controller): method test_no_handle_space_after_at (line 396) | def test_no_handle_space_after_at(self, controller): method test_invalid_cursor_positions (line 401) | def test_invalid_cursor_positions(self, controller): class TestMultiCompletionManager (line 408) | class TestMultiCompletionManager: method mock_view (line 412) | def mock_view(self): method manager (line 417) | def manager(self, mock_view, tmp_path): method test_activates_slash_controller_for_slash (line 427) | def test_activates_slash_controller_for_slash(self, manager): method test_activates_file_controller_for_at (line 433) | def test_activates_file_controller_for_at(self, manager): method test_no_active_for_plain_text (line 439) | def test_no_active_for_plain_text(self, manager): method test_switches_controllers (line 444) | def test_switches_controllers(self, manager): method test_reset_clears_active (line 452) | def test_reset_clears_active(self, manager): method test_reactivates_after_reset (line 458) | def test_reactivates_after_reset(self, manager, mock_view): method test_double_reset_is_safe (line 472) | def test_double_reset_is_safe(self, manager): FILE: libs/cli/tests/unit_tests/test_charset.py class TestCharsetMode (line 24) | class TestCharsetMode: method test_charset_mode_values (line 27) | def test_charset_mode_values(self) -> None: method test_charset_mode_is_str_enum (line 33) | def test_charset_mode_is_str_enum(self) -> None: class TestGlyphs (line 39) | class TestGlyphs: method test_unicode_glyphs_are_unicode (line 42) | def test_unicode_glyphs_are_unicode(self) -> None: method test_ascii_glyphs_are_ascii (line 68) | def test_ascii_glyphs_are_ascii(self) -> None: method test_glyphs_frozen (line 112) | def test_glyphs_frozen(self) -> None: method test_glyphs_all_fields_present (line 117) | def test_glyphs_all_fields_present(self) -> None: class TestDetectCharsetMode (line 148) | class TestDetectCharsetMode: method setup_method (line 151) | def setup_method(self) -> None: method test_explicit_unicode_mode (line 156) | def test_explicit_unicode_mode(self) -> None: method test_explicit_ascii_mode (line 162) | def test_explicit_ascii_mode(self) -> None: method test_case_insensitive_mode (line 168) | def test_case_insensitive_mode(self) -> None: method test_auto_mode_with_utf_lang (line 176) | def test_auto_mode_with_utf_lang(self) -> None: method test_auto_mode_with_c_locale_falls_back_to_ascii (line 186) | def test_auto_mode_with_c_locale_falls_back_to_ascii(self) -> None: method test_auto_mode_with_utf_stdout_encoding (line 196) | def test_auto_mode_with_utf_stdout_encoding(self) -> None: class TestGetGlyphs (line 208) | class TestGetGlyphs: method setup_method (line 211) | def setup_method(self) -> None: method test_get_glyphs_returns_unicode_for_unicode_mode (line 216) | def test_get_glyphs_returns_unicode_for_unicode_mode(self) -> None: method test_get_glyphs_returns_ascii_for_ascii_mode (line 222) | def test_get_glyphs_returns_ascii_for_ascii_mode(self) -> None: method test_get_glyphs_caches_result (line 228) | def test_get_glyphs_caches_result(self) -> None: method test_reset_glyphs_cache_works (line 234) | def test_reset_glyphs_cache_works(self) -> None: class TestGlyphUsability (line 247) | class TestGlyphUsability: method test_spinner_frames_not_empty (line 250) | def test_spinner_frames_not_empty(self) -> None: method test_ascii_ellipsis_is_three_dots (line 255) | def test_ascii_ellipsis_is_three_dots(self) -> None: method test_unicode_ellipsis_is_single_char (line 259) | def test_unicode_ellipsis_is_single_char(self) -> None: method test_ascii_spinner_classic_frames (line 263) | def test_ascii_spinner_classic_frames(self) -> None: method test_unicode_box_drawing_characters (line 267) | def test_unicode_box_drawing_characters(self) -> None: method test_ascii_box_drawing_characters (line 274) | def test_ascii_box_drawing_characters(self) -> None: class TestGetBanner (line 282) | class TestGetBanner: method setup_method (line 285) | def setup_method(self) -> None: method test_get_banner_returns_unicode_for_unicode_mode (line 290) | def test_get_banner_returns_unicode_for_unicode_mode(self) -> None: method test_get_banner_returns_ascii_for_ascii_mode (line 297) | def test_get_banner_returns_ascii_for_ascii_mode(self) -> None: method test_get_banner_adds_local_install_suffix_for_editable (line 304) | def test_get_banner_adds_local_install_suffix_for_editable(self) -> None: method test_get_banner_adds_local_install_suffix_for_editable_ascii (line 312) | def test_get_banner_adds_local_install_suffix_for_editable_ascii(self)... method test_unicode_banner_contains_box_drawing_chars (line 319) | def test_unicode_banner_contains_box_drawing_chars(self) -> None: method test_ascii_banner_is_pure_ascii (line 325) | def test_ascii_banner_is_pure_ascii(self) -> None: class TestIsAsciiMode (line 331) | class TestIsAsciiMode: method setup_method (line 334) | def setup_method(self) -> None: method test_false_in_unicode_mode (line 339) | def test_false_in_unicode_mode(self) -> None: method test_true_in_ascii_mode (line 344) | def test_true_in_ascii_mode(self) -> None: FILE: libs/cli/tests/unit_tests/test_chat_input.py class TestCompletionOption (line 32) | class TestCompletionOption: method test_clicked_message_contains_index (line 35) | def test_clicked_message_contains_index(self) -> None: method test_init_stores_attributes (line 40) | def test_init_stores_attributes(self) -> None: method test_set_selected_updates_state (line 53) | def test_set_selected_updates_state(self) -> None: class TestCompletionPopup (line 70) | class TestCompletionPopup: method test_option_clicked_message_contains_index (line 73) | def test_option_clicked_message_contains_index(self) -> None: method test_init_state (line 78) | def test_init_state(self) -> None: class TestCompletionPopupIntegration (line 86) | class TestCompletionPopupIntegration: method test_update_suggestions_shows_popup (line 89) | async def test_update_suggestions_shows_popup(self) -> None: method test_update_suggestions_creates_option_widgets (line 113) | async def test_update_suggestions_creates_option_widgets(self) -> None: method test_empty_suggestions_hides_popup (line 135) | async def test_empty_suggestions_hides_popup(self) -> None: class TestCompletionOptionClick (line 161) | class TestCompletionOptionClick: method test_click_on_option_posts_message (line 164) | async def test_click_on_option_posts_message(self) -> None: class _ChatInputTestApp (line 207) | class _ChatInputTestApp(App[None]): method compose (line 210) | def compose(self) -> ComposeResult: class _RecordingApp (line 214) | class _RecordingApp(App[None]): method __init__ (line 217) | def __init__(self) -> None: method compose (line 221) | def compose(self) -> ComposeResult: method on_chat_input_submitted (line 224) | def on_chat_input_submitted(self, event: ChatInput.Submitted) -> None: class _ImagePasteApp (line 228) | class _ImagePasteApp(App[None]): method __init__ (line 231) | def __init__(self) -> None: method compose (line 235) | def compose(self) -> ComposeResult: class _ImagePasteRecordingApp (line 239) | class _ImagePasteRecordingApp(App[None]): method __init__ (line 242) | def __init__(self) -> None: method compose (line 247) | def compose(self) -> ComposeResult: method on_chat_input_submitted (line 250) | def on_chat_input_submitted(self, event: ChatInput.Submitted) -> None: function _pause_for_strip (line 254) | async def _pause_for_strip(pilot: Pilot[None]) -> None: function _prompt_text (line 260) | def _prompt_text(prompt: Static) -> str: class TestPromptIndicator (line 265) | class TestPromptIndicator: method test_prompt_shows_bang_in_shell_mode (line 268) | async def test_prompt_shows_bang_in_shell_mode(self) -> None: method test_prompt_shows_slash_in_command_mode (line 283) | async def test_prompt_shows_slash_in_command_mode(self) -> None: method test_prompt_reverts_to_default_on_normal_mode (line 295) | async def test_prompt_reverts_to_default_on_normal_mode(self) -> None: method test_mode_change_posts_message (line 313) | async def test_mode_change_posts_message(self) -> None: class TestHistoryNavigationFlag (line 333) | class TestHistoryNavigationFlag: method test_down_arrow_at_bottom_resets_navigating_flag (line 336) | async def test_down_arrow_at_bottom_resets_navigating_flag(self) -> None: method test_autocomplete_works_after_down_arrow (line 351) | async def test_autocomplete_works_after_down_arrow(self) -> None: method test_counter_resets_after_successful_recall (line 373) | async def test_counter_resets_after_successful_recall(self) -> None: method test_autocomplete_works_after_history_recall (line 391) | async def test_autocomplete_works_after_history_recall(self) -> None: method test_multiple_rapid_recalls_drain_counter (line 416) | async def test_multiple_rapid_recalls_drain_counter(self) -> None: method test_clear_text_suppresses_own_changed_event (line 435) | async def test_clear_text_suppresses_own_changed_event(self) -> None: method test_negative_counter_resets_with_warning (line 455) | async def test_negative_counter_resets_with_warning(self) -> None: class TestHistoryBoundaryNavigation (line 471) | class TestHistoryBoundaryNavigation: method test_up_arrow_only_triggers_at_cursor_start (line 474) | async def test_up_arrow_only_triggers_at_cursor_start(self) -> None: method test_up_arrow_triggers_at_cursor_zero (line 493) | async def test_up_arrow_triggers_at_cursor_zero(self) -> None: method test_down_arrow_navigates_from_start_when_in_history (line 513) | async def test_down_arrow_navigates_from_start_when_in_history(self) -... method test_down_arrow_does_not_trigger_at_non_end (line 536) | async def test_down_arrow_does_not_trigger_at_non_end(self) -> None: method test_down_arrow_at_end_triggers_history (line 558) | async def test_down_arrow_at_end_triggers_history(self) -> None: method test_up_at_middle_of_multiline_does_not_trigger (line 580) | async def test_up_at_middle_of_multiline_does_not_trigger(self) -> None: method test_in_history_allows_up_from_end (line 600) | async def test_in_history_allows_up_from_end(self) -> None: method test_in_history_resets_after_submission (line 621) | async def test_in_history_resets_after_submission(self) -> None: method test_in_history_resets_after_navigating_past_end (line 638) | async def test_in_history_resets_after_navigating_past_end(self) -> None: class TestCompletionPopupClickBubbling (line 660) | class TestCompletionPopupClickBubbling: method test_popup_receives_option_click_and_posts_message (line 663) | async def test_popup_receives_option_click_and_posts_message(self) -> ... class TestDismissCompletion (line 701) | class TestDismissCompletion: method test_dismiss_returns_false_when_no_suggestions (line 704) | async def test_dismiss_returns_false_when_no_suggestions(self) -> None: method test_dismiss_clears_popup_and_state (line 711) | async def test_dismiss_clears_popup_and_state(self) -> None: method test_dismiss_is_idempotent (line 738) | async def test_dismiss_is_idempotent(self) -> None: method test_completion_reappears_after_dismiss (line 753) | async def test_completion_reappears_after_dismiss(self) -> None: method test_popup_hide_cancels_pending_rebuild (line 788) | async def test_popup_hide_cancels_pending_rebuild(self) -> None: class TestModePrefixStripping (line 807) | class TestModePrefixStripping: method test_typing_bang_strips_prefix_and_sets_shell_mode (line 810) | async def test_typing_bang_strips_prefix_and_sets_shell_mode(self) -> ... method test_typing_slash_strips_prefix_and_sets_command_mode (line 823) | async def test_typing_slash_strips_prefix_and_sets_command_mode(self) ... method test_mode_stays_on_empty_text (line 836) | async def test_mode_stays_on_empty_text(self) -> None: method test_backspace_on_empty_exits_mode (line 853) | async def test_backspace_on_empty_exits_mode(self) -> None: method test_backspace_on_single_char_stays_in_mode (line 875) | async def test_backspace_on_single_char_stays_in_mode(self) -> None: method test_backspace_at_cursor_zero_with_text_exits_mode (line 902) | async def test_backspace_at_cursor_zero_with_text_exits_mode(self) -> ... method test_backspace_exit_mode_dismisses_completion (line 927) | async def test_backspace_exit_mode_dismisses_completion(self) -> None: method test_slash_completion_works_after_strip (line 948) | async def test_slash_completion_works_after_strip(self) -> None: method test_submission_prepends_shell_prefix (line 969) | async def test_submission_prepends_shell_prefix(self) -> None: method test_submission_prepends_command_prefix (line 991) | async def test_submission_prepends_command_prefix(self) -> None: method test_mode_resets_after_submission (line 1019) | async def test_mode_resets_after_submission(self) -> None: method test_mode_sticky_during_typing (line 1037) | async def test_mode_sticky_during_typing(self) -> None: method test_shell_mode_does_not_trigger_completions (line 1055) | async def test_shell_mode_does_not_trigger_completions(self) -> None: method test_submission_does_not_double_prefix (line 1067) | async def test_submission_does_not_double_prefix(self) -> None: class TestExitModePreservesText (line 1087) | class TestExitModePreservesText: method test_exit_shell_mode_keeps_text (line 1090) | async def test_exit_shell_mode_keeps_text(self) -> None: method test_exit_command_mode_keeps_text (line 1108) | async def test_exit_command_mode_keeps_text(self) -> None: class TestHistoryRecallModeReset (line 1129) | class TestHistoryRecallModeReset: method test_history_non_prefixed_entry_resets_shell_mode (line 1132) | async def test_history_non_prefixed_entry_resets_shell_mode(self) -> N... method test_history_prefixed_entry_keeps_mode (line 1168) | async def test_history_prefixed_entry_keeps_mode(self) -> None: method test_history_non_prefixed_entry_resets_command_mode (line 1193) | async def test_history_non_prefixed_entry_resets_command_mode(self) ->... class TestSlashCompletionCursorMapping (line 1225) | class TestSlashCompletionCursorMapping: method test_tab_completion_mid_token_preserves_suffix (line 1228) | async def test_tab_completion_mid_token_preserves_suffix(self) -> None: method test_click_completion_mid_token_preserves_suffix (line 1251) | async def test_click_completion_mid_token_preserves_suffix(self) -> None: method test_tab_completion_at_end_replaces_whole_token (line 1272) | async def test_tab_completion_at_end_replaces_whole_token(self) -> None: method test_normal_mode_replace_is_unaffected (line 1292) | async def test_normal_mode_replace_is_unaffected(self) -> None: class TestHistorySlashPrefixRecall (line 1310) | class TestHistorySlashPrefixRecall: method test_history_slash_prefixed_entry_enters_command_mode (line 1313) | async def test_history_slash_prefixed_entry_enters_command_mode(self) ... class TestCompletionIndexToTextIndex (line 1337) | class TestCompletionIndexToTextIndex: method test_negative_mapped_index_clamps_to_zero (line 1340) | async def test_negative_mapped_index_clamps_to_zero(self) -> None: method test_overflow_index_clamps_to_text_length (line 1355) | async def test_overflow_index_clamps_to_text_length(self) -> None: method test_normal_mode_passes_through (line 1368) | async def test_normal_mode_passes_through(self) -> None: class TestHistoryRecallSuppressesCompletions (line 1380) | class TestHistoryRecallSuppressesCompletions: method test_history_recall_does_not_trigger_completions (line 1383) | async def test_history_recall_does_not_trigger_completions(self) -> None: class TestDroppedImagePaste (line 1399) | class TestDroppedImagePaste: method test_forward_delete_removes_placeholder (line 1402) | async def test_forward_delete_removes_placeholder(self, tmp_path) -> N... method test_backspace_removes_full_image_placeholder (line 1431) | async def test_backspace_removes_full_image_placeholder(self, tmp_path... method test_readding_after_delete_restarts_image_counter (line 1455) | async def test_readding_after_delete_restarts_image_counter(self, tmp_... method test_handle_external_paste_attaches_dropped_image (line 1482) | async def test_handle_external_paste_attaches_dropped_image(self, tmp_... method test_handle_external_paste_attaches_unquoted_path_with_spaces (line 1501) | async def test_handle_external_paste_attaches_unquoted_path_with_spaces( method test_handle_external_paste_inserts_plain_text (line 1522) | async def test_handle_external_paste_inserts_plain_text(self) -> None: method test_paste_image_path_attaches_image_and_inserts_placeholder (line 1535) | async def test_paste_image_path_attaches_image_and_inserts_placeholder( method test_paste_non_image_path_keeps_original_text (line 1556) | async def test_paste_non_image_path_keeps_original_text(self, tmp_path... method test_inline_quoted_path_payload_rewrites_to_placeholder (line 1572) | async def test_inline_quoted_path_payload_rewrites_to_placeholder( method test_key_burst_quoted_path_rewrites_without_showing_raw_path (line 1594) | async def test_key_burst_quoted_path_rewrites_without_showing_raw_path( method test_submit_absolute_path_without_paste_event_attaches_image (line 1627) | async def test_submit_absolute_path_without_paste_event_attaches_image( method test_submit_absolute_path_with_spaces_stays_normal_mode (line 1655) | async def test_submit_absolute_path_with_spaces_stays_normal_mode( method test_submit_absolute_path_with_spaces_and_trailing_text (line 1683) | async def test_submit_absolute_path_with_spaces_and_trailing_text( method test_submit_leading_path_with_trailing_text_attaches_image (line 1710) | async def test_submit_leading_path_with_trailing_text_attaches_image( method test_submit_falls_back_to_leading_image_when_full_path_non_image (line 1736) | async def test_submit_falls_back_to_leading_image_when_full_path_non_i... method test_submit_leading_path_handles_unicode_space_variants (line 1765) | async def test_submit_leading_path_handles_unicode_space_variants( method test_sync_resumes_after_submit_skip (line 1793) | async def test_sync_resumes_after_submit_skip(self, tmp_path) -> None: method test_submit_recovers_if_command_mode_already_stripped_path (line 1824) | async def test_submit_recovers_if_command_mode_already_stripped_path( function _make_mp4_bytes (line 1853) | def _make_mp4_bytes() -> bytes: class TestDroppedVideoPaste (line 1864) | class TestDroppedVideoPaste: method test_paste_video_attaches_and_inserts_placeholder (line 1867) | async def test_paste_video_attaches_and_inserts_placeholder( method test_backspace_removes_video_placeholder (line 1885) | async def test_backspace_removes_video_placeholder(self, tmp_path: Pat... method test_forward_delete_removes_video_placeholder (line 1906) | async def test_forward_delete_removes_video_placeholder( method test_mixed_image_and_video_drop (line 1930) | async def test_mixed_image_and_video_drop(self, tmp_path: Path) -> None: class TestBackslashEnterNewline (line 1957) | class TestBackslashEnterNewline: method test_backslash_then_enter_inserts_newline (line 1965) | async def test_backslash_then_enter_inserts_newline(self) -> None: method test_backslash_alone_inserts_normally (line 1984) | async def test_backslash_alone_inserts_normally(self) -> None: method test_backslash_then_letter_inserts_both (line 1997) | async def test_backslash_then_letter_inserts_both(self) -> None: method test_backslash_enter_on_empty_prompt_does_not_submit (line 2011) | async def test_backslash_enter_on_empty_prompt_does_not_submit(self) -... method test_backslash_then_slow_enter_submits (line 2027) | async def test_backslash_then_slow_enter_submits( class TestVSCodeSpaceWorkaround (line 2052) | class TestVSCodeSpaceWorkaround: method test_space_with_none_character_inserts_space (line 2059) | async def test_space_with_none_character_inserts_space(self) -> None: method test_normal_space_still_works (line 2076) | async def test_normal_space_still_works(self) -> None: class TestCtrlUDeleteToLineStart (line 2093) | class TestCtrlUDeleteToLineStart: method test_ctrl_u_deletes_to_line_start (line 2096) | async def test_ctrl_u_deletes_to_line_start(self) -> None: method test_ctrl_u_at_end_of_line_clears_line (line 2116) | async def test_ctrl_u_at_end_of_line_clears_line(self) -> None: method test_ctrl_u_on_empty_input_is_noop (line 2133) | async def test_ctrl_u_on_empty_input_is_noop(self) -> None: method test_ctrl_u_at_start_of_line_is_noop (line 2147) | async def test_ctrl_u_at_start_of_line_is_noop(self) -> None: method test_ctrl_u_multiline_only_affects_current_line (line 2166) | async def test_ctrl_u_multiline_only_affects_current_line(self) -> None: class _TextAreaTypingApp (line 2187) | class _TextAreaTypingApp(App[None]): method __init__ (line 2190) | def __init__(self) -> None: method compose (line 2195) | def compose(self) -> ComposeResult: method on_chat_text_area_typing (line 2198) | def on_chat_text_area_typing( method on_chat_input_typing (line 2204) | def on_chat_input_typing( class TestChatTextAreaTypingEmission (line 2211) | class TestChatTextAreaTypingEmission: method test_printable_key_emits_typing (line 2214) | async def test_printable_key_emits_typing(self) -> None: method test_backspace_emits_typing (line 2228) | async def test_backspace_emits_typing(self) -> None: method test_enter_does_not_emit_typing (line 2243) | async def test_enter_does_not_emit_typing(self) -> None: class TestChatInputTypingBubble (line 2257) | class TestChatInputTypingBubble: method test_typing_bubbles_to_chat_input (line 2260) | async def test_typing_bubbles_to_chat_input(self) -> None: FILE: libs/cli/tests/unit_tests/test_command_registry.py class TestCommandIntegrity (line 20) | class TestCommandIntegrity: method test_names_start_with_slash (line 23) | def test_names_start_with_slash(self) -> None: method test_aliases_start_with_slash (line 27) | def test_aliases_start_with_slash(self) -> None: method test_alphabetically_sorted (line 34) | def test_alphabetically_sorted(self) -> None: method test_no_duplicate_names (line 38) | def test_no_duplicate_names(self) -> None: method test_no_duplicate_aliases (line 42) | def test_no_duplicate_aliases(self) -> None: class TestBypassTiers (line 52) | class TestBypassTiers: method test_tiers_mutually_exclusive (line 55) | def test_tiers_mutually_exclusive(self) -> None: method test_all_classified_is_union (line 67) | def test_all_classified_is_union(self) -> None: method test_aliases_in_correct_tier (line 76) | def test_aliases_in_correct_tier(self) -> None: method test_every_command_classified (line 80) | def test_every_command_classified(self) -> None: class TestSlashCommands (line 89) | class TestSlashCommands: method test_length_matches_commands (line 92) | def test_length_matches_commands(self) -> None: method test_tuple_format (line 95) | def test_tuple_format(self) -> None: method test_excludes_aliases (line 105) | def test_excludes_aliases(self) -> None: class TestHelpBodyDrift (line 114) | class TestHelpBodyDrift: method test_help_body_lists_all_commands (line 123) | def test_help_body_lists_all_commands(self) -> None: FILE: libs/cli/tests/unit_tests/test_compact_tool.py class TestHITLGating (line 14) | class TestHITLGating: method test_hitl_gating_when_enabled (line 17) | def test_hitl_gating_when_enabled(self) -> None: method test_hitl_gating_when_disabled (line 25) | def test_hitl_gating_when_disabled(self) -> None: class TestDisplayFormatting (line 34) | class TestDisplayFormatting: method test_display_formatting (line 37) | def test_display_formatting(self) -> None: FILE: libs/cli/tests/unit_tests/test_config.py class TestProjectRootDetection (line 39) | class TestProjectRootDetection: method test_find_project_root_with_git (line 42) | def test_find_project_root_with_git(self, tmp_path: Path) -> None: method test_find_project_root_no_git (line 58) | def test_find_project_root_no_git(self, tmp_path: Path) -> None: method test_find_project_root_nested_git (line 67) | def test_find_project_root_nested_git(self, tmp_path: Path) -> None: class TestProjectContext (line 83) | class TestProjectContext: method test_from_user_cwd_uses_explicit_path_not_process_cwd (line 86) | def test_from_user_cwd_uses_explicit_path_not_process_cwd( method test_get_server_project_context_from_env_mapping (line 105) | def test_get_server_project_context_from_env_mapping(self, tmp_path: P... class TestProjectAgentMdFinding (line 123) | class TestProjectAgentMdFinding: method test_find_agent_md_in_deepagents_dir (line 126) | def test_find_agent_md_in_deepagents_dir(self, tmp_path: Path) -> None: method test_find_agent_md_in_root (line 141) | def test_find_agent_md_in_root(self, tmp_path: Path) -> None: method test_both_agent_md_files_combined (line 154) | def test_both_agent_md_files_combined(self, tmp_path: Path) -> None: method test_find_agent_md_not_found (line 174) | def test_find_agent_md_not_found(self, tmp_path: Path) -> None: method test_skips_paths_with_permission_errors (line 182) | def test_skips_paths_with_permission_errors(self, tmp_path: Path) -> N... class TestSettingsGetProjectAgentMdPath (line 205) | class TestSettingsGetProjectAgentMdPath: method test_returns_empty_list_when_no_project_root (line 208) | def test_returns_empty_list_when_no_project_root(self) -> None: method test_returns_existing_paths (line 214) | def test_returns_existing_paths(self, tmp_path: Path) -> None: method test_returns_empty_when_no_agents_md_files (line 230) | def test_returns_empty_when_no_agents_md_files(self, tmp_path: Path) -... class TestNewlineShortcut (line 237) | class TestNewlineShortcut: method test_returns_option_enter_on_macos (line 240) | def test_returns_option_enter_on_macos(self) -> None: method test_returns_ctrl_j_on_non_macos (line 245) | def test_returns_ctrl_j_on_non_macos(self) -> None: class TestValidateModelCapabilities (line 251) | class TestValidateModelCapabilities: method test_model_without_profile_attribute_warns (line 255) | def test_model_without_profile_attribute_warns(self, mock_console: Moc... method test_model_with_none_profile_warns (line 266) | def test_model_with_none_profile_warns(self, mock_console: Mock) -> None: method test_model_with_tool_calling_false_exits (line 278) | def test_model_with_tool_calling_false_exits(self, mock_console: Mock)... method test_model_with_tool_calling_true_passes (line 294) | def test_model_with_tool_calling_true_passes(self, mock_console: Mock)... method test_model_with_tool_calling_none_passes (line 304) | def test_model_with_tool_calling_none_passes(self, mock_console: Mock)... method test_model_with_limited_context_warns (line 314) | def test_model_with_limited_context_warns(self, mock_console: Mock) ->... method test_model_with_adequate_context_passes (line 328) | def test_model_with_adequate_context_passes(self, mock_console: Mock) ... method test_model_without_max_input_tokens_passes (line 338) | def test_model_without_max_input_tokens_passes(self, mock_console: Moc... method test_model_with_zero_max_input_tokens_passes (line 348) | def test_model_with_zero_max_input_tokens_passes(self, mock_console: M... method test_model_with_empty_profile_passes (line 359) | def test_model_with_empty_profile_passes(self, mock_console: Mock) -> ... class TestAgentsAliasDirectories (line 369) | class TestAgentsAliasDirectories: method test_user_agents_dir (line 372) | def test_user_agents_dir(self) -> None: method test_get_user_agent_skills_dir (line 378) | def test_get_user_agent_skills_dir(self) -> None: method test_get_project_agent_skills_dir_with_project (line 384) | def test_get_project_agent_skills_dir_with_project(self, tmp_path: Pat... method test_get_project_agent_skills_dir_without_project (line 395) | def test_get_project_agent_skills_dir_without_project(self, tmp_path: ... class TestCreateModelProfileExtraction (line 405) | class TestCreateModelProfileExtraction: method test_extracts_context_limit_from_profile (line 414) | def test_extracts_context_limit_from_profile( method test_handles_missing_profile_gracefully (line 426) | def test_handles_missing_profile_gracefully( method test_handles_none_profile (line 437) | def test_handles_none_profile(self, mock_init_chat_model: Mock) -> None: method test_handles_non_dict_profile (line 447) | def test_handles_non_dict_profile(self, mock_init_chat_model: Mock) ->... method test_handles_non_int_max_input_tokens (line 457) | def test_handles_non_int_max_input_tokens(self, mock_init_chat_model: ... method test_handles_missing_max_input_tokens_key (line 467) | def test_handles_missing_max_input_tokens_key( class TestCreateModelProfileOverrides (line 479) | class TestCreateModelProfileOverrides: method test_profile_override_sets_context_limit (line 483) | def test_profile_override_sets_context_limit( method test_per_model_profile_override_takes_precedence (line 503) | def test_per_model_profile_override_takes_precedence( method test_no_profile_override_preserves_original (line 526) | def test_no_profile_override_preserves_original( method test_profile_override_on_model_without_profile (line 541) | def test_profile_override_on_model_without_profile( method test_profile_override_preserves_non_overridden_keys (line 560) | def test_profile_override_preserves_non_overridden_keys( method test_profile_override_when_profile_is_none (line 580) | def test_profile_override_when_profile_is_none( method test_profile_override_logs_warning_on_frozen_model (line 600) | def test_profile_override_logs_warning_on_frozen_model( class TestCreateModelCLIProfileOverrides (line 635) | class TestCreateModelCLIProfileOverrides: method test_cli_profile_override_sets_context_limit (line 639) | def test_cli_profile_override_sets_context_limit( method test_cli_profile_override_beats_config_toml (line 659) | def test_cli_profile_override_beats_config_toml( method test_cli_profile_override_preserves_other_keys (line 683) | def test_cli_profile_override_preserves_other_keys( method test_cli_profile_override_on_model_without_profile (line 703) | def test_cli_profile_override_on_model_without_profile( method test_cli_profile_override_raises_on_frozen_model (line 722) | def test_cli_profile_override_raises_on_frozen_model( class TestParseShellAllowList (line 748) | class TestParseShellAllowList: method test_none_input_returns_none (line 751) | def test_none_input_returns_none(self) -> None: method test_empty_string_returns_none (line 756) | def test_empty_string_returns_none(self) -> None: method test_recommended_only (line 761) | def test_recommended_only(self) -> None: method test_recommended_case_insensitive (line 766) | def test_recommended_case_insensitive(self) -> None: method test_custom_commands_only (line 772) | def test_custom_commands_only(self) -> None: method test_custom_commands_with_whitespace (line 777) | def test_custom_commands_with_whitespace(self) -> None: method test_recommended_merged_with_custom_commands (line 782) | def test_recommended_merged_with_custom_commands(self) -> None: method test_custom_commands_before_recommended (line 788) | def test_custom_commands_before_recommended(self) -> None: method test_duplicate_removal (line 795) | def test_duplicate_removal(self) -> None: method test_duplicate_removal_with_recommended (line 800) | def test_duplicate_removal_with_recommended(self) -> None: method test_all_returns_sentinel (line 816) | def test_all_returns_sentinel(self) -> None: method test_all_case_insensitive (line 821) | def test_all_case_insensitive(self) -> None: method test_all_mixed_with_commands_raises (line 827) | def test_all_mixed_with_commands_raises(self) -> None: method test_all_mixed_case_insensitive_raises (line 832) | def test_all_mixed_case_insensitive_raises(self) -> None: method test_empty_commands_ignored (line 837) | def test_empty_commands_ignored(self) -> None: class TestGetLangsmithProjectName (line 843) | class TestGetLangsmithProjectName: method test_returns_none_without_api_key (line 846) | def test_returns_none_without_api_key(self) -> None: method test_returns_none_without_tracing (line 856) | def test_returns_none_without_tracing(self) -> None: method test_returns_project_from_settings (line 866) | def test_returns_project_from_settings(self) -> None: method test_falls_back_to_env_project (line 880) | def test_falls_back_to_env_project(self) -> None: method test_falls_back_to_default (line 894) | def test_falls_back_to_default(self) -> None: method test_accepts_langchain_api_key (line 907) | def test_accepts_langchain_api_key(self) -> None: class TestFetchLangsmithProjectUrl (line 922) | class TestFetchLangsmithProjectUrl: method setup_method (line 925) | def setup_method(self) -> None: method test_returns_url_on_success (line 929) | def test_returns_url_on_success(self) -> None: method test_returns_none_on_error (line 941) | def test_returns_none_on_error(self) -> None: method test_returns_none_on_project_not_found (line 949) | def test_returns_none_on_project_not_found(self) -> None: method test_returns_none_on_unexpected_exception (line 961) | def test_returns_none_on_unexpected_exception(self) -> None: method test_returns_none_when_lookup_times_out (line 971) | def test_returns_none_when_lookup_times_out(self) -> None: method test_returns_none_when_url_is_none (line 987) | def test_returns_none_when_url_is_none(self) -> None: method test_caches_result_after_first_call (line 999) | def test_caches_result_after_first_call(self) -> None: method test_retries_after_failure (line 1014) | def test_retries_after_failure(self) -> None: method test_retries_when_url_is_none (line 1025) | def test_retries_when_url_is_none(self) -> None: method test_different_project_name_fetches_again (line 1040) | def test_different_project_name_fetches_again(self) -> None: class TestBuildLangsmithThreadUrl (line 1062) | class TestBuildLangsmithThreadUrl: method setup_method (line 1065) | def setup_method(self) -> None: method test_returns_url_when_configured (line 1069) | def test_returns_url_when_configured(self) -> None: method test_strips_trailing_slash (line 1090) | def test_strips_trailing_slash(self) -> None: method test_returns_none_when_no_project_name (line 1111) | def test_returns_none_when_no_project_name(self) -> None: method test_returns_none_when_fetch_fails (line 1121) | def test_returns_none_when_fetch_fails(self) -> None: class TestGetProviderKwargsConfigFallback (line 1136) | class TestGetProviderKwargsConfigFallback: method setup_method (line 1139) | def setup_method(self) -> None: method test_returns_base_url_from_config (line 1143) | def test_returns_base_url_from_config(self, tmp_path: Path) -> None: method test_returns_api_key_from_config (line 1161) | def test_returns_api_key_from_config(self, tmp_path: Path) -> None: method test_omits_api_key_when_env_not_set (line 1178) | def test_omits_api_key_when_env_not_set(self, tmp_path: Path) -> None: method test_returns_empty_for_unknown_config_provider (line 1194) | def test_returns_empty_for_unknown_config_provider(self) -> None: method test_unconfigured_providers_return_empty (line 1199) | def test_unconfigured_providers_return_empty(self) -> None: method test_merges_config_params (line 1207) | def test_merges_config_params(self, tmp_path: Path) -> None: method test_passes_model_name_for_per_model_params (line 1231) | def test_passes_model_name_for_per_model_params(self, tmp_path: Path) ... method test_model_name_none_uses_provider_params (line 1252) | def test_model_name_none_uses_provider_params(self, tmp_path: Path) ->... method test_base_url_and_api_key_override_config_params (line 1270) | def test_base_url_and_api_key_override_config_params(self, tmp_path: P... class TestOpenRouterHeaders (line 1292) | class TestOpenRouterHeaders: method setup_method (line 1295) | def setup_method(self) -> None: method test_injects_attribution_kwargs (line 1299) | def test_injects_attribution_kwargs(self) -> None: method test_per_model_attribution_overrides_defaults (line 1306) | def test_per_model_attribution_overrides_defaults(self, tmp_path: Path... method test_no_attribution_for_other_providers (line 1325) | def test_no_attribution_for_other_providers(self) -> None: class TestCreateModelFromClass (line 1332) | class TestCreateModelFromClass: method test_raises_on_invalid_class_path_format (line 1335) | def test_raises_on_invalid_class_path_format(self) -> None: method test_raises_on_import_error (line 1342) | def test_raises_on_import_error(self) -> None: method test_raises_when_class_not_found_in_module (line 1351) | def test_raises_when_class_not_found_in_module(self) -> None: method test_raises_when_not_base_chat_model_subclass (line 1358) | def test_raises_when_not_base_chat_model_subclass(self) -> None: method test_instantiates_valid_subclass (line 1366) | def test_instantiates_valid_subclass(self) -> None: method test_raises_on_instantiation_error (line 1411) | def test_raises_on_instantiation_error(self) -> None: class TestCreateModelWithCustomClass (line 1435) | class TestCreateModelWithCustomClass: method setup_method (line 1438) | def setup_method(self) -> None: method test_create_model_uses_class_path (line 1442) | def test_create_model_uses_class_path(self, tmp_path: Path) -> None: method test_create_model_falls_through_without_class_path (line 1479) | def test_create_model_falls_through_without_class_path( class TestCreateModelExtraKwargs (line 1510) | class TestCreateModelExtraKwargs: method test_extra_kwargs_passed_to_model (line 1514) | def test_extra_kwargs_passed_to_model(self, mock_init_chat_model: Mock... method test_extra_kwargs_override_config (line 1526) | def test_extra_kwargs_override_config( method test_none_extra_kwargs_is_noop (line 1557) | def test_none_extra_kwargs_is_noop(self, mock_init_chat_model: Mock) -... method test_empty_extra_kwargs_is_noop (line 1567) | def test_empty_extra_kwargs_is_noop(self, mock_init_chat_model: Mock) ... class TestCreateModelEdgeCaseParsing (line 1577) | class TestCreateModelEdgeCaseParsing: method test_leading_colon_treated_as_bare_model (line 1581) | def test_leading_colon_treated_as_bare_model( method test_trailing_colon_raises_error (line 1598) | def test_trailing_colon_raises_error(self) -> None: method test_empty_string_uses_default (line 1605) | def test_empty_string_uses_default( class TestCreateModelViaInitImportError (line 1618) | class TestCreateModelViaInitImportError: method test_missing_package_error (line 1622) | def test_missing_package_error(self, mock_init: Mock) -> None: method test_installed_but_broken_import (line 1637) | def test_installed_but_broken_import(self, mock_init: Mock) -> None: method test_installed_but_broken_includes_original_error (line 1652) | def test_installed_but_broken_includes_original_error( method test_unknown_provider_fallback_package_name (line 1665) | def test_unknown_provider_fallback_package_name(self, mock_init: Mock)... method test_find_spec_raises_falls_back_to_missing (line 1678) | def test_find_spec_raises_falls_back_to_missing(self, mock_init: Mock)... class TestDetectProvider (line 1694) | class TestDetectProvider: method test_detect_known_patterns (line 1715) | def test_detect_known_patterns(self, model_name: str, expected: str | ... method test_claude_falls_back_to_vertex_when_no_anthropic (line 1727) | def test_claude_falls_back_to_vertex_when_no_anthropic(self) -> None: method test_gemini_falls_back_to_vertex_when_no_google (line 1737) | def test_gemini_falls_back_to_vertex_when_no_google(self) -> None: method test_gemini_prefers_google_genai_when_both_available (line 1746) | def test_gemini_prefers_google_genai_when_both_available(self) -> None: method test_case_insensitive (line 1758) | def test_case_insensitive(self) -> None: class TestLazyModuleAttributes (line 1768) | class TestLazyModuleAttributes: method test_getattr_returns_settings (line 1771) | def test_getattr_returns_settings(self) -> None: method test_getattr_returns_console (line 1778) | def test_getattr_returns_console(self) -> None: method test_getattr_raises_for_unknown (line 1787) | def test_getattr_raises_for_unknown(self) -> None: method test_ensure_bootstrap_is_idempotent (line 1794) | def test_ensure_bootstrap_is_idempotent(self) -> None: method test_ensure_bootstrap_marks_done_on_failure (line 1803) | def test_ensure_bootstrap_marks_done_on_failure(self) -> None: method test_get_settings_returns_same_instance (line 1823) | def test_get_settings_returns_same_instance(self) -> None: method test_ensure_bootstrap_langsmith_override (line 1831) | def test_ensure_bootstrap_langsmith_override( method test_ensure_bootstrap_preserves_original_langsmith (line 1863) | def test_ensure_bootstrap_preserves_original_langsmith( class TestFindDotenvFromStartPath (line 1896) | class TestFindDotenvFromStartPath: method test_finds_env_in_start_dir (line 1899) | def test_finds_env_in_start_dir(self, tmp_path: Path) -> None: method test_finds_env_in_parent (line 1907) | def test_finds_env_in_parent(self, tmp_path: Path) -> None: method test_returns_none_when_no_env (line 1917) | def test_returns_none_when_no_env(self, tmp_path: Path) -> None: method test_continues_past_oserror_on_intermediate_dir (line 1929) | def test_continues_past_oserror_on_intermediate_dir(self, tmp_path: Pa... FILE: libs/cli/tests/unit_tests/test_configurable_model.py function _make_model (line 19) | def _make_model(name: str) -> MagicMock: function _make_request (line 28) | def _make_request( function _make_response (line 48) | def _make_response() -> ModelResponse[Any]: function _make_model_result (line 53) | def _make_model_result( class TestNoOverride (line 74) | class TestNoOverride: method test_no_context (line 77) | def test_no_context(self) -> None: method test_empty_context (line 85) | def test_empty_context(self) -> None: method test_same_model_spec (line 93) | def test_same_model_spec(self) -> None: method test_provider_prefixed_spec_matches (line 104) | def test_provider_prefixed_spec_matches(self) -> None: method test_none_runtime (line 115) | def test_none_runtime(self) -> None: method test_non_dict_context_ignored (line 128) | def test_non_dict_context_ignored(self) -> None: method test_empty_model_params (line 142) | def test_empty_model_params(self) -> None: class TestModelSwap (line 154) | class TestModelSwap: method test_different_model_swapped (line 157) | def test_different_model_swapped(self) -> None: method test_async_model_swapped (line 171) | async def test_async_model_swapped(self) -> None: method test_class_path_provider_swapped (line 187) | def test_class_path_provider_swapped(self) -> None: method test_create_model_error_falls_back_to_original (line 204) | def test_create_model_error_falls_back_to_original(self) -> None: class TestAnthropicSettingsStripped (line 222) | class TestAnthropicSettingsStripped: method test_cache_control_stripped_on_swap (line 230) | def test_cache_control_stripped_on_swap(self) -> None: method test_cache_control_preserved_for_anthropic_swap (line 251) | def test_cache_control_preserved_for_anthropic_swap(self) -> None: method test_other_settings_preserved_on_swap (line 275) | def test_other_settings_preserved_on_swap(self) -> None: method test_async_cache_control_stripped (line 299) | async def test_async_cache_control_stripped(self) -> None: method test_swap_with_model_params_and_cache_control (line 323) | def test_swap_with_model_params_and_cache_control(self) -> None: method test_only_cache_control_results_in_empty_settings (line 354) | def test_only_cache_control_results_in_empty_settings(self) -> None: class TestIsAnthropicModel (line 376) | class TestIsAnthropicModel: method test_returns_true_for_anthropic (line 379) | def test_returns_true_for_anthropic(self) -> None: method test_returns_false_for_non_anthropic (line 385) | def test_returns_false_for_non_anthropic(self) -> None: method test_returns_false_for_plain_object (line 388) | def test_returns_false_for_plain_object(self) -> None: method test_returns_false_when_ls_params_returns_none (line 391) | def test_returns_false_when_ls_params_returns_none(self) -> None: method test_returns_false_when_ls_params_raises (line 396) | def test_returns_false_when_ls_params_raises(self) -> None: class TestModelParams (line 402) | class TestModelParams: method test_params_merged (line 405) | def test_params_merged(self) -> None: method test_params_merge_preserves_existing (line 418) | def test_params_merge_preserves_existing(self) -> None: method test_params_with_model_swap (line 431) | def test_params_with_model_swap(self) -> None: method test_async_params (line 448) | async def test_async_params(self) -> None: class TestModelIdentityPatch (line 463) | class TestModelIdentityPatch: method test_identity_replaced_on_swap (line 474) | def test_identity_replaced_on_swap(self) -> None: method test_no_identity_section_left_unchanged (line 501) | def test_no_identity_section_left_unchanged(self) -> None: method test_no_system_prompt_skips_patch (line 519) | def test_no_system_prompt_skips_patch(self) -> None: method test_identity_at_end_of_prompt (line 534) | def test_identity_at_end_of_prompt(self) -> None: method test_identity_without_context_limit (line 558) | def test_identity_without_context_limit(self) -> None: method test_identity_without_provider (line 564) | def test_identity_without_provider(self) -> None: method test_identity_no_model_name (line 570) | def test_identity_no_model_name(self) -> None: FILE: libs/cli/tests/unit_tests/test_debug.py class TestConfigureDebugLogging (line 12) | class TestConfigureDebugLogging: method test_noop_when_env_unset (line 13) | def test_noop_when_env_unset(self) -> None: method test_adds_handler_when_env_set (line 21) | def test_adds_handler_when_env_set(self, tmp_path) -> None: method test_custom_path_used (line 37) | def test_custom_path_used(self, tmp_path) -> None: method test_bad_path_prints_warning_no_crash (line 55) | def test_bad_path_prints_warning_no_crash(self, capsys) -> None: FILE: libs/cli/tests/unit_tests/test_editor.py class TestResolveEditor (line 21) | class TestResolveEditor: method test_visual_takes_priority (line 24) | def test_visual_takes_priority(self, monkeypatch: pytest.MonkeyPatch) ... method test_editor_fallback (line 29) | def test_editor_fallback(self, monkeypatch: pytest.MonkeyPatch) -> None: method test_default_vi_on_unix (line 34) | def test_default_vi_on_unix(self, monkeypatch: pytest.MonkeyPatch) -> ... method test_default_notepad_on_windows (line 42) | def test_default_notepad_on_windows(self, monkeypatch: pytest.MonkeyPa... method test_editor_with_args (line 50) | def test_editor_with_args(self, monkeypatch: pytest.MonkeyPatch) -> None: method test_whitespace_only_editor_returns_none (line 55) | def test_whitespace_only_editor_returns_none( method test_empty_visual_falls_through_to_editor (line 62) | def test_empty_visual_falls_through_to_editor( class TestPrepareCommand (line 70) | class TestPrepareCommand: method test_gui_editor_gets_wait_flag (line 73) | def test_gui_editor_gets_wait_flag(self) -> None: method test_subl_gets_w_flag (line 77) | def test_subl_gets_w_flag(self) -> None: method test_no_duplicate_wait_flag (line 81) | def test_no_duplicate_wait_flag(self) -> None: method test_vim_gets_i_none (line 85) | def test_vim_gets_i_none(self) -> None: method test_vim_no_duplicate_i_flag (line 90) | def test_vim_no_duplicate_i_flag(self) -> None: method test_plain_terminal_editor (line 94) | def test_plain_terminal_editor(self) -> None: method test_does_not_mutate_input (line 98) | def test_does_not_mutate_input(self) -> None: method test_gui_editor_with_full_path (line 103) | def test_gui_editor_with_full_path(self) -> None: class TestOpenInEditor (line 108) | class TestOpenInEditor: method test_returns_edited_text (line 112) | def test_returns_edited_text(self, mock_run: MagicMock) -> None: method test_returns_none_on_nonzero_exit (line 126) | def test_returns_none_on_nonzero_exit(self, mock_run: MagicMock) -> None: method test_returns_none_on_empty_edit (line 133) | def test_returns_none_on_empty_edit(self, mock_run: MagicMock) -> None: method test_returns_none_on_editor_not_found (line 144) | def test_returns_none_on_editor_not_found(self) -> None: method test_normalizes_line_endings (line 159) | def test_normalizes_line_endings(self, mock_run: MagicMock) -> None: method test_cleans_up_temp_file (line 171) | def test_cleans_up_temp_file(self, mock_run: MagicMock) -> None: method test_cleans_up_temp_file_on_error (line 186) | def test_cleans_up_temp_file_on_error(self, mock_run: MagicMock) -> None: method test_temp_file_has_md_extension (line 201) | def test_temp_file_has_md_extension(self, mock_run: MagicMock) -> None: method test_returns_none_when_resolve_editor_is_none (line 211) | def test_returns_none_when_resolve_editor_is_none(self) -> None: method test_handles_permission_error_on_cleanup (line 217) | def test_handles_permission_error_on_cleanup(self, mock_run: MagicMock... method test_handles_unexpected_exception (line 238) | def test_handles_unexpected_exception(self, mock_run: MagicMock) -> None: method test_writes_initial_content_to_temp_file (line 246) | def test_writes_initial_content_to_temp_file(self, mock_run: MagicMock... method test_unicode_round_trip (line 263) | def test_unicode_round_trip(self, mock_run: MagicMock) -> None: FILE: libs/cli/tests/unit_tests/test_end_to_end.py function _ls_entries (line 25) | def _ls_entries(backend: CompositeBackend, path: str) -> list | None: function sample_tool (line 36) | def sample_tool(sample_input: str) -> str: class FixedGenericFakeChatModel (line 41) | class FixedGenericFakeChatModel(GenericFakeChatModel): method bind_tools (line 46) | def bind_tools( method _generate (line 56) | def _generate( function mock_settings (line 72) | def mock_settings( class TestDeepAgentsCLIEndToEnd (line 122) | class TestDeepAgentsCLIEndToEnd: method test_cli_agent_with_fake_llm_basic (line 125) | def test_cli_agent_with_fake_llm_basic(self, tmp_path: Path) -> None: method test_cli_agent_summarizes (line 180) | def test_cli_agent_summarizes(self, tmp_path: Path) -> None: method test_cli_agent_with_fake_llm_with_tools (line 247) | def test_cli_agent_with_fake_llm_with_tools(self, tmp_path: Path) -> N... method test_cli_agent_with_fake_llm_filesystem_tool (line 300) | def test_cli_agent_with_fake_llm_filesystem_tool(self, tmp_path: Path)... method test_cli_agent_with_fake_llm_multiple_tool_calls (line 354) | def test_cli_agent_with_fake_llm_multiple_tool_calls(self, tmp_path: P... method test_cli_agent_backend_setup (line 420) | def test_cli_agent_backend_setup(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_exception_handling.py class TestToolsExceptionHandling (line 34) | class TestToolsExceptionHandling: method test_http_request_handles_json_decode_error (line 37) | def test_http_request_handles_json_decode_error(self): method test_http_request_handles_requests_json_decode_error (line 55) | def test_http_request_handles_requests_json_decode_error(self): method test_web_search_handles_tavily_usage_limit_error (line 73) | def test_web_search_handles_tavily_usage_limit_error(self): method test_web_search_handles_tavily_invalid_api_key (line 84) | def test_web_search_handles_tavily_invalid_api_key(self): method test_web_search_handles_tavily_bad_request (line 94) | def test_web_search_handles_tavily_bad_request(self): method test_web_search_handles_tavily_timeout (line 104) | def test_web_search_handles_tavily_timeout(self): class TestFileOpsExceptionHandling (line 115) | class TestFileOpsExceptionHandling: method test_file_op_tracker_handles_backend_failure (line 118) | def test_file_op_tracker_handles_backend_failure(self, caplog): method test_file_op_tracker_handles_attribute_error (line 142) | def test_file_op_tracker_handles_attribute_error(self, caplog): method test_file_op_tracker_handles_unicode_decode_error (line 166) | def test_file_op_tracker_handles_unicode_decode_error(self, caplog): method test_safe_read_logs_on_failure (line 192) | def test_safe_read_logs_on_failure(self, caplog, tmp_path): class TestClipboardExceptionHandling (line 204) | class TestClipboardExceptionHandling: method test_copy_handles_widget_selection_failures (line 207) | def test_copy_handles_widget_selection_failures(self, caplog): method test_clipboard_logger_exists (line 225) | def test_clipboard_logger_exists(self): class TestMediaUtilsExceptionHandling (line 231) | class TestMediaUtilsExceptionHandling: method test_media_utils_logger_exists (line 234) | def test_media_utils_logger_exists(self): method test_media_utils_exception_types (line 239) | def test_media_utils_exception_types(self): method test_pngpaste_timeout_logs_and_returns_none (line 258) | def test_pngpaste_timeout_logs_and_returns_none(self, caplog): method test_pngpaste_not_found_logs_and_falls_back (line 277) | def test_pngpaste_not_found_logs_and_falls_back(self, caplog): method test_osascript_timeout_logs_and_returns_none (line 296) | def test_osascript_timeout_logs_and_returns_none(self, caplog): FILE: libs/cli/tests/unit_tests/test_file_ops.py function test_tracker_records_read_lines (line 9) | def test_tracker_records_read_lines(tmp_path: Path) -> None: function test_tracker_records_write_diff (line 32) | def test_tracker_records_write_diff(tmp_path: Path) -> None: function test_tracker_records_edit_diff (line 58) | def test_tracker_records_edit_diff(tmp_path: Path) -> None: function test_build_approval_preview_generates_diff (line 103) | def test_build_approval_preview_generates_diff(tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_history.py function history (line 16) | def history(tmp_path: Path) -> HistoryManager: function simple_history (line 31) | def simple_history(tmp_path: Path) -> HistoryManager: class TestSubstringMatch (line 38) | class TestSubstringMatch: method test_matches_substring_anywhere (line 41) | def test_matches_substring_anywhere(self, history: HistoryManager) -> ... method test_skips_non_matching_entries (line 48) | def test_skips_non_matching_entries(self, history: HistoryManager) -> ... method test_case_insensitive (line 59) | def test_case_insensitive(self, history: HistoryManager) -> None: class TestEmptyQuery (line 67) | class TestEmptyQuery: method test_returns_all_entries_in_reverse (line 70) | def test_returns_all_entries_in_reverse(self, history: HistoryManager)... class TestNoMatch (line 85) | class TestNoMatch: method test_returns_none (line 88) | def test_returns_none(self, history: HistoryManager) -> None: method test_empty_history_returns_none (line 92) | def test_empty_history_returns_none(self, tmp_path: Path) -> None: class TestForwardNavigation (line 97) | class TestForwardNavigation: method test_respects_query (line 100) | def test_respects_query(self, history: HistoryManager) -> None: method test_full_forward_walk (line 109) | def test_full_forward_walk(self, history: HistoryManager) -> None: method test_restores_original_input (line 118) | def test_restores_original_input(self, history: HistoryManager) -> None: method test_get_next_without_previous_returns_none (line 125) | def test_get_next_without_previous_returns_none( class TestResetClearsQuery (line 131) | class TestResetClearsQuery: method test_reset_then_empty_query (line 134) | def test_reset_then_empty_query(self, history: HistoryManager) -> None: class TestWhitespaceQuery (line 144) | class TestWhitespaceQuery: method test_whitespace_treated_as_empty (line 147) | def test_whitespace_treated_as_empty(self, history: HistoryManager) ->... class TestQueryCapturedOnce (line 152) | class TestQueryCapturedOnce: method test_subsequent_query_ignored (line 155) | def test_subsequent_query_ignored(self, history: HistoryManager) -> None: class TestInHistoryProperty (line 164) | class TestInHistoryProperty: method test_initial_state_is_false (line 167) | def test_initial_state_is_false(self, tmp_path: Path) -> None: method test_true_after_get_previous (line 172) | def test_true_after_get_previous(self, simple_history: HistoryManager)... method test_true_while_browsing (line 178) | def test_true_while_browsing(self, simple_history: HistoryManager) -> ... method test_false_after_get_next_past_end (line 186) | def test_false_after_get_next_past_end( method test_false_after_reset_navigation (line 197) | def test_false_after_reset_navigation(self, simple_history: HistoryMan... method test_false_after_add (line 205) | def test_false_after_add(self, simple_history: HistoryManager) -> None: method test_in_history_stays_true_when_filtered_exhausted (line 213) | def test_in_history_stays_true_when_filtered_exhausted( method test_true_at_oldest_entry (line 222) | def test_true_at_oldest_entry(self, simple_history: HistoryManager) ->... FILE: libs/cli/tests/unit_tests/test_hooks.py function _reset_hooks_cache (line 19) | def _reset_hooks_cache() -> Generator[None]: class TestLoadHooks (line 33) | class TestLoadHooks: method test_missing_config_file (line 36) | def test_missing_config_file(self, tmp_path): method test_valid_config (line 44) | def test_valid_config(self, tmp_path): method test_malformed_json (line 54) | def test_malformed_json(self, tmp_path): method test_missing_hooks_key (line 63) | def test_missing_hooks_key(self, tmp_path): method test_caches_after_first_load (line 72) | def test_caches_after_first_load(self, tmp_path): method test_os_error (line 87) | def test_os_error(self, tmp_path): method test_non_dict_json (line 99) | def test_non_dict_json(self, tmp_path): method test_non_list_hooks_value (line 108) | def test_non_list_hooks_value(self, tmp_path): method test_null_json (line 117) | def test_null_json(self, tmp_path): class TestDispatchHook (line 132) | class TestDispatchHook: method test_no_hooks_configured (line 135) | async def test_no_hooks_configured(self): method test_matching_event (line 141) | async def test_matching_event(self): method test_event_key_auto_injected (line 154) | async def test_event_key_auto_injected(self): method test_non_matching_event_skipped (line 164) | async def test_non_matching_event_skipped(self): method test_empty_events_matches_everything (line 175) | async def test_empty_events_matches_everything(self): method test_missing_events_key_matches_everything (line 184) | async def test_missing_events_key_matches_everything(self): method test_hook_without_command_skipped (line 193) | async def test_hook_without_command_skipped(self): method test_hook_with_string_command_skipped (line 202) | async def test_hook_with_string_command_skipped(self): method test_hook_with_empty_command_list_skipped (line 211) | async def test_hook_with_empty_command_list_skipped(self): method test_timeout_does_not_propagate (line 220) | async def test_timeout_does_not_propagate(self): method test_file_not_found_does_not_propagate (line 231) | async def test_file_not_found_does_not_propagate(self): method test_permission_error_does_not_propagate (line 242) | async def test_permission_error_does_not_propagate(self): method test_generic_error_does_not_propagate (line 253) | async def test_generic_error_does_not_propagate(self): method test_multiple_hooks_dispatched (line 264) | async def test_multiple_hooks_dispatched(self): method test_first_hook_failure_does_not_block_second (line 276) | async def test_first_hook_failure_does_not_block_second(self): method test_subprocess_run_called_with_correct_flags (line 297) | async def test_subprocess_run_called_with_correct_flags(self): method test_dispatch_hook_swallows_json_serialization_error (line 311) | async def test_dispatch_hook_swallows_json_serialization_error(self): class TestDispatchHookFireAndForget (line 324) | class TestDispatchHookFireAndForget: method test_creates_task_with_strong_reference (line 327) | async def test_creates_task_with_strong_reference(self): method test_task_removed_after_completion (line 340) | async def test_task_removed_after_completion(self): method test_no_running_loop_does_not_raise (line 351) | def test_no_running_loop_does_not_raise(self): FILE: libs/cli/tests/unit_tests/test_imports.py function test_imports (line 6) | def test_imports() -> None: class TestLazyPackageGetattr (line 15) | class TestLazyPackageGetattr: method test_cli_main_via_package (line 18) | def test_cli_main_via_package(self) -> None: method test_unknown_attr_raises (line 24) | def test_unknown_attr_raises(self) -> None: FILE: libs/cli/tests/unit_tests/test_input_parsing.py function test_parse_file_mentions_with_chinese_sentence (line 17) | def test_parse_file_mentions_with_chinese_sentence( function test_parse_file_mentions_handles_multiple_mentions (line 32) | def test_parse_file_mentions_handles_multiple_mentions( function test_parse_file_mentions_with_escaped_spaces (line 49) | def test_parse_file_mentions_with_escaped_spaces( function test_parse_file_mentions_warns_for_nonexistent_file (line 64) | def test_parse_file_mentions_warns_for_nonexistent_file( function test_parse_file_mentions_ignores_directories (line 78) | def test_parse_file_mentions_ignores_directories( function test_parse_file_mentions_with_no_mentions (line 94) | def test_parse_file_mentions_with_no_mentions() -> None: function test_parse_file_mentions_handles_path_traversal (line 100) | def test_parse_file_mentions_handles_path_traversal( function test_parse_file_mentions_with_absolute_path (line 115) | def test_parse_file_mentions_with_absolute_path(tmp_path: Path) -> None: function test_parse_file_mentions_handles_multiple_in_sentence (line 125) | def test_parse_file_mentions_handles_multiple_in_sentence( function test_parse_file_mentions_adjacent_looks_like_email (line 140) | def test_parse_file_mentions_adjacent_looks_like_email( function test_parse_file_mentions_handles_oserror (line 163) | def test_parse_file_mentions_handles_oserror( function test_parse_file_mentions_skips_email_addresses (line 180) | def test_parse_file_mentions_skips_email_addresses( function test_parse_file_mentions_skips_various_email_formats (line 198) | def test_parse_file_mentions_skips_various_email_formats( function test_parse_file_mentions_works_after_cjk_text (line 220) | def test_parse_file_mentions_works_after_cjk_text( function test_parse_file_mentions_handles_bad_tilde_user (line 236) | def test_parse_file_mentions_handles_bad_tilde_user( function test_parse_pasted_file_paths_with_quoted_paths (line 255) | def test_parse_pasted_file_paths_with_quoted_paths(tmp_path: Path) -> None: function test_parse_pasted_file_paths_with_file_url (line 265) | def test_parse_pasted_file_paths_with_file_url(tmp_path: Path) -> None: function test_parse_pasted_file_paths_with_multiple_lines (line 275) | def test_parse_pasted_file_paths_with_multiple_lines(tmp_path: Path) -> ... function test_parse_pasted_file_paths_returns_empty_for_text_payload (line 287) | def test_parse_pasted_file_paths_returns_empty_for_text_payload() -> None: function test_parse_pasted_file_paths_returns_empty_for_missing_file (line 292) | def test_parse_pasted_file_paths_returns_empty_for_missing_file(tmp_path... function test_parse_pasted_file_paths_returns_empty_for_empty_string (line 298) | def test_parse_pasted_file_paths_returns_empty_for_empty_string() -> None: function test_parse_pasted_file_paths_returns_empty_for_whitespace (line 303) | def test_parse_pasted_file_paths_returns_empty_for_whitespace() -> None: function test_parse_pasted_file_paths_handles_angle_bracket_wrapped_path (line 308) | def test_parse_pasted_file_paths_handles_angle_bracket_wrapped_path( function test_normalize_pasted_path_rejects_mixed_payload (line 320) | def test_normalize_pasted_path_rejects_mixed_payload() -> None: function test_normalize_pasted_path_accepts_windows_drive_payload (line 325) | def test_normalize_pasted_path_accepts_windows_drive_payload() -> None: function test_parse_single_pasted_file_path_resolves_unicode_space_variant (line 332) | def test_parse_single_pasted_file_path_resolves_unicode_space_variant( function test_parse_single_pasted_file_path_unquoted_posix_path_with_spaces (line 347) | def test_parse_single_pasted_file_path_unquoted_posix_path_with_spaces( function test_parse_pasted_path_payload_single_path (line 359) | def test_parse_pasted_path_payload_single_path(tmp_path: Path) -> None: function test_parse_pasted_path_payload_leading_path_with_suffix (line 371) | def test_parse_pasted_path_payload_leading_path_with_suffix(tmp_path: Pa... function test_extract_leading_pasted_file_path_with_trailing_text (line 387) | def test_extract_leading_pasted_file_path_with_trailing_text(tmp_path: P... function test_extract_leading_pasted_file_path_unquoted_path_with_spaces (line 401) | def test_extract_leading_pasted_file_path_unquoted_path_with_spaces( FILE: libs/cli/tests/unit_tests/test_local_context.py function _make_backend (line 35) | def _make_backend(output: str = "", exit_code: int = 0) -> Mock: function _make_summarization_event (line 45) | def _make_summarization_event(cutoff: int) -> dict[str, Any]: class TestLocalContextMiddleware (line 74) | class TestLocalContextMiddleware: method test_before_agent_stores_context (line 77) | def test_before_agent_stores_context(self) -> None: method test_before_agent_skips_when_already_set (line 92) | def test_before_agent_skips_when_already_set(self) -> None: method test_before_agent_handles_script_failure (line 107) | def test_before_agent_handles_script_failure(self) -> None: method test_before_agent_handles_empty_output (line 118) | def test_before_agent_handles_empty_output(self) -> None: method test_before_agent_handles_execute_exception (line 129) | def test_before_agent_handles_execute_exception(self) -> None: method test_before_agent_handles_none_output (line 141) | def test_before_agent_handles_none_output(self) -> None: method test_before_agent_git_context (line 156) | def test_before_agent_git_context(self) -> None: method test_before_agent_no_git (line 173) | def test_before_agent_no_git(self) -> None: method test_wrap_model_call_with_local_context (line 187) | def test_wrap_model_call_with_local_context(self) -> None: method test_wrap_model_call_without_local_context (line 212) | def test_wrap_model_call_without_local_context(self) -> None: method test_awrap_model_call_with_local_context (line 229) | async def test_awrap_model_call_with_local_context(self) -> None: method test_awrap_model_call_without_local_context (line 254) | async def test_awrap_model_call_without_local_context(self) -> None: method test_before_agent_refreshes_on_summarization (line 271) | def test_before_agent_refreshes_on_summarization(self) -> None: method test_before_agent_no_rerun_same_cutoff (line 291) | def test_before_agent_no_rerun_same_cutoff(self) -> None: method test_before_agent_refresh_failure_records_cutoff (line 310) | def test_before_agent_refresh_failure_records_cutoff(self) -> None: method test_before_agent_second_summarization_refreshes (line 331) | def test_before_agent_second_summarization_refreshes(self) -> None: method test_before_agent_cross_thread_isolation (line 350) | def test_before_agent_cross_thread_isolation(self) -> None: method test_before_agent_refresh_exception_records_cutoff (line 388) | def test_before_agent_refresh_exception_records_cutoff(self) -> None: method test_before_agent_missing_cutoff_index_skips_refresh (line 408) | def test_before_agent_missing_cutoff_index_skips_refresh(self) -> None: function _run_section (line 432) | def _run_section(section_bash: str, cwd: Path, *, with_header: bool = Fa... class TestBuildDetectScript (line 455) | class TestBuildDetectScript: method test_build_detect_script_returns_string (line 458) | def test_build_detect_script_returns_string(self) -> None: method test_module_constant_matches_builder (line 464) | def test_module_constant_matches_builder(self) -> None: class TestSectionHeader (line 468) | class TestSectionHeader: method test_prints_cwd (line 471) | def test_prints_cwd(self, tmp_path: Path) -> None: method test_in_git_false_outside_repo (line 476) | def test_in_git_false_outside_repo(self, tmp_path: Path) -> None: method test_in_git_true_inside_repo (line 488) | def test_in_git_true_inside_repo(self, tmp_path: Path) -> None: class TestSectionProject (line 501) | class TestSectionProject: method test_python_project (line 504) | def test_python_project(self, tmp_path: Path) -> None: method test_javascript_project (line 510) | def test_javascript_project(self, tmp_path: Path) -> None: method test_rust_project (line 515) | def test_rust_project(self, tmp_path: Path) -> None: method test_monorepo_libs_apps (line 520) | def test_monorepo_libs_apps(self, tmp_path: Path) -> None: method test_envs_detected (line 526) | def test_envs_detected(self, tmp_path: Path) -> None: method test_no_project_files_no_output (line 531) | def test_no_project_files_no_output(self, tmp_path: Path) -> None: class TestSectionPackageManagers (line 536) | class TestSectionPackageManagers: method test_uv_lock (line 539) | def test_uv_lock(self, tmp_path: Path) -> None: method test_poetry_lock (line 544) | def test_poetry_lock(self, tmp_path: Path) -> None: method test_pyproject_with_uv_tool (line 549) | def test_pyproject_with_uv_tool(self, tmp_path: Path) -> None: method test_requirements_txt (line 554) | def test_requirements_txt(self, tmp_path: Path) -> None: method test_bun_lockb (line 559) | def test_bun_lockb(self, tmp_path: Path) -> None: method test_yarn_lock (line 564) | def test_yarn_lock(self, tmp_path: Path) -> None: method test_combined_python_and_node (line 569) | def test_combined_python_and_node(self, tmp_path: Path) -> None: method test_no_package_manager (line 576) | def test_no_package_manager(self, tmp_path: Path) -> None: class TestSectionRuntimes (line 581) | class TestSectionRuntimes: method test_runs_and_detects_python (line 584) | def test_runs_and_detects_python(self, tmp_path: Path) -> None: function _git_env (line 591) | def _git_env(tmp_path: Path) -> dict[str, str]: function _git_init_commit (line 602) | def _git_init_commit(tmp_path: Path, *, branch: str | None = None) -> None: class TestSectionGit (line 617) | class TestSectionGit: method test_branch_name (line 620) | def test_branch_name(self, tmp_path: Path) -> None: method test_main_branch_listed (line 625) | def test_main_branch_listed(self, tmp_path: Path) -> None: method test_uncommitted_changes_singular (line 630) | def test_uncommitted_changes_singular(self, tmp_path: Path) -> None: method test_uncommitted_changes_plural (line 638) | def test_uncommitted_changes_plural(self, tmp_path: Path) -> None: method test_no_output_outside_git (line 645) | def test_no_output_outside_git(self, tmp_path: Path) -> None: class TestSectionTestCommand (line 650) | class TestSectionTestCommand: method test_makefile_test_target (line 653) | def test_makefile_test_target(self, tmp_path: Path) -> None: method test_pytest_via_pyproject (line 658) | def test_pytest_via_pyproject(self, tmp_path: Path) -> None: method test_pytest_via_tests_dir (line 663) | def test_pytest_via_tests_dir(self, tmp_path: Path) -> None: method test_npm_test (line 669) | def test_npm_test(self, tmp_path: Path) -> None: method test_no_test_command (line 674) | def test_no_test_command(self, tmp_path: Path) -> None: class TestSectionFiles (line 679) | class TestSectionFiles: method test_lists_files_and_dirs (line 682) | def test_lists_files_and_dirs(self, tmp_path: Path) -> None: method test_caps_at_20 (line 689) | def test_caps_at_20(self, tmp_path: Path) -> None: method test_excludes_pycache (line 696) | def test_excludes_pycache(self, tmp_path: Path) -> None: method test_includes_deepagents (line 703) | def test_includes_deepagents(self, tmp_path: Path) -> None: class TestSectionTree (line 709) | class TestSectionTree: method test_tree_output_format (line 712) | def test_tree_output_format(self, tmp_path: Path) -> None: method test_skips_when_tree_missing (line 724) | def test_skips_when_tree_missing(self, tmp_path: Path) -> None: class TestSectionMakefile (line 738) | class TestSectionMakefile: method test_shows_makefile_contents (line 741) | def test_shows_makefile_contents(self, tmp_path: Path) -> None: method test_truncation_note_for_long_makefile (line 749) | def test_truncation_note_for_long_makefile(self, tmp_path: Path) -> None: method test_no_output_without_makefile (line 756) | def test_no_output_without_makefile(self, tmp_path: Path) -> None: method test_fallback_to_git_root_makefile (line 761) | def test_fallback_to_git_root_makefile(self, tmp_path: Path) -> None: class TestExecutableBackend (line 790) | class TestExecutableBackend: method test_object_with_execute_satisfies_protocol (line 793) | def test_object_with_execute_satisfies_protocol(self) -> None: method test_object_without_execute_does_not_satisfy (line 799) | def test_object_without_execute_does_not_satisfy(self) -> None: class TestFullScript (line 811) | class TestFullScript: method test_full_script_executes_successfully (line 814) | def test_full_script_executes_successfully(self, tmp_path: Path) -> None: method test_full_script_in_git_repo (line 829) | def test_full_script_in_git_repo(self, tmp_path: Path) -> None: class TestSectionProjectExtended (line 848) | class TestSectionProjectExtended: method test_go_project (line 851) | def test_go_project(self, tmp_path: Path) -> None: method test_java_project_pom (line 856) | def test_java_project_pom(self, tmp_path: Path) -> None: method test_java_project_gradle (line 861) | def test_java_project_gradle(self, tmp_path: Path) -> None: method test_node_modules_env (line 866) | def test_node_modules_env(self, tmp_path: Path) -> None: method test_project_root_shown_in_subdirectory (line 871) | def test_project_root_shown_in_subdirectory(self, tmp_path: Path) -> N... class TestSectionPackageManagersExtended (line 879) | class TestSectionPackageManagersExtended: method test_pipenv_via_pipfile (line 882) | def test_pipenv_via_pipfile(self, tmp_path: Path) -> None: method test_pipenv_via_pipfile_lock (line 887) | def test_pipenv_via_pipfile_lock(self, tmp_path: Path) -> None: method test_pnpm_lock (line 892) | def test_pnpm_lock(self, tmp_path: Path) -> None: method test_poetry_via_pyproject (line 897) | def test_poetry_via_pyproject(self, tmp_path: Path) -> None: class TestSectionGitExtended (line 903) | class TestSectionGitExtended: method test_both_main_and_master_listed (line 906) | def test_both_main_and_master_listed(self, tmp_path: Path) -> None: function _make_server (line 924) | def _make_server( class TestBuildMcpContext (line 932) | class TestBuildMcpContext: method test_empty_servers (line 935) | def test_empty_servers(self) -> None: method test_single_server_with_tools (line 938) | def test_single_server_with_tools(self) -> None: method test_multiple_servers (line 944) | def test_multiple_servers(self) -> None: method test_server_zero_tools (line 954) | def test_server_zero_tools(self) -> None: method test_long_tool_list_truncated (line 960) | def test_long_tool_list_truncated(self) -> None: class TestMcpContextInMiddleware (line 969) | class TestMcpContextInMiddleware: method test_mcp_context_appended_to_prompt (line 972) | def test_mcp_context_appended_to_prompt(self) -> None: method test_no_mcp_context_when_none (line 995) | def test_no_mcp_context_when_none(self) -> None: method test_both_contexts_combined (line 1015) | def test_both_contexts_combined(self) -> None: method test_mcp_context_alone (line 1036) | def test_mcp_context_alone(self) -> None: FILE: libs/cli/tests/unit_tests/test_main.py class TestResumeHintLogic (line 23) | class TestResumeHintLogic: method test_resume_hint_condition_error_case (line 34) | def test_resume_hint_condition_error_case(self) -> None: method test_resume_hint_condition_success_case (line 43) | def test_resume_hint_condition_success_case(self) -> None: method test_resume_hint_shown_for_resumed_threads (line 52) | def test_resume_hint_shown_for_resumed_threads(self) -> None: method test_resume_hint_not_shown_without_checkpoints (line 61) | def test_resume_hint_not_shown_without_checkpoints(self) -> None: class TestLangSmithTeardownUrl (line 71) | class TestLangSmithTeardownUrl: method setup_method (line 74) | def setup_method(self) -> None: method test_thread_url_requires_all_components (line 78) | def test_thread_url_requires_all_components(self) -> None: method test_thread_url_not_shown_for_none_thread_id (line 84) | def test_thread_url_not_shown_for_none_thread_id(self) -> None: method test_thread_url_not_shown_when_no_checkpoints (line 91) | def test_thread_url_not_shown_when_no_checkpoints(self) -> None: method test_thread_url_shown_when_all_conditions_met (line 98) | def test_thread_url_shown_when_all_conditions_met(self) -> None: class TestAppResult (line 106) | class TestAppResult: method test_fields_accessible (line 109) | def test_fields_accessible(self) -> None: method test_thread_id_none (line 115) | def test_thread_id_none(self) -> None: method test_frozen (line 120) | def test_frozen(self) -> None: class TestRunTextualAppReturnType (line 129) | class TestRunTextualAppReturnType: method test_run_textual_app_returns_app_result (line 132) | async def test_run_textual_app_returns_app_result(self) -> None: class TestRunTextualCliAsyncReturnType (line 141) | class TestRunTextualCliAsyncReturnType: method test_run_textual_cli_async_returns_app_result (line 144) | def test_run_textual_cli_async_returns_app_result(self) -> None: class TestThreadMessage (line 153) | class TestThreadMessage: method test_thread_id_forwarded_to_app (line 160) | def test_thread_id_forwarded_to_app(self) -> None: class TestRunTextualCliAsyncMcp (line 168) | class TestRunTextualCliAsyncMcp: method test_passes_server_and_mcp_kwargs_to_textual_app (line 175) | async def test_passes_server_and_mcp_kwargs_to_textual_app(self) -> None: method test_no_mcp_kwargs_when_disabled (line 208) | async def test_no_mcp_kwargs_when_disabled(self) -> None: class TestServerCleanupLifecycle (line 229) | class TestServerCleanupLifecycle: method test_server_proc_stopped_after_app_exits (line 232) | async def test_server_proc_stopped_after_app_exits(self) -> None: method test_server_proc_stopped_even_on_crash (line 245) | async def test_server_proc_stopped_even_on_crash(self) -> None: method test_deferred_server_proc_stopped_after_app_exits (line 262) | async def test_deferred_server_proc_stopped_after_app_exits(self) -> N... class TestCheckOptionalTools (line 283) | class TestCheckOptionalTools: method test_returns_tool_name_when_rg_not_found (line 286) | def test_returns_tool_name_when_rg_not_found(self) -> None: method test_returns_empty_when_rg_found (line 293) | def test_returns_empty_when_rg_found(self) -> None: method test_warning_suppressed_via_config (line 300) | def test_warning_suppressed_via_config(self, tmp_path: Path) -> None: method test_malformed_config_does_not_suppress (line 310) | def test_malformed_config_does_not_suppress(self, tmp_path: Path) -> N... method test_non_list_suppress_does_not_crash (line 320) | def test_non_list_suppress_does_not_crash(self, tmp_path: Path) -> None: method test_unrelated_suppress_key_does_not_suppress (line 330) | def test_unrelated_suppress_key_does_not_suppress(self, tmp_path: Path... class TestRipgrepInstallHint (line 341) | class TestRipgrepInstallHint: method test_macos_brew (line 344) | def test_macos_brew(self) -> None: method test_macos_port (line 357) | def test_macos_port(self) -> None: method test_linux_apt (line 370) | def test_linux_apt(self) -> None: method test_linux_dnf (line 383) | def test_linux_dnf(self) -> None: method test_linux_pacman (line 396) | def test_linux_pacman(self) -> None: method test_linux_zypper (line 409) | def test_linux_zypper(self) -> None: method test_linux_apk (line 422) | def test_linux_apk(self) -> None: method test_linux_nix (line 435) | def test_linux_nix(self) -> None: method test_win32_choco (line 450) | def test_win32_choco(self) -> None: method test_win32_scoop (line 465) | def test_win32_scoop(self) -> None: method test_win32_winget (line 480) | def test_win32_winget(self) -> None: method test_darwin_no_manager_falls_through (line 493) | def test_darwin_no_manager_falls_through(self) -> None: method test_linux_no_manager_falls_through (line 506) | def test_linux_no_manager_falls_through(self) -> None: method test_cargo_fallback (line 515) | def test_cargo_fallback(self) -> None: method test_conda_fallback (line 528) | def test_conda_fallback(self) -> None: method test_url_fallback (line 541) | def test_url_fallback(self) -> None: class TestFormatToolWarnings (line 553) | class TestFormatToolWarnings: method test_tui_format_contains_install_hint (line 556) | def test_tui_format_contains_install_hint(self) -> None: method test_cli_format_contains_install_hint (line 567) | def test_cli_format_contains_install_hint(self) -> None: method test_cli_format_wraps_url_in_rich_link (line 577) | def test_cli_format_wraps_url_in_rich_link(self) -> None: method test_both_formats_contain_suppress_hint (line 589) | def test_both_formats_contain_suppress_hint(self) -> None: method test_unknown_tool_fallback (line 597) | def test_unknown_tool_fallback(self) -> None: class TestRunTextualCliAsyncModelConfigError (line 603) | class TestRunTextualCliAsyncModelConfigError: method test_returns_error_code_on_no_credentials (line 606) | async def test_returns_error_code_on_no_credentials(self) -> None: method test_no_error_when_model_name_provided (line 625) | async def test_no_error_when_model_name_provided(self) -> None: FILE: libs/cli/tests/unit_tests/test_main_acp_mode.py function _make_acp_args (line 16) | def _make_acp_args(**overrides: object) -> argparse.Namespace: function test_acp_mode_loads_tools_and_mcp_and_runs_server (line 32) | def test_acp_mode_loads_tools_and_mcp_and_runs_server() -> None: function test_acp_mode_omits_web_search_without_tavily (line 126) | def test_acp_mode_omits_web_search_without_tavily() -> None: function test_non_acp_mode_checks_dependencies_before_parsing (line 176) | def test_non_acp_mode_checks_dependencies_before_parsing() -> None: FILE: libs/cli/tests/unit_tests/test_main_args.py function mock_argv (line 20) | def mock_argv() -> MockArgvType: function test_shell_allow_list_argument (line 41) | def test_shell_allow_list_argument( function test_shell_allow_list_not_specified (line 51) | def test_shell_allow_list_not_specified(mock_argv: MockArgvType) -> None: function test_shell_allow_list_combined_with_other_args (line 59) | def test_shell_allow_list_combined_with_other_args(mock_argv: MockArgvTy... function test_shell_allow_list_string_parsing (line 79) | def test_shell_allow_list_string_parsing(input_str: str, expected: list[... class TestNonInteractiveArgument (line 85) | class TestNonInteractiveArgument: method test_short_flag (line 88) | def test_short_flag(self, mock_argv: MockArgvType) -> None: method test_long_flag (line 94) | def test_long_flag(self, mock_argv: MockArgvType) -> None: method test_not_specified_is_none (line 100) | def test_not_specified_is_none(self, mock_argv: MockArgvType) -> None: method test_combined_with_shell_allow_list (line 106) | def test_combined_with_shell_allow_list(self, mock_argv: MockArgvType)... method test_combined_with_sandbox_setup (line 113) | def test_combined_with_sandbox_setup(self, mock_argv: MockArgvType) ->... class TestNoStreamArgument (line 129) | class TestNoStreamArgument: method test_flag_stores_true (line 132) | def test_flag_stores_true(self, mock_argv: MockArgvType) -> None: method test_not_specified_is_false (line 138) | def test_not_specified_is_false(self, mock_argv: MockArgvType) -> None: method test_combined_with_quiet (line 144) | def test_combined_with_quiet(self, mock_argv: MockArgvType) -> None: method test_requires_non_interactive (line 151) | def test_requires_non_interactive(self) -> None: class TestQuietRequiresNonInteractive (line 166) | class TestQuietRequiresNonInteractive: method test_quiet_without_non_interactive_exits (line 169) | def test_quiet_without_non_interactive_exits(self) -> None: class TestModelParamsArgument (line 184) | class TestModelParamsArgument: method test_stores_json_string (line 187) | def test_stores_json_string(self, mock_argv: MockArgvType) -> None: method test_not_specified_is_none (line 193) | def test_not_specified_is_none(self, mock_argv: MockArgvType) -> None: method test_combined_with_model (line 199) | def test_combined_with_model(self, mock_argv: MockArgvType) -> None: class TestProfileOverrideArgument (line 212) | class TestProfileOverrideArgument: method test_stores_json_string (line 215) | def test_stores_json_string(self, mock_argv: MockArgvType) -> None: method test_not_specified_is_none (line 221) | def test_not_specified_is_none(self, mock_argv: MockArgvType) -> None: method test_combined_with_model (line 227) | def test_combined_with_model(self, mock_argv: MockArgvType) -> None: method test_invalid_json_exits (line 239) | def test_invalid_json_exits(self) -> None: method test_non_dict_json_exits (line 253) | def test_non_dict_json_exits(self) -> None: function _make_args (line 268) | def _make_args( class TestApplyStdinPipe (line 280) | class TestApplyStdinPipe: method test_tty_is_noop (line 283) | def test_tty_is_noop(self) -> None: method test_empty_stdin_is_noop (line 292) | def test_empty_stdin_is_noop(self) -> None: method test_stdin_sets_non_interactive (line 302) | def test_stdin_sets_non_interactive(self) -> None: method test_stdin_prepends_to_non_interactive (line 312) | def test_stdin_prepends_to_non_interactive(self) -> None: method test_stdin_prepends_to_initial_prompt (line 321) | def test_stdin_prepends_to_initial_prompt(self) -> None: method test_non_interactive_takes_priority_over_initial_prompt (line 331) | def test_non_interactive_takes_priority_over_initial_prompt(self) -> N... method test_multiline_stdin (line 341) | def test_multiline_stdin(self) -> None: method test_none_stdin_is_noop (line 351) | def test_none_stdin_is_noop(self) -> None: method test_closed_stdin_is_noop (line 359) | def test_closed_stdin_is_noop(self) -> None: method test_unicode_decode_error_exits (line 369) | def test_unicode_decode_error_exits(self) -> None: method test_read_os_error_exits (line 384) | def test_read_os_error_exits(self) -> None: method test_read_value_error_exits (line 397) | def test_read_value_error_exits(self) -> None: method test_oversized_stdin_exits (line 410) | def test_oversized_stdin_exits(self) -> None: method test_stdin_restores_tty (line 424) | def test_stdin_restores_tty(self) -> None: method test_tty_open_failure_preserves_input (line 442) | def test_tty_open_failure_preserves_input(self) -> None: FILE: libs/cli/tests/unit_tests/test_mcp_tools.py function valid_config_data (line 32) | def valid_config_data() -> dict: function write_config (line 46) | def write_config(tmp_path: Path) -> Callable[..., str]: function mock_mcp_session (line 58) | def mock_mcp_session(): function mock_mcp_client (line 68) | def mock_mcp_client( function mock_tools (line 79) | def mock_tools(): class TestLoadMCPConfig (line 92) | class TestLoadMCPConfig: method test_load_valid_config (line 95) | def test_load_valid_config( method test_load_config_file_not_found (line 103) | def test_load_config_file_not_found(self, tmp_path: Path) -> None: method test_load_config_invalid_json (line 110) | def test_load_config_invalid_json(self, tmp_path: Path) -> None: method test_load_config_missing_mcpservers_field (line 120) | def test_load_config_missing_mcpservers_field( method test_load_config_invalid_mcpservers (line 140) | def test_load_config_invalid_mcpservers( method test_load_config_server_missing_command (line 153) | def test_load_config_server_missing_command( method test_load_config_invalid_field_types (line 187) | def test_load_config_invalid_field_types( method test_load_config_optional_fields (line 199) | def test_load_config_optional_fields( method test_load_config_multiple_servers (line 218) | def test_load_config_multiple_servers( method test_load_config_sse_server (line 250) | def test_load_config_sse_server(self, write_config: Callable[..., str]... method test_load_config_http_server (line 270) | def test_load_config_http_server(self, write_config: Callable[..., str... method test_load_config_remote_server_missing_url (line 294) | def test_load_config_remote_server_missing_url( method test_load_config_mixed_server_types (line 308) | def test_load_config_mixed_server_types( method test_load_config_sse_with_headers (line 337) | def test_load_config_sse_with_headers( method test_load_config_http_with_headers (line 360) | def test_load_config_http_with_headers( method test_load_config_transport_field_alias (line 389) | def test_load_config_transport_field_alias( method test_load_config_invalid_headers_type (line 410) | def test_load_config_invalid_headers_type( method test_load_config_unknown_server_type (line 429) | def test_load_config_unknown_server_type( class TestGetMCPTools (line 450) | class TestGetMCPTools: method _bypass_health_checks (line 454) | def _bypass_health_checks(self) -> Generator[None]: method test_get_mcp_tools_success (line 467) | async def test_get_mcp_tools_success( method test_get_mcp_tools_server_spawn_failure (line 523) | async def test_get_mcp_tools_server_spawn_failure( method test_get_mcp_tools_get_tools_failure (line 549) | async def test_get_mcp_tools_get_tools_failure( method test_get_mcp_tools_cleanup_called_on_client_init_failure (line 572) | async def test_get_mcp_tools_cleanup_called_on_client_init_failure( method test_get_mcp_tools_cleanup_called_on_tool_load_failure (line 590) | async def test_get_mcp_tools_cleanup_called_on_tool_load_failure( method test_get_mcp_tools_empty_env_dict_coerced_to_none (line 613) | async def test_get_mcp_tools_empty_env_dict_coerced_to_none( method test_get_mcp_tools_multiple_servers (line 637) | async def test_get_mcp_tools_multiple_servers( method test_get_mcp_tools_invalid_config (line 725) | async def test_get_mcp_tools_invalid_config( method test_get_mcp_tools_env_variables_passed (line 745) | async def test_get_mcp_tools_env_variables_passed( method test_get_mcp_tools_env_none_when_not_provided (line 787) | async def test_get_mcp_tools_env_none_when_not_provided( method test_get_mcp_tools_headers_passed_for_sse (line 819) | async def test_get_mcp_tools_headers_passed_for_sse( method test_get_mcp_tools_headers_passed_for_http (line 860) | async def test_get_mcp_tools_headers_passed_for_http( method test_get_mcp_tools_no_headers_when_not_provided (line 897) | async def test_get_mcp_tools_no_headers_when_not_provided( class TestDiscoverMcpConfigs (line 931) | class TestDiscoverMcpConfigs: method test_project_context_overrides_process_cwd (line 934) | def test_project_context_overrides_process_cwd( method test_no_configs_found (line 959) | def test_no_configs_found( method test_user_level_only (line 973) | def test_user_level_only( method test_project_root_only (line 994) | def test_project_root_only( method test_project_deepagents_subdir_only (line 1013) | def test_project_deepagents_subdir_only( method test_all_three_locations (line 1033) | def test_all_three_locations( method test_falls_back_to_cwd_when_no_git (line 1060) | def test_falls_back_to_cwd_when_no_git( class TestMergeMcpConfigs (line 1079) | class TestMergeMcpConfigs: method test_single_config (line 1082) | def test_single_config(self) -> None: method test_disjoint_servers (line 1088) | def test_disjoint_servers(self) -> None: method test_duplicate_server_name_last_wins (line 1096) | def test_duplicate_server_name_last_wins(self) -> None: method test_empty_list (line 1103) | def test_empty_list(self) -> None: class TestLoadMcpConfigLenient (line 1109) | class TestLoadMcpConfigLenient: method test_missing_file_returns_none (line 1112) | def test_missing_file_returns_none(self, tmp_path: Path) -> None: method test_invalid_json_returns_none (line 1117) | def test_invalid_json_returns_none(self, tmp_path: Path) -> None: method test_validation_error_returns_none (line 1124) | def test_validation_error_returns_none(self, tmp_path: Path) -> None: method test_valid_file_returns_config (line 1131) | def test_valid_file_returns_config(self, tmp_path: Path) -> None: class TestResolveAndLoadMcpTools (line 1142) | class TestResolveAndLoadMcpTools: method test_no_mcp_returns_empty (line 1145) | async def test_no_mcp_returns_empty(self) -> None: method test_explicit_path_merges_with_discovery (line 1154) | async def test_explicit_path_merges_with_discovery( method test_auto_discovery_merges_and_loads (line 1187) | async def test_auto_discovery_merges_and_loads( method test_auto_discovery_no_configs_returns_empty (line 1211) | async def test_auto_discovery_no_configs_returns_empty( method test_explicit_path_missing_raises (line 1221) | async def test_explicit_path_missing_raises(self, tmp_path: Path) -> N... method test_explicit_path_invalid_json_raises (line 1228) | async def test_explicit_path_invalid_json_raises(self, tmp_path: Path)... method test_no_mcp_skips_discovery (line 1236) | async def test_no_mcp_skips_discovery(self, mock_discover: MagicMock) ... method test_project_context_drives_trust_root (line 1243) | async def test_project_context_drives_trust_root( method test_project_context_normalizes_relative_explicit_path (line 1280) | async def test_project_context_normalizes_relative_explicit_path( method test_trust_false_filters_project_stdio (line 1316) | async def test_trust_false_filters_project_stdio( method test_trust_true_allows_project_stdio (line 1346) | async def test_trust_true_allows_project_stdio( class TestClassifyDiscoveredConfigs (line 1367) | class TestClassifyDiscoveredConfigs: method test_user_config_classified (line 1370) | def test_user_config_classified(self) -> None: method test_project_config_classified (line 1377) | def test_project_config_classified(self, tmp_path: Path) -> None: method test_mixed_classification (line 1385) | def test_mixed_classification(self, tmp_path: Path) -> None: class TestExtractStdioServerCommands (line 1395) | class TestExtractStdioServerCommands: method test_extracts_stdio (line 1398) | def test_extracts_stdio(self) -> None: method test_skips_remote (line 1408) | def test_skips_remote(self) -> None: method test_mixed (line 1417) | def test_mixed(self) -> None: method test_empty_servers (line 1429) | def test_empty_servers(self) -> None: method test_no_servers_key (line 1433) | def test_no_servers_key(self) -> None: class TestFilterProjectStdioServers (line 1438) | class TestFilterProjectStdioServers: method test_removes_stdio_keeps_remote (line 1441) | def test_removes_stdio_keeps_remote(self) -> None: method test_all_stdio_returns_empty (line 1453) | def test_all_stdio_returns_empty(self) -> None: class TestCheckStdioServer (line 1460) | class TestCheckStdioServer: method test_command_not_found (line 1463) | def test_command_not_found(self) -> None: method test_command_exists (line 1474) | def test_command_exists(self) -> None: method test_missing_command_key (line 1481) | def test_missing_command_key(self) -> None: class TestCheckRemoteServer (line 1487) | class TestCheckRemoteServer: method test_unreachable (line 1490) | async def test_unreachable(self) -> None: method test_reachable (line 1505) | async def test_reachable(self) -> None: method test_unreachable_os_error (line 1517) | async def test_unreachable_os_error(self) -> None: method test_invalid_url (line 1532) | async def test_invalid_url(self) -> None: method test_missing_url_key (line 1547) | async def test_missing_url_key(self) -> None: method test_timeout (line 1552) | async def test_timeout(self) -> None: class TestHealthCheckIntegration (line 1568) | class TestHealthCheckIntegration: method test_stdio_health_check_failure_skips_session (line 1572) | async def test_stdio_health_check_failure_skips_session( method test_remote_health_check_failure_skips_session (line 1594) | async def test_remote_health_check_failure_skips_session( method test_multi_server_collects_all_failures (line 1622) | async def test_multi_server_collects_all_failures( method test_mixed_stdio_and_remote_checks (line 1651) | async def test_mixed_stdio_and_remote_checks( FILE: libs/cli/tests/unit_tests/test_mcp_trust.py class TestComputeConfigFingerprint (line 15) | class TestComputeConfigFingerprint: method test_empty_list (line 18) | def test_empty_list(self) -> None: method test_deterministic (line 24) | def test_deterministic(self, tmp_path: Path) -> None: method test_different_content_different_fingerprint (line 30) | def test_different_content_different_fingerprint(self, tmp_path: Path)... method test_sorted_order (line 38) | def test_sorted_order(self, tmp_path: Path) -> None: method test_missing_file_does_not_error (line 46) | def test_missing_file_does_not_error(self, tmp_path: Path) -> None: class TestTrustStore (line 53) | class TestTrustStore: method test_untrusted_by_default (line 56) | def test_untrusted_by_default(self, tmp_path: Path) -> None: method test_trust_and_verify (line 63) | def test_trust_and_verify(self, tmp_path: Path) -> None: method test_fingerprint_mismatch (line 70) | def test_fingerprint_mismatch(self, tmp_path: Path) -> None: method test_revoke (line 76) | def test_revoke(self, tmp_path: Path) -> None: method test_revoke_nonexistent (line 85) | def test_revoke_nonexistent(self, tmp_path: Path) -> None: method test_multiple_projects (line 90) | def test_multiple_projects(self, tmp_path: Path) -> None: method test_preserves_existing_config (line 98) | def test_preserves_existing_config(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_mcp_viewer.py function _widget_text (line 14) | def _widget_text(widget: Widget) -> str: class MCPViewerTestApp (line 20) | class MCPViewerTestApp(App[None]): method compose (line 23) | def compose(self) -> ComposeResult: function _sample_info (line 27) | def _sample_info() -> list[MCPServerInfo]: class TestMCPViewerScreen (line 47) | class TestMCPViewerScreen: method test_render_with_servers (line 50) | async def test_render_with_servers(self) -> None: method test_render_empty_state (line 70) | async def test_render_empty_state(self) -> None: method test_escape_dismisses (line 84) | async def test_escape_dismisses(self) -> None: method test_single_server_singular_labels (line 102) | async def test_single_server_singular_labels(self) -> None: method test_keyboard_navigation (line 122) | async def test_keyboard_navigation(self) -> None: method test_enter_toggles_expand (line 151) | async def test_enter_toggles_expand(self) -> None: method test_click_expands_tool (line 176) | async def test_click_expands_tool(self) -> None: FILE: libs/cli/tests/unit_tests/test_media_utils.py class TestImageData (line 26) | class TestImageData: method test_to_message_content_png (line 29) | def test_to_message_content_png(self) -> None: method test_to_message_content_jpeg (line 42) | def test_to_message_content_jpeg(self) -> None: class TestMediaTracker (line 55) | class TestMediaTracker: method test_add_image_increments_counter (line 58) | def test_add_image_increments_counter(self) -> None: method test_get_images_returns_copy (line 73) | def test_get_images_returns_copy(self) -> None: method test_clear_resets_counter (line 85) | def test_clear_resets_counter(self) -> None: method test_add_after_clear_starts_at_one (line 100) | def test_add_after_clear_starts_at_one(self) -> None: method test_sync_to_text_resets_when_placeholders_removed (line 114) | def test_sync_to_text_resets_when_placeholders_removed(self) -> None: method test_sync_to_text_keeps_referenced_images (line 126) | def test_sync_to_text_keeps_referenced_images(self) -> None: class TestEncodeImageToBase64 (line 141) | class TestEncodeImageToBase64: method test_encode_image_bytes (line 144) | def test_encode_image_bytes(self) -> None: method test_encode_png_bytes (line 153) | def test_encode_png_bytes(self) -> None: class TestCreateMultimodalContent (line 168) | class TestCreateMultimodalContent: method test_text_only (line 171) | def test_text_only(self) -> None: method test_text_and_one_image (line 179) | def test_text_and_one_image(self) -> None: method test_text_and_multiple_images (line 189) | def test_text_and_multiple_images(self) -> None: method test_empty_text_with_image (line 200) | def test_empty_text_with_image(self) -> None: method test_whitespace_only_text (line 209) | def test_whitespace_only_text(self) -> None: class TestGetClipboardImage (line 218) | class TestGetClipboardImage: method test_unsupported_platform_returns_none_and_warns (line 222) | def test_unsupported_platform_returns_none_and_warns(self) -> None: method test_macos_calls_macos_function (line 232) | def test_macos_calls_macos_function(self, mock_macos_fn: MagicMock) ->... method test_pngpaste_success (line 241) | def test_pngpaste_success( method test_pngpaste_not_installed_falls_back (line 268) | def test_pngpaste_not_installed_falls_back( method test_no_image_in_clipboard (line 290) | def test_no_image_in_clipboard( class TestGetImageFromPath (line 303) | class TestGetImageFromPath: method test_get_image_from_path_png (line 306) | def test_get_image_from_path_png(self, tmp_path: Path) -> None: method test_get_image_from_path_non_image_returns_none (line 319) | def test_get_image_from_path_non_image_returns_none(self, tmp_path: Pa... method test_get_image_from_path_missing_returns_none (line 326) | def test_get_image_from_path_missing_returns_none(self, tmp_path: Path... method test_get_image_from_path_jpeg_normalizes_format (line 331) | def test_get_image_from_path_jpeg_normalizes_format(self, tmp_path: Pa... method test_get_image_from_path_empty_returns_none (line 342) | def test_get_image_from_path_empty_returns_none(self, tmp_path: Path) ... method test_get_image_from_path_oversized_returns_none (line 349) | def test_get_image_from_path_oversized_returns_none(self, tmp_path: Pa... class TestSyncToTextWithIDGaps (line 362) | class TestSyncToTextWithIDGaps: method test_sync_to_text_with_id_gap_preserves_max_id (line 365) | def test_sync_to_text_with_id_gap_preserves_max_id(self) -> None: class TestVideoData (line 385) | class TestVideoData: method test_to_message_content_mp4 (line 388) | def test_to_message_content_mp4(self) -> None: method test_to_message_content_mov (line 401) | def test_to_message_content_mov(self) -> None: class TestGetVideoFromPath (line 414) | class TestGetVideoFromPath: method test_get_video_from_path_mp4 (line 417) | def test_get_video_from_path_mp4(self, tmp_path: Path) -> None: method test_get_video_from_path_jpg_returns_none (line 437) | def test_get_video_from_path_jpg_returns_none(self, tmp_path: Path) ->... method test_get_video_from_path_txt_returns_none (line 444) | def test_get_video_from_path_txt_returns_none(self, tmp_path: Path) ->... method test_get_video_from_path_missing_returns_none (line 451) | def test_get_video_from_path_missing_returns_none(self, tmp_path: Path... method test_get_video_from_path_oversized_returns_none (line 456) | def test_get_video_from_path_oversized_returns_none(self, tmp_path: Pa... method test_get_video_from_path_invalid_signature_returns_none (line 470) | def test_get_video_from_path_invalid_signature_returns_none( method test_get_video_from_path_mov (line 479) | def test_get_video_from_path_mov(self, tmp_path: Path) -> None: class TestMediaTrackerVideo (line 498) | class TestMediaTrackerVideo: method test_add_video_increments_counter (line 501) | def test_add_video_increments_counter(self) -> None: method test_get_videos_returns_copy (line 516) | def test_get_videos_returns_copy(self) -> None: method test_clear_resets_video_counter (line 528) | def test_clear_resets_video_counter(self) -> None: method test_add_video_after_clear_starts_at_one (line 543) | def test_add_video_after_clear_starts_at_one(self) -> None: method test_sync_to_text_prunes_unreferenced_videos (line 557) | def test_sync_to_text_prunes_unreferenced_videos(self) -> None: method test_image_and_video_tracking_work_together (line 572) | def test_image_and_video_tracking_work_together(self) -> None: method test_sync_to_text_handles_both_images_and_videos (line 587) | def test_sync_to_text_handles_both_images_and_videos(self) -> None: method test_sync_to_text_clears_all_when_no_placeholders (line 601) | def test_sync_to_text_clears_all_when_no_placeholders(self) -> None: class TestCreateMultimodalContentWithVideo (line 618) | class TestCreateMultimodalContentWithVideo: method test_text_and_video (line 621) | def test_text_and_video(self) -> None: method test_text_image_and_video (line 630) | def test_text_image_and_video(self) -> None: method test_video_only (line 641) | def test_video_only(self) -> None: method test_multiple_videos (line 649) | def test_multiple_videos(self) -> None: class TestDetectVideoFormat (line 665) | class TestDetectVideoFormat: method test_mp4_ftyp_mp42 (line 668) | def test_mp4_ftyp_mp42(self) -> None: method test_mp4_ftyp_isom (line 673) | def test_mp4_ftyp_isom(self) -> None: method test_mov_ftyp_qt (line 678) | def test_mov_ftyp_qt(self) -> None: method test_avi_riff (line 683) | def test_avi_riff(self) -> None: method test_wmv_asf (line 688) | def test_wmv_asf(self) -> None: method test_webm_ebml (line 693) | def test_webm_ebml(self) -> None: method test_garbage_returns_none (line 698) | def test_garbage_returns_none(self) -> None: method test_empty_returns_none (line 703) | def test_empty_returns_none(self) -> None: method test_short_riff_not_avi (line 707) | def test_short_riff_not_avi(self) -> None: method test_riff_non_avi_subtype (line 712) | def test_riff_non_avi_subtype(self) -> None: class TestGetVideoFromPathEdgeCases (line 718) | class TestGetVideoFromPathEdgeCases: method test_empty_file_returns_none (line 721) | def test_empty_file_returns_none(self, tmp_path: Path) -> None: method test_too_small_file_returns_none (line 728) | def test_too_small_file_returns_none(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_message_store.py class TestMessageData (line 23) | class TestMessageData: method test_user_message_roundtrip (line 26) | def test_user_message_roundtrip(self): method test_assistant_message_roundtrip (line 42) | def test_assistant_message_roundtrip(self): method test_tool_message_roundtrip (line 60) | def test_tool_message_roundtrip(self): method test_error_message_roundtrip (line 91) | def test_error_message_roundtrip(self): method test_app_message_roundtrip (line 107) | def test_app_message_roundtrip(self): method test_diff_message_roundtrip (line 123) | def test_diff_message_roundtrip(self): method test_summarization_message_roundtrip (line 142) | def test_summarization_message_roundtrip(self): method test_message_data_defaults (line 156) | def test_message_data_defaults(self): method test_tool_message_requires_tool_name (line 166) | def test_tool_message_requires_tool_name(self): method test_unknown_widget_serializes_as_app (line 171) | def test_unknown_widget_serializes_as_app(self): class TestMessageStore (line 181) | class TestMessageStore: method test_append_and_count (line 184) | def test_append_and_count(self): method test_window_exceeded (line 198) | def test_window_exceeded(self): method test_prune_messages (line 211) | def test_prune_messages(self): method test_active_message_at_start_blocks_all_pruning (line 235) | def test_active_message_at_start_blocks_all_pruning(self): method test_active_message_in_middle_prunes_up_to_it (line 257) | def test_active_message_in_middle_prunes_up_to_it(self): method test_hydrate_messages (line 281) | def test_hydrate_messages(self): method test_clear (line 306) | def test_clear(self): method test_get_message_by_id (line 323) | def test_get_message_by_id(self): method test_update_message (line 338) | def test_update_message(self): method test_update_message_rejects_unknown_fields (line 357) | def test_update_message_rejects_unknown_fields(self): method test_should_hydrate_above (line 373) | def test_should_hydrate_above(self): method test_should_prune_below (line 393) | def test_should_prune_below(self): method test_visible_range (line 420) | def test_visible_range(self): method test_get_visible_messages (line 434) | def test_get_visible_messages(self): class TestVirtualizationFlow (line 453) | class TestVirtualizationFlow: method test_full_prune_hydrate_cycle (line 456) | def test_full_prune_hydrate_cycle(self): method test_tool_message_state_preservation (line 502) | def test_tool_message_state_preservation(self): method test_streaming_message_protection (line 533) | def test_streaming_message_protection(self): method test_message_update_syncs_data (line 566) | def test_message_update_syncs_data(self): class TestBulkLoad (line 589) | class TestBulkLoad: method test_bulk_load_under_window_size (line 592) | def test_bulk_load_under_window_size(self): method test_bulk_load_over_window_size (line 610) | def test_bulk_load_over_window_size(self): method test_bulk_load_exact_window_size (line 630) | def test_bulk_load_exact_window_size(self): method test_bulk_load_then_hydrate (line 646) | def test_bulk_load_then_hydrate(self): method test_bulk_load_empty (line 665) | def test_bulk_load_empty(self): method test_bulk_load_preserves_existing_messages (line 674) | def test_bulk_load_preserves_existing_messages(self): FILE: libs/cli/tests/unit_tests/test_messages.py class TestUserMessageMarkupSafety (line 36) | class TestUserMessageMarkupSafety: method test_user_message_no_markup_error (line 40) | def test_user_message_no_markup_error(self, content: str) -> None: method test_user_message_preserves_content_exactly (line 45) | def test_user_message_preserves_content_exactly(self) -> None: class TestErrorMessageMarkupSafety (line 52) | class TestErrorMessageMarkupSafety: method test_error_message_no_markup_error (line 56) | def test_error_message_no_markup_error(self, content: str) -> None: method test_error_message_instantiates (line 61) | def test_error_message_instantiates(self) -> None: method test_error_message_has_prefix_and_body (line 67) | def test_error_message_has_prefix_and_body(self) -> None: class TestAppMessageMarkupSafety (line 75) | class TestAppMessageMarkupSafety: method test_app_message_no_markup_error (line 79) | def test_app_message_no_markup_error(self, content: str) -> None: method test_app_message_instantiates (line 84) | def test_app_message_instantiates(self) -> None: method test_app_message_str_gets_dim_italic (line 90) | def test_app_message_str_gets_dim_italic(self) -> None: method test_app_message_content_passthrough (line 97) | def test_app_message_content_passthrough(self) -> None: class TestSummarizationMessage (line 105) | class TestSummarizationMessage: method test_summarization_message_instantiates (line 108) | def test_summarization_message_instantiates(self) -> None: method test_summarization_message_is_app_message (line 113) | def test_summarization_message_is_app_message(self) -> None: method test_summarization_message_str_input (line 118) | def test_summarization_message_str_input(self) -> None: method test_summarization_message_content_passthrough (line 125) | def test_summarization_message_content_passthrough(self) -> None: class TestToolCallMessageMarkupSafety (line 133) | class TestToolCallMessageMarkupSafety: method test_tool_output_no_markup_error (line 137) | def test_tool_output_no_markup_error(self, output: str) -> None: method test_tool_call_with_bracket_args (line 143) | def test_tool_call_with_bracket_args(self) -> None: method test_tool_header_escapes_markup_in_label (line 149) | def test_tool_header_escapes_markup_in_label(self) -> None: method test_tool_args_line_escapes_markup_values (line 162) | def test_tool_args_line_escapes_markup_values(self) -> None: class TestToolCallMessageShellCommand (line 177) | class TestToolCallMessageShellCommand: method test_shell_error_includes_full_command (line 185) | def test_shell_error_includes_full_command(self) -> None: method test_shell_error_command_prefix (line 196) | def test_shell_error_command_prefix(self) -> None: method test_bash_error_includes_full_command (line 206) | def test_bash_error_includes_full_command(self) -> None: method test_execute_error_includes_full_command (line 215) | def test_execute_error_includes_full_command(self) -> None: method test_non_shell_error_unchanged (line 224) | def test_non_shell_error_unchanged(self) -> None: method test_shell_error_with_none_command (line 233) | def test_shell_error_with_none_command(self) -> None: method test_shell_error_with_empty_command (line 242) | def test_shell_error_with_empty_command(self) -> None: method test_shell_error_with_whitespace_command (line 251) | def test_shell_error_with_whitespace_command(self) -> None: method test_shell_error_with_no_command_key (line 259) | def test_shell_error_with_no_command_key(self) -> None: method test_format_shell_output_styles_only_first_line_dim (line 268) | def test_format_shell_output_styles_only_first_line_dim(self) -> None: class TestUserMessageHighlighting (line 284) | class TestUserMessageHighlighting: method test_at_mention_highlighted (line 287) | def test_at_mention_highlighted(self) -> None: method test_slash_command_highlighted_at_start (line 294) | def test_slash_command_highlighted_at_start(self) -> None: method test_slash_command_not_matched_mid_text (line 302) | def test_slash_command_not_matched_mid_text(self) -> None: method test_multiple_at_mentions (line 309) | def test_multiple_at_mentions(self) -> None: method test_at_mention_with_path (line 317) | def test_at_mention_with_path(self) -> None: method test_no_matches_in_plain_text (line 324) | def test_no_matches_in_plain_text(self) -> None: function _compose_content (line 331) | def _compose_content(widget: UserMessage | QueuedUserMessage) -> Content: class TestUserMessageModeRendering (line 340) | class TestUserMessageModeRendering: method test_shell_prefix_renders_dollar_indicator (line 343) | def test_shell_prefix_renders_dollar_indicator(self) -> None: method test_command_prefix_renders_slash_indicator (line 350) | def test_command_prefix_renders_slash_indicator(self) -> None: method test_normal_message_renders_angle_bracket (line 357) | def test_normal_message_renders_angle_bracket(self) -> None: method test_empty_content_renders_angle_bracket (line 364) | def test_empty_content_renders_angle_bracket(self) -> None: class TestQueuedUserMessageModeRendering (line 370) | class TestQueuedUserMessageModeRendering: method test_shell_prefix_renders_dimmed_dollar (line 373) | def test_shell_prefix_renders_dimmed_dollar(self) -> None: method test_command_prefix_renders_dimmed_slash (line 378) | def test_command_prefix_renders_dimmed_slash(self) -> None: method test_normal_message_renders_dimmed_angle_bracket (line 383) | def test_normal_message_renders_dimmed_angle_bracket(self) -> None: method test_empty_content_renders_angle_bracket (line 388) | def test_empty_content_renders_angle_bracket(self) -> None: class TestAppMessageAutoLinksDisabled (line 394) | class TestAppMessageAutoLinksDisabled: method test_auto_links_is_false (line 397) | def test_auto_links_is_false(self) -> None: class TestAppMessageOnClickOpensLink (line 405) | class TestAppMessageOnClickOpensLink: method test_click_on_link_opens_browser (line 408) | def test_click_on_link_opens_browser(self) -> None: method test_click_without_link_is_noop (line 420) | def test_click_without_link_is_noop(self) -> None: method test_click_with_browser_error_is_graceful (line 432) | def test_click_with_browser_error_is_graceful(self) -> None: method test_click_on_suspicious_url_is_blocked (line 443) | def test_click_on_suspicious_url_is_blocked(self) -> None: class TestShowTimestampToast (line 463) | class TestShowTimestampToast: method test_noop_when_widget_not_mounted (line 466) | def test_noop_when_widget_not_mounted(self) -> None: method test_noop_when_widget_id_is_none (line 476) | def test_noop_when_widget_id_is_none(self) -> None: method test_noop_when_message_not_in_store (line 484) | def test_noop_when_message_not_in_store(self) -> None: method test_shows_toast_with_formatted_timestamp (line 492) | def test_shows_toast_with_formatted_timestamp(self) -> None: class TestTimestampClickMixin (line 517) | class TestTimestampClickMixin: method test_mixin_classes_have_on_click (line 525) | def test_mixin_classes_have_on_click(self, cls: type) -> None: method test_tool_call_message_click_without_output_shows_toast (line 529) | def test_tool_call_message_click_without_output_shows_toast(self) -> N... method test_tool_call_message_click_with_output_toggles (line 541) | def test_tool_call_message_click_with_output_toggles(self) -> None: method test_app_message_click_shows_toast_alongside_link (line 557) | def test_app_message_click_shows_toast_alongside_link(self) -> None: class TestMountMessageIdSync (line 572) | class TestMountMessageIdSync: method test_widget_id_assigned_from_message_data (line 575) | def test_widget_id_assigned_from_message_data(self) -> None: method test_widget_with_existing_id_is_preserved (line 590) | def test_widget_with_existing_id_is_preserved(self) -> None: class TestGenericPreviewTruncation (line 603) | class TestGenericPreviewTruncation: method _make_msg (line 606) | def _make_msg(self, tool_name: str = "mcp_custom_tool") -> ToolCallMes... method test_unknown_tool_many_lines_truncated_in_preview (line 610) | def test_unknown_tool_many_lines_truncated_in_preview(self) -> None: method test_unknown_tool_long_single_line_truncated_in_preview (line 618) | def test_unknown_tool_long_single_line_truncated_in_preview(self) -> N... method test_unknown_tool_short_output_no_truncation (line 627) | def test_unknown_tool_short_output_no_truncation(self) -> None: method test_unknown_tool_exact_preview_lines_not_truncated (line 635) | def test_unknown_tool_exact_preview_lines_not_truncated(self) -> None: method test_unknown_tool_full_output_no_truncation (line 644) | def test_unknown_tool_full_output_no_truncation(self) -> None: FILE: libs/cli/tests/unit_tests/test_model_config.py function _clear_model_caches (line 37) | def _clear_model_caches() -> Iterator[None]: class TestModelSpec (line 44) | class TestModelSpec: method test_parse_valid_spec (line 47) | def test_parse_valid_spec(self) -> None: method test_parse_with_colons_in_model_name (line 53) | def test_parse_with_colons_in_model_name(self) -> None: method test_parse_raises_on_invalid_format (line 59) | def test_parse_raises_on_invalid_format(self) -> None: method test_parse_raises_on_empty_string (line 64) | def test_parse_raises_on_empty_string(self) -> None: method test_try_parse_returns_spec_on_success (line 69) | def test_try_parse_returns_spec_on_success(self) -> None: method test_try_parse_returns_none_on_failure (line 76) | def test_try_parse_returns_none_on_failure(self) -> None: method test_str_returns_provider_model_format (line 81) | def test_str_returns_provider_model_format(self) -> None: method test_equality (line 86) | def test_equality(self) -> None: method test_immutable (line 92) | def test_immutable(self) -> None: method test_validates_empty_provider (line 98) | def test_validates_empty_provider(self) -> None: method test_validates_empty_model (line 103) | def test_validates_empty_model(self) -> None: class TestHasProviderCredentials (line 109) | class TestHasProviderCredentials: method test_returns_none_for_unknown_provider (line 112) | def test_returns_none_for_unknown_provider(self): method test_returns_true_when_env_var_set (line 116) | def test_returns_true_when_env_var_set(self): method test_returns_false_when_env_var_not_set (line 121) | def test_returns_false_when_env_var_not_set(self): class TestThreadColumnPersistence (line 127) | class TestThreadColumnPersistence: method test_save_and_load_round_trip (line 130) | def test_save_and_load_round_trip(self, tmp_path): method test_load_merges_partial_config_with_defaults (line 147) | def test_load_merges_partial_config_with_defaults(self, tmp_path): class TestThreadRelativeTimePersistence (line 165) | class TestThreadRelativeTimePersistence: method test_save_and_load_round_trip (line 168) | def test_save_and_load_round_trip(self, tmp_path: Path) -> None: method test_default_is_true (line 182) | def test_default_is_true(self, tmp_path: Path) -> None: method test_preserves_other_config_sections (line 189) | def test_preserves_other_config_sections(self, tmp_path: Path) -> None: class TestThreadSortOrderPersistence (line 206) | class TestThreadSortOrderPersistence: method test_save_and_load_round_trip (line 209) | def test_save_and_load_round_trip(self, tmp_path: Path) -> None: method test_default_is_updated_at (line 223) | def test_default_is_updated_at(self, tmp_path: Path) -> None: method test_invalid_value_falls_back_to_default (line 230) | def test_invalid_value_falls_back_to_default(self, tmp_path: Path) -> ... method test_preserves_other_config_sections (line 238) | def test_preserves_other_config_sections(self, tmp_path: Path) -> None: class TestThreadConfigCoalesced (line 255) | class TestThreadConfigCoalesced: method test_defaults_when_no_file (line 258) | def test_defaults_when_no_file(self, tmp_path: Path) -> None: method test_reads_all_sections_from_one_parse (line 268) | def test_reads_all_sections_from_one_parse(self, tmp_path: Path) -> None: method test_matches_individual_loaders (line 292) | def test_matches_individual_loaders(self, tmp_path: Path) -> None: method test_corrupt_toml_returns_defaults (line 318) | def test_corrupt_toml_returns_defaults(self, tmp_path: Path) -> None: method test_default_path_uses_cache (line 329) | def test_default_path_uses_cache(self) -> None: method test_save_invalidates_cache (line 345) | def test_save_invalidates_cache(self, tmp_path: Path) -> None: method test_save_relative_time_invalidates_cache (line 366) | def test_save_relative_time_invalidates_cache(self, tmp_path: Path) ->... method test_save_sort_order_invalidates_cache (line 385) | def test_save_sort_order_invalidates_cache(self, tmp_path: Path) -> None: class TestProviderApiKeyEnv (line 405) | class TestProviderApiKeyEnv: method test_contains_major_providers (line 408) | def test_contains_major_providers(self): class TestModelConfigLoad (line 430) | class TestModelConfigLoad: method test_returns_empty_config_when_file_not_exists (line 433) | def test_returns_empty_config_when_file_not_exists(self, tmp_path): method test_loads_default_model (line 441) | def test_loads_default_model(self, tmp_path): method test_loads_providers (line 452) | def test_loads_providers(self, tmp_path): method test_loads_custom_base_url (line 474) | def test_loads_custom_base_url(self, tmp_path): method test_corrupt_toml_returns_empty_config (line 488) | def test_corrupt_toml_returns_empty_config(self, tmp_path, caplog): method test_unreadable_file_returns_empty_config (line 500) | def test_unreadable_file_returns_empty_config(self, tmp_path, caplog): class TestModelConfigGetAllModels (line 519) | class TestModelConfigGetAllModels: method test_returns_empty_list_when_no_providers (line 522) | def test_returns_empty_list_when_no_providers(self): method test_returns_model_provider_tuples (line 527) | def test_returns_model_provider_tuples(self, tmp_path): class TestModelConfigGetProviderForModel (line 545) | class TestModelConfigGetProviderForModel: method test_returns_none_for_unknown_model (line 548) | def test_returns_none_for_unknown_model(self): method test_returns_provider_name (line 553) | def test_returns_provider_name(self, tmp_path): class TestModelConfigHasCredentials (line 565) | class TestModelConfigHasCredentials: method test_returns_false_for_unknown_provider (line 568) | def test_returns_false_for_unknown_provider(self): method test_returns_none_when_no_key_configured (line 573) | def test_returns_none_when_no_key_configured(self, tmp_path): method test_returns_true_when_env_var_set (line 584) | def test_returns_true_when_env_var_set(self, tmp_path): method test_returns_false_when_env_var_not_set (line 597) | def test_returns_false_when_env_var_not_set(self, tmp_path): class TestModelConfigGetBaseUrl (line 611) | class TestModelConfigGetBaseUrl: method test_returns_none_for_unknown_provider (line 614) | def test_returns_none_for_unknown_provider(self): method test_returns_none_when_not_configured (line 619) | def test_returns_none_when_not_configured(self, tmp_path): method test_returns_base_url (line 630) | def test_returns_base_url(self, tmp_path): class TestModelConfigGetApiKeyEnv (line 643) | class TestModelConfigGetApiKeyEnv: method test_returns_none_for_unknown_provider (line 646) | def test_returns_none_for_unknown_provider(self): method test_returns_env_var_name (line 651) | def test_returns_env_var_name(self, tmp_path): class TestSaveDefaultModel (line 664) | class TestSaveDefaultModel: method test_creates_new_file (line 667) | def test_creates_new_file(self, tmp_path): method test_updates_existing_default (line 676) | def test_updates_existing_default(self, tmp_path): method test_adds_default_to_models_section (line 694) | def test_adds_default_to_models_section(self, tmp_path): method test_creates_parent_directory (line 706) | def test_creates_parent_directory(self, tmp_path): method test_saves_provider_model_format (line 713) | def test_saves_provider_model_format(self, tmp_path): method test_updates_to_provider_model_format (line 721) | def test_updates_to_provider_model_format(self, tmp_path): method test_preserves_existing_recent (line 734) | def test_preserves_existing_recent(self, tmp_path): class TestClearDefaultModel (line 748) | class TestClearDefaultModel: method test_removes_default_key (line 751) | def test_removes_default_key(self, tmp_path): method test_preserves_recent (line 764) | def test_preserves_recent(self, tmp_path): method test_preserves_providers (line 778) | def test_preserves_providers(self, tmp_path): method test_noop_when_no_default (line 794) | def test_noop_when_no_default(self, tmp_path): method test_noop_when_file_missing (line 807) | def test_noop_when_file_missing(self, tmp_path): class TestModelPersistenceBetweenSessions (line 815) | class TestModelPersistenceBetweenSessions: method test_saved_model_is_used_when_no_model_specified (line 822) | def test_saved_model_is_used_when_no_model_specified(self, tmp_path): method test_config_file_default_takes_priority_over_env_detection (line 861) | def test_config_file_default_takes_priority_over_env_detection(self, t... class TestGetAvailableModels (line 893) | class TestGetAvailableModels: method test_returns_discovered_models_when_package_installed (line 896) | def test_returns_discovered_models_when_package_installed(self): method test_logs_debug_on_import_error (line 922) | def test_logs_debug_on_import_error(self, caplog): class TestGetAvailableModelsMergesConfig (line 938) | class TestGetAvailableModelsMergesConfig: method test_merges_new_provider_from_config (line 941) | def test_merges_new_provider_from_config(self, tmp_path): method test_merges_new_models_into_existing_provider (line 961) | def test_merges_new_models_into_existing_provider(self, tmp_path): method test_does_not_duplicate_existing_models (line 990) | def test_does_not_duplicate_existing_models(self, tmp_path): method test_skips_config_provider_with_no_models_and_no_class_path (line 1018) | def test_skips_config_provider_with_no_models_and_no_class_path(self, ... class TestDisabledProviders (line 1037) | class TestDisabledProviders: method test_enabled_false_hides_registry_provider (line 1040) | def test_enabled_false_hides_registry_provider(self, tmp_path: Path) -... method test_enabled_false_hides_config_only_provider (line 1068) | def test_enabled_false_hides_config_only_provider(self, tmp_path: Path... method test_enabled_true_preserves_provider (line 1088) | def test_enabled_true_preserves_provider(self, tmp_path: Path) -> None: method test_enabled_false_excludes_from_profiles (line 1117) | def test_enabled_false_excludes_from_profiles(self, tmp_path: Path) ->... method test_enabled_false_excludes_config_only_from_profiles (line 1148) | def test_enabled_false_excludes_config_only_from_profiles( method test_disabled_provider_does_not_affect_others (line 1170) | def test_disabled_provider_does_not_affect_others(self, tmp_path: Path... class TestIsProviderEnabled (line 1205) | class TestIsProviderEnabled: method test_returns_true_when_not_in_config (line 1208) | def test_returns_true_when_not_in_config(self) -> None: method test_returns_true_when_enabled_not_set (line 1213) | def test_returns_true_when_enabled_not_set(self, tmp_path: Path) -> None: method test_returns_false_when_enabled_false (line 1223) | def test_returns_false_when_enabled_false(self, tmp_path: Path) -> None: method test_returns_true_for_nonempty_models_list (line 1233) | def test_returns_true_for_nonempty_models_list(self, tmp_path: Path) -... method test_enabled_false_takes_precedence_over_models (line 1243) | def test_enabled_false_takes_precedence_over_models(self, tmp_path: Pa... method test_string_false_not_treated_as_disabled (line 1254) | def test_string_false_not_treated_as_disabled( class TestProfileModuleFromClassPath (line 1270) | class TestProfileModuleFromClassPath: method test_derives_module_path (line 1273) | def test_derives_module_path(self): method test_returns_none_for_missing_colon (line 1280) | def test_returns_none_for_missing_colon(self): method test_single_segment_package (line 1284) | def test_single_segment_package(self): method test_returns_none_for_empty_module_part (line 1289) | def test_returns_none_for_empty_module_part(self): class TestClassPathProviderAutoDiscovery (line 1294) | class TestClassPathProviderAutoDiscovery: method test_get_available_models_discovers_class_path_profiles (line 1315) | def test_get_available_models_discovers_class_path_profiles(self, tmp_... method test_get_model_profiles_discovers_class_path_profiles (line 1345) | def test_get_model_profiles_discovers_class_path_profiles(self, tmp_pa... method test_get_model_profiles_class_path_import_failure_graceful (line 1377) | def test_get_model_profiles_class_path_import_failure_graceful(self, t... method test_class_path_profiles_merged_with_config_overrides (line 1396) | def test_class_path_profiles_merged_with_config_overrides(self, tmp_pa... method test_class_path_import_failure_graceful (line 1432) | def test_class_path_import_failure_graceful(self, tmp_path): method test_class_path_non_import_error_logs_warning (line 1451) | def test_class_path_non_import_error_logs_warning(self, tmp_path, capl... method test_explicit_models_list_skips_auto_discovery (line 1483) | def test_explicit_models_list_skips_auto_discovery(self, tmp_path): method test_skips_builtin_registry_providers (line 1511) | def test_skips_builtin_registry_providers(self, tmp_path): class TestHasProviderCredentialsFallback (line 1539) | class TestHasProviderCredentialsFallback: method test_falls_back_to_config_no_key_required (line 1542) | def test_falls_back_to_config_no_key_required(self, tmp_path): method test_falls_back_to_config_with_key_set (line 1552) | def test_falls_back_to_config_with_key_set(self, tmp_path): method test_falls_back_to_config_with_key_missing (line 1566) | def test_falls_back_to_config_with_key_missing(self, tmp_path): method test_class_path_provider_without_api_key_env_returns_true (line 1580) | def test_class_path_provider_without_api_key_env_returns_true(self, tm... method test_class_path_with_api_key_env_respects_env_var (line 1595) | def test_class_path_with_api_key_env_respects_env_var(self, tmp_path): method test_returns_none_for_totally_unknown_provider (line 1610) | def test_returns_none_for_totally_unknown_provider(self): class TestModelConfigGetClassPath (line 1619) | class TestModelConfigGetClassPath: method test_returns_none_for_unknown_provider (line 1622) | def test_returns_none_for_unknown_provider(self): method test_returns_none_when_not_configured (line 1627) | def test_returns_none_when_not_configured(self, tmp_path): method test_returns_class_path (line 1637) | def test_returns_class_path(self, tmp_path): class TestModelConfigGetKwargs (line 1649) | class TestModelConfigGetKwargs: method test_returns_empty_for_unknown_provider (line 1652) | def test_returns_empty_for_unknown_provider(self): method test_returns_empty_when_no_params (line 1657) | def test_returns_empty_when_no_params(self, tmp_path): method test_returns_params (line 1667) | def test_returns_params(self, tmp_path): method test_returns_copy (line 1682) | def test_returns_copy(self, tmp_path): class TestModelConfigGetKwargsPerModel (line 1699) | class TestModelConfigGetKwargsPerModel: method test_model_override_replaces_provider_value (line 1702) | def test_model_override_replaces_provider_value(self, tmp_path): method test_no_override_returns_provider_params (line 1721) | def test_no_override_returns_provider_params(self, tmp_path): method test_model_adds_new_keys (line 1739) | def test_model_adds_new_keys(self, tmp_path): method test_shallow_merge (line 1756) | def test_shallow_merge(self, tmp_path): method test_none_model_name_returns_provider_params (line 1775) | def test_none_model_name_returns_provider_params(self, tmp_path): method test_returns_copy_with_model_override (line 1792) | def test_returns_copy_with_model_override(self, tmp_path): method test_no_provider_params_only_model_subtable (line 1811) | def test_no_provider_params_only_model_subtable(self, tmp_path): class TestModelConfigGetProfileOverrides (line 1826) | class TestModelConfigGetProfileOverrides: method test_returns_empty_for_unknown_provider (line 1829) | def test_returns_empty_for_unknown_provider(self): method test_returns_empty_when_no_profile (line 1834) | def test_returns_empty_when_no_profile(self, tmp_path): method test_returns_provider_wide_overrides (line 1844) | def test_returns_provider_wide_overrides(self, tmp_path): method test_per_model_override_takes_precedence (line 1858) | def test_per_model_override_takes_precedence(self, tmp_path): method test_model_without_subtable_gets_provider_defaults (line 1877) | def test_model_without_subtable_gets_provider_defaults(self, tmp_path): method test_none_model_name_returns_provider_defaults (line 1896) | def test_none_model_name_returns_provider_defaults(self, tmp_path): method test_multiple_flat_keys_with_model_subtable (line 1913) | def test_multiple_flat_keys_with_model_subtable(self, tmp_path): class TestModelConfigValidateParams (line 1934) | class TestModelConfigValidateParams: method test_warns_on_unknown_model_in_params (line 1937) | def test_warns_on_unknown_model_in_params(self, tmp_path, caplog): method test_no_warning_when_model_in_list (line 1954) | def test_no_warning_when_model_in_list(self, tmp_path, caplog): method test_no_warning_when_no_model_overrides (line 1969) | def test_no_warning_when_no_model_overrides(self, tmp_path, caplog): class TestModelConfigValidateClassPath (line 1985) | class TestModelConfigValidateClassPath: method test_warns_on_invalid_class_path_format (line 1988) | def test_warns_on_invalid_class_path_format(self, tmp_path, caplog): method test_no_warning_on_valid_class_path (line 2001) | def test_no_warning_on_valid_class_path(self, tmp_path, caplog): class TestGetProviderProfileModules (line 2017) | class TestGetProviderProfileModules: method test_builds_from_builtin_providers (line 2020) | def test_builds_from_builtin_providers(self): method test_handles_submodule_paths (line 2040) | def test_handles_submodule_paths(self): class TestGetBuiltinProviders (line 2060) | class TestGetBuiltinProviders: method test_prefers_builtin_providers (line 2063) | def test_prefers_builtin_providers(self): method test_falls_back_to_supported_providers (line 2078) | def test_falls_back_to_supported_providers(self): method test_returns_empty_when_neither_exists (line 2098) | def test_returns_empty_when_neither_exists(self): class TestLoadProviderProfiles (line 2117) | class TestLoadProviderProfiles: method test_loads_profiles_from_file (line 2120) | def test_loads_profiles_from_file(self, tmp_path): method test_raises_import_error_when_package_not_found (line 2144) | def test_raises_import_error_when_package_not_found(self): method test_raises_import_error_when_profiles_missing (line 2152) | def test_raises_import_error_when_profiles_missing(self, tmp_path): method test_returns_empty_dict_when_no_profiles_attr (line 2174) | def test_returns_empty_dict_when_no_profiles_attr(self, tmp_path): method test_uses_submodule_search_locations_fallback (line 2196) | def test_uses_submodule_search_locations_fallback(self, tmp_path): class TestGetAvailableModelsTextIO (line 2220) | class TestGetAvailableModelsTextIO: method test_excludes_model_without_text_inputs (line 2223) | def test_excludes_model_without_text_inputs(self): method test_excludes_model_without_text_outputs (line 2245) | def test_excludes_model_without_text_outputs(self): method test_includes_model_with_text_io_true (line 2267) | def test_includes_model_with_text_io_true(self): method test_includes_model_without_text_io_fields (line 2291) | def test_includes_model_without_text_io_fields(self): class TestModelConfigError (line 2312) | class TestModelConfigError: method test_is_exception (line 2315) | def test_is_exception(self): method test_carries_message (line 2319) | def test_carries_message(self): class TestSaveRecentModel (line 2325) | class TestSaveRecentModel: method test_creates_new_file (line 2328) | def test_creates_new_file(self, tmp_path): method test_updates_existing_recent (line 2337) | def test_updates_existing_recent(self, tmp_path): method test_preserves_existing_default (line 2355) | def test_preserves_existing_default(self, tmp_path): method test_creates_parent_directory (line 2368) | def test_creates_parent_directory(self, tmp_path): class TestModelConfigLoadRecent (line 2376) | class TestModelConfigLoadRecent: method test_loads_recent_model (line 2379) | def test_loads_recent_model(self, tmp_path): method test_recent_model_none_when_absent (line 2390) | def test_recent_model_none_when_absent(self, tmp_path): method test_loads_both_default_and_recent (line 2401) | def test_loads_both_default_and_recent(self, tmp_path): class TestModelPrecedenceOrder (line 2415) | class TestModelPrecedenceOrder: method test_default_takes_priority_over_recent (line 2418) | def test_default_takes_priority_over_recent(self, tmp_path): method test_recent_takes_priority_over_env (line 2441) | def test_recent_takes_priority_over_env(self, tmp_path): method test_env_used_when_neither_set (line 2463) | def test_env_used_when_neither_set(self, tmp_path): class TestIsWarningSuppressed (line 2485) | class TestIsWarningSuppressed: method test_returns_true_when_key_present (line 2488) | def test_returns_true_when_key_present(self, tmp_path) -> None: method test_returns_false_when_key_absent (line 2495) | def test_returns_false_when_key_absent(self, tmp_path) -> None: method test_returns_false_when_file_missing (line 2502) | def test_returns_false_when_file_missing(self, tmp_path) -> None: method test_returns_false_on_corrupt_toml (line 2508) | def test_returns_false_on_corrupt_toml(self, tmp_path) -> None: method test_returns_false_when_no_warnings_section (line 2515) | def test_returns_false_when_no_warnings_section(self, tmp_path) -> None: class TestSuppressWarning (line 2523) | class TestSuppressWarning: method test_creates_file_with_key (line 2526) | def test_creates_file_with_key(self, tmp_path) -> None: method test_adds_to_existing_list (line 2536) | def test_adds_to_existing_list(self, tmp_path) -> None: method test_deduplicates (line 2547) | def test_deduplicates(self, tmp_path) -> None: method test_preserves_other_config (line 2560) | def test_preserves_other_config(self, tmp_path) -> None: class TestGetModelProfiles (line 2575) | class TestGetModelProfiles: method test_returns_upstream_profiles (line 2578) | def test_returns_upstream_profiles(self) -> None: method test_merges_config_overrides (line 2606) | def test_merges_config_overrides(self, tmp_path: Path) -> None: method test_config_only_model_no_upstream (line 2643) | def test_config_only_model_no_upstream(self, tmp_path: Path) -> None: method test_cache_cleared (line 2667) | def test_cache_cleared(self) -> None: method test_overridden_keys_subset_of_profile (line 2689) | def test_overridden_keys_subset_of_profile(self, tmp_path: Path) -> None: method test_cli_override_merged_on_top (line 2726) | def test_cli_override_merged_on_top(self) -> None: method test_cli_override_skips_cache (line 2753) | def test_cli_override_skips_cache(self) -> None: method test_cli_override_on_config_only_model (line 2773) | def test_cli_override_on_config_only_model(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_model_selector.py class ModelSelectorTestApp (line 15) | class ModelSelectorTestApp(App): method __init__ (line 18) | def __init__(self) -> None: method compose (line 23) | def compose(self) -> ComposeResult: method show_selector (line 26) | def show_selector(self) -> None: class AppWithEscapeBinding (line 40) | class AppWithEscapeBinding(App): method __init__ (line 51) | def __init__(self) -> None: method compose (line 57) | def compose(self) -> ComposeResult: method action_interrupt (line 60) | def action_interrupt(self) -> None: method show_selector (line 67) | def show_selector(self) -> None: class TestModelSelectorEscapeKey (line 81) | class TestModelSelectorEscapeKey: method test_escape_dismisses_modal (line 84) | async def test_escape_dismisses_modal(self) -> None: method test_escape_works_when_input_focused (line 98) | async def test_escape_works_when_input_focused(self) -> None: method test_escape_with_conflicting_app_binding (line 116) | async def test_escape_with_conflicting_app_binding(self) -> None: class TestModelSelectorKeyboardNavigation (line 138) | class TestModelSelectorKeyboardNavigation: method test_down_arrow_moves_selection (line 141) | async def test_down_arrow_moves_selection(self) -> None: method test_up_arrow_moves_selection (line 157) | async def test_up_arrow_moves_selection(self) -> None: method test_enter_selects_model (line 176) | async def test_enter_selects_model(self) -> None: class TestModelSelectorFiltering (line 192) | class TestModelSelectorFiltering: method test_typing_filters_models (line 195) | async def test_typing_filters_models(self) -> None: method test_custom_model_spec_entry (line 211) | async def test_custom_model_spec_entry(self) -> None: method test_enter_selects_highlighted_model_not_filter_text (line 230) | async def test_enter_selects_highlighted_model_not_filter_text(self) -... class TestModelSelectorCurrentModelPreselection (line 260) | class TestModelSelectorCurrentModelPreselection: method test_current_model_is_preselected (line 263) | async def test_current_model_is_preselected(self) -> None: method test_clearing_filter_reselects_current_model (line 288) | async def test_clearing_filter_reselects_current_model(self) -> None: class TestModelSelectorFuzzyMatching (line 322) | class TestModelSelectorFuzzyMatching: method test_fuzzy_exact_substring_still_works (line 325) | async def test_fuzzy_exact_substring_still_works(self) -> None: method test_fuzzy_subsequence_match (line 344) | async def test_fuzzy_subsequence_match(self) -> None: method test_fuzzy_across_hyphen (line 363) | async def test_fuzzy_across_hyphen(self) -> None: method test_fuzzy_case_insensitive (line 382) | async def test_fuzzy_case_insensitive(self) -> None: method test_fuzzy_no_match (line 402) | async def test_fuzzy_no_match(self) -> None: method test_fuzzy_ranking_better_match_first (line 418) | async def test_fuzzy_ranking_better_match_first(self) -> None: method test_empty_filter_shows_all (line 437) | async def test_empty_filter_shows_all(self) -> None: method test_whitespace_filter_shows_all (line 450) | async def test_whitespace_filter_shows_all(self) -> None: method test_selection_clamped_on_filter (line 465) | async def test_selection_clamped_on_filter(self) -> None: method test_enter_selects_fuzzy_result (line 490) | async def test_enter_selects_fuzzy_result(self) -> None: method test_fuzzy_space_separated_tokens (line 514) | async def test_fuzzy_space_separated_tokens(self) -> None: method test_tab_noop_when_no_matches (line 534) | async def test_tab_noop_when_no_matches(self) -> None: method test_tab_autocompletes_after_navigation (line 558) | async def test_tab_autocompletes_after_navigation(self) -> None: method test_tab_autocompletes_selected_model (line 591) | async def test_tab_autocompletes_selected_model(self) -> None: method test_navigation_after_fuzzy_filter (line 616) | async def test_navigation_after_fuzzy_filter(self) -> None: class TestFilteredModelsWidgetSync (line 638) | class TestFilteredModelsWidgetSync: method test_display_reorders_filtered_models_to_match_widgets (line 641) | def test_display_reorders_filtered_models_to_match_widgets(self) -> None: class TestFormatOptionLabel (line 682) | class TestFormatOptionLabel: method test_deprecated_model_shows_tag (line 685) | def test_deprecated_model_shows_tag(self) -> None: method test_non_deprecated_model_no_tag (line 697) | def test_non_deprecated_model_no_tag(self) -> None: method test_other_status_renders_yellow (line 708) | def test_other_status_renders_yellow(self) -> None: method test_all_suffixes_coexist (line 721) | def test_all_suffixes_coexist(self) -> None: class TestGetModelStatus (line 736) | class TestGetModelStatus: method test_returns_status_when_present (line 739) | def test_returns_status_when_present(self) -> None: method test_returns_none_when_no_profile_entry (line 750) | def test_returns_none_when_no_profile_entry(self) -> None: method test_returns_none_when_no_status_key (line 756) | def test_returns_none_when_no_status_key(self) -> None: method test_returns_none_when_profile_empty (line 767) | def test_returns_none_when_profile_empty(self) -> None: class TestModelDetailFooter (line 779) | class TestModelDetailFooter: method test_format_footer_full_profile (line 782) | def test_format_footer_full_profile(self) -> None: method test_format_footer_no_profile (line 811) | def test_format_footer_no_profile(self) -> None: method test_format_footer_overridden_fields (line 818) | def test_format_footer_overridden_fields(self) -> None: method test_format_footer_partial_profile (line 837) | def test_format_footer_partial_profile(self) -> None: method test_format_footer_empty_profile (line 852) | def test_format_footer_empty_profile(self) -> None: method test_format_footer_override_on_non_displayed_key (line 864) | def test_format_footer_override_on_non_displayed_key(self) -> None: method test_format_footer_non_numeric_tokens (line 876) | def test_format_footer_non_numeric_tokens(self) -> None: method test_footer_updates_on_navigation (line 890) | async def test_footer_updates_on_navigation(self) -> None: method test_footer_shows_on_mount (line 910) | async def test_footer_shows_on_mount(self) -> None: method test_footer_no_model_when_filter_empty (line 924) | async def test_footer_no_model_when_filter_empty(self) -> None: FILE: libs/cli/tests/unit_tests/test_model_switch.py function _make_remote_agent (line 16) | def _make_remote_agent() -> RemoteAgent: class _FakeModelResult (line 21) | class _FakeModelResult: method __init__ (line 24) | def __init__(self, *, model_name: str, provider: str, context_limit: i... method apply_to_settings (line 29) | def apply_to_settings(self) -> None: function _restore_settings (line 37) | def _restore_settings() -> Iterator[None]: function mock_create_model (line 49) | def mock_create_model() -> Iterator[Mock]: class TestModelSwitchNoOp (line 88) | class TestModelSwitchNoOp: method test_no_message_when_switching_to_same_model (line 91) | async def test_no_message_when_switching_to_same_model(self) -> None: class TestModelSwitchErrorHandling (line 133) | class TestModelSwitchErrorHandling: method test_missing_credentials_shows_error (line 136) | async def test_missing_credentials_shows_error(self) -> None: method test_save_recent_model_failure_shows_warning (line 172) | async def test_save_recent_model_failure_shows_warning(self) -> None: method test_remote_agent_sets_model_override (line 215) | async def test_remote_agent_sets_model_override(self) -> None: method test_remote_agent_refreshes_model_metadata (line 250) | async def test_remote_agent_refreshes_model_metadata( method test_remote_agent_sets_model_params_override (line 284) | async def test_remote_agent_sets_model_params_override(self) -> None: class TestModelSwitchConcurrencyGuard (line 312) | class TestModelSwitchConcurrencyGuard: method test_concurrent_model_switch_blocked (line 315) | async def test_concurrent_model_switch_blocked(self) -> None: method test_model_switching_flag_reset_on_success (line 335) | async def test_model_switching_flag_reset_on_success(self) -> None: class TestModelSwitchConfigProvider (line 356) | class TestModelSwitchConfigProvider: method setup_method (line 359) | def setup_method(self) -> None: method test_switch_to_config_provider_no_whitelist_error (line 363) | async def test_switch_to_config_provider_no_whitelist_error(self, tmp_... method test_switch_config_provider_missing_credentials (line 409) | async def test_switch_config_provider_missing_credentials(self, tmp_pa... method test_switch_to_ollama_no_key_required (line 443) | async def test_switch_to_ollama_no_key_required(self, tmp_path) -> None: class TestModelSwitchBareModelName (line 480) | class TestModelSwitchBareModelName: method test_bare_model_name_auto_detects_provider (line 483) | async def test_bare_model_name_auto_detects_provider(self) -> None: method test_bare_model_name_missing_credentials (line 518) | async def test_bare_model_name_missing_credentials(self) -> None: method test_bare_model_name_already_using (line 553) | async def test_bare_model_name_already_using(self) -> None: class TestExtractModelParamsFlag (line 584) | class TestExtractModelParamsFlag: method test_no_flag (line 587) | def test_no_flag(self) -> None: method test_single_quoted_json (line 593) | def test_single_quoted_json(self) -> None: method test_double_quoted_json_with_escaped_quotes (line 600) | def test_double_quoted_json_with_escaped_quotes(self) -> None: method test_bare_braces (line 607) | def test_bare_braces(self) -> None: method test_bare_braces_with_model_after (line 614) | def test_bare_braces_with_model_after(self) -> None: method test_model_before_flag (line 621) | def test_model_before_flag(self) -> None: method test_missing_value_raises (line 628) | def test_missing_value_raises(self) -> None: method test_invalid_json_raises (line 633) | def test_invalid_json_raises(self) -> None: method test_non_dict_json_raises (line 638) | def test_non_dict_json_raises(self) -> None: method test_unclosed_quote_raises (line 643) | def test_unclosed_quote_raises(self) -> None: method test_unbalanced_braces_raises (line 648) | def test_unbalanced_braces_raises(self) -> None: method test_with_default_flag (line 653) | def test_with_default_flag(self) -> None: method test_empty_object (line 663) | def test_empty_object(self) -> None: class TestModelCommandIntegration (line 670) | class TestModelCommandIntegration: method test_invalid_model_params_shows_error (line 673) | async def test_invalid_model_params_shows_error(self) -> None: method test_model_params_with_default_rejected (line 692) | async def test_model_params_with_default_rejected(self) -> None: FILE: libs/cli/tests/unit_tests/test_non_interactive.py function console (line 26) | def console() -> Console: class TestMakeHitlDecision (line 31) | class TestMakeHitlDecision: method test_non_shell_action_approved (line 34) | def test_non_shell_action_approved(self, console: Console) -> None: method test_shell_without_allow_list_rejected (line 41) | def test_shell_without_allow_list_rejected(self, console: Console) -> ... method test_shell_allowed_command_approved (line 51) | def test_shell_allowed_command_approved(self, console: Console) -> None: method test_shell_disallowed_command_rejected (line 60) | def test_shell_disallowed_command_rejected(self, console: Console) -> ... method test_shell_rejected_message_includes_allowed_commands (line 71) | def test_shell_rejected_message_includes_allowed_commands( method test_empty_action_name_approved (line 83) | def test_empty_action_name_approved(self, console: Console) -> None: method test_shell_piped_command_allowed (line 88) | def test_shell_piped_command_allowed(self, console: Console) -> None: method test_shell_piped_command_with_disallowed_segment (line 97) | def test_shell_piped_command_with_disallowed_segment( method test_shell_dangerous_pattern_rejected (line 108) | def test_shell_dangerous_pattern_rejected(self, console: Console) -> N... method test_shell_with_allow_all_approved (line 117) | def test_shell_with_allow_all_approved(self, console: Console) -> None: method test_all_shell_tool_names_recognised (line 127) | def test_all_shell_tool_names_recognised( method test_collect_action_request_warnings_for_hidden_unicode (line 138) | def test_collect_action_request_warnings_for_hidden_unicode(self) -> N... method test_collect_action_request_warnings_for_suspicious_url (line 146) | def test_collect_action_request_warnings_for_suspicious_url(self) -> N... method test_collect_action_request_warnings_nested_values (line 154) | def test_collect_action_request_warnings_nested_values(self) -> None: class TestBuildNonInteractiveHeader (line 166) | class TestBuildNonInteractiveHeader: method test_includes_agent_id (line 169) | def test_includes_agent_id(self) -> None: method test_default_agent_label (line 178) | def test_default_agent_label(self) -> None: method test_includes_model_name (line 185) | def test_includes_model_name(self) -> None: method test_omits_model_when_none (line 192) | def test_omits_model_when_none(self) -> None: method test_includes_thread_id (line 199) | def test_includes_thread_id(self) -> None: method test_thread_clickable_when_url_available (line 206) | def test_thread_clickable_when_url_available(self) -> None: method test_default_header_does_not_lookup_langsmith (line 229) | def test_default_header_does_not_lookup_langsmith(self) -> None: class TestSandboxTypeForwarding (line 241) | class TestSandboxTypeForwarding: method test_sandbox_type_passed_to_server (line 244) | async def test_sandbox_type_passed_to_server(self) -> None: class TestQuietMode (line 289) | class TestQuietMode: method test_console_creation (line 299) | async def test_console_creation( method test_quiet_stdout_contains_only_agent_text (line 346) | async def test_quiet_stdout_contains_only_agent_text(self) -> None: class TestNoStreamMode (line 416) | class TestNoStreamMode: method test_no_stream_buffers_output (line 419) | async def test_no_stream_buffers_output(self) -> None: method test_stream_mode_writes_incrementally (line 489) | async def test_stream_mode_writes_incrementally(self) -> None: class TestFastFollowLangsmithLink (line 559) | class TestFastFollowLangsmithLink: method test_prints_link_when_lookup_ready (line 562) | async def test_prints_link_when_lookup_ready(self) -> None: method test_skips_link_when_lookup_not_ready (line 616) | async def test_skips_link_when_lookup_not_ready(self) -> None: method test_skips_link_when_lookup_done_but_url_none (line 669) | async def test_skips_link_when_lookup_done_but_url_none(self) -> None: method test_quiet_mode_skips_thread_url_lookup (line 720) | async def test_quiet_mode_skips_thread_url_lookup(self) -> None: class TestStartLangsmithThreadUrlLookup (line 764) | class TestStartLangsmithThreadUrlLookup: method test_sets_url_on_success (line 767) | def test_sets_url_on_success(self) -> None: method test_signals_done_on_exception (line 778) | def test_signals_done_on_exception(self) -> None: method test_signals_done_when_url_is_none (line 788) | def test_signals_done_when_url_is_none(self) -> None: class TestShellAllowListDecisionLogic (line 799) | class TestShellAllowListDecisionLogic: method test_shell_auto_approve_branches (line 822) | async def test_shell_auto_approve_branches( class TestNonInteractivePrompt (line 868) | class TestNonInteractivePrompt: method test_passes_interactive_false (line 871) | async def test_passes_interactive_false(self) -> None: function _async_iter (line 912) | async def _async_iter(items: list[object]) -> AsyncIterator[object]: # ... FILE: libs/cli/tests/unit_tests/test_offload.py function _make_messages (line 30) | def _make_messages(n: int) -> list[MagicMock]: function _make_offload_result (line 42) | def _make_offload_result( function _make_threshold_not_met (line 73) | def _make_threshold_not_met( function _setup_offload_app (line 89) | def _setup_offload_app( class TestOffloadInAutocomplete (line 121) | class TestOffloadInAutocomplete: method test_offload_in_slash_commands (line 124) | def test_offload_in_slash_commands(self) -> None: method test_offload_sorted_alphabetically (line 129) | def test_offload_sorted_alphabetically(self) -> None: class TestOffloadGuards (line 138) | class TestOffloadGuards: method test_no_agent_shows_error (line 141) | async def test_no_agent_shows_error(self) -> None: method test_agent_running_shows_error (line 155) | async def test_agent_running_shows_error(self) -> None: method test_cutoff_zero_shows_not_enough (line 173) | async def test_cutoff_zero_shows_not_enough(self) -> None: method test_empty_state_shows_error (line 194) | async def test_empty_state_shows_error(self) -> None: method test_state_read_failure_shows_error (line 214) | async def test_state_read_failure_shows_error(self) -> None: class TestOffloadSuccess (line 235) | class TestOffloadSuccess: method test_successful_offload_sets_event (line 238) | async def test_successful_offload_sets_event(self) -> None: method test_offload_shows_feedback_message (line 267) | async def test_offload_shows_feedback_message(self) -> None: method test_offload_updates_token_tracker (line 287) | async def test_offload_updates_token_tracker(self) -> None: method test_no_ui_clear_reload (line 307) | async def test_no_ui_clear_reload(self) -> None: class TestOffloadEdgeCases (line 336) | class TestOffloadEdgeCases: method test_cutoff_zero_does_not_update_state (line 339) | async def test_cutoff_zero_does_not_update_state(self) -> None: method test_cutoff_zero_overhead_dominated (line 361) | async def test_cutoff_zero_overhead_dominated(self) -> None: method test_cutoff_one_offloads_single_message (line 384) | async def test_cutoff_one_offloads_single_message(self) -> None: method test_perform_offload_called_with_correct_args (line 410) | async def test_perform_offload_called_with_correct_args(self) -> None: class TestReOffload (line 447) | class TestReOffload: method test_reoffload_calculates_absolute_cutoff (line 450) | async def test_reoffload_calculates_absolute_cutoff(self) -> None: class TestAgentRunningGuard (line 497) | class TestAgentRunningGuard: method test_agent_running_set_during_offload (line 500) | async def test_agent_running_set_during_offload(self) -> None: method test_agent_running_reset_after_failure (line 526) | async def test_agent_running_reset_after_failure(self) -> None: class TestOffloadErrorHandling (line 544) | class TestOffloadErrorHandling: method test_offload_failure_proceeds_without_path (line 547) | async def test_offload_failure_proceeds_without_path(self) -> None: method test_summary_generation_failure_shows_error (line 577) | async def test_summary_generation_failure_shows_error(self) -> None: method test_state_update_failure_shows_error (line 598) | async def test_state_update_failure_shows_error(self) -> None: method test_spinner_hidden_after_failure (line 621) | async def test_spinner_hidden_after_failure(self) -> None: class TestCreateModelFailure (line 647) | class TestCreateModelFailure: method test_create_model_failure_shows_error (line 650) | async def test_create_model_failure_shows_error(self) -> None: class TestOffloadMessagesToBackend (line 677) | class TestOffloadMessagesToBackend: method test_filters_summary_messages (line 680) | async def test_filters_summary_messages(self) -> None: method test_all_summary_messages_returns_empty (line 707) | async def test_all_summary_messages_returns_empty(self) -> None: method test_appends_to_existing_content (line 723) | async def test_appends_to_existing_content(self) -> None: method test_creates_new_file_when_none_exists (line 751) | async def test_creates_new_file_when_none_exists(self) -> None: method test_read_failure_returns_none (line 777) | async def test_read_failure_returns_none(self) -> None: method test_write_failure_returns_none (line 797) | async def test_write_failure_returns_none(self) -> None: method test_write_error_result_returns_none (line 819) | async def test_write_error_result_returns_none(self) -> None: class TestOffloadRouting (line 844) | class TestOffloadRouting: method test_offload_routed_from_handle_command (line 847) | async def test_offload_routed_from_handle_command(self) -> None: method test_compact_alias_routed_from_handle_command (line 861) | async def test_compact_alias_routed_from_handle_command(self) -> None: class TestOffloadRemoteFallback (line 876) | class TestOffloadRemoteFallback: method test_resumed_remote_thread_uses_checkpointer_state (line 879) | async def test_resumed_remote_thread_uses_checkpointer_state(self) -> ... class TestFormatTokenCount (line 949) | class TestFormatTokenCount: method test_zero (line 952) | def test_zero(self) -> None: method test_below_threshold (line 955) | def test_below_threshold(self) -> None: method test_at_threshold (line 958) | def test_at_threshold(self) -> None: method test_above_threshold (line 961) | def test_above_threshold(self) -> None: method test_large_value (line 964) | def test_large_value(self) -> None: method test_millions (line 967) | def test_millions(self) -> None: method test_above_million (line 970) | def test_above_million(self) -> None: class TestFormatOffloadLimit (line 974) | class TestFormatOffloadLimit: method test_format_messages_limit (line 977) | def test_format_messages_limit(self) -> None: method test_format_tokens_limit (line 980) | def test_format_tokens_limit(self) -> None: method test_format_fraction_limit_with_context (line 983) | def test_format_fraction_limit_with_context(self) -> None: method test_format_fraction_limit_without_context (line 986) | def test_format_fraction_limit_without_context(self) -> None: method test_format_messages_singular (line 989) | def test_format_messages_singular(self) -> None: method test_format_unknown_keep_type (line 992) | def test_format_unknown_keep_type(self) -> None: method test_format_fraction_with_zero_context (line 996) | def test_format_fraction_with_zero_context(self) -> None: class TestOffloadProfileOverride (line 1000) | class TestOffloadProfileOverride: method test_offload_passes_context_limit_to_perform_offload (line 1007) | async def test_offload_passes_context_limit_to_perform_offload(self) -... method test_offload_passes_matching_context_limit (line 1030) | async def test_offload_passes_matching_context_limit(self) -> None: method test_offload_override_triggers_offload (line 1053) | async def test_offload_override_triggers_offload(self) -> None: method test_offload_override_none_passes_none (line 1082) | async def test_offload_override_none_passes_none(self) -> None: method test_offload_passes_profile_overrides (line 1105) | async def test_offload_passes_profile_overrides(self) -> None: function _mock_perform_deps (line 1141) | def _mock_perform_deps( class TestPerformOffload (line 1171) | class TestPerformOffload: method test_success_returns_offload_result (line 1174) | async def test_success_returns_offload_result(self) -> None: method test_cutoff_zero_returns_threshold_not_met (line 1204) | async def test_cutoff_zero_returns_threshold_not_met(self) -> None: method test_model_creation_failure_raises_offload_model_error (line 1232) | async def test_model_creation_failure_raises_offload_model_error(self)... method test_context_limit_patches_model_profile (line 1251) | async def test_context_limit_patches_model_profile(self) -> None: method test_context_limit_none_skips_patching (line 1278) | async def test_context_limit_none_skips_patching(self) -> None: method test_no_model_profile_creates_new_dict (line 1305) | async def test_no_model_profile_creates_new_dict(self) -> None: method test_backend_none_uses_filesystem_backend (line 1331) | async def test_backend_none_uses_filesystem_backend(self) -> None: method test_backend_write_failure_sets_offload_warning (line 1360) | async def test_backend_write_failure_sets_offload_warning(self) -> None: FILE: libs/cli/tests/unit_tests/test_output.py class TestWriteJson (line 11) | class TestWriteJson: method test_envelope_structure (line 14) | def test_envelope_structure(self) -> None: method test_list_data (line 22) | def test_list_data(self) -> None: method test_dict_data (line 32) | def test_dict_data(self) -> None: method test_path_serialization (line 40) | def test_path_serialization(self) -> None: method test_trailing_newline (line 48) | def test_trailing_newline(self) -> None: method test_single_line (line 56) | def test_single_line(self) -> None: FILE: libs/cli/tests/unit_tests/test_prompts.py function test_remember_prompt_is_nonempty_string (line 6) | def test_remember_prompt_is_nonempty_string() -> None: FILE: libs/cli/tests/unit_tests/test_reload.py class TestReloadFromEnvironment (line 23) | class TestReloadFromEnvironment: method _clear_reload_env (line 27) | def _clear_reload_env(self, monkeypatch: pytest.MonkeyPatch) -> None: method _stub_dotenv_load (line 33) | def _stub_dotenv_load(self, monkeypatch: pytest.MonkeyPatch) -> None: method test_picks_up_new_api_key (line 44) | def test_picks_up_new_api_key( method test_preserves_model_state (line 57) | def test_preserves_model_state( method test_no_changes_returns_empty (line 75) | def test_no_changes_returns_empty(self, tmp_path: Path) -> None: method test_masks_api_keys_in_report (line 82) | def test_masks_api_keys_in_report( method test_api_key_removal_shows_unset (line 99) | def test_api_key_removal_shows_unset( method test_empty_api_key_treated_as_none (line 112) | def test_empty_api_key_treated_as_none( method test_updates_shell_allow_list (line 123) | def test_updates_shell_allow_list( method test_calls_dotenv_load (line 137) | def test_calls_dotenv_load( method test_multiple_simultaneous_changes (line 151) | def test_multiple_simultaneous_changes( class TestReloadErrorPaths (line 167) | class TestReloadErrorPaths: method _clear_reload_env (line 171) | def _clear_reload_env(self, monkeypatch: pytest.MonkeyPatch) -> None: method _stub_dotenv_load (line 177) | def _stub_dotenv_load(self, monkeypatch: pytest.MonkeyPatch) -> None: method test_invalid_shell_allow_list_keeps_previous (line 188) | def test_invalid_shell_allow_list_keeps_previous( method test_deleted_cwd_keeps_previous_project_root (line 202) | def test_deleted_cwd_keeps_previous_project_root( method test_settings_consistent_after_partial_failure (line 221) | def test_settings_consistent_after_partial_failure( class TestReloadInAutocomplete (line 239) | class TestReloadInAutocomplete: method test_reload_in_slash_commands (line 242) | def test_reload_in_slash_commands(self) -> None: FILE: libs/cli/tests/unit_tests/test_remote_client.py class TestPrepareConfig (line 28) | class TestPrepareConfig: method test_preserves_thread_id (line 29) | def test_preserves_thread_id(self) -> None: method test_none_config (line 34) | def test_none_config(self) -> None: method test_does_not_mutate_original (line 38) | def test_does_not_mutate_original(self) -> None: method test_missing_configurable_key (line 44) | def test_missing_configurable_key(self) -> None: method test_empty_string_thread_id_not_converted (line 48) | def test_empty_string_thread_id_not_converted(self) -> None: class TestConvertMessageData (line 58) | class TestConvertMessageData: method test_ai_message_text (line 59) | def test_ai_message_text(self) -> None: method test_ai_message_with_tool_call_chunks (line 65) | def test_ai_message_with_tool_call_chunks(self) -> None: method test_ai_message_with_string_args_tool_calls (line 84) | def test_ai_message_with_string_args_tool_calls(self) -> None: method test_ai_message_with_dict_args_tool_calls (line 99) | def test_ai_message_with_dict_args_tool_calls(self) -> None: method test_ai_message_usage_metadata (line 111) | def test_ai_message_usage_metadata(self) -> None: method test_ai_message_type_alias (line 126) | def test_ai_message_type_alias(self) -> None: method test_human_message (line 131) | def test_human_message(self) -> None: method test_human_message_type_alias (line 136) | def test_human_message_type_alias(self) -> None: method test_tool_message (line 143) | def test_tool_message(self) -> None: method test_tool_message_type_alias (line 157) | def test_tool_message_type_alias(self) -> None: method test_tool_message_defaults (line 170) | def test_tool_message_defaults(self) -> None: method test_unknown_type_returns_none (line 178) | def test_unknown_type_returns_none(self) -> None: class TestConvertInterrupts (line 187) | class TestConvertInterrupts: method test_dicts_to_interrupt_objects (line 188) | def test_dicts_to_interrupt_objects(self) -> None: method test_interrupt_objects_passed_through (line 197) | def test_interrupt_objects_passed_through(self) -> None: method test_non_list_wraps_value (line 204) | def test_non_list_wraps_value(self) -> None: method test_none_returns_empty (line 207) | def test_none_returns_empty(self) -> None: method test_dict_without_value_passed_through (line 210) | def test_dict_without_value_passed_through(self) -> None: method test_interrupt_dict_missing_id_defaults_to_empty (line 215) | def test_interrupt_dict_missing_id_defaults_to_empty(self) -> None: function _make_agent (line 229) | def _make_agent( function _config (line 248) | def _config() -> dict[str, Any]: class TestRemoteAgentAstream (line 257) | class TestRemoteAgentAstream: method test_text_message_converted (line 258) | async def test_text_message_converted(self) -> None: method test_tool_message_converted (line 272) | async def test_tool_message_converted(self) -> None: method test_updates_with_interrupt_converted (line 297) | async def test_updates_with_interrupt_converted(self) -> None: method test_updates_without_interrupt_passed_through (line 316) | async def test_updates_without_interrupt_passed_through(self) -> None: method test_namespace_preserved (line 327) | async def test_namespace_preserved(self) -> None: method test_unknown_message_type_skipped (line 342) | async def test_unknown_message_type_skipped(self) -> None: method test_missing_thread_id_raises (line 351) | async def test_missing_thread_id_raises(self) -> None: method test_rapid_streaming (line 358) | async def test_rapid_streaming(self) -> None: method test_non_dict_message_object_passed_through (line 376) | async def test_non_dict_message_object_passed_through(self) -> None: method test_meta_none_defaults_to_empty_dict (line 388) | async def test_meta_none_defaults_to_empty_dict(self) -> None: method test_unknown_mode_passed_through (line 397) | async def test_unknown_mode_passed_through(self) -> None: method test_non_dict_updates_falls_through (line 407) | async def test_non_dict_updates_falls_through(self) -> None: class TestRemoteAgentGetState (line 423) | class TestRemoteAgentGetState: method test_returns_state_on_success (line 424) | async def test_returns_state_on_success(self) -> None: method test_raises_when_thread_id_missing (line 434) | async def test_raises_when_thread_id_missing(self) -> None: method test_returns_none_on_not_found (line 439) | async def test_returns_none_on_not_found(self) -> None: method test_propagates_non_404_exception (line 454) | async def test_propagates_non_404_exception(self) -> None: method test_normalizes_config (line 463) | async def test_normalizes_config(self) -> None: class TestRemoteAgentUpdateState (line 479) | class TestRemoteAgentUpdateState: method test_delegates_to_graph (line 480) | async def test_delegates_to_graph(self) -> None: method test_raises_when_thread_id_missing (line 489) | async def test_raises_when_thread_id_missing(self) -> None: method test_propagates_exception (line 494) | async def test_propagates_exception(self) -> None: method test_normalizes_config (line 503) | async def test_normalizes_config(self) -> None: class TestRemoteAgentEnsureThread (line 516) | class TestRemoteAgentEnsureThread: method test_creates_thread_with_do_nothing (line 519) | async def test_creates_thread_with_do_nothing(self) -> None: method test_raises_when_thread_id_missing (line 543) | async def test_raises_when_thread_id_missing(self) -> None: class TestRemoteAgentInit (line 556) | class TestRemoteAgentInit: method test_api_key_passed_to_remote_graph (line 557) | def test_api_key_passed_to_remote_graph(self) -> None: method test_headers_passed_to_remote_graph (line 573) | def test_headers_passed_to_remote_graph(self) -> None: method test_defaults_no_auth (line 590) | def test_defaults_no_auth(self) -> None: method test_graph_lazy_singleton (line 602) | def test_graph_lazy_singleton(self) -> None: class TestRemoteAgentWithConfig (line 612) | class TestRemoteAgentWithConfig: method test_returns_self (line 613) | def test_returns_self(self) -> None: FILE: libs/cli/tests/unit_tests/test_sandbox_factory.py function test_get_provider_raises_helpful_error_for_missing_optional_dependency (line 23) | def test_get_provider_raises_helpful_error_for_missing_optional_dependency( class TestVerifySandboxDeps (line 42) | class TestVerifySandboxDeps: method test_raises_import_error_when_backend_missing (line 53) | def test_raises_import_error_when_backend_missing( method test_passes_when_backend_installed (line 77) | def test_passes_when_backend_installed(self, provider: str) -> None: method test_raises_when_find_spec_throws (line 90) | def test_raises_when_find_spec_throws(self, exc_cls: type) -> None: method test_skips_builtin_and_empty_providers (line 102) | def test_skips_builtin_and_empty_providers(self, provider: str | None)... method test_skips_unknown_provider (line 106) | def test_skips_unknown_provider(self) -> None: FILE: libs/cli/tests/unit_tests/test_server.py class _FakeSocket (line 23) | class _FakeSocket: method __init__ (line 26) | def __init__( method __enter__ (line 36) | def __enter__(self) -> Self: method __exit__ (line 39) | def __exit__(self, *_args: object) -> None: method bind (line 42) | def bind(self, addr: tuple[str, int]) -> None: method getsockname (line 48) | def getsockname(self) -> tuple[str, int]: class TestPortInUse (line 53) | class TestPortInUse: method test_free_port (line 54) | def test_free_port(self) -> None: method test_occupied_port (line 63) | def test_occupied_port(self) -> None: class TestFindFreePort (line 73) | class TestFindFreePort: method test_returns_valid_port (line 74) | def test_returns_valid_port(self) -> None: method test_returns_port_reported_by_socket (line 84) | def test_returns_port_reported_by_socket(self) -> None: class TestWaitForServerHealthy (line 93) | class TestWaitForServerHealthy: method test_returns_on_200 (line 96) | async def test_returns_on_200(self) -> None: method test_raises_on_early_process_exit (line 110) | async def test_raises_on_early_process_exit(self) -> None: method test_early_exit_includes_log_output (line 123) | async def test_early_exit_includes_log_output(self) -> None: method test_raises_on_timeout (line 137) | async def test_raises_on_timeout(self) -> None: method test_timeout_reports_last_status (line 153) | async def test_timeout_reports_last_status(self) -> None: class TestServerProcess (line 170) | class TestServerProcess: method test_start_cleans_up_partial_state_on_health_failure (line 171) | async def test_start_cleans_up_partial_state_on_health_failure( method test_update_env_and_restart (line 214) | async def test_update_env_and_restart(self, tmp_path: Path) -> None: method test_restart_rollback_on_failure (line 257) | async def test_restart_rollback_on_failure(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_server_config.py class TestReadEnvBool (line 26) | class TestReadEnvBool: method test_true_lowercase (line 27) | def test_true_lowercase(self) -> None: method test_true_uppercase (line 31) | def test_true_uppercase(self) -> None: method test_true_mixed_case (line 35) | def test_true_mixed_case(self) -> None: method test_false_lowercase (line 39) | def test_false_lowercase(self) -> None: method test_false_uppercase (line 43) | def test_false_uppercase(self) -> None: method test_arbitrary_string_is_false (line 47) | def test_arbitrary_string_is_false(self) -> None: method test_missing_returns_default_false (line 51) | def test_missing_returns_default_false(self) -> None: method test_missing_returns_custom_default (line 55) | def test_missing_returns_custom_default(self) -> None: class TestReadEnvJson (line 65) | class TestReadEnvJson: method test_valid_json (line 66) | def test_valid_json(self) -> None: method test_missing_returns_none (line 70) | def test_missing_returns_none(self) -> None: method test_malformed_json_raises (line 74) | def test_malformed_json_raises(self) -> None: method test_malformed_json_includes_value_snippet (line 81) | def test_malformed_json_includes_value_snippet(self) -> None: class TestReadEnvStr (line 94) | class TestReadEnvStr: method test_present (line 95) | def test_present(self) -> None: method test_missing (line 99) | def test_missing(self) -> None: class TestReadEnvOptionalBool (line 109) | class TestReadEnvOptionalBool: method test_true (line 110) | def test_true(self) -> None: method test_false (line 114) | def test_false(self) -> None: method test_missing_returns_none (line 118) | def test_missing_returns_none(self) -> None: method test_false_distinct_from_none (line 122) | def test_false_distinct_from_none(self) -> None: class TestNormalizePath (line 135) | class TestNormalizePath: method test_none_returns_none (line 136) | def test_none_returns_none(self) -> None: method test_empty_string_returns_none (line 139) | def test_empty_string_returns_none(self) -> None: method test_absolute_path_without_context (line 142) | def test_absolute_path_without_context(self, tmp_path: Path) -> None: method test_raises_on_unresolvable_path (line 149) | def test_raises_on_unresolvable_path(self) -> None: method test_label_appears_in_error_message (line 159) | def test_label_appears_in_error_message(self) -> None: class TestServerConfigPostInit (line 175) | class TestServerConfigPostInit: method test_sandbox_type_none_string_normalized (line 176) | def test_sandbox_type_none_string_normalized(self) -> None: method test_sandbox_type_valid_preserved (line 180) | def test_sandbox_type_valid_preserved(self) -> None: method test_sandbox_type_none_value_preserved (line 184) | def test_sandbox_type_none_value_preserved(self) -> None: class TestServerConfigEdgeCases (line 194) | class TestServerConfigEdgeCases: method test_trust_project_mcp_false_round_trips (line 195) | def test_trust_project_mcp_false_round_trips(self) -> None: method test_sandbox_type_none_string_round_trips (line 207) | def test_sandbox_type_none_string_round_trips(self) -> None: FILE: libs/cli/tests/unit_tests/test_server_graph.py function _import_fresh_server_graph (line 15) | def _import_fresh_server_graph() -> ModuleType: function _module_with_attrs (line 21) | def _module_with_attrs(name: str, **attrs: object) -> ModuleType: class TestServerGraph (line 29) | class TestServerGraph: method test_auto_discovery_loads_mcp_without_explicit_config (line 32) | def test_auto_discovery_loads_mcp_without_explicit_config(self) -> None: FILE: libs/cli/tests/unit_tests/test_server_helpers.py class TestBuildServerCmd (line 18) | class TestBuildServerCmd: method test_contains_host_and_port (line 19) | def test_contains_host_and_port(self) -> None: method test_contains_config_path (line 26) | def test_contains_config_path(self) -> None: method test_includes_no_browser_and_no_reload (line 31) | def test_includes_no_browser_and_no_reload(self) -> None: class TestBuildServerEnv (line 37) | class TestBuildServerEnv: method test_sets_auth_noop (line 38) | def test_sets_auth_noop(self) -> None: method test_strips_auth_variables (line 42) | def test_strips_auth_variables(self) -> None: method test_sets_pythondontwritebytecode (line 58) | def test_sets_pythondontwritebytecode(self) -> None: class TestScopedEnvOverrides (line 63) | class TestScopedEnvOverrides: method test_overrides_applied_inside_context (line 64) | def test_overrides_applied_inside_context(self) -> None: method test_overrides_kept_on_success (line 71) | def test_overrides_kept_on_success(self) -> None: method test_overrides_rolled_back_on_exception (line 77) | def test_overrides_rolled_back_on_exception(self) -> None: method test_previous_value_restored_on_exception (line 87) | def test_previous_value_restored_on_exception(self) -> None: FILE: libs/cli/tests/unit_tests/test_server_manager.py class TestServerConfigRoundTrip (line 22) | class TestServerConfigRoundTrip: method test_round_trip_preserves_all_fields (line 25) | def test_round_trip_preserves_all_fields(self) -> None: method test_defaults_round_trip (line 56) | def test_defaults_round_trip(self) -> None: method test_trust_project_mcp_none_round_trips (line 68) | def test_trust_project_mcp_none_round_trips(self) -> None: class TestApplyServerConfig (line 81) | class TestApplyServerConfig: method test_normalizes_relative_mcp_path_from_project_context (line 84) | def test_normalizes_relative_mcp_path_from_project_context( class TestStartServerAndGetAgent (line 128) | class TestStartServerAndGetAgent: method test_uses_absolute_graph_and_checkpointer_refs (line 131) | async def test_uses_absolute_graph_and_checkpointer_refs( class TestWritePyproject (line 184) | class TestWritePyproject: method test_runtime_pyproject_relies_on_cli_dependency_only (line 187) | def test_runtime_pyproject_relies_on_cli_dependency_only( class TestServerSession (line 199) | class TestServerSession: method test_yields_agent_and_server (line 202) | async def test_yields_agent_and_server(self) -> None: method test_stops_server_on_normal_exit (line 217) | async def test_stops_server_on_normal_exit(self) -> None: method test_stops_server_on_exception (line 232) | async def test_stops_server_on_exception(self) -> None: method test_cleans_up_mcp_session (line 251) | async def test_cleans_up_mcp_session(self) -> None: FILE: libs/cli/tests/unit_tests/test_sessions.py class TestGenerateThreadId (line 23) | class TestGenerateThreadId: method test_length (line 26) | def test_length(self) -> None: method test_uuid7 (line 31) | def test_uuid7(self) -> None: method test_monotonic_ordering (line 36) | def test_monotonic_ordering(self) -> None: method test_unique (line 41) | def test_unique(self) -> None: class TestMixedThreadIdFormats (line 47) | class TestMixedThreadIdFormats: method test_list_returns_both_formats (line 50) | def test_list_returns_both_formats(self, tmp_path: Path) -> None: class TestThreadFunctions (line 84) | class TestThreadFunctions: method temp_db (line 88) | def temp_db(self, tmp_path): method test_list_threads_empty (line 147) | def test_list_threads_empty(self, tmp_path): method test_list_threads (line 167) | def test_list_threads(self, temp_db): method test_list_threads_filter_by_agent (line 177) | def test_list_threads_filter_by_agent(self, temp_db): method test_list_threads_limit (line 184) | def test_list_threads_limit(self, temp_db): method test_get_most_recent (line 190) | def test_get_most_recent(self, temp_db): method test_get_most_recent_filter (line 196) | def test_get_most_recent_filter(self, temp_db): method test_get_most_recent_empty (line 202) | def test_get_most_recent_empty(self, tmp_path): method test_thread_exists (line 222) | def test_thread_exists(self, temp_db): method test_thread_not_exists (line 227) | def test_thread_not_exists(self, temp_db): method test_get_thread_agent (line 232) | def test_get_thread_agent(self, temp_db): method test_get_thread_agent_not_found (line 238) | def test_get_thread_agent_not_found(self, temp_db): method test_delete_thread (line 244) | def test_delete_thread(self, temp_db): method test_delete_thread_not_found (line 251) | def test_delete_thread_not_found(self, temp_db): class TestGetCheckpointer (line 258) | class TestGetCheckpointer: method test_returns_async_sqlite_saver (line 261) | def test_returns_async_sqlite_saver(self, tmp_path): class TestFormatTimestamp (line 273) | class TestFormatTimestamp: method test_valid_timestamp (line 276) | def test_valid_timestamp(self): method test_none (line 282) | def test_none(self): method test_invalid (line 287) | def test_invalid(self): class TestFormatRelativeTimestamp (line 293) | class TestFormatRelativeTimestamp: method test_none_returns_empty (line 296) | def test_none_returns_empty(self) -> None: method test_empty_returns_empty (line 300) | def test_empty_returns_empty(self) -> None: method test_invalid_returns_empty (line 304) | def test_invalid_returns_empty(self) -> None: method test_seconds_ago (line 308) | def test_seconds_ago(self) -> None: method test_minutes_ago (line 314) | def test_minutes_ago(self) -> None: method test_hours_ago (line 320) | def test_hours_ago(self) -> None: method test_days_ago (line 326) | def test_days_ago(self) -> None: method test_months_ago (line 332) | def test_months_ago(self) -> None: method test_years_ago (line 338) | def test_years_ago(self) -> None: method test_future_timestamp_returns_just_now (line 344) | def test_future_timestamp_returns_just_now(self) -> None: method test_boundary_60_seconds (line 349) | def test_boundary_60_seconds(self) -> None: method test_boundary_59_seconds (line 355) | def test_boundary_59_seconds(self) -> None: class TestFormatPath (line 362) | class TestFormatPath: method test_none (line 365) | def test_none(self): method test_empty_string (line 369) | def test_empty_string(self): method test_home_directory (line 373) | def test_home_directory(self): method test_path_under_home (line 378) | def test_path_under_home(self): method test_path_outside_home (line 384) | def test_path_outside_home(self): method test_path_with_similar_prefix (line 388) | def test_path_with_similar_prefix(self): class TestTextualSessionState (line 395) | class TestTextualSessionState: method test_stores_provided_thread_id (line 398) | def test_stores_provided_thread_id(self): method test_generates_id_if_none (line 404) | def test_generates_id_if_none(self): method test_reset_thread (line 410) | def test_reset_thread(self): class TestFindSimilarThreads (line 420) | class TestFindSimilarThreads: method temp_db_with_threads (line 424) | def temp_db_with_threads(self, tmp_path: Path) -> Path: method test_finds_matching_prefix (line 453) | def test_finds_matching_prefix(self, temp_db_with_threads: Path) -> None: method test_no_matches (line 460) | def test_no_matches(self, temp_db_with_threads: Path) -> None: method test_respects_limit (line 466) | def test_respects_limit(self, temp_db_with_threads: Path) -> None: method test_empty_db (line 472) | def test_empty_db(self, tmp_path: Path) -> None: class TestListThreadsWithMessageCount (line 482) | class TestListThreadsWithMessageCount: method temp_db_with_messages (line 486) | def temp_db_with_messages(self, tmp_path: Path) -> Path: method test_includes_message_count (line 546) | def test_includes_message_count(self, temp_db_with_messages: Path) -> ... method test_no_message_count_by_default (line 553) | def test_no_message_count_by_default(self, temp_db_with_messages: Path... method test_message_count_uses_cache_for_unchanged_thread (line 560) | def test_message_count_uses_cache_for_unchanged_thread( method test_message_count_cache_invalidates_on_new_checkpoint (line 597) | def test_message_count_cache_invalidates_on_new_checkpoint( class TestPopulateThreadCheckpointDetails (line 664) | class TestPopulateThreadCheckpointDetails: method test_shared_summary_populates_count_and_prompt_once (line 667) | async def test_shared_summary_populates_count_and_prompt_once(self) ->... class TestApplyCachedThreadMessageCounts (line 712) | class TestApplyCachedThreadMessageCounts: method test_populates_rows_from_cache (line 715) | def test_populates_rows_from_cache(self) -> None: method test_skips_stale_cache_entries (line 743) | def test_skips_stale_cache_entries(self) -> None: class TestApplyCachedThreadInitialPrompts (line 765) | class TestApplyCachedThreadInitialPrompts: method test_populates_rows_from_cache (line 768) | def test_populates_rows_from_cache(self) -> None: method test_skips_stale_cache_entries (line 796) | def test_skips_stale_cache_entries(self) -> None: class TestGetCachedThreads (line 818) | class TestGetCachedThreads: method test_returns_exact_cached_limit (line 821) | def test_returns_exact_cached_limit(self) -> None: method test_uses_larger_cached_limit (line 842) | def test_uses_larger_cached_limit(self) -> None: method test_applies_cached_message_counts_to_snapshot (line 865) | def test_applies_cached_message_counts_to_snapshot(self) -> None: method test_applies_cached_initial_prompts_to_snapshot (line 889) | def test_applies_cached_initial_prompts_to_snapshot(self) -> None: class TestPrewarmThreadMessageCounts (line 914) | class TestPrewarmThreadMessageCounts: method test_prewarm_respects_visible_thread_columns (line 917) | async def test_prewarm_respects_visible_thread_columns(self) -> None: method test_prewarm_populates_checkpoint_details_before_caching (line 967) | async def test_prewarm_populates_checkpoint_details_before_caching(sel... method test_unexpected_errors_log_warning (line 1016) | async def test_unexpected_errors_log_warning(self) -> None: class TestCacheMessageCount (line 1031) | class TestCacheMessageCount: method test_overflow_evicts_oldest_entry_only (line 1034) | def test_overflow_evicts_oldest_entry_only(self) -> None: class TestMessageCountFromCheckpointBlob (line 1050) | class TestMessageCountFromCheckpointBlob: method temp_db_with_checkpoint_messages (line 1059) | def temp_db_with_checkpoint_messages(self, tmp_path: Path) -> Path: method test_counts_messages_from_checkpoint_blob (line 1125) | def test_counts_messages_from_checkpoint_blob( class TestGetThreadLimit (line 1144) | class TestGetThreadLimit: method test_default_when_unset (line 1147) | def test_default_when_unset(self) -> None: method test_custom_value (line 1157) | def test_custom_value(self) -> None: method test_invalid_value_falls_back (line 1162) | def test_invalid_value_falls_back(self) -> None: method test_zero_clamps_to_one (line 1167) | def test_zero_clamps_to_one(self) -> None: method test_negative_clamps_to_one (line 1172) | def test_negative_clamps_to_one(self) -> None: class TestListThreadsSortAndBranch (line 1178) | class TestListThreadsSortAndBranch: method db_with_branches (line 1182) | def db_with_branches(self, tmp_path: Path) -> Path: method test_sort_by_updated (line 1286) | def test_sort_by_updated(self, db_with_branches: Path) -> None: method test_sort_by_created (line 1292) | def test_sort_by_created(self, db_with_branches: Path) -> None: method test_filter_by_branch (line 1298) | def test_filter_by_branch(self, db_with_branches: Path) -> None: method test_filter_by_branch_no_match (line 1306) | def test_filter_by_branch_no_match(self, db_with_branches: Path) -> None: method test_combined_agent_and_branch_filter (line 1312) | def test_combined_agent_and_branch_filter(self, db_with_branches: Path... class TestListThreadsCommandConfigDefaults (line 1322) | class TestListThreadsCommandConfigDefaults: method test_sort_reads_config_when_not_specified (line 1333) | def test_sort_reads_config_when_not_specified(self) -> None: method test_sort_flag_overrides_config (line 1356) | def test_sort_flag_overrides_config(self) -> None: method test_relative_reads_config_when_not_specified (line 1379) | def test_relative_reads_config_when_not_specified(self) -> None: method test_relative_flag_overrides_config (line 1406) | def test_relative_flag_overrides_config(self) -> None: method test_branch_forwarded_to_list_threads (line 1435) | def test_branch_forwarded_to_list_threads(self) -> None: method test_verbose_calls_populate_details (line 1458) | def test_verbose_calls_populate_details(self) -> None: class TestListThreadsCommandJson (line 1486) | class TestListThreadsCommandJson: method test_json_outputs_threads (line 1500) | def test_json_outputs_threads(self) -> None: method test_json_empty_threads (line 1529) | def test_json_empty_threads(self) -> None: class TestDeleteThreadCommandJson (line 1556) | class TestDeleteThreadCommandJson: method test_json_deleted (line 1559) | def test_json_deleted(self) -> None: method test_json_not_found (line 1579) | def test_json_not_found(self) -> None: class TestBatchCheckpointSummaries (line 1598) | class TestBatchCheckpointSummaries: method test_batch_returns_summaries_for_multiple_threads (line 1601) | async def test_batch_returns_summaries_for_multiple_threads(self) -> N... method test_batch_chunking_returns_all_results (line 1637) | async def test_batch_chunking_returns_all_results(self) -> None: method test_batch_empty_ids_returns_empty_dict (line 1672) | async def test_batch_empty_ids_returns_empty_dict(self) -> None: method test_batch_populate_fills_multiple_threads (line 1682) | async def test_batch_populate_fills_multiple_threads(self) -> None: FILE: libs/cli/tests/unit_tests/test_shell_allow_list.py function basic_allow_list (line 13) | def basic_allow_list() -> list[str]: function extended_allow_list (line 19) | def extended_allow_list() -> list[str]: function semicolon_allow_list (line 25) | def semicolon_allow_list() -> list[str]: function quoted_allow_list (line 31) | def quoted_allow_list() -> list[str]: function pipeline_allow_list (line 37) | def pipeline_allow_list() -> list[str]: function test_empty_allow_list_rejects_all (line 46) | def test_empty_allow_list_rejects_all(command: str) -> None: function test_none_allow_list_rejects_all (line 55) | def test_none_allow_list_rejects_all(command: str) -> None: function test_simple_command_allowed (line 64) | def test_simple_command_allowed(command: str, basic_allow_list: list[str... function test_simple_command_not_allowed (line 73) | def test_simple_command_not_allowed(command: str, basic_allow_list: list... function test_command_with_arguments_allowed (line 87) | def test_command_with_arguments_allowed( function test_command_with_arguments_not_allowed (line 98) | def test_command_with_arguments_not_allowed( function test_piped_commands_all_allowed (line 114) | def test_piped_commands_all_allowed(command: str, allow_list: list[str])... function test_piped_commands_some_not_allowed (line 127) | def test_piped_commands_some_not_allowed( function test_semicolon_separated_commands_all_allowed (line 138) | def test_semicolon_separated_commands_all_allowed( function test_semicolon_separated_commands_some_not_allowed (line 149) | def test_semicolon_separated_commands_some_not_allowed( function test_and_operator_commands (line 167) | def test_and_operator_commands( function test_or_operator_commands (line 181) | def test_or_operator_commands( function test_quoted_arguments (line 196) | def test_quoted_arguments(command: str, quoted_allow_list: list[str]) ->... function test_whitespace_handling (line 205) | def test_whitespace_handling(command: str, basic_allow_list: list[str]) ... function test_malformed_commands_rejected (line 214) | def test_malformed_commands_rejected(command: str, basic_allow_list: lis... function test_empty_command_rejected (line 223) | def test_empty_command_rejected(command: str, basic_allow_list: list[str... function test_case_sensitivity (line 236) | def test_case_sensitivity( function test_common_read_only_commands (line 257) | def test_common_read_only_commands( function test_dangerous_commands_not_allowed (line 274) | def test_dangerous_commands_not_allowed( function test_complex_pipeline (line 288) | def test_complex_pipeline( class TestShellInjectionPrevention (line 295) | class TestShellInjectionPrevention: method injection_allow_list (line 299) | def injection_allow_list(self) -> list[str]: method test_command_substitution_blocked (line 312) | def test_command_substitution_blocked( method test_backtick_substitution_blocked (line 327) | def test_backtick_substitution_blocked( method test_newline_injection_blocked (line 341) | def test_newline_injection_blocked( method test_carriage_return_injection_blocked (line 354) | def test_carriage_return_injection_blocked( method test_tab_injection_blocked (line 367) | def test_tab_injection_blocked( method test_process_substitution_input_blocked (line 381) | def test_process_substitution_input_blocked( method test_process_substitution_output_blocked (line 394) | def test_process_substitution_output_blocked( method test_here_string_blocked (line 407) | def test_here_string_blocked( method test_here_doc_blocked (line 420) | def test_here_doc_blocked( method test_output_redirect_blocked (line 434) | def test_output_redirect_blocked( method test_append_redirect_blocked (line 447) | def test_append_redirect_blocked( method test_input_redirect_blocked (line 460) | def test_input_redirect_blocked( method test_brace_variable_expansion_blocked (line 474) | def test_brace_variable_expansion_blocked( method test_safe_commands_still_allowed (line 491) | def test_safe_commands_still_allowed( method test_path_bypass_blocked (line 505) | def test_path_bypass_blocked( method test_ansi_c_quoting_blocked (line 522) | def test_ansi_c_quoting_blocked( class TestBackgroundOperatorBlocking (line 529) | class TestBackgroundOperatorBlocking: method test_background_operator_blocked (line 540) | def test_background_operator_blocked( method test_double_ampersand_still_works (line 553) | def test_double_ampersand_still_works( class TestBareVariableBlocking (line 560) | class TestBareVariableBlocking: method test_bare_variable_blocked (line 572) | def test_bare_variable_blocked( method test_commands_without_variables_still_work (line 586) | def test_commands_without_variables_still_work( class TestContainsDangerousPatterns (line 593) | class TestContainsDangerousPatterns: method test_safe_commands_pass (line 607) | def test_safe_commands_pass(self, command: str) -> None: method test_dangerous_patterns_detected (line 633) | def test_dangerous_patterns_detected(self, command: str, description: ... method test_double_ampersand_not_flagged (line 637) | def test_double_ampersand_not_flagged(self) -> None: method test_empty_command (line 641) | def test_empty_command(self) -> None: method test_pattern_in_middle_of_command (line 645) | def test_pattern_in_middle_of_command(self) -> None: method test_multiple_dangerous_patterns (line 649) | def test_multiple_dangerous_patterns(self) -> None: class TestFindExecLimitation (line 654) | class TestFindExecLimitation: method test_find_exec_not_caught_by_dangerous_patterns (line 663) | def test_find_exec_not_caught_by_dangerous_patterns(self) -> None: method test_find_exec_plus_allowed_when_find_in_allow_list (line 669) | def test_find_exec_plus_allowed_when_find_in_allow_list(self) -> None: method test_find_exec_rejected_when_find_not_in_allow_list (line 678) | def test_find_exec_rejected_when_find_not_in_allow_list(self) -> None: method test_find_delete_not_caught_by_dangerous_patterns (line 682) | def test_find_delete_not_caught_by_dangerous_patterns(self) -> None: class TestGrepRegexLimitation (line 687) | class TestGrepRegexLimitation: method test_grep_dollar_anchor_blocked_known_limitation (line 695) | def test_grep_dollar_anchor_blocked_known_limitation(self) -> None: class TestShellAllowAll (line 700) | class TestShellAllowAll: method test_allows_any_command (line 703) | def test_allows_any_command(self) -> None: method test_rejects_empty_command (line 710) | def test_rejects_empty_command(self) -> None: method test_spoofed_sentinel_does_not_bypass (line 715) | def test_spoofed_sentinel_does_not_bypass(self) -> None: FILE: libs/cli/tests/unit_tests/test_status.py class StatusBarApp (line 12) | class StatusBarApp(App): method compose (line 15) | def compose(self) -> ComposeResult: class TestBranchDisplay (line 19) | class TestBranchDisplay: method test_branch_display_empty_by_default (line 22) | async def test_branch_display_empty_by_default(self) -> None: method test_branch_display_shows_branch_name (line 30) | async def test_branch_display_shows_branch_name(self) -> None: method test_branch_display_with_feature_branch (line 40) | async def test_branch_display_with_feature_branch(self) -> None: method test_branch_display_clears_when_set_empty (line 50) | async def test_branch_display_clears_when_set_empty(self) -> None: method test_branch_display_contains_git_icon (line 61) | async def test_branch_display_contains_git_icon(self) -> None: class TestResizePriority (line 74) | class TestResizePriority: method test_branch_hidden_on_narrow_terminal (line 77) | async def test_branch_hidden_on_narrow_terminal(self) -> None: method test_branch_visible_on_wide_terminal (line 86) | async def test_branch_visible_on_wide_terminal(self) -> None: method test_cwd_hidden_on_very_narrow_terminal (line 95) | async def test_cwd_hidden_on_very_narrow_terminal(self) -> None: method test_cwd_visible_branch_hidden_at_medium_width (line 101) | async def test_cwd_visible_branch_hidden_at_medium_width(self) -> None: method test_resize_restores_branch_visibility (line 112) | async def test_resize_restores_branch_visibility(self) -> None: method test_model_visible_at_narrow_width (line 124) | async def test_model_visible_at_narrow_width(self) -> None: FILE: libs/cli/tests/unit_tests/test_subagents.py function make_subagent_content (line 12) | def make_subagent_content( class TestParseSubagentFile (line 33) | class TestParseSubagentFile: method test_parse_valid_subagent_with_all_fields (line 36) | def test_parse_valid_subagent_with_all_fields(self, tmp_path: Path) ->... method test_parse_subagent_without_model (line 57) | def test_parse_subagent_without_model(self, tmp_path: Path) -> None: method test_parse_subagent_with_multiline_system_prompt (line 69) | def test_parse_subagent_with_multiline_system_prompt(self, tmp_path: P... method test_parse_subagent_missing_name (line 98) | def test_parse_subagent_missing_name(self, tmp_path: Path) -> None: method test_parse_subagent_missing_description (line 110) | def test_parse_subagent_missing_description(self, tmp_path: Path) -> N... method test_parse_subagent_no_frontmatter (line 122) | def test_parse_subagent_no_frontmatter(self, tmp_path: Path) -> None: method test_parse_subagent_invalid_yaml (line 129) | def test_parse_subagent_invalid_yaml(self, tmp_path: Path) -> None: method test_parse_subagent_empty_name (line 142) | def test_parse_subagent_empty_name(self, tmp_path: Path) -> None: method test_parse_subagent_non_string_name (line 155) | def test_parse_subagent_non_string_name(self, tmp_path: Path) -> None: method test_parse_subagent_non_string_model (line 168) | def test_parse_subagent_non_string_model(self, tmp_path: Path) -> None: method test_parse_subagent_nonexistent_file (line 182) | def test_parse_subagent_nonexistent_file(self, tmp_path: Path) -> None: method test_parse_subagent_frontmatter_not_dict (line 188) | def test_parse_subagent_frontmatter_not_dict(self, tmp_path: Path) -> ... class TestLoadSubagentsFromDir (line 202) | class TestLoadSubagentsFromDir: method test_load_from_empty_directory (line 205) | def test_load_from_empty_directory(self, tmp_path: Path) -> None: method test_load_single_subagent (line 213) | def test_load_single_subagent(self, tmp_path: Path) -> None: method test_load_multiple_subagents (line 228) | def test_load_multiple_subagents(self, tmp_path: Path) -> None: method test_load_skips_misnamed_files (line 244) | def test_load_skips_misnamed_files(self, tmp_path: Path) -> None: method test_load_skips_invalid_subagents (line 257) | def test_load_skips_invalid_subagents(self, tmp_path: Path) -> None: method test_load_skips_files_in_root (line 282) | def test_load_skips_files_in_root(self, tmp_path: Path) -> None: method test_load_nonexistent_directory (line 293) | def test_load_nonexistent_directory(self, tmp_path: Path) -> None: class TestListSubagents (line 299) | class TestListSubagents: method test_list_no_directories (line 302) | def test_list_no_directories(self) -> None: method test_list_user_only (line 307) | def test_list_user_only(self, tmp_path: Path) -> None: method test_list_project_only (line 322) | def test_list_project_only(self, tmp_path: Path) -> None: method test_list_both_sources (line 337) | def test_list_both_sources(self, tmp_path: Path) -> None: method test_list_project_overrides_user (line 365) | def test_list_project_overrides_user(self, tmp_path: Path) -> None: method test_list_empty_directories (line 394) | def test_list_empty_directories(self, tmp_path: Path) -> None: method test_list_nonexistent_directories (line 407) | def test_list_nonexistent_directories(self, tmp_path: Path) -> None: method test_list_with_model_field (line 415) | def test_list_with_model_field(self, tmp_path: Path) -> None: FILE: libs/cli/tests/unit_tests/test_textual_adapter.py function _mock_mount (line 35) | async def _mock_mount(widget: object) -> None: function _mock_approval (line 39) | def _mock_approval() -> Future[object]: function _noop_status (line 45) | def _noop_status(_: str) -> None: class TestTextualUIAdapterInit (line 49) | class TestTextualUIAdapterInit: method test_set_spinner_callback_stored (line 52) | def test_set_spinner_callback_stored(self) -> None: method test_set_spinner_defaults_to_none (line 66) | def test_set_spinner_defaults_to_none(self) -> None: method test_current_tool_messages_initialized_empty (line 75) | def test_current_tool_messages_initialized_empty(self) -> None: method test_token_tracker_initialized_none (line 84) | def test_token_tracker_initialized_none(self) -> None: method test_set_token_tracker (line 93) | def test_set_token_tracker(self) -> None: method test_finalize_pending_tools_with_error_marks_and_clears (line 105) | def test_finalize_pending_tools_with_error_marks_and_clears(self) -> N... class TestBuildStreamConfig (line 127) | class TestBuildStreamConfig: method setup_method (line 130) | def setup_method(self) -> None: method test_assistant_fields_present (line 134) | def test_assistant_fields_present(self) -> None: method test_updated_at_is_valid_iso_timestamp (line 142) | def test_updated_at_is_valid_iso_timestamp(self) -> None: method test_no_assistant_fields_when_none (line 150) | def test_no_assistant_fields_when_none(self) -> None: method test_no_assistant_fields_when_empty_string (line 159) | def test_no_assistant_fields_when_empty_string(self) -> None: method test_git_branch_included_when_available (line 168) | def test_git_branch_included_when_available(self) -> None: method test_git_branch_absent_when_not_in_repo (line 177) | def test_git_branch_absent_when_not_in_repo(self) -> None: method test_configurable_thread_id (line 186) | def test_configurable_thread_id(self) -> None: method test_sandbox_type_included_when_set (line 191) | def test_sandbox_type_included_when_set(self) -> None: method test_sandbox_type_absent_when_none (line 196) | def test_sandbox_type_absent_when_none(self) -> None: method test_sandbox_type_none_string_excluded (line 201) | def test_sandbox_type_none_string_excluded(self) -> None: method test_no_model_keys_in_configurable (line 206) | def test_no_model_keys_in_configurable(self) -> None: class TestGetGitBranch (line 213) | class TestGetGitBranch: method setup_method (line 216) | def setup_method(self) -> None: method test_reuses_cached_branch_for_same_working_directory (line 220) | def test_reuses_cached_branch_for_same_working_directory(self) -> None: class TestGetGitBranchOSError (line 237) | class TestGetGitBranchOSError: method setup_method (line 240) | def setup_method(self) -> None: method test_returns_none_on_cwd_oserror (line 244) | def test_returns_none_on_cwd_oserror(self) -> None: class TestBuildStreamConfigOSError (line 253) | class TestBuildStreamConfigOSError: method setup_method (line 256) | def setup_method(self) -> None: method test_cwd_absent_on_oserror (line 260) | def test_cwd_absent_on_oserror(self) -> None: class TestIsSummarizationChunk (line 270) | class TestIsSummarizationChunk: method test_returns_true_for_summarization_source (line 273) | def test_returns_true_for_summarization_source(self) -> None: method test_returns_false_for_none_metadata (line 278) | def test_returns_false_for_none_metadata(self) -> None: method test_returns_false_for_none_lc_source (line 283) | def test_returns_false_for_none_lc_source(self) -> None: method test_returns_false_for_unrelated_metadata (line 294) | def test_returns_false_for_unrelated_metadata(self) -> None: class _FakeAgent (line 300) | class _FakeAgent: method __init__ (line 303) | def __init__(self, chunks: list[tuple]) -> None: method astream (line 306) | async def astream(self, *_: Any, **__: Any) -> AsyncIterator[tuple[Any... class _SequencedAgent (line 312) | class _SequencedAgent: method __init__ (line 315) | def __init__(self, streams_by_call: list[list[tuple[Any, ...]]]) -> None: method astream (line 319) | async def astream( function _ask_user_interrupt_chunk (line 332) | def _ask_user_interrupt_chunk(payload: dict[str, Any]) -> tuple[Any, ...]: class TestExecuteTaskTextualSummarizationFeedback (line 338) | class TestExecuteTaskTextualSummarizationFeedback: method test_spinner_transitions_for_summarization_stream (line 341) | async def test_spinner_transitions_for_summarization_stream(self) -> N... method test_mounts_summarization_notification_on_regular_chunk (line 380) | async def test_mounts_summarization_notification_on_regular_chunk(self... method test_mounts_notification_when_stream_ends_mid_summarization (line 422) | async def test_mounts_notification_when_stream_ends_mid_summarization(... function _tool_call_message (line 462) | def _tool_call_message( class TestExecuteTaskTextualParallelToolSpinner (line 473) | class TestExecuteTaskTextualParallelToolSpinner: method test_spinner_not_shown_until_all_parallel_tools_complete (line 476) | async def test_spinner_not_shown_until_all_parallel_tools_complete(sel... method test_spinner_shown_after_single_tool_completes (line 544) | async def test_spinner_shown_after_single_tool_completes(self) -> None: method test_spinner_with_three_parallel_tools_out_of_order (line 588) | async def test_spinner_with_three_parallel_tools_out_of_order(self) ->... method test_spinner_recovers_with_untracked_tool_id (line 658) | async def test_spinner_recovers_with_untracked_tool_id(self) -> None: class TestExecuteTaskTextualAskUser (line 717) | class TestExecuteTaskTextualAskUser: method test_request_ask_user_returning_none_is_reported_as_error (line 720) | async def test_request_ask_user_returning_none_is_reported_as_error(se... method test_request_ask_user_mount_error_is_not_treated_as_cancel (line 767) | async def test_request_ask_user_mount_error_is_not_treated_as_cancel(s... method test_request_ask_user_missing_callback_is_reported_as_error (line 814) | async def test_request_ask_user_missing_callback_is_reported_as_error(... method test_invalid_ask_user_interrupt_payload_raises_validation_error (line 853) | async def test_invalid_ask_user_interrupt_payload_raises_validation_er... function _make_tool_widget (line 893) | def _make_tool_widget(name: str = "tool", args: dict | None = None) -> M... class _MutatingItemsDict (line 901) | class _MutatingItemsDict(dict): # noqa: FURB189 # must subclass dict t... method items (line 913) | def items(self) -> Generator[tuple[str, Any], None, None]: # type: ig... class _MutatingValuesDict (line 925) | class _MutatingValuesDict(dict): # noqa: FURB189 # must subclass dict ... method values (line 932) | def values(self) -> Generator[Any, None, None]: # type: ignore[override] class TestDictIterationSafety (line 943) | class TestDictIterationSafety: method test_items_iteration_fails_without_list (line 957) | def test_items_iteration_fails_without_list(self) -> None: method test_values_iteration_fails_without_list (line 966) | def test_values_iteration_fails_without_list(self) -> None: method test_items_iteration_safe_with_list (line 977) | def test_items_iteration_safe_with_list(self) -> None: method test_values_iteration_safe_with_list (line 987) | def test_values_iteration_safe_with_list(self) -> None: method test_build_interrupted_ai_message_safe (line 1000) | def test_build_interrupted_ai_message_safe(self) -> None: method test_build_interrupted_ai_message_empty (line 1020) | def test_build_interrupted_ai_message_empty(self) -> None: class TestSessionStats (line 1031) | class TestSessionStats: method test_record_request_named_model (line 1034) | def test_record_request_named_model(self) -> None: method test_record_request_empty_model (line 1047) | def test_record_request_empty_model(self) -> None: method test_record_request_multiple_models (line 1057) | def test_record_request_multiple_models(self) -> None: method test_merge (line 1070) | def test_merge(self) -> None: method test_merge_overlapping_models (line 1095) | def test_merge_overlapping_models(self) -> None: class TestFormatTokenCount (line 1118) | class TestFormatTokenCount: method test_small_count (line 1121) | def test_small_count(self) -> None: method test_thousands (line 1124) | def test_thousands(self) -> None: method test_millions (line 1127) | def test_millions(self) -> None: method test_exact_thousand (line 1130) | def test_exact_thousand(self) -> None: method test_zero (line 1133) | def test_zero(self) -> None: class TestPrintUsageTable (line 1142) | class TestPrintUsageTable: method test_no_model_called_skips_unknown_row (line 1145) | def test_no_model_called_skips_unknown_row(self) -> None: method test_single_model_shows_name (line 1156) | def test_single_model_shows_name(self) -> None: method test_multi_model_shows_all_names_and_total (line 1167) | def test_multi_model_shows_all_names_and_total(self) -> None: method test_tokens_with_no_wall_time_omits_timing_line (line 1181) | def test_tokens_with_no_wall_time_omits_timing_line(self) -> None: method test_no_requests_no_time_prints_nothing (line 1192) | def test_no_requests_no_time_prints_nothing(self) -> None: class TestFormatDuration (line 1207) | class TestFormatDuration: method test_sub_minute (line 1210) | def test_sub_minute(self) -> None: method test_exactly_one_minute (line 1213) | def test_exactly_one_minute(self) -> None: method test_minutes_and_seconds (line 1216) | def test_minutes_and_seconds(self) -> None: method test_exactly_one_hour (line 1219) | def test_exactly_one_hour(self) -> None: method test_hours_minutes_seconds (line 1222) | def test_hours_minutes_seconds(self) -> None: method test_large_duration (line 1226) | def test_large_duration(self) -> None: method test_zero (line 1230) | def test_zero(self) -> None: method test_fractional_under_minute (line 1233) | def test_fractional_under_minute(self) -> None: method test_rounding_near_minute_boundary (line 1236) | def test_rounding_near_minute_boundary(self) -> None: method test_just_under_minute_no_rounding (line 1239) | def test_just_under_minute_no_rounding(self) -> None: FILE: libs/cli/tests/unit_tests/test_thread_selector.py function _patch_list_threads (line 58) | def _patch_list_threads(threads: list[ThreadInfo] | None = None) -> Any:... function _patch_columns (line 72) | def _patch_columns(columns: dict[str, bool] | None = None) -> Any: # no... function _style_scalar_value (line 105) | def _style_scalar_value(value: object) -> int: class ThreadSelectorTestApp (line 119) | class ThreadSelectorTestApp(App): method __init__ (line 122) | def __init__(self, current_thread: str | None = "abc12345") -> None: method compose (line 128) | def compose(self) -> ComposeResult: method show_selector (line 131) | def show_selector(self) -> None: class AppWithEscapeBinding (line 142) | class AppWithEscapeBinding(App): method __init__ (line 149) | def __init__(self) -> None: method compose (line 155) | def compose(self) -> ComposeResult: method action_interrupt (line 158) | def action_interrupt(self) -> None: method show_selector (line 165) | def show_selector(self) -> None: class TestThreadSelectorEscapeKey (line 176) | class TestThreadSelectorEscapeKey: method test_escape_dismisses_modal (line 179) | async def test_escape_dismisses_modal(self) -> None: method test_escape_with_conflicting_app_binding (line 193) | async def test_escape_with_conflicting_app_binding(self) -> None: class TestThreadSelectorKeyboardNavigation (line 209) | class TestThreadSelectorKeyboardNavigation: method test_down_arrow_moves_selection (line 212) | async def test_down_arrow_moves_selection(self) -> None: method test_up_arrow_wraps_from_top (line 229) | async def test_up_arrow_wraps_from_top(self) -> None: method test_enter_selects_thread (line 247) | async def test_enter_selects_thread(self) -> None: class TestThreadSelectorCurrentThread (line 262) | class TestThreadSelectorCurrentThread: method test_current_thread_is_preselected (line 265) | async def test_current_thread_is_preselected(self) -> None: method test_unknown_current_thread_defaults_to_zero (line 279) | async def test_unknown_current_thread_defaults_to_zero(self) -> None: method test_no_current_thread_defaults_to_zero (line 291) | async def test_no_current_thread_defaults_to_zero(self) -> None: class TestThreadSelectorEmptyState (line 304) | class TestThreadSelectorEmptyState: method test_no_threads_shows_empty_message (line 307) | async def test_no_threads_shows_empty_message(self) -> None: method test_arrow_keys_on_empty_list_do_not_crash (line 331) | async def test_arrow_keys_on_empty_list_do_not_crash(self) -> None: class TestThreadSelectorNavigateAndSelect (line 354) | class TestThreadSelectorNavigateAndSelect: method test_navigate_down_and_select (line 357) | async def test_navigate_down_and_select(self) -> None: class TestThreadSelectorTabSort (line 375) | class TestThreadSelectorTabSort: method test_sort_switch_toggles_sort (line 378) | async def test_sort_switch_toggles_sort(self) -> None: method test_sorted_header_column_is_highlighted (line 412) | async def test_sorted_header_column_is_highlighted(self) -> None: method test_tab_moves_focus_into_column_switches (line 432) | async def test_tab_moves_focus_into_column_switches(self) -> None: method test_shift_tab_moves_focus_backward_through_controls (line 483) | async def test_shift_tab_moves_focus_backward_through_controls(self) -... method test_cached_filter_controls_handle_tab_and_typing (line 506) | async def test_cached_filter_controls_handle_tab_and_typing(self) -> N... method test_switch_toggle_keeps_focus_on_current_control (line 544) | async def test_switch_toggle_keeps_focus_on_current_control(self) -> N... method test_typing_letter_from_controls_refocuses_search (line 568) | async def test_typing_letter_from_controls_refocuses_search(self) -> N... method test_typing_multiple_letters_from_controls_appends_search (line 595) | async def test_typing_multiple_letters_from_controls_appends_search(se... method test_space_from_controls_does_not_refocus_search (line 624) | async def test_space_from_controls_does_not_refocus_search(self) -> None: class TestThreadSelectorDownWrap (line 652) | class TestThreadSelectorDownWrap: method test_down_arrow_wraps_from_bottom (line 655) | async def test_down_arrow_wraps_from_bottom(self) -> None: class TestThreadSelectorPageNavigation (line 679) | class TestThreadSelectorPageNavigation: method test_pagedown_moves_selection (line 682) | async def test_pagedown_moves_selection(self) -> None: method test_pageup_at_top_is_noop (line 699) | async def test_pageup_at_top_is_noop(self) -> None: class TestThreadSelectorClickHandling (line 716) | class TestThreadSelectorClickHandling: method test_click_selects_thread (line 719) | async def test_click_selects_thread(self) -> None: class TestThreadSelectorOnClickOpensLink (line 748) | class TestThreadSelectorOnClickOpensLink: method test_click_on_link_opens_browser (line 751) | def test_click_on_link_opens_browser(self) -> None: method test_click_without_link_is_noop (line 763) | def test_click_without_link_is_noop(self) -> None: method test_click_with_browser_error_is_graceful (line 775) | def test_click_with_browser_error_is_graceful(self) -> None: class TestThreadSelectorBuildTitle (line 787) | class TestThreadSelectorBuildTitle: method test_no_current_thread (line 790) | def test_no_current_thread(self) -> None: method test_current_thread_no_url (line 795) | def test_current_thread_no_url(self) -> None: method test_current_thread_with_url (line 802) | def test_current_thread_with_url(self) -> None: method test_title_widget_has_id (line 823) | async def test_title_widget_has_id(self) -> None: class TestFetchThreadUrl (line 837) | class TestFetchThreadUrl: method test_successful_url_updates_title (line 840) | async def test_successful_url_updates_title(self) -> None: method test_timeout_leaves_title_unchanged (line 865) | async def test_timeout_leaves_title_unchanged(self) -> None: method test_oserror_leaves_title_unchanged (line 896) | async def test_oserror_leaves_title_unchanged(self) -> None: method test_unexpected_exception_leaves_title_unchanged (line 917) | async def test_unexpected_exception_leaves_title_unchanged(self) -> None: method test_none_url_leaves_title_unchanged (line 938) | async def test_none_url_leaves_title_unchanged(self) -> None: class TestThreadSelectorColumnHeader (line 962) | class TestThreadSelectorColumnHeader: method test_header_contains_default_column_names (line 965) | def test_header_contains_default_column_names(self) -> None: method test_header_widget_is_mounted (line 974) | async def test_header_widget_is_mounted(self) -> None: method test_header_stays_outside_scroll (line 986) | async def test_header_stays_outside_scroll(self) -> None: method test_timestamp_columns_share_width_with_rows (line 1000) | async def test_timestamp_columns_share_width_with_rows(self) -> None: class TestThreadSelectorPromptOverflow (line 1045) | class TestThreadSelectorPromptOverflow: method test_prompt_cell_renders_ellipsis_when_constrained (line 1048) | async def test_prompt_cell_renders_ellipsis_when_constrained(self) -> ... class TestThreadSelectorBranchOverflow (line 1083) | class TestThreadSelectorBranchOverflow: method test_branch_cell_renders_ellipsis_when_truncated (line 1086) | async def test_branch_cell_renders_ellipsis_when_truncated(self) -> None: class TestThreadSelectorAutoWidthColumns (line 1118) | class TestThreadSelectorAutoWidthColumns: method test_agent_name_column_uses_shared_width_capped_at_twelve (line 1121) | async def test_agent_name_column_uses_shared_width_capped_at_twelve(se... class TestThreadSelectorErrorHandling (line 1179) | class TestThreadSelectorErrorHandling: method test_list_threads_error_still_dismissable (line 1182) | async def test_list_threads_error_still_dismissable(self) -> None: class TestThreadSelectorLimit (line 1207) | class TestThreadSelectorLimit: method test_custom_limit_is_forwarded (line 1210) | async def test_custom_limit_is_forwarded(self) -> None: method test_checkpoint_details_are_loaded_for_initial_render (line 1230) | async def test_checkpoint_details_are_loaded_for_initial_render(self) ... method test_cached_counts_skip_background_population (line 1288) | async def test_cached_counts_skip_background_population(self) -> None: class TestThreadSelectorCheckpointDetailErrors (line 1333) | class TestThreadSelectorCheckpointDetailErrors: method test_unexpected_checkpoint_detail_error_logs_warning (line 1336) | async def test_unexpected_checkpoint_detail_error_logs_warning(self) -... class TestThreadSelectorPrefetchedRows (line 1363) | class TestThreadSelectorPrefetchedRows: method test_prefetched_rows_render_without_loading_state (line 1366) | async def test_prefetched_rows_render_without_loading_state(self) -> N... method test_prefetched_prompt_is_preserved_during_refresh (line 1435) | async def test_prefetched_prompt_is_preserved_during_refresh(self) -> ... method test_empty_prefetched_snapshot_still_refreshes (line 1483) | async def test_empty_prefetched_snapshot_still_refreshes(self) -> None: class TestThreadSelectorInitialSortOrder (line 1529) | class TestThreadSelectorInitialSortOrder: method test_initial_threads_sorted_by_created_at_preference (line 1532) | async def test_initial_threads_sorted_by_created_at_preference(self) -... class TestThreadSelectorSearch (line 1613) | class TestThreadSelectorSearch: method test_search_filters_threads (line 1616) | async def test_search_filters_threads(self) -> None: method test_empty_search_returns_all (line 1633) | def test_empty_search_returns_all(self) -> None: method test_search_by_thread_id (line 1643) | def test_search_by_thread_id(self) -> None: method test_typing_in_search_filters_without_crashing (line 1654) | async def test_typing_in_search_filters_without_crashing(self) -> None: method test_equal_match_scores_do_not_crash_sorting (line 1672) | def test_equal_match_scores_do_not_crash_sorting(self) -> None: method test_filter_and_build_reuses_precomputed_widths (line 1700) | async def test_filter_and_build_reuses_precomputed_widths(self) -> None: class TestThreadSelectorDelete (line 1725) | class TestThreadSelectorDelete: method test_delete_shows_confirmation (line 1728) | async def test_delete_shows_confirmation(self) -> None: method test_delete_confirmation_uses_screen_overlay (line 1746) | async def test_delete_confirmation_uses_screen_overlay(self) -> None: method test_delete_escape_cancels (line 1763) | async def test_delete_escape_cancels(self) -> None: method test_delete_keeps_selection_on_next_thread (line 1788) | async def test_delete_keeps_selection_on_next_thread(self) -> None: method test_delete_last_remaining_thread (line 1825) | async def test_delete_last_remaining_thread(self) -> None: method test_delete_last_item_in_list_moves_selection_backward (line 1864) | async def test_delete_last_item_in_list_moves_selection_backward(self)... method test_delete_failure_keeps_thread_in_list (line 1901) | async def test_delete_failure_keeps_thread_in_list(self) -> None: class TestThreadSelectorColumnConfig (line 1933) | class TestThreadSelectorColumnConfig: method test_default_columns (line 1936) | def test_default_columns(self) -> None: method test_switch_toggles_column_and_persists (line 1944) | async def test_switch_toggles_column_and_persists(self) -> None: method test_enabling_prompt_column_triggers_prompt_load (line 1975) | async def test_enabling_prompt_column_triggers_prompt_load(self) -> None: function _get_widget_text (line 2041) | def _get_widget_text(widget: Static) -> str: class TestResumeThread (line 2053) | class TestResumeThread: method test_no_agent_shows_error (line 2056) | async def test_no_agent_shows_error(self) -> None: method test_no_session_state_shows_error (line 2068) | async def test_no_session_state_shows_error(self) -> None: method test_already_switching_shows_message (line 2081) | async def test_already_switching_shows_message(self) -> None: method test_already_on_thread_shows_message (line 2096) | async def test_already_on_thread_shows_message(self) -> None: method test_successful_switch_updates_ids (line 2110) | async def test_successful_switch_updates_ids(self) -> None: method test_failure_restores_previous_thread_ids (line 2142) | async def test_failure_restores_previous_thread_ids(self) -> None: method test_failure_during_load_history_restores_ids (line 2168) | async def test_failure_during_load_history_restores_ids(self) -> None: method test_prefetch_failure_keeps_current_thread_visible (line 2197) | async def test_prefetch_failure_keeps_current_thread_visible(self) -> ... method test_prefetch_failure_clears_switch_lock_and_restores_input (line 2222) | async def test_prefetch_failure_clears_switch_lock_and_restores_input(... method test_double_failure_surfaces_restore_failure_hint (line 2243) | async def test_double_failure_surfaces_restore_failure_hint(self) -> N... class TestFetchThreadHistoryData (line 2273) | class TestFetchThreadHistoryData: method test_returns_empty_when_agent_missing (line 2276) | async def test_returns_empty_when_agent_missing(self) -> None: method test_returns_empty_when_state_missing (line 2285) | async def test_returns_empty_when_state_missing(self) -> None: method test_returns_empty_when_messages_missing (line 2298) | async def test_returns_empty_when_messages_missing(self) -> None: method test_offloads_conversion_to_thread (line 2310) | async def test_offloads_conversion_to_thread(self) -> None: class TestLoadThreadHistory (line 2336) | class TestLoadThreadHistory: method test_preloaded_history_skips_fetch_and_schedules_link (line 2339) | async def test_preloaded_history_skips_fetch_and_schedules_link(self) ... method test_fallback_fetch_path_used_without_preloaded_data (line 2366) | async def test_fallback_fetch_path_used_without_preloaded_data(self) -... method test_assistant_render_failure_does_not_abort_history_load (line 2393) | async def test_assistant_render_failure_does_not_abort_history_load(se... method test_early_return_without_thread_id_logs_debug (line 2433) | async def test_early_return_without_thread_id_logs_debug(self) -> None: method test_early_return_without_agent_logs_debug (line 2446) | async def test_early_return_without_agent_logs_debug(self) -> None: class TestUpgradeThreadMessageLink (line 2460) | class TestUpgradeThreadMessageLink: method test_noop_when_link_does_not_resolve (line 2463) | async def test_noop_when_link_does_not_resolve(self) -> None: method test_noop_when_widget_unmounted (line 2480) | async def test_noop_when_widget_unmounted(self) -> None: method test_updates_widget_when_link_resolves (line 2500) | async def test_updates_widget_when_link_resolves(self) -> None: class TestBuildThreadMessage (line 2521) | class TestBuildThreadMessage: method test_plain_text_when_tracing_not_configured (line 2524) | async def test_plain_text_when_tracing_not_configured(self) -> None: method test_hyperlinked_when_tracing_configured (line 2534) | async def test_hyperlinked_when_tracing_configured(self) -> None: method test_fallback_on_timeout (line 2556) | async def test_fallback_on_timeout(self) -> None: method test_fallback_on_exception (line 2568) | async def test_fallback_on_exception(self) -> None: class TestConvertMessagesToData (line 2581) | class TestConvertMessagesToData: method _make_human (line 2584) | def _make_human(self, content: str) -> object: method _make_ai (line 2590) | def _make_ai( method _make_tool (line 2600) | def _make_tool( method test_human_message_conversion (line 2611) | def test_human_message_conversion(self) -> None: method test_system_prefix_skipped (line 2622) | def test_system_prefix_skipped(self) -> None: method test_ai_message_text_content (line 2633) | def test_ai_message_text_content(self) -> None: method test_ai_message_content_block_list (line 2644) | def test_ai_message_content_block_list(self) -> None: method test_ai_message_empty_text_skipped (line 2659) | def test_ai_message_empty_text_skipped(self) -> None: method test_tool_call_matching (line 2666) | def test_tool_call_matching(self) -> None: method test_tool_call_error_status (line 2686) | def test_tool_call_error_status(self) -> None: method test_unmatched_tool_call_rejected (line 2701) | def test_unmatched_tool_call_rejected(self) -> None: method test_mixed_message_sequence (line 2713) | def test_mixed_message_sequence(self) -> None: method test_empty_messages (line 2737) | def test_empty_messages(self) -> None: class TestColumnKeyConsistency (line 2743) | class TestColumnKeyConsistency: method test_all_column_dicts_share_same_keys (line 2746) | def test_all_column_dicts_share_same_keys(self) -> None: class TestThreadsMatch (line 2779) | class TestThreadsMatch: method _thread (line 2783) | def _thread(tid: str, cp: str | None = None) -> ThreadInfo: method test_identical_lists_match (line 2793) | def test_identical_lists_match(self) -> None: method test_different_lengths_do_not_match (line 2799) | def test_different_lengths_do_not_match(self) -> None: method test_different_thread_ids_do_not_match (line 2805) | def test_different_thread_ids_do_not_match(self) -> None: method test_different_checkpoint_ids_do_not_match (line 2811) | def test_different_checkpoint_ids_do_not_match(self) -> None: method test_reordered_threads_do_not_match (line 2817) | def test_reordered_threads_do_not_match(self) -> None: method test_empty_lists_match (line 2823) | def test_empty_lists_match(self) -> None: class TestThreadSelectorDomSkip (line 2828) | class TestThreadSelectorDomSkip: method test_matching_refresh_skips_dom_rebuild (line 2831) | async def test_matching_refresh_skips_dom_rebuild(self) -> None: FILE: libs/cli/tests/unit_tests/test_token_tracker.py class TestTextualTokenTracker (line 6) | class TestTextualTokenTracker: method test_add_updates_context_and_calls_callback (line 7) | def test_add_updates_context_and_calls_callback(self): method test_reset_clears_context_and_calls_callback_with_zero (line 17) | def test_reset_clears_context_and_calls_callback_with_zero(self): method test_hide_calls_hide_callback (line 29) | def test_hide_calls_hide_callback(self): method test_hide_without_callback_is_noop (line 40) | def test_hide_without_callback_is_noop(self): method test_show_restores_current_value (line 45) | def test_show_restores_current_value(self): FILE: libs/cli/tests/unit_tests/test_ui.py class TestFormatTimeout (line 13) | class TestFormatTimeout: method test_seconds (line 16) | def test_seconds(self) -> None: method test_minutes (line 21) | def test_minutes(self) -> None: method test_hours (line 27) | def test_hours(self) -> None: method test_odd_values_as_seconds (line 32) | def test_odd_values_as_seconds(self) -> None: method test_likely_milliseconds_shown_as_seconds (line 37) | def test_likely_milliseconds_shown_as_seconds(self) -> None: class TestTruncateValue (line 43) | class TestTruncateValue: method test_short_string_unchanged (line 46) | def test_short_string_unchanged(self) -> None: method test_long_string_truncated (line 51) | def test_long_string_truncated(self) -> None: method test_exact_length_unchanged (line 56) | def test_exact_length_unchanged(self) -> None: class TestFormatToolDisplayExecute (line 62) | class TestFormatToolDisplayExecute: method test_execute_command_only (line 65) | def test_execute_command_only(self) -> None: method test_execute_with_timeout_minutes (line 71) | def test_execute_with_timeout_minutes(self) -> None: method test_execute_with_timeout_seconds (line 79) | def test_execute_with_timeout_seconds(self) -> None: method test_execute_with_timeout_string_coerced (line 85) | def test_execute_with_timeout_string_coerced(self) -> None: method test_execute_with_timeout_hours (line 93) | def test_execute_with_timeout_hours(self) -> None: method test_execute_with_none_timeout (line 101) | def test_execute_with_none_timeout(self) -> None: method test_execute_with_default_timeout_hidden (line 109) | def test_execute_with_default_timeout_hidden(self) -> None: method test_execute_with_default_timeout_string_hidden (line 117) | def test_execute_with_default_timeout_string_hidden(self) -> None: method test_execute_with_invalid_timeout_string_hidden (line 125) | def test_execute_with_invalid_timeout_string_hidden(self) -> None: method test_execute_long_command_truncated (line 133) | def test_execute_long_command_truncated(self) -> None: class TestFormatToolDisplayOther (line 141) | class TestFormatToolDisplayOther: method test_read_file (line 144) | def test_read_file(self) -> None: method test_web_search (line 151) | def test_web_search(self) -> None: method test_grep (line 157) | def test_grep(self) -> None: method test_unknown_tool_fallback (line 163) | def test_unknown_tool_fallback(self) -> None: method test_execute_hides_dangerous_unicode_in_command (line 171) | def test_execute_hides_dangerous_unicode_in_command(self) -> None: method test_fetch_url_hides_dangerous_unicode_in_url (line 177) | def test_fetch_url_hides_dangerous_unicode_in_url(self) -> None: class TestFormatToolMessageContent (line 184) | class TestFormatToolMessageContent: method test_none_returns_empty_string (line 187) | def test_none_returns_empty_string(self) -> None: method test_plain_string_returned_as_is (line 191) | def test_plain_string_returned_as_is(self) -> None: method test_list_of_strings_joined (line 195) | def test_list_of_strings_joined(self) -> None: method test_list_with_dict_uses_json (line 199) | def test_list_with_dict_uses_json(self) -> None: method test_list_mixed_types (line 205) | def test_list_mixed_types(self) -> None: method test_non_serializable_falls_back_to_str (line 212) | def test_non_serializable_falls_back_to_str(self) -> None: method test_list_with_non_ascii_dict_preserves_chars (line 218) | def test_list_with_non_ascii_dict_preserves_chars(self) -> None: method test_integer_content (line 224) | def test_integer_content(self) -> None: method test_image_block_shows_placeholder (line 228) | def test_image_block_shows_placeholder(self) -> None: method test_image_block_without_mime_type (line 238) | def test_image_block_without_mime_type(self) -> None: method test_mixed_list_with_strings_and_image_blocks (line 245) | def test_mixed_list_with_strings_and_image_blocks(self) -> None: class TestFormatContentBlock (line 260) | class TestFormatContentBlock: method test_image_block_placeholder (line 263) | def test_image_block_placeholder(self) -> None: method test_non_image_dict_returns_json (line 273) | def test_non_image_dict_returns_json(self) -> None: method test_image_block_without_base64_returns_json (line 280) | def test_image_block_without_base64_returns_json(self) -> None: method test_image_block_none_base64_returns_json (line 286) | def test_image_block_none_base64_returns_json(self) -> None: method test_image_block_non_string_base64_returns_json (line 293) | def test_image_block_non_string_base64_returns_json(self) -> None: method test_image_block_empty_base64 (line 300) | def test_image_block_empty_base64(self) -> None: method test_video_block_placeholder (line 306) | def test_video_block_placeholder(self) -> None: method test_video_block_without_base64_returns_json (line 313) | def test_video_block_without_base64_returns_json(self) -> None: method test_video_block_none_base64_returns_json (line 320) | def test_video_block_none_base64_returns_json(self) -> None: method test_file_block_placeholder (line 327) | def test_file_block_placeholder(self) -> None: method test_non_ascii_chars_preserved (line 334) | def test_non_ascii_chars_preserved(self) -> None: method test_emoji_preserved (line 341) | def test_emoji_preserved(self) -> None: method test_non_serializable_dict_falls_back_to_str (line 347) | def test_non_serializable_dict_falls_back_to_str(self) -> None: FILE: libs/cli/tests/unit_tests/test_unicode_security.py function test_detect_dangerous_unicode_empty_for_safe_text (line 20) | def test_detect_dangerous_unicode_empty_for_safe_text() -> None: function test_detect_dangerous_unicode_finds_bidi_and_zero_width (line 25) | def test_detect_dangerous_unicode_finds_bidi_and_zero_width() -> None: function test_strip_dangerous_unicode_removes_hidden_chars (line 34) | def test_strip_dangerous_unicode_removes_hidden_chars() -> None: function test_render_with_unicode_markers_makes_hidden_chars_visible (line 39) | def test_render_with_unicode_markers_makes_hidden_chars_visible() -> None: function test_check_url_safety_plain_ascii_domain_is_safe (line 46) | def test_check_url_safety_plain_ascii_domain_is_safe() -> None: function test_check_url_safety_cyrillic_homograph_is_unsafe (line 53) | def test_check_url_safety_cyrillic_homograph_is_unsafe() -> None: function test_check_url_safety_punycode_mixed_script_is_unsafe (line 60) | def test_check_url_safety_punycode_mixed_script_is_unsafe() -> None: function test_check_url_safety_non_latin_single_script_domain_is_safe (line 67) | def test_check_url_safety_non_latin_single_script_domain_is_safe() -> None: function test_check_url_safety_localhost_and_ip_are_safe (line 73) | def test_check_url_safety_localhost_and_ip_are_safe() -> None: function test_check_url_safety_detects_hidden_unicode_in_url (line 79) | def test_check_url_safety_detects_hidden_unicode_in_url() -> None: function test_confusables_contains_expected_script_entries (line 86) | def test_confusables_contains_expected_script_entries() -> None: function test_unicode_issue_rejects_multi_char (line 98) | def test_unicode_issue_rejects_multi_char() -> None: function test_unicode_issue_rejects_mismatched_codepoint (line 104) | def test_unicode_issue_rejects_mismatched_codepoint() -> None: function test_url_safety_result_warnings_are_tuple (line 113) | def test_url_safety_result_warnings_are_tuple() -> None: function test_summarize_issues_within_limit (line 123) | def test_summarize_issues_within_limit() -> None: function test_summarize_issues_truncates_with_overflow (line 132) | def test_summarize_issues_truncates_with_overflow() -> None: function test_summarize_issues_singular_overflow (line 140) | def test_summarize_issues_singular_overflow() -> None: function test_summarize_issues_deduplicates (line 148) | def test_summarize_issues_deduplicates() -> None: function test_format_warning_detail_within_limit (line 159) | def test_format_warning_detail_within_limit() -> None: function test_format_warning_detail_with_overflow (line 166) | def test_format_warning_detail_with_overflow() -> None: function test_check_url_safety_invalid_punycode_is_suspicious (line 175) | def test_check_url_safety_invalid_punycode_is_suspicious() -> None: function test_check_url_safety_pure_fullwidth_domain_is_safe (line 185) | def test_check_url_safety_pure_fullwidth_domain_is_safe() -> None: function test_check_url_safety_data_uri_with_hidden_unicode (line 195) | def test_check_url_safety_data_uri_with_hidden_unicode() -> None: function test_iter_string_values_flat_dict (line 205) | def test_iter_string_values_flat_dict() -> None: function test_iter_string_values_nested (line 211) | def test_iter_string_values_nested() -> None: function test_looks_like_url_key_simple (line 224) | def test_looks_like_url_key_simple() -> None: function test_looks_like_url_key_dotted_path (line 231) | def test_looks_like_url_key_dotted_path() -> None: function test_looks_like_url_key_array_indexed (line 237) | def test_looks_like_url_key_array_indexed() -> None: function test_looks_like_url_key_case_insensitive (line 243) | def test_looks_like_url_key_case_insensitive() -> None: FILE: libs/cli/tests/unit_tests/test_update_check.py function cache_file (line 20) | def cache_file(tmp_path): function _mock_pypi_response (line 27) | def _mock_pypi_response(version: str = "99.0.0") -> MagicMock: class TestParseVersion (line 34) | class TestParseVersion: method test_basic (line 35) | def test_basic(self) -> None: method test_single_digit (line 38) | def test_single_digit(self) -> None: method test_whitespace (line 41) | def test_whitespace(self) -> None: method test_prerelease_raises (line 44) | def test_prerelease_raises(self) -> None: method test_empty_raises (line 49) | def test_empty_raises(self) -> None: class TestGetLatestVersion (line 54) | class TestGetLatestVersion: method test_fresh_fetch (line 55) | def test_fresh_fetch(self, cache_file) -> None: method test_cached_hit (line 66) | def test_cached_hit(self, cache_file) -> None: method test_stale_cache (line 77) | def test_stale_cache(self, cache_file) -> None: method test_network_error (line 95) | def test_network_error(self, cache_file) -> None: # noqa: ARG002 # f... method test_corrupt_cache (line 102) | def test_corrupt_cache(self, cache_file) -> None: method test_cache_missing_version_key (line 110) | def test_cache_missing_version_key(self, cache_file) -> None: class TestIsUpdateAvailable (line 119) | class TestIsUpdateAvailable: method test_newer_available (line 120) | def test_newer_available(self) -> None: method test_current_version (line 129) | def test_current_version(self) -> None: method test_ahead_of_pypi (line 141) | def test_ahead_of_pypi(self) -> None: method test_fetch_failure (line 154) | def test_fetch_failure(self) -> None: method test_unparseable_pypi_version (line 161) | def test_unparseable_pypi_version(self) -> None: FILE: libs/cli/tests/unit_tests/test_version.py function test_version_matches_pyproject (line 15) | def test_version_matches_pyproject() -> None: function test_cli_version_flag (line 33) | def test_cli_version_flag() -> None: function test_version_slash_command_message_format (line 48) | async def test_version_slash_command_message_format() -> None: function test_version_slash_command_sdk_unavailable (line 67) | async def test_version_slash_command_sdk_unavailable() -> None: function test_version_slash_command_cli_version_unavailable (line 92) | async def test_version_slash_command_cli_version_unavailable() -> None: function test_help_mentions_version_flag (line 110) | def test_help_mentions_version_flag() -> None: function test_cli_help_flag (line 125) | def test_cli_help_flag() -> None: function test_cli_help_flag_short (line 140) | def test_cli_help_flag_short() -> None: function test_help_excludes_interactive_features (line 155) | def test_help_excludes_interactive_features() -> None: FILE: libs/cli/tests/unit_tests/test_welcome.py function _extract_links (line 18) | def _extract_links(banner: Content, text_start: int, text_end: int) -> l... function _make_banner (line 42) | def _make_banner( class TestBuildBannerThreadLink (line 65) | class TestBuildBannerThreadLink: method test_thread_id_plain_when_no_project_url (line 68) | def test_thread_id_plain_when_no_project_url(self) -> None: method test_thread_id_linked_when_project_url_provided (line 81) | def test_thread_id_linked_when_project_url_provided(self) -> None: method test_no_thread_line_when_thread_id_is_none (line 96) | def test_no_thread_line_when_thread_id_is_none(self) -> None: method test_no_thread_line_when_project_url_but_no_thread_id (line 102) | def test_no_thread_line_when_project_url_but_no_thread_id(self) -> None: method test_trailing_slash_on_project_url_normalized (line 110) | def test_trailing_slash_on_project_url_normalized(self) -> None: method test_thread_link_coexists_with_langsmith_project (line 124) | def test_thread_link_coexists_with_langsmith_project(self) -> None: class TestUpdateThreadId (line 140) | class TestUpdateThreadId: method test_update_thread_id_changes_internal_state (line 143) | def test_update_thread_id_changes_internal_state(self) -> None: method test_update_thread_id_preserves_project_url (line 156) | def test_update_thread_id_preserves_project_url(self) -> None: class TestBuildBannerEditableInstall (line 176) | class TestBuildBannerEditableInstall: method test_build_banner_with_editable_install (line 179) | def test_build_banner_with_editable_install(self) -> None: method test_build_banner_without_editable_install (line 196) | def test_build_banner_without_editable_install(self) -> None: class TestBuildBannerReturnType (line 214) | class TestBuildBannerReturnType: method test_returns_content (line 217) | def test_returns_content(self) -> None: class TestAutoLinksDisabled (line 224) | class TestAutoLinksDisabled: method test_auto_links_is_false (line 227) | def test_auto_links_is_false(self) -> None: class TestOnClickOpensLink (line 235) | class TestOnClickOpensLink: method test_click_on_link_opens_browser (line 238) | def test_click_on_link_opens_browser(self) -> None: method test_click_without_link_is_noop (line 250) | def test_click_without_link_is_noop(self) -> None: method test_click_with_browser_error_is_graceful (line 262) | def test_click_with_browser_error_is_graceful(self) -> None: class TestBuildWelcomeFooter (line 274) | class TestBuildWelcomeFooter: method test_returns_content (line 277) | def test_returns_content(self) -> None: method test_contains_ready_prompt (line 281) | def test_contains_ready_prompt(self) -> None: method test_contains_tip (line 288) | def test_contains_tip(self) -> None: method test_tip_varies_across_calls (line 294) | def test_tip_varies_across_calls(self) -> None: method test_ready_line_is_first_content_line (line 299) | def test_ready_line_is_first_content_line(self) -> None: method test_tip_line_is_last (line 304) | def test_tip_line_is_last(self) -> None: method test_blank_line_precedes_ready_prompt (line 309) | def test_blank_line_precedes_ready_prompt(self) -> None: method test_exactly_three_lines_with_leading_blank (line 314) | def test_exactly_three_lines_with_leading_blank(self) -> None: class TestBannerFooterPosition (line 324) | class TestBannerFooterPosition: method test_footer_is_last_in_minimal_banner (line 327) | def test_footer_is_last_in_minimal_banner(self) -> None: method test_footer_is_last_with_thread_id (line 334) | def test_footer_is_last_with_thread_id(self) -> None: method test_footer_is_last_with_langsmith_project (line 341) | def test_footer_is_last_with_langsmith_project(self) -> None: method test_footer_is_last_with_mcp_tools (line 348) | def test_footer_is_last_with_mcp_tools(self) -> None: method test_footer_is_last_with_all_info (line 356) | def test_footer_is_last_with_all_info(self) -> None: method test_blank_line_separates_info_from_footer (line 369) | def test_blank_line_separates_info_from_footer(self) -> None: class TestBuildFailureFooter (line 379) | class TestBuildFailureFooter: method test_returns_content (line 382) | def test_returns_content(self) -> None: method test_contains_error_message (line 386) | def test_contains_error_message(self) -> None: class TestBuildConnectingFooter (line 393) | class TestBuildConnectingFooter: method test_returns_content (line 396) | def test_returns_content(self) -> None: method test_contains_connecting_message (line 400) | def test_contains_connecting_message(self) -> None: method test_resuming_message (line 404) | def test_resuming_message(self) -> None: method test_local_server_message (line 410) | def test_local_server_message(self) -> None: method test_resuming_takes_precedence_over_local (line 415) | def test_resuming_takes_precedence_over_local(self) -> None: class TestBannerConnectingFooterVariants (line 422) | class TestBannerConnectingFooterVariants: method test_connecting_default (line 425) | def test_connecting_default(self) -> None: method test_connecting_resuming (line 433) | def test_connecting_resuming(self) -> None: method test_connecting_local_server (line 441) | def test_connecting_local_server(self) -> None: method test_connecting_resuming_precedence (line 448) | def test_connecting_resuming_precedence(self) -> None: FILE: libs/cli/tests/unit_tests/tools/test_fetch_url.py function test_fetch_url_success (line 10) | def test_fetch_url_success() -> None: function test_fetch_url_http_error (line 28) | def test_fetch_url_http_error() -> None: function test_fetch_url_timeout (line 44) | def test_fetch_url_timeout() -> None: function test_fetch_url_connection_error (line 60) | def test_fetch_url_connection_error() -> None: FILE: libs/deepagents/deepagents/_models.py function resolve_model (line 11) | def resolve_model(model: str | BaseChatModel) -> BaseChatModel: function get_model_identifier (line 32) | def get_model_identifier(model: BaseChatModel) -> str | None: function model_matches_spec (line 49) | def model_matches_spec(model: BaseChatModel, spec: str) -> bool: function _string_value (line 76) | def _string_value(config: dict[str, Any], key: str) -> str | None: FILE: libs/deepagents/deepagents/backends/composite.py function _remap_grep_path (line 44) | def _remap_grep_path(m: GrepMatch, route_prefix: str) -> GrepMatch: function _strip_route_from_pattern (line 55) | def _strip_route_from_pattern(pattern: str, route_prefix: str) -> str: function _remap_file_info_path (line 77) | def _remap_file_info_path(fi: FileInfo, route_prefix: str) -> FileInfo: function _route_for_path (line 88) | def _route_for_path( class CompositeBackend (line 120) | class CompositeBackend(BackendProtocol): method __init__ (line 140) | def __init__( method _get_backend_and_key (line 161) | def _get_backend_and_key(self, key: str) -> tuple[BackendProtocol, str]: method _coerce_ls_result (line 170) | def _coerce_ls_result(raw: LsResult | list[FileInfo]) -> LsResult: method ls (line 176) | def ls(self, path: str) -> LsResult: method als (line 227) | async def als(self, path: str) -> LsResult: method read (line 262) | def read( method aread (line 281) | async def aread( method _coerce_grep_result (line 292) | def _coerce_grep_result(raw: GrepResult | list[GrepMatch] | str) -> Gr... method grep (line 300) | def grep( method agrep (line 358) | async def agrep( method glob (line 399) | def glob(self, pattern: str, path: str = "/") -> GlobResult: method aglob (line 430) | async def aglob(self, pattern: str, path: str = "/") -> GlobResult: method write (line 461) | def write( method awrite (line 492) | async def awrite( method edit (line 515) | def edit( method aedit (line 549) | async def aedit( method execute (line 573) | def execute( method aexecute (line 610) | async def aexecute( method upload_files (line 635) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method aupload_files (line 676) | async def aupload_files(self, files: list[tuple[str, bytes]]) -> list[... method download_files (line 706) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method adownload_files (line 746) | async def adownload_files(self, paths: list[str]) -> list[FileDownload... FILE: libs/deepagents/deepagents/backends/filesystem.py class FilesystemBackend (line 38) | class FilesystemBackend(BackendProtocol): method __init__ (line 86) | def __init__( method _resolve_path (line 141) | def _resolve_path(self, key: str) -> Path: method _to_virtual_path (line 179) | def _to_virtual_path(self, path: Path) -> str: method ls (line 194) | def ls(self, path: str) -> LsResult: # noqa: C901, PLR0912, PLR0915 ... method read (line 299) | def read( method write (line 348) | def write( method edit (line 384) | def edit( method grep (line 435) | def grep( method _ripgrep_search (line 474) | def _ripgrep_search(self, pattern: str, base_full: Path, include_glob:... method _python_search (line 534) | def _python_search(self, pattern: str, base_full: Path, include_glob: ... method glob (line 589) | def glob(self, pattern: str, path: str = "/") -> GlobResult: # noqa: ... method upload_files (line 667) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method download_files (line 707) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: FILE: libs/deepagents/deepagents/backends/langsmith.py class LangSmithSandbox (line 22) | class LangSmithSandbox(BaseSandbox): method __init__ (line 29) | def __init__(self, sandbox: Sandbox) -> None: method id (line 39) | def id(self) -> str: method execute (line 43) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... method write (line 70) | def write(self, file_path: str, content: str) -> WriteResult: method download_files (line 92) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method upload_files (line 124) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... FILE: libs/deepagents/deepagents/backends/local_shell.py class LocalShellBackend (line 27) | class LocalShellBackend(FilesystemBackend, SandboxBackendProtocol): method __init__ (line 104) | def __init__( method id (line 205) | def id(self) -> str: method execute (line 213) | def execute( FILE: libs/deepagents/deepagents/backends/protocol.py class FileDownloadResponse (line 51) | class FileDownloadResponse: class FileUploadResponse (line 79) | class FileUploadResponse: class FileInfo (line 104) | class FileInfo(TypedDict): class GrepMatch (line 117) | class GrepMatch(TypedDict): class FileData (line 125) | class FileData(TypedDict): class ReadResult (line 142) | class ReadResult: class WriteResult (line 155) | class WriteResult: class EditResult (line 180) | class EditResult: class LsResult (line 207) | class LsResult: class GrepResult (line 220) | class GrepResult: class GlobResult (line 233) | class GlobResult: class BackendProtocol (line 246) | class BackendProtocol(abc.ABC): # noqa: B024 method ls (line 267) | def ls(self, path: str) -> "LsResult": method als (line 286) | async def als(self, path: str) -> "LsResult": method read (line 290) | def read( method aread (line 318) | async def aread( method grep (line 327) | def grep( method agrep (line 371) | async def agrep( method glob (line 380) | def glob(self, pattern: str, path: str = "/") -> "GlobResult": method aglob (line 407) | async def aglob(self, pattern: str, path: str = "/") -> "GlobResult": method write (line 411) | def write( method awrite (line 428) | async def awrite( method edit (line 436) | def edit( method aedit (line 459) | async def aedit( method upload_files (line 469) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method aupload_files (line 495) | async def aupload_files(self, files: list[tuple[str, bytes]]) -> list[... method download_files (line 499) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method adownload_files (line 515) | async def adownload_files(self, paths: list[str]) -> list[FileDownload... method ls_info (line 521) | def ls_info(self, path: str) -> "LsResult": method als_info (line 534) | async def als_info(self, path: str) -> "LsResult": method glob_info (line 547) | def glob_info(self, pattern: str, path: str = "/") -> "GlobResult": method aglob_info (line 560) | async def aglob_info(self, pattern: str, path: str = "/") -> "GlobResu... method grep_raw (line 573) | def grep_raw( method agrep_raw (line 591) | async def agrep_raw( class ExecuteResponse (line 611) | class ExecuteResponse: class SandboxBackendProtocol (line 627) | class SandboxBackendProtocol(BackendProtocol): method id (line 640) | def id(self) -> str: method execute (line 644) | def execute( method aexecute (line 669) | async def aexecute( function execute_accepts_timeout (line 686) | def execute_accepts_timeout(cls: type[SandboxBackendProtocol]) -> bool: FILE: libs/deepagents/deepagents/backends/sandbox.py class BaseSandbox (line 217) | class BaseSandbox(SandboxBackendProtocol, ABC): method execute (line 225) | def execute( method ls (line 243) | def ls(self, path: str) -> LsResult: method read (line 281) | def read( method write (line 313) | def write( method edit (line 337) | def edit( method grep (line 373) | def grep( method glob (line 416) | def glob(self, pattern: str, path: str = "/") -> GlobResult: method id (line 447) | def id(self) -> str: method upload_files (line 451) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method download_files (line 459) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: FILE: libs/deepagents/deepagents/backends/state.py class StateBackend (line 36) | class StateBackend(BackendProtocol): method __init__ (line 48) | def __init__( method _prepare_for_storage (line 66) | def _prepare_for_storage(self, file_data: FileData) -> dict[str, Any]: method ls (line 75) | def ls(self, path: str) -> LsResult: method read (line 126) | def read( method write (line 164) | def write( method edit (line 181) | def edit( method grep (line 208) | def grep( method glob (line 218) | def glob(self, pattern: str, path: str = "/") -> GlobResult: method upload_files (line 244) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method download_files (line 259) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: FILE: libs/deepagents/deepagents/backends/store.py class BackendContext (line 49) | class BackendContext(Generic[StateT, ContextT]): function _validate_namespace (line 64) | def _validate_namespace(namespace: tuple[str, ...]) -> tuple[str, ...]: class StoreBackend (line 105) | class StoreBackend(BackendProtocol): method __init__ (line 114) | def __init__( method _get_store (line 147) | def _get_store(self) -> BaseStore: method _get_namespace (line 162) | def _get_namespace(self) -> tuple[str, ...]: method _get_namespace_legacy (line 175) | def _get_namespace_legacy(self) -> tuple[str, ...]: method _convert_store_item_to_file_data (line 220) | def _convert_store_item_to_file_data(self, store_item: Item) -> FileData: method _convert_file_data_to_store_value (line 264) | def _convert_file_data_to_store_value(self, file_data: FileData) -> di... method _search_store_paginated (line 285) | def _search_store_paginated( method ls (line 332) | def ls(self, path: str) -> LsResult: method read (line 392) | def read( method aread (line 436) | async def aread( method write (line 473) | def write( method awrite (line 496) | async def awrite( method edit (line 519) | def edit( method aedit (line 557) | async def aedit( method grep (line 597) | def grep( method glob (line 615) | def glob(self, pattern: str, path: str = "/") -> GlobResult: method upload_files (line 649) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method download_files (line 682) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: FILE: libs/deepagents/deepagents/backends/utils.py function _normalize_content (line 74) | def _normalize_content(file_data: FileData) -> str: function sanitize_tool_call_id (line 98) | def sanitize_tool_call_id(tool_call_id: str) -> str: function format_content_with_line_numbers (line 106) | def format_content_with_line_numbers( function check_empty_content (line 152) | def check_empty_content(content: str) -> str | None: function _get_file_type (line 166) | def _get_file_type(path: str) -> FileType: function _to_legacy_file_data (line 179) | def _to_legacy_file_data(file_data: FileData) -> dict[str, Any]: function file_data_to_string (line 202) | def file_data_to_string(file_data: FileData) -> str: function create_file_data (line 214) | def create_file_data( function update_file_data (line 239) | def update_file_data(file_data: FileData, content: str) -> FileData: function slice_read_response (line 259) | def slice_read_response( function format_read_response (line 294) | def format_read_response( function perform_string_replacement (line 329) | def perform_string_replacement( function truncate_if_too_long (line 362) | def truncate_if_too_long(result: list[str]) -> list[str]: ... function truncate_if_too_long (line 366) | def truncate_if_too_long(result: str) -> str: ... function truncate_if_too_long (line 369) | def truncate_if_too_long(result: list[str] | str) -> list[str] | str: function validate_path (line 382) | def validate_path(path: str, *, allowed_prefixes: Sequence[str] | None =... function _normalize_path (line 448) | def _normalize_path(path: str | None) -> str: function _filter_files_by_path (line 483) | def _filter_files_by_path(files: dict[str, Any], normalized_path: str) -... function _glob_search_files (line 513) | def _glob_search_files( function _format_grep_results (line 575) | def _format_grep_results( function _grep_search_files (line 604) | def _grep_search_files( function grep_matches_from_files (line 662) | def grep_matches_from_files( function build_grep_results_dict (line 695) | def build_grep_results_dict(matches: list[GrepMatch]) -> dict[str, list[... function format_grep_matches (line 703) | def format_grep_matches( FILE: libs/deepagents/deepagents/graph.py function get_default_model (line 71) | def get_default_model() -> ChatAnthropic: function create_deep_agent (line 82) | def create_deep_agent( # noqa: C901, PLR0912 # Complex graph assembly ... FILE: libs/deepagents/deepagents/middleware/_utils.py function append_to_system_message (line 6) | def append_to_system_message( FILE: libs/deepagents/deepagents/middleware/async_subagents.py class AsyncSubAgent (line 35) | class AsyncSubAgent(TypedDict): class AsyncSubAgentJob (line 68) | class AsyncSubAgentJob(TypedDict): function _jobs_reducer (line 92) | def _jobs_reducer( class AsyncSubAgentState (line 102) | class AsyncSubAgentState(AgentState): function _resolve_headers (line 158) | def _resolve_headers(spec: AsyncSubAgent) -> dict[str, str]: class _ClientCache (line 166) | class _ClientCache: method __init__ (line 169) | def __init__(self, agents: dict[str, AsyncSubAgent]) -> None: method _cache_key (line 174) | def _cache_key(self, spec: AsyncSubAgent) -> tuple[str | None, frozens... method get_sync (line 178) | def get_sync(self, name: str) -> SyncLangGraphClient: method get_async (line 192) | def get_async(self, name: str) -> LangGraphClient: function _validate_agent_type (line 204) | def _validate_agent_type(agent_map: dict[str, AsyncSubAgent], agent_type... function _build_launch_tool (line 212) | def _build_launch_tool( function _build_check_result (line 299) | def _build_check_result( function _build_check_command (line 322) | def _build_check_command( function _resolve_tracked_job (line 343) | def _resolve_tracked_job( function _build_check_tool (line 359) | def _build_check_tool( # noqa: C901 # complexity from necessary error ... function _build_update_tool (line 422) | def _build_update_tool( function _build_cancel_tool (line 516) | def _build_cancel_tool( function _fetch_live_status (line 589) | def _fetch_live_status(clients: _ClientCache, job: AsyncSubAgentJob) -> ... function _afetch_live_status (line 608) | async def _afetch_live_status(clients: _ClientCache, job: AsyncSubAgentJ... function _format_job_entry (line 627) | def _format_job_entry(job: AsyncSubAgentJob, status: str) -> str: function _filter_jobs (line 632) | def _filter_jobs( function _build_list_jobs_tool (line 655) | def _build_list_jobs_tool(clients: _ClientCache) -> StructuredTool: function _build_async_subagent_tools (line 733) | def _build_async_subagent_tools( class AsyncSubAgentMiddleware (line 758) | class AsyncSubAgentMiddleware(AgentMiddleware[Any, ContextT, ResponseT]): method __init__ (line 797) | def __init__( method wrap_model_call (line 823) | def wrap_model_call( method awrap_model_call (line 834) | async def awrap_model_call( FILE: libs/deepagents/deepagents/middleware/filesystem.py function _file_data_reducer (line 74) | def _file_data_reducer(left: dict[str, FileData] | None, right: dict[str... class FilesystemState (line 110) | class FilesystemState(AgentState): function _supports_execution (line 257) | def _supports_execution(backend: BackendProtocol) -> bool: function _create_content_preview (line 320) | def _create_content_preview(content_str: str, *, head_lines: int = 5, ta... function _extract_text_from_message (line 349) | def _extract_text_from_message(message: ToolMessage) -> str: function _build_evicted_content (line 365) | def _build_evicted_content(message: ToolMessage, replacement_text: str) ... class FilesystemMiddleware (line 388) | class FilesystemMiddleware(AgentMiddleware[FilesystemState, ContextT, Re... method __init__ (line 441) | def __init__( method _get_backend (line 489) | def _get_backend(self, runtime: ToolRuntime[Any, Any]) -> BackendProto... method _create_ls_tool (line 502) | def _create_ls_tool(self) -> BaseTool: method _create_read_file_tool (line 569) | def _create_read_file_tool(self) -> BaseTool: # noqa: C901 method _create_write_file_tool (line 671) | def _create_write_file_tool(self) -> BaseTool: method _create_edit_file_tool (line 740) | def _create_edit_file_tool(self) -> BaseTool: method _create_glob_tool (line 813) | def _create_glob_tool(self) -> BaseTool: # noqa: C901 method _create_grep_tool (line 893) | def _create_grep_tool(self) -> BaseTool: method _create_execute_tool (line 980) | def _create_execute_tool(self) -> BaseTool: # noqa: C901 method wrap_model_call (line 1100) | def wrap_model_call( method awrap_model_call (line 1148) | async def awrap_model_call( method _process_large_message (line 1196) | def _process_large_message( method _aprocess_large_message (line 1256) | async def _aprocess_large_message( method _intercept_large_tool_result (line 1303) | def _intercept_large_tool_result(self, tool_result: ToolMessage | Comm... method _aintercept_large_tool_result (line 1360) | async def _aintercept_large_tool_result(self, tool_result: ToolMessage... method wrap_tool_call (line 1407) | def wrap_tool_call( method awrap_tool_call (line 1427) | async def awrap_tool_call( FILE: libs/deepagents/deepagents/middleware/memory.py class MemoryState (line 80) | class MemoryState(AgentState): class MemoryStateUpdate (line 91) | class MemoryStateUpdate(TypedDict): class MemoryMiddleware (line 159) | class MemoryMiddleware(AgentMiddleware[MemoryState, ContextT, ResponseT]): method __init__ (line 173) | def __init__( method _get_backend (line 194) | def _get_backend(self, state: MemoryState, runtime: Runtime, config: R... method _format_agent_memory (line 218) | def _format_agent_memory(self, contents: dict[str, str]) -> str: method before_agent (line 238) | def before_agent(self, state: MemoryState, runtime: Runtime, config: R... method abefore_agent (line 272) | async def abefore_agent(self, state: MemoryState, runtime: Runtime, co... method modify_request (line 306) | def modify_request(self, request: ModelRequest[ContextT]) -> ModelRequ... method wrap_model_call (line 322) | def wrap_model_call( method awrap_model_call (line 339) | async def awrap_model_call( FILE: libs/deepagents/deepagents/middleware/patch_tool_calls.py class PatchToolCallsMiddleware (line 11) | class PatchToolCallsMiddleware(AgentMiddleware): method before_agent (line 14) | def before_agent(self, state: AgentState, runtime: Runtime[Any]) -> di... FILE: libs/deepagents/deepagents/middleware/skills.py class SkillMetadata (line 135) | class SkillMetadata(TypedDict): class SkillsState (line 195) | class SkillsState(AgentState): class SkillsStateUpdate (line 202) | class SkillsStateUpdate(TypedDict): function _validate_skill_name (line 209) | def _validate_skill_name(name: str, directory_name: str) -> tuple[bool, ... function _parse_skill_metadata (line 250) | def _parse_skill_metadata( # noqa: C901 function _validate_metadata (line 355) | def _validate_metadata( function _format_skill_annotations (line 383) | def _format_skill_annotations(skill: SkillMetadata) -> str: function _list_skills (line 404) | def _list_skills(backend: BackendProtocol, source_path: str) -> list[Ski... function _alist_skills (line 482) | async def _alist_skills(backend: BackendProtocol, source_path: str) -> l... class SkillsMiddleware (line 602) | class SkillsMiddleware(AgentMiddleware[SkillsState, ContextT, ResponseT]): method __init__ (line 634) | def __init__(self, *, backend: BACKEND_TYPES, sources: list[str]) -> N... method _get_backend (line 649) | def _get_backend(self, state: SkillsState, runtime: Runtime, config: R... method _format_skills_locations (line 678) | def _format_skills_locations(self) -> str: method _format_skills_list (line 689) | def _format_skills_list(self, skills: list[SkillMetadata]) -> str: method modify_request (line 708) | def modify_request(self, request: ModelRequest[ContextT]) -> ModelRequ... method before_agent (line 730) | def before_agent(self, state: SkillsState, runtime: Runtime, config: R... method abefore_agent (line 766) | async def abefore_agent(self, state: SkillsState, runtime: Runtime, co... method wrap_model_call (line 802) | def wrap_model_call( method awrap_model_call (line 819) | async def awrap_model_call( FILE: libs/deepagents/deepagents/middleware/subagents.py class SubAgent (line 22) | class SubAgent(TypedDict): class CompiledSubAgent (line 81) | class CompiledSubAgent(TypedDict): class _SubagentSpec (line 278) | class _SubagentSpec(TypedDict): function _get_subagents_legacy (line 286) | def _get_subagents_legacy( function _build_task_tool (line 374) | def _build_task_tool( # noqa: C901 class _DeprecatedKwargs (line 474) | class _DeprecatedKwargs(TypedDict, total=False): class SubAgentMiddleware (line 482) | class SubAgentMiddleware(AgentMiddleware[Any, ContextT, ResponseT]): method __init__ (line 545) | def __init__( method _get_subagents (line 621) | def _get_subagents(self) -> list[_SubagentSpec]: method wrap_model_call (line 672) | def wrap_model_call( method awrap_model_call (line 683) | async def awrap_model_call( FILE: libs/deepagents/deepagents/middleware/summarization.py class SummarizationEvent (line 101) | class SummarizationEvent(TypedDict): class TruncateArgsSettings (line 115) | class TruncateArgsSettings(TypedDict, total=False): class SummarizationState (line 145) | class SummarizationState(AgentState): class SummarizationDefaults (line 155) | class SummarizationDefaults(TypedDict): function compute_summarization_defaults (line 163) | def compute_summarization_defaults(model: BaseChatModel) -> Summarizatio... class _DeepAgentsSummarizationMiddleware (line 203) | class _DeepAgentsSummarizationMiddleware(AgentMiddleware): method __init__ (line 208) | def __init__( method model (line 294) | def model(self) -> BaseChatModel: method token_counter (line 299) | def token_counter(self) -> TokenCounter: method _get_profile_limits (line 303) | def _get_profile_limits(self) -> int | None: method _should_summarize (line 307) | def _should_summarize(self, messages: list[AnyMessage], total_tokens: ... method _determine_cutoff_index (line 311) | def _determine_cutoff_index(self, messages: list[AnyMessage]) -> int: method _partition_messages (line 315) | def _partition_messages( method _create_summary (line 323) | def _create_summary(self, messages_to_summarize: list[AnyMessage]) -> ... method _acreate_summary (line 327) | async def _acreate_summary(self, messages_to_summarize: list[AnyMessag... method _get_backend (line 331) | def _get_backend( method _get_thread_id (line 363) | def _get_thread_id(self) -> str: method _get_history_path (line 387) | def _get_history_path(self) -> str: method _is_summary_message (line 398) | def _is_summary_message(self, msg: AnyMessage) -> bool: method _filter_summary_messages (line 415) | def _filter_summary_messages(self, messages: list[AnyMessage]) -> list... method _build_new_messages_with_path (line 430) | def _build_new_messages_with_path(self, summary: str, file_path: str |... method _get_effective_messages (line 463) | def _get_effective_messages(self, request: ModelRequest) -> list[AnyMe... method _apply_event_to_messages (line 480) | def _apply_event_to_messages( method _compute_state_cutoff (line 519) | def _compute_state_cutoff( method _should_truncate_args (line 546) | def _should_truncate_args(self, messages: list[AnyMessage], total_toke... method _determine_truncate_cutoff_index (line 576) | def _determine_truncate_cutoff_index(self, messages: list[AnyMessage])... method _truncate_tool_call (line 625) | def _truncate_tool_call(self, tool_call: dict[str, Any]) -> dict[str, ... method _truncate_args (line 653) | def _truncate_args( method _offload_to_backend (line 714) | def _offload_to_backend( method _aoffload_to_backend (line 788) | async def _aoffload_to_backend( method wrap_model_call (line 864) | def wrap_model_call( method awrap_model_call (line 968) | async def awrap_model_call( function create_summarization_middleware (line 1077) | def create_summarization_middleware( function create_summarization_tool_middleware (line 1110) | def create_summarization_tool_middleware( class SummarizationToolMiddleware (line 1176) | class SummarizationToolMiddleware(AgentMiddleware): method __init__ (line 1213) | def __init__(self, summarization: _DeepAgentsSummarizationMiddleware) ... method _resolve_backend (line 1223) | def _resolve_backend(self, runtime: ToolRuntime) -> BackendProtocol: method _create_compact_tool (line 1237) | def _create_compact_tool(self) -> BaseTool: method _build_compact_result (line 1265) | def _build_compact_result( method _nothing_to_compact (line 1314) | def _nothing_to_compact(tool_call_id: str) -> Command: method _compact_error (line 1335) | def _compact_error(tool_call_id: str, exc: BaseException) -> Command: method _is_eligible_for_compaction (line 1361) | def _is_eligible_for_compaction(self, messages: list[AnyMessage]) -> b... method _run_compact (line 1397) | def _run_compact(self, runtime: ToolRuntime) -> Command: method _arun_compact (line 1431) | async def _arun_compact(self, runtime: ToolRuntime) -> Command: method wrap_model_call (line 1465) | def wrap_model_call( method awrap_model_call (line 1486) | async def awrap_model_call( FILE: libs/deepagents/tests/integration_tests/test_deepagents.py class TestDeepAgents (line 22) | class TestDeepAgents: method test_deep_agent_with_subagents (line 23) | def test_deep_agent_with_subagents(self): method test_deep_agent_with_subagents_gen_purpose (line 40) | def test_deep_agent_with_subagents_gen_purpose(self): method test_deep_agent_with_subagents_with_middleware (line 57) | def test_deep_agent_with_subagents_with_middleware(self): method test_deep_agent_with_custom_subagents (line 75) | def test_deep_agent_with_custom_subagents(self): method test_deep_agent_with_extended_state_and_subagents (line 102) | def test_deep_agent_with_extended_state_and_subagents(self): method test_deep_agent_with_subagents_no_tools (line 120) | def test_deep_agent_with_subagents_no_tools(self): method test_response_format_tool_strategy (line 137) | def test_response_format_tool_strategy(self): FILE: libs/deepagents/tests/integration_tests/test_filesystem_middleware.py function build_composite_state_backend (line 23) | def build_composite_state_backend(runtime, *, routes): class TestFilesystem (line 35) | class TestFilesystem: method test_filesystem_system_prompt_override (line 36) | def test_filesystem_system_prompt_override(self): method test_filesystem_system_prompt_override_with_composite_backend (line 49) | def test_filesystem_system_prompt_override_with_composite_backend(self): method test_ls_longterm_without_path (line 66) | def test_ls_longterm_without_path(self): method test_ls_longterm_with_path (line 128) | def test_ls_longterm_with_path(self): method test_read_file_longterm_local_file (line 185) | def test_read_file_longterm_local_file(self): method test_read_file_longterm_store_file (line 227) | def test_read_file_longterm_store_file(self): method test_read_file_longterm (line 269) | def test_read_file_longterm(self): method test_write_file_longterm (line 319) | def test_write_file_longterm(self): method test_write_file_fail_already_exists_in_store (line 349) | def test_write_file_fail_already_exists_in_store(self): method test_write_file_fail_already_exists_in_local (line 385) | def test_write_file_fail_already_exists_in_local(self): method test_edit_file_longterm (line 417) | def test_edit_file_longterm(self): method test_longterm_memory_multiple_tools (line 457) | def test_longterm_memory_multiple_tools(self): method test_longterm_memory_multiple_tools_deepagent (line 472) | def test_longterm_memory_multiple_tools_deepagent(self): method test_shortterm_memory_multiple_tools_deepagent (line 482) | def test_shortterm_memory_multiple_tools_deepagent(self): method test_tool_call_with_tokens_exceeding_limit (line 488) | def test_tool_call_with_tokens_exceeding_limit(self): method test_tool_call_with_tokens_exceeding_custom_limit (line 506) | def test_tool_call_with_tokens_exceeding_custom_limit(self): method test_command_with_tool_call (line 525) | def test_command_with_tool_call(self): method test_command_with_tool_call_existing_state (line 544) | def test_command_with_tool_call_existing_state(self): method test_glob_search_shortterm_only (line 570) | def test_glob_search_shortterm_only(self): method test_glob_search_longterm_only (line 611) | def test_glob_search_longterm_only(self): method test_glob_search_mixed_memory (line 668) | def test_glob_search_mixed_memory(self): method test_grep_search_shortterm_only (line 727) | def test_grep_search_shortterm_only(self): method test_grep_search_longterm_only (line 768) | def test_grep_search_longterm_only(self): method test_grep_search_mixed_memory (line 825) | def test_grep_search_mixed_memory(self): method test_default_backend_fallback (line 884) | def test_default_backend_fallback(self): method test_execute_tool_filtered_for_non_sandbox_backend (line 911) | def test_execute_tool_filtered_for_non_sandbox_backend(self): method test_system_prompt_includes_execute_instructions_only_when_supported (line 959) | def test_system_prompt_includes_execute_instructions_only_when_support... method test_composite_backend_execution_support_detection (line 1008) | def test_composite_backend_execution_support_detection(self): function assert_longterm_mem_tools (line 1043) | def assert_longterm_mem_tools(agent, store): function assert_shortterm_mem_tools (line 1099) | def assert_shortterm_mem_tools(agent): FILE: libs/deepagents/tests/integration_tests/test_langsmith_sandbox.py class TestLangSmithSandboxStandard (line 18) | class TestLangSmithSandboxStandard(SandboxIntegrationTests): method sandbox (line 20) | def sandbox(self) -> Iterator[SandboxBackendProtocol]: method test_download_error_permission_denied (line 35) | def test_download_error_permission_denied(self, sandbox_backend: Sandb... FILE: libs/deepagents/tests/integration_tests/test_subagent_middleware.py function get_weather (line 17) | def get_weather(city: str) -> str: class WeatherMiddleware (line 22) | class WeatherMiddleware(AgentMiddleware): function assert_expected_subgraph_actions (line 26) | def assert_expected_subgraph_actions(expected_tool_calls, agent, inputs): class TestSubagentMiddleware (line 48) | class TestSubagentMiddleware: method test_general_purpose_subagent (line 51) | def test_general_purpose_subagent(self): method test_defined_subagent_tool_calls (line 73) | def test_defined_subagent_tool_calls(self): method test_defined_subagent_custom_model (line 102) | def test_defined_subagent_custom_model(self): method test_defined_subagent_custom_middleware (line 135) | def test_defined_subagent_custom_middleware(self): method test_defined_subagent_custom_runnable (line 169) | def test_defined_subagent_custom_runnable(self): method test_deprecated_api_subagents_inherit_model (line 205) | def test_deprecated_api_subagents_inherit_model(self): method test_deprecated_api_subagents_inherit_tools (line 237) | def test_deprecated_api_subagents_inherit_tools(self): FILE: libs/deepagents/tests/unit_tests/backends/test_backwards_compat.py function _make_store_runtime (line 26) | def _make_store_runtime(): function _make_state_runtime (line 37) | def _make_state_runtime(files=None): class TestV1StyleWritesStateBackend (line 53) | class TestV1StyleWritesStateBackend: method test_write_read_roundtrip (line 56) | def test_write_read_roundtrip(self): method test_write_edit_read_lifecycle (line 80) | def test_write_edit_read_lifecycle(self): method test_grep_works_with_v1_data (line 111) | def test_grep_works_with_v1_data(self): method test_download_works_with_v1_data (line 132) | def test_download_works_with_v1_data(self): method test_ls_works_with_v1_data (line 151) | def test_ls_works_with_v1_data(self): method test_glob_works_with_v1_data (line 167) | def test_glob_works_with_v1_data(self): class TestV1StyleWritesStoreBackend (line 187) | class TestV1StyleWritesStoreBackend: method test_write_read_roundtrip (line 190) | def test_write_read_roundtrip(self): method test_write_edit_read_lifecycle (line 213) | def test_write_edit_read_lifecycle(self): method test_grep_works_with_v1_data (line 238) | def test_grep_works_with_v1_data(self): method test_download_works_with_v1_data (line 252) | def test_download_works_with_v1_data(self): class TestV2LoadsV1CheckpointStateBackend (line 273) | class TestV2LoadsV1CheckpointStateBackend: method _make_v1_file_data (line 279) | def _make_v1_file_data(self, content: str) -> dict: method test_read_v1_checkpoint_data (line 283) | def test_read_v1_checkpoint_data(self): method test_edit_v1_checkpoint_data (line 299) | def test_edit_v1_checkpoint_data(self): method test_grep_v1_checkpoint_data (line 322) | def test_grep_v1_checkpoint_data(self): method test_download_v1_checkpoint_data (line 337) | def test_download_v1_checkpoint_data(self): method test_ls_v1_checkpoint_data (line 351) | def test_ls_v1_checkpoint_data(self): method test_glob_v1_checkpoint_data (line 364) | def test_glob_v1_checkpoint_data(self): method test_write_new_file_alongside_v1_data (line 376) | def test_write_new_file_alongside_v1_data(self): method test_full_lifecycle_v1_checkpoint_to_v2_operations (line 390) | def test_full_lifecycle_v1_checkpoint_to_v2_operations(self): class TestV2LoadsV1CheckpointStoreBackend (line 458) | class TestV2LoadsV1CheckpointStoreBackend: method _seed_v1_store_item (line 465) | def _seed_v1_store_item(self, store, namespace, path, content): method test_read_v1_store_data (line 470) | def test_read_v1_store_data(self): method test_edit_v1_store_data (line 488) | def test_edit_v1_store_data(self): method test_grep_v1_store_data (line 512) | def test_grep_v1_store_data(self): method test_download_v1_store_data (line 527) | def test_download_v1_store_data(self): method test_full_lifecycle_v1_store_to_v2_operations (line 543) | def test_full_lifecycle_v1_store_to_v2_operations(self): class TestBareV1DataNoEncodingField (line 597) | class TestBareV1DataNoEncodingField: method test_state_backend_reads_bare_v1 (line 604) | def test_state_backend_reads_bare_v1(self): method test_store_backend_reads_bare_v1 (line 625) | def test_store_backend_reads_bare_v1(self): method test_state_backend_edits_bare_v1 (line 653) | def test_state_backend_edits_bare_v1(self): method test_state_backend_download_bare_v1 (line 674) | def test_state_backend_download_bare_v1(self): method test_store_backend_download_bare_v1 (line 691) | def test_store_backend_download_bare_v1(self): FILE: libs/deepagents/tests/unit_tests/backends/test_composite_backend.py function make_runtime (line 21) | def make_runtime(tid: str = "tc"): function build_composite_state_backend (line 32) | def build_composite_state_backend(runtime: ToolRuntime, *, routes, file_... function test_composite_state_backend_routes_and_search (line 43) | def test_composite_state_backend_routes_and_search(tmp_path: Path): # n... function test_composite_backend_filesystem_plus_store (line 75) | def test_composite_backend_filesystem_plus_store(tmp_path: Path): function test_composite_backend_store_to_store (line 123) | def test_composite_backend_store_to_store(): function test_composite_backend_multiple_routes (line 167) | def test_composite_backend_multiple_routes(): function test_composite_backend_grep_path_isolation (line 242) | def test_composite_backend_grep_path_isolation(): function test_composite_backend_ls_nested_directories (line 273) | def test_composite_backend_ls_nested_directories(tmp_path: Path): function test_composite_backend_ls_multiple_routes_nested (line 327) | def test_composite_backend_ls_multiple_routes_nested(): function test_composite_backend_ls_trailing_slash (line 396) | def test_composite_backend_ls_trailing_slash(tmp_path: Path): function test_composite_backend_intercept_large_tool_result (line 428) | def test_composite_backend_intercept_large_tool_result(file_format): function test_composite_backend_intercept_large_tool_result_routed_to_store (line 447) | def test_composite_backend_intercept_large_tool_result_routed_to_store(f... class MockSandboxBackend (line 473) | class MockSandboxBackend(SandboxBackendProtocol, StateBackend): method execute (line 476) | def execute(self, command: str, *, timeout: int = 30 * 60) -> ExecuteR... method id (line 485) | def id(self) -> str: function test_composite_backend_execute_with_sandbox_default (line 489) | def test_composite_backend_execute_with_sandbox_default(): function test_composite_backend_execute_without_sandbox_default (line 505) | def test_composite_backend_execute_without_sandbox_default(): function test_composite_backend_supports_execution_check (line 518) | def test_composite_backend_supports_execution_check(): function test_composite_backend_execute_with_routed_backends (line 536) | def test_composite_backend_execute_with_routed_backends(): function test_composite_upload_routing (line 561) | def test_composite_upload_routing(tmp_path: Path): function test_composite_download_routing (line 597) | def test_composite_download_routing(tmp_path: Path): function test_composite_upload_download_roundtrip (line 628) | def test_composite_upload_download_roundtrip(tmp_path: Path): function test_composite_partial_success_upload (line 647) | def test_composite_partial_success_upload(tmp_path: Path): function test_composite_partial_success_download (line 676) | def test_composite_partial_success_download(tmp_path: Path): function test_composite_upload_download_multiple_routes (line 705) | def test_composite_upload_download_multiple_routes(tmp_path: Path): function test_composite_download_preserves_original_paths (line 732) | def test_composite_download_preserves_original_paths(tmp_path: Path): function test_composite_grep_targeting_specific_route (line 752) | def test_composite_grep_targeting_specific_route(tmp_path: Path) -> None: function test_composite_grep_with_glob_filter (line 783) | def test_composite_grep_with_glob_filter(tmp_path: Path) -> None: function test_composite_grep_with_glob_in_specific_route (line 816) | def test_composite_grep_with_glob_in_specific_route(tmp_path: Path) -> N... function test_composite_grep_with_path_none (line 845) | def test_composite_grep_with_path_none(tmp_path: Path) -> None: function test_composite_grep_invalid_regex (line 875) | def test_composite_grep_invalid_regex(tmp_path: Path) -> None: function test_composite_grep_nested_path_in_route (line 888) | def test_composite_grep_nested_path_in_route(tmp_path: Path) -> None: function test_composite_grep_empty_results (line 919) | def test_composite_grep_empty_results(tmp_path: Path) -> None: function test_composite_grep_route_prefix_restoration (line 939) | def test_composite_grep_route_prefix_restoration(tmp_path: Path) -> None: function test_composite_grep_multiple_matches_per_file (line 973) | def test_composite_grep_multiple_matches_per_file(tmp_path: Path) -> None: function test_composite_grep_multiple_routes_aggregation (line 1001) | def test_composite_grep_multiple_routes_aggregation(tmp_path: Path) -> N... function test_composite_grep_error_in_routed_backend (line 1039) | def test_composite_grep_error_in_routed_backend() -> None: function test_composite_grep_error_in_routed_backend_at_root (line 1058) | def test_composite_grep_error_in_routed_backend_at_root() -> None: function test_composite_grep_error_in_default_backend_at_root (line 1077) | def test_composite_grep_error_in_default_backend_at_root() -> None: function test_composite_grep_non_root_path_on_default_backend (line 1096) | def test_composite_grep_non_root_path_on_default_backend(tmp_path: Path)... function test_composite_glob_targeting_specific_route (line 1120) | def test_composite_glob_targeting_specific_route() -> None: function test_composite_glob_leading_slash_pattern (line 1144) | def test_composite_glob_leading_slash_pattern() -> None: function test_composite_glob_nested_path_in_route (line 1164) | def test_composite_glob_nested_path_in_route() -> None: function test_grep_path_stripping_matches_get_backend_and_key (line 1189) | def test_grep_path_stripping_matches_get_backend_and_key() -> None: function test_glob_path_stripping_matches_get_backend_and_key (line 1208) | def test_glob_path_stripping_matches_get_backend_and_key() -> None: function test_get_backend_and_key_consistency (line 1222) | def test_get_backend_and_key_consistency() -> None: function test_route_for_path_edge_cases (line 1250) | def test_route_for_path_edge_cases() -> None: function test_route_for_path_no_trailing_slash_boundary (line 1318) | def test_route_for_path_no_trailing_slash_boundary() -> None: function test_write_result_path_restored_to_full_routed_path (line 1375) | def test_write_result_path_restored_to_full_routed_path(): function test_edit_result_path_restored_to_full_routed_path (line 1386) | def test_edit_result_path_restored_to_full_routed_path(): FILE: libs/deepagents/tests/unit_tests/backends/test_composite_backend_async.py function make_runtime (line 20) | def make_runtime(tid: str = "tc"): function build_composite_state_backend (line 31) | def build_composite_state_backend(runtime: ToolRuntime, *, routes): class MockSandboxBackend (line 43) | class MockSandboxBackend(SandboxBackendProtocol, StateBackend): method execute (line 46) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... method aexecute (line 54) | async def aexecute(self, command: str, *, timeout: int | None = None) ... method id (line 63) | def id(self) -> str: function test_composite_state_backend_routes_and_search_async (line 67) | async def test_composite_state_backend_routes_and_search_async(tmp_path:... function test_composite_backend_filesystem_plus_store_async (line 99) | async def test_composite_backend_filesystem_plus_store_async(tmp_path: P... function test_composite_backend_store_to_store_async (line 147) | async def test_composite_backend_store_to_store_async(): function test_composite_backend_multiple_routes_async (line 191) | async def test_composite_backend_multiple_routes_async(): function test_composite_backend_als_nested_directories_async (line 265) | async def test_composite_backend_als_nested_directories_async(tmp_path: ... function test_composite_backend_als_multiple_routes_nested_async (line 320) | async def test_composite_backend_als_multiple_routes_nested_async(): function test_composite_backend_aexecute_with_sandbox_default_async (line 390) | async def test_composite_backend_aexecute_with_sandbox_default_async(): function test_composite_backend_aexecute_forwards_timeout_async (line 406) | async def test_composite_backend_aexecute_forwards_timeout_async(): function test_composite_backend_aexecute_without_sandbox_default_async (line 436) | async def test_composite_backend_aexecute_without_sandbox_default_async(): function test_composite_backend_aexecute_with_routed_backends_async (line 449) | async def test_composite_backend_aexecute_with_routed_backends_async(): function test_composite_aupload_routing_async (line 474) | async def test_composite_aupload_routing_async(tmp_path: Path): function test_composite_adownload_routing_async (line 510) | async def test_composite_adownload_routing_async(tmp_path: Path): function test_composite_aupload_download_roundtrip_async (line 534) | async def test_composite_aupload_download_roundtrip_async(tmp_path: Path): function test_composite_partial_success_aupload_async (line 553) | async def test_composite_partial_success_aupload_async(tmp_path: Path): function test_composite_partial_success_adownload_async (line 582) | async def test_composite_partial_success_adownload_async(tmp_path: Path): function test_composite_aupload_download_multiple_routes_async (line 611) | async def test_composite_aupload_download_multiple_routes_async(tmp_path... function test_composite_adownload_preserves_original_paths_async (line 638) | async def test_composite_adownload_preserves_original_paths_async(tmp_pa... function test_composite_agrep_targeting_specific_route_async (line 658) | async def test_composite_agrep_targeting_specific_route_async(tmp_path: ... function test_composite_agrep_with_glob_filter_async (line 689) | async def test_composite_agrep_with_glob_filter_async(tmp_path: Path) ->... function test_composite_agrep_with_glob_in_specific_route_async (line 722) | async def test_composite_agrep_with_glob_in_specific_route_async(tmp_pat... function test_composite_agrep_with_path_none_async (line 751) | async def test_composite_agrep_with_path_none_async(tmp_path: Path) -> N... function test_composite_agrep_invalid_regex_async (line 781) | async def test_composite_agrep_invalid_regex_async(tmp_path: Path) -> None: function test_composite_agrep_nested_path_in_route_async (line 794) | async def test_composite_agrep_nested_path_in_route_async(tmp_path: Path... function test_composite_agrep_empty_results_async (line 825) | async def test_composite_agrep_empty_results_async(tmp_path: Path) -> None: function test_composite_agrep_route_prefix_restoration_async (line 845) | async def test_composite_agrep_route_prefix_restoration_async(tmp_path: ... function test_composite_agrep_multiple_matches_per_file_async (line 879) | async def test_composite_agrep_multiple_matches_per_file_async(tmp_path:... function test_composite_agrep_multiple_routes_aggregation_async (line 907) | async def test_composite_agrep_multiple_routes_aggregation_async(tmp_pat... function test_composite_agrep_error_in_routed_backend_async (line 945) | async def test_composite_agrep_error_in_routed_backend_async() -> None: function test_composite_agrep_error_in_routed_backend_at_root_async (line 964) | async def test_composite_agrep_error_in_routed_backend_at_root_async() -... function test_composite_agrep_error_in_default_backend_at_root_async (line 983) | async def test_composite_agrep_error_in_default_backend_at_root_async() ... function test_composite_agrep_non_root_path_on_default_backend_async (line 1002) | async def test_composite_agrep_non_root_path_on_default_backend_async(tm... function test_composite_aglob_targeting_specific_route_async (line 1026) | async def test_composite_aglob_targeting_specific_route_async() -> None: function test_composite_aglob_nested_path_in_route_async (line 1050) | async def test_composite_aglob_nested_path_in_route_async() -> None: function test_awrite_result_path_restored_to_full_routed_path (line 1072) | async def test_awrite_result_path_restored_to_full_routed_path(): function test_aedit_result_path_restored_to_full_routed_path (line 1083) | async def test_aedit_result_path_restored_to_full_routed_path(): FILE: libs/deepagents/tests/unit_tests/backends/test_file_format.py function _make_store_runtime (line 34) | def _make_store_runtime(): function _make_state_runtime (line 45) | def _make_state_runtime(files=None): function test_text_round_trip (line 61) | def test_text_round_trip(): function test_binary_round_trip (line 74) | def test_binary_round_trip(): function test_legacy_list_content_emits_warning (line 88) | def test_legacy_list_content_emits_warning(): function test_new_format_no_warning (line 109) | def test_new_format_no_warning(): function test_store_upload_binary (line 129) | def test_store_upload_binary(): function test_store_upload_download_binary_round_trip (line 152) | def test_store_upload_download_binary_round_trip(): function test_store_upload_text (line 170) | def test_store_upload_text(): function test_store_legacy_list_content_read (line 192) | def test_store_legacy_list_content_read(): function test_state_legacy_list_content_read (line 232) | def test_state_legacy_list_content_read(): function test_grep_new_format (line 265) | def test_grep_new_format(): function test_grep_legacy_format (line 282) | def test_grep_legacy_format(): function test_store_upload_utf8_content_stored_as_text (line 306) | def test_store_upload_utf8_content_stored_as_text(): function test_store_upload_non_utf8_content_stored_as_base64 (line 318) | def test_store_upload_non_utf8_content_stored_as_base64(): function test_store_write_as_list (line 336) | def test_store_write_as_list(): function test_store_edit_as_list (line 349) | def test_store_edit_as_list(): function test_store_write_as_list_readable (line 363) | def test_store_write_as_list_readable(): function test_state_write_as_list (line 381) | def test_state_write_as_list(): function test_state_edit_as_list (line 393) | def test_state_edit_as_list(): FILE: libs/deepagents/tests/unit_tests/backends/test_filesystem_backend.py function write_file (line 12) | def write_file(p: Path, content: str): function test_filesystem_backend_normal_mode (line 17) | def test_filesystem_backend_normal_mode(tmp_path: Path): function test_filesystem_backend_virtual_mode (line 52) | def test_filesystem_backend_virtual_mode(tmp_path: Path, monkeypatch: py... function test_filesystem_backend_ls_nested_directories (line 100) | def test_filesystem_backend_ls_nested_directories(tmp_path: Path): function test_filesystem_backend_ls_normal_mode_nested (line 144) | def test_filesystem_backend_ls_normal_mode_nested(tmp_path: Path): function test_filesystem_backend_ls_trailing_slash (line 175) | def test_filesystem_backend_ls_trailing_slash(tmp_path: Path): function test_filesystem_backend_intercept_large_tool_result (line 209) | def test_filesystem_backend_intercept_large_tool_result(tmp_path: Path): function test_filesystem_upload_single_file (line 235) | def test_filesystem_upload_single_file(tmp_path: Path): function test_filesystem_upload_multiple_files (line 255) | def test_filesystem_upload_multiple_files(tmp_path: Path): function test_filesystem_download_single_file (line 279) | def test_filesystem_download_single_file(tmp_path: Path): function test_filesystem_download_multiple_files (line 297) | def test_filesystem_download_multiple_files(tmp_path: Path): function test_filesystem_upload_download_roundtrip (line 330) | def test_filesystem_upload_download_roundtrip(tmp_path: Path): function test_filesystem_download_errors (line 349) | def test_filesystem_download_errors(tmp_path: Path): function test_filesystem_upload_errors (line 374) | def test_filesystem_upload_errors(tmp_path: Path): function test_filesystem_partial_success_upload (line 385) | def test_filesystem_partial_success_upload(tmp_path: Path): function test_filesystem_partial_success_download (line 411) | def test_filesystem_partial_success_download(tmp_path: Path): function test_filesystem_upload_to_existing_directory_path (line 439) | def test_filesystem_upload_to_existing_directory_path(tmp_path: Path): function test_filesystem_upload_parent_is_file (line 463) | def test_filesystem_upload_parent_is_file(tmp_path: Path): function test_filesystem_download_directory_as_file (line 485) | def test_filesystem_download_directory_as_file(tmp_path: Path): function test_grep_literal_search_with_special_chars (line 517) | def test_grep_literal_search_with_special_chars(tmp_path: Path, pattern:... class TestToVirtualPath (line 538) | class TestToVirtualPath: method test_returns_forward_slash_relative_path (line 541) | def test_returns_forward_slash_relative_path(self, tmp_path: Path): method test_cwd_itself_returns_slash_dot (line 548) | def test_cwd_itself_returns_slash_dot(self, tmp_path: Path): method test_outside_cwd_raises_value_error (line 554) | def test_outside_cwd_raises_value_error(self, tmp_path: Path): class TestWindowsPathHandling (line 563) | class TestWindowsPathHandling: method backend (line 567) | def backend(self, tmp_path: Path): method test_ls_paths (line 574) | def test_ls_paths(self, backend): method test_glob_paths (line 581) | def test_glob_paths(self, backend): method test_grep_paths (line 588) | def test_grep_paths(self, backend): method test_deeply_nested_path (line 595) | def test_deeply_nested_path(self, tmp_path: Path): FILE: libs/deepagents/tests/unit_tests/backends/test_filesystem_backend_async.py function write_file (line 14) | def write_file(p: Path, content: str): function test_filesystem_backend_async_normal_mode (line 19) | async def test_filesystem_backend_async_normal_mode(tmp_path: Path): function test_filesystem_backend_async_virtual_mode (line 55) | async def test_filesystem_backend_async_virtual_mode(tmp_path: Path): function test_filesystem_backend_als_nested_directories (line 102) | async def test_filesystem_backend_als_nested_directories(tmp_path: Path): function test_filesystem_backend_als_normal_mode_nested (line 147) | async def test_filesystem_backend_als_normal_mode_nested(tmp_path: Path): function test_filesystem_backend_als_trailing_slash (line 178) | async def test_filesystem_backend_als_trailing_slash(tmp_path: Path): function test_filesystem_backend_intercept_large_tool_result_async (line 212) | async def test_filesystem_backend_intercept_large_tool_result_async(tmp_... function test_filesystem_aupload_single_file (line 238) | async def test_filesystem_aupload_single_file(tmp_path: Path): function test_filesystem_aupload_multiple_files (line 258) | async def test_filesystem_aupload_multiple_files(tmp_path: Path): function test_filesystem_adownload_single_file (line 282) | async def test_filesystem_adownload_single_file(tmp_path: Path): function test_filesystem_adownload_multiple_files (line 300) | async def test_filesystem_adownload_multiple_files(tmp_path: Path): function test_filesystem_aupload_download_roundtrip (line 333) | async def test_filesystem_aupload_download_roundtrip(tmp_path: Path): function test_filesystem_adownload_errors (line 352) | async def test_filesystem_adownload_errors(tmp_path: Path): function test_filesystem_aupload_errors (line 377) | async def test_filesystem_aupload_errors(tmp_path: Path): function test_filesystem_partial_success_aupload (line 388) | async def test_filesystem_partial_success_aupload(tmp_path: Path): function test_filesystem_partial_success_adownload (line 414) | async def test_filesystem_partial_success_adownload(tmp_path: Path): function test_filesystem_aedit_replace_all (line 442) | async def test_filesystem_aedit_replace_all(tmp_path: Path): function test_filesystem_aread_with_offset_and_limit (line 473) | async def test_filesystem_aread_with_offset_and_limit(tmp_path: Path): function test_filesystem_agrep_with_glob (line 493) | async def test_filesystem_agrep_with_glob(tmp_path: Path): function test_filesystem_aglob_recursive (line 512) | async def test_filesystem_aglob_recursive(tmp_path: Path): FILE: libs/deepagents/tests/unit_tests/backends/test_langsmith_sandbox.py function _make_sandbox (line 13) | def _make_sandbox() -> tuple[LangSmithSandbox, MagicMock]: function test_id_returns_sandbox_name (line 20) | def test_id_returns_sandbox_name() -> None: function test_execute_returns_stdout (line 25) | def test_execute_returns_stdout() -> None: function test_execute_combines_stdout_and_stderr (line 37) | def test_execute_combines_stdout_and_stderr() -> None: function test_execute_stderr_only (line 47) | def test_execute_stderr_only() -> None: function test_execute_with_explicit_timeout (line 56) | def test_execute_with_explicit_timeout() -> None: function test_execute_with_zero_timeout (line 65) | def test_execute_with_zero_timeout() -> None: function test_write_success (line 74) | def test_write_success() -> None: function test_write_error (line 84) | def test_write_error() -> None: function test_download_files_success (line 95) | def test_download_files_success() -> None: function test_download_files_not_found (line 107) | def test_download_files_not_found() -> None: function test_download_files_partial_success (line 119) | def test_download_files_partial_success() -> None: function test_upload_files_success (line 138) | def test_upload_files_success() -> None: function test_upload_files_error (line 149) | def test_upload_files_error() -> None: function test_upload_files_partial_success (line 160) | def test_upload_files_partial_success() -> None: FILE: libs/deepagents/tests/unit_tests/backends/test_local_shell_backend.py function test_local_shell_backend_initialization (line 12) | def test_local_shell_backend_initialization() -> None: function test_local_shell_backend_execute_simple_command (line 22) | def test_local_shell_backend_execute_simple_command() -> None: function test_local_shell_backend_execute_with_error (line 35) | def test_local_shell_backend_execute_with_error() -> None: function test_local_shell_backend_execute_in_working_directory (line 47) | def test_local_shell_backend_execute_in_working_directory() -> None: function test_local_shell_backend_execute_empty_command (line 63) | def test_local_shell_backend_execute_empty_command() -> None: function test_local_shell_backend_execute_timeout (line 74) | def test_local_shell_backend_execute_timeout() -> None: function test_local_shell_backend_execute_output_truncation (line 86) | def test_local_shell_backend_execute_output_truncation() -> None: function test_local_shell_backend_filesystem_operations (line 99) | def test_local_shell_backend_filesystem_operations() -> None: function test_local_shell_backend_integration_shell_and_filesystem (line 127) | def test_local_shell_backend_integration_shell_and_filesystem() -> None: function test_local_shell_backend_ls_info (line 151) | def test_local_shell_backend_ls_info() -> None: function test_local_shell_backend_grep (line 170) | def test_local_shell_backend_grep() -> None: function test_local_shell_backend_glob (line 187) | def test_local_shell_backend_glob() -> None: function test_local_shell_backend_virtual_mode_restrictions (line 208) | def test_local_shell_backend_virtual_mode_restrictions() -> None: function test_local_shell_backend_environment_variables (line 223) | def test_local_shell_backend_environment_variables() -> None: function test_local_shell_backend_inherit_env (line 235) | def test_local_shell_backend_inherit_env() -> None: function test_local_shell_backend_empty_env_by_default (line 247) | def test_local_shell_backend_empty_env_by_default() -> None: function test_local_shell_backend_stderr_formatting (line 260) | def test_local_shell_backend_stderr_formatting() -> None: function test_local_shell_backend_async_execute (line 273) | async def test_local_shell_backend_async_execute() -> None: function test_local_shell_backend_async_filesystem_operations (line 285) | async def test_local_shell_backend_async_filesystem_operations() -> None: FILE: libs/deepagents/tests/unit_tests/backends/test_protocol.py class BareBackend (line 14) | class BareBackend(BackendProtocol): class BareSandboxBackend (line 18) | class BareSandboxBackend(SandboxBackendProtocol): function backend (line 23) | def backend() -> BareBackend: function sandbox_backend (line 28) | def sandbox_backend() -> BareSandboxBackend: class TestBackendProtocolRaisesNotImplemented (line 32) | class TestBackendProtocolRaisesNotImplemented: method test_ls_info (line 35) | def test_ls_info(self, backend: BareBackend) -> None: method test_read (line 39) | def test_read(self, backend: BareBackend) -> None: method test_grep (line 43) | def test_grep(self, backend: BareBackend) -> None: method test_glob (line 47) | def test_glob(self, backend: BareBackend) -> None: method test_write (line 51) | def test_write(self, backend: BareBackend) -> None: method test_edit (line 55) | def test_edit(self, backend: BareBackend) -> None: method test_upload_files (line 59) | def test_upload_files(self, backend: BareBackend) -> None: method test_download_files (line 63) | def test_download_files(self, backend: BareBackend) -> None: class TestSandboxBackendProtocolRaisesNotImplemented (line 68) | class TestSandboxBackendProtocolRaisesNotImplemented: method test_execute (line 71) | def test_execute(self, sandbox_backend: BareSandboxBackend) -> None: class TestAsyncMethodsPropagateNotImplemented (line 76) | class TestAsyncMethodsPropagateNotImplemented: method test_als_info (line 79) | async def test_als_info(self, backend: BareBackend) -> None: method test_aread (line 83) | async def test_aread(self, backend: BareBackend) -> None: method test_agrep (line 87) | async def test_agrep(self, backend: BareBackend) -> None: method test_aglob (line 91) | async def test_aglob(self, backend: BareBackend) -> None: method test_awrite (line 95) | async def test_awrite(self, backend: BareBackend) -> None: method test_aedit (line 99) | async def test_aedit(self, backend: BareBackend) -> None: class TestDeprecatedMethodsRouteToNewNames (line 104) | class TestDeprecatedMethodsRouteToNewNames: method test_ls_info_delegates_to_ls (line 107) | def test_ls_info_delegates_to_ls(self) -> None: method test_grep_raw_delegates_to_grep (line 117) | def test_grep_raw_delegates_to_grep(self) -> None: method test_glob_info_delegates_to_glob (line 127) | def test_glob_info_delegates_to_glob(self) -> None: class TestLegacySubclassOverrideRouting (line 138) | class TestLegacySubclassOverrideRouting: method test_ls_routes_to_ls_info_override (line 141) | def test_ls_routes_to_ls_info_override(self) -> None: method test_grep_routes_to_grep_raw_override (line 151) | def test_grep_routes_to_grep_raw_override(self) -> None: method test_glob_routes_to_glob_info_override (line 161) | def test_glob_routes_to_glob_info_override(self) -> None: method test_aupload_files (line 171) | async def test_aupload_files(self, backend: BareBackend) -> None: method test_adownload_files (line 175) | async def test_adownload_files(self, backend: BareBackend) -> None: method test_aexecute (line 179) | async def test_aexecute(self, sandbox_backend: BareSandboxBackend) -> ... FILE: libs/deepagents/tests/unit_tests/backends/test_sandbox_backend.py class MockSandbox (line 28) | class MockSandbox(BaseSandbox): method __init__ (line 31) | def __init__(self) -> None: method id (line 36) | def id(self) -> str: method execute (line 39) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... method upload_files (line 45) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... method download_files (line 48) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: function test_write_command_template_format (line 52) | def test_write_command_template_format() -> None: function test_edit_command_template_format (line 66) | def test_edit_command_template_format() -> None: function test_glob_command_template_format (line 78) | def test_glob_command_template_format() -> None: function test_read_command_template_format (line 90) | def test_read_command_template_format() -> None: function test_heredoc_command_templates_end_with_newline (line 101) | def test_heredoc_command_templates_end_with_newline() -> None: function test_sandbox_read_uses_payload (line 115) | def test_sandbox_read_uses_payload() -> None: function test_sandbox_write_method (line 127) | def test_sandbox_write_method() -> None: function test_sandbox_edit_method (line 139) | def test_sandbox_edit_method() -> None: function test_sandbox_write_with_special_content (line 151) | def test_sandbox_write_with_special_content() -> None: function test_sandbox_edit_with_special_strings (line 163) | def test_sandbox_edit_with_special_strings() -> None: function test_sandbox_grep_literal_search (line 175) | def test_sandbox_grep_literal_search() -> None: FILE: libs/deepagents/tests/unit_tests/backends/test_state_backend.py function make_runtime (line 13) | def make_runtime(files=None): function test_write_read_edit_ls_grep_glob_state_backend (line 27) | def test_write_read_edit_ls_grep_glob_state_backend(): function test_state_backend_errors (line 69) | def test_state_backend_errors(): function test_state_backend_ls_nested_directories (line 85) | def test_state_backend_ls_nested_directories(): function test_state_backend_ls_trailing_slash (line 130) | def test_state_backend_ls_trailing_slash(): function test_state_backend_intercept_large_tool_result (line 157) | def test_state_backend_intercept_large_tool_result(file_format): function test_state_backend_grep_literal_search_special_chars (line 189) | def test_state_backend_grep_literal_search_special_chars(pattern: str, e... function test_state_backend_grep_exact_file_path (line 214) | def test_state_backend_grep_exact_file_path() -> None: function test_state_backend_path_edge_cases (line 261) | def test_state_backend_path_edge_cases() -> None: function test_state_backend_grep_with_path_variations (line 324) | def test_state_backend_grep_with_path_variations(path: str, expected_cou... FILE: libs/deepagents/tests/unit_tests/backends/test_state_backend_async.py function make_runtime (line 15) | def make_runtime(files=None): function test_awrite_aread_aedit_als_agrep_aglob_state_backend (line 29) | async def test_awrite_aread_aedit_als_agrep_aglob_state_backend(): function test_state_backend_async_errors (line 72) | async def test_state_backend_async_errors(): function test_state_backend_als_nested_directories (line 89) | async def test_state_backend_als_nested_directories(): function test_state_backend_als_trailing_slash (line 135) | async def test_state_backend_als_trailing_slash(): function test_state_backend_aedit_replace_all (line 162) | async def test_state_backend_aedit_replace_all(): function test_state_backend_aread_with_offset_and_limit (line 196) | async def test_state_backend_aread_with_offset_and_limit(): function test_state_backend_agrep_with_pattern_and_glob (line 217) | async def test_state_backend_agrep_with_pattern_and_glob(): function test_state_backend_aglob_recursive (line 243) | async def test_state_backend_aglob_recursive(): function test_state_backend_intercept_large_tool_result_async (line 271) | async def test_state_backend_intercept_large_tool_result_async(file_form... function test_state_backend_agrep_exact_file_path (line 290) | async def test_state_backend_agrep_exact_file_path() -> None: function test_state_backend_apath_edge_cases (line 337) | async def test_state_backend_apath_edge_cases() -> None: function test_state_backend_agrep_with_path_variations (line 400) | async def test_state_backend_agrep_with_path_variations(path: str, expec... FILE: libs/deepagents/tests/unit_tests/backends/test_store_backend.py function make_runtime (line 15) | def make_runtime(): function test_store_backend_crud_and_search (line 26) | def test_store_backend_crud_and_search(): function test_store_backend_ls_nested_directories (line 60) | def test_store_backend_ls_nested_directories(): function test_store_backend_ls_trailing_slash (line 106) | def test_store_backend_ls_trailing_slash(): function test_store_backend_intercept_large_tool_result (line 132) | def test_store_backend_intercept_large_tool_result(file_format): class UserContext (line 154) | class UserContext: function test_store_backend_namespace_user_scoped (line 161) | def test_store_backend_namespace_user_scoped() -> None: function test_store_backend_namespace_multi_level (line 188) | def test_store_backend_namespace_multi_level() -> None: function test_store_backend_namespace_isolation (line 218) | def test_store_backend_namespace_isolation() -> None: function test_store_backend_namespace_error_handling (line 265) | def test_store_backend_namespace_error_handling() -> None: function test_store_backend_namespace_legacy_mode (line 287) | def test_store_backend_namespace_legacy_mode() -> None: function test_store_backend_namespace_with_state (line 314) | def test_store_backend_namespace_with_state() -> None: function test_store_backend_grep_literal_search_special_chars (line 354) | def test_store_backend_grep_literal_search_special_chars(pattern: str, e... class TestValidateNamespace (line 381) | class TestValidateNamespace: method test_valid_namespaces (line 400) | def test_valid_namespaces(self, namespace: tuple[str, ...]) -> None: method test_invalid_namespaces (line 423) | def test_invalid_namespaces(self, namespace: tuple[str, ...], match_ms... method test_non_string_component (line 427) | def test_non_string_component(self) -> None: function test_store_backend_rejects_wildcard_namespace (line 432) | def test_store_backend_rejects_wildcard_namespace() -> None: FILE: libs/deepagents/tests/unit_tests/backends/test_store_backend_async.py function make_runtime (line 15) | def make_runtime(): function test_store_backend_async_crud_and_search (line 26) | async def test_store_backend_async_crud_and_search(): function test_store_backend_als_nested_directories (line 61) | async def test_store_backend_als_nested_directories(): function test_store_backend_als_trailing_slash (line 108) | async def test_store_backend_als_trailing_slash(): function test_store_backend_async_errors (line 134) | async def test_store_backend_async_errors(): function test_store_backend_aedit_replace_all (line 148) | async def test_store_backend_aedit_replace_all(): function test_store_backend_aread_with_offset_and_limit (line 181) | async def test_store_backend_aread_with_offset_and_limit(): function test_store_backend_agrep_with_glob (line 202) | async def test_store_backend_agrep_with_glob(): function test_store_backend_aglob_patterns (line 225) | async def test_store_backend_aglob_patterns(): function test_store_backend_aupload_adownload (line 257) | async def test_store_backend_aupload_adownload(): function test_store_backend_agrep_invalid_regex (line 280) | async def test_store_backend_agrep_invalid_regex(): function test_store_backend_intercept_large_tool_result_async (line 294) | async def test_store_backend_intercept_large_tool_result_async(file_form... function test_store_backend_aintercept_large_tool_result_async (line 317) | async def test_store_backend_aintercept_large_tool_result_async(file_for... FILE: libs/deepagents/tests/unit_tests/backends/test_timeout_compat.py class ModernBackend (line 24) | class ModernBackend(SandboxBackendProtocol): method id (line 28) | def id(self) -> str: method execute (line 31) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... class LegacyBackend (line 35) | class LegacyBackend(SandboxBackendProtocol): method id (line 39) | def id(self) -> str: method execute (line 42) | def execute(self, command: str) -> ExecuteResponse: # type: ignore[ov... class KwargsBackend (line 46) | class KwargsBackend(SandboxBackendProtocol): method id (line 50) | def id(self) -> str: method execute (line 53) | def execute(self, command: str, **kwargs: object) -> ExecuteResponse: ... class TestExecuteAcceptsTimeout (line 62) | class TestExecuteAcceptsTimeout: method setup_method (line 63) | def setup_method(self) -> None: method test_modern_backend_returns_true (line 66) | def test_modern_backend_returns_true(self) -> None: method test_legacy_backend_returns_false (line 69) | def test_legacy_backend_returns_false(self) -> None: method test_kwargs_backend_returns_false (line 72) | def test_kwargs_backend_returns_false(self) -> None: method test_result_is_cached (line 76) | def test_result_is_cached(self) -> None: method test_logs_warning_on_inspect_failure (line 82) | def test_logs_warning_on_inspect_failure(self, caplog: pytest.LogCaptu... class TestAexecuteTimeoutGuard (line 105) | class TestAexecuteTimeoutGuard: method test_modern_backend_forwards_timeout (line 106) | async def test_modern_backend_forwards_timeout(self) -> None: method test_legacy_backend_drops_timeout_silently (line 123) | async def test_legacy_backend_drops_timeout_silently(self) -> None: method test_no_timeout_skips_check (line 130) | async def test_no_timeout_skips_check(self) -> None: class TestCompositeTimeoutGuard (line 142) | class TestCompositeTimeoutGuard: method setup_method (line 143) | def setup_method(self) -> None: method test_execute_forwards_timeout_to_modern (line 146) | def test_execute_forwards_timeout_to_modern(self) -> None: method test_execute_omits_timeout_for_legacy (line 163) | def test_execute_omits_timeout_for_legacy(self) -> None: method test_aexecute_forwards_timeout_to_modern (line 170) | async def test_aexecute_forwards_timeout_to_modern(self) -> None: method test_aexecute_omits_timeout_for_legacy (line 187) | async def test_aexecute_omits_timeout_for_legacy(self) -> None: FILE: libs/deepagents/tests/unit_tests/backends/test_utils.py class TestValidatePath (line 17) | class TestValidatePath: method test_path_normalization (line 30) | def test_path_normalization(self, input_path: str, expected: str) -> N... method test_invalid_paths_rejected (line 44) | def test_invalid_paths_rejected(self, invalid_path: str, error_match: ... method test_allowed_prefixes_enforced (line 49) | def test_allowed_prefixes_enforced(self) -> None: method test_no_backslashes_in_output (line 56) | def test_no_backslashes_in_output(self) -> None: method test_root_path (line 63) | def test_root_path(self) -> None: method test_double_dots_in_filename_allowed (line 67) | def test_double_dots_in_filename_allowed(self) -> None: method test_allowed_prefixes_boundary (line 76) | def test_allowed_prefixes_boundary(self) -> None: method test_traversal_as_path_component_rejected (line 84) | def test_traversal_as_path_component_rejected(self) -> None: method test_dot_and_empty_string_normalize_to_slash_dot (line 92) | def test_dot_and_empty_string_normalize_to_slash_dot(self) -> None: class TestGlobSearchFiles (line 98) | class TestGlobSearchFiles: method sample_files (line 102) | def sample_files(self) -> dict[str, Any]: method test_basic_glob (line 112) | def test_basic_glob(self, sample_files: dict[str, Any]) -> None: method test_recursive_glob (line 117) | def test_recursive_glob(self, sample_files: dict[str, Any]) -> None: method test_path_filter (line 123) | def test_path_filter(self, sample_files: dict[str, Any]) -> None: method test_no_matches (line 129) | def test_no_matches(self, sample_files: dict[str, Any]) -> None: method test_sorted_by_modification_time (line 133) | def test_sorted_by_modification_time(self, sample_files: dict[str, Any... method test_path_traversal_rejected (line 138) | def test_path_traversal_rejected(self, sample_files: dict[str, Any]) -... method test_leading_slash_in_pattern (line 143) | def test_leading_slash_in_pattern(self, sample_files: dict[str, Any]) ... method test_leading_slash_pattern_with_subdir_path (line 149) | def test_leading_slash_pattern_with_subdir_path(self) -> None: function test_get_file_type_returns_text_for_unknown_extensions (line 165) | def test_get_file_type_returns_text_for_unknown_extensions() -> None: function test_get_file_type_non_text_values_are_valid_content_block_types (line 171) | def test_get_file_type_non_text_values_are_valid_content_block_types() -... FILE: libs/deepagents/tests/unit_tests/chat_model.py class GenericFakeChatModel (line 19) | class GenericFakeChatModel(BaseChatModel): method __init__ (line 82) | def __init__(self, **kwargs: Any) -> None: method bind_tools (line 86) | def bind_tools( method _generate (line 97) | def _generate( method _stream (line 121) | def _stream( # noqa: C901, PLR0912 # Complex test helper with many m... method _llm_type (line 236) | def _llm_type(self) -> str: FILE: libs/deepagents/tests/unit_tests/middleware/test_compact_tool.py function _make_mock_backend (line 19) | def _make_mock_backend() -> MagicMock: function _make_mock_model (line 37) | def _make_mock_model() -> MagicMock: function _make_messages (line 50) | def _make_messages(n: int, *, total_tokens: int = 120_000) -> list[Any]: function _make_runtime (line 73) | def _make_runtime( function _make_summarization_middleware (line 91) | def _make_summarization_middleware( function _make_middleware (line 107) | def _make_middleware( class TestToolRegistered (line 116) | class TestToolRegistered: method test_tool_registered (line 119) | def test_tool_registered(self) -> None: method test_tool_has_description (line 125) | def test_tool_has_description(self) -> None: class TestApplyEventToMessages (line 131) | class TestApplyEventToMessages: method test_no_event_returns_all (line 134) | def test_no_event_returns_all(self) -> None: method test_with_event_returns_summary_plus_kept (line 140) | def test_with_event_returns_summary_plus_kept(self) -> None: class TestNotEnoughMessages (line 156) | class TestNotEnoughMessages: method test_not_enough_messages_sync (line 159) | def test_not_enough_messages_sync(self) -> None: method test_not_enough_messages_async (line 174) | async def test_not_enough_messages_async(self) -> None: class TestCompactSuccess (line 189) | class TestCompactSuccess: method test_compact_success_no_prior_event (line 192) | def test_compact_success_no_prior_event(self) -> None: method test_compact_success_with_prior_event (line 225) | def test_compact_success_with_prior_event(self) -> None: method test_compact_success_async (line 256) | async def test_compact_success_async(self) -> None: method test_summary_message_has_file_path (line 279) | def test_summary_message_has_file_path(self) -> None: method test_summary_message_without_file_path (line 301) | def test_summary_message_without_file_path(self) -> None: class TestOffloadFailure (line 324) | class TestOffloadFailure: method test_offload_failure_still_succeeds (line 327) | def test_offload_failure_still_succeeds(self) -> None: class TestCompactErrorHandling (line 352) | class TestCompactErrorHandling: method test_sync_summary_failure_returns_error_tool_message (line 355) | def test_sync_summary_failure_returns_error_tool_message(self) -> None: method test_async_summary_failure_returns_error_tool_message (line 381) | async def test_async_summary_failure_returns_error_tool_message(self) ... method test_backend_resolve_failure_returns_error_tool_message (line 409) | def test_backend_resolve_failure_returns_error_tool_message(self) -> N... class TestMalformedEvent (line 438) | class TestMalformedEvent: method test_malformed_event_falls_back_to_raw_messages (line 441) | def test_malformed_event_falls_back_to_raw_messages(self) -> None: method test_none_event_returns_message_copy (line 449) | def test_none_event_returns_message_copy(self) -> None: method test_cutoff_exceeds_message_count (line 456) | def test_cutoff_exceeds_message_count(self) -> None: class TestResolveBackend (line 470) | class TestResolveBackend: method test_static_backend (line 473) | def test_static_backend(self) -> None: method test_callable_backend (line 484) | def test_callable_backend(self) -> None: class TestComputeStateCutoff (line 499) | class TestComputeStateCutoff: method test_no_event_returns_effective_cutoff (line 502) | def test_no_event_returns_effective_cutoff(self) -> None: method test_with_event_applies_offset (line 507) | def test_with_event_applies_offset(self) -> None: method test_with_zero_old_cutoff (line 517) | def test_with_zero_old_cutoff(self) -> None: method test_malformed_event_missing_cutoff (line 527) | def test_malformed_event_missing_cutoff(self) -> None: method test_malformed_event_non_int_cutoff (line 532) | def test_malformed_event_non_int_cutoff(self) -> None: function _ai_message_with_usage (line 541) | def _ai_message_with_usage(total_tokens: int, provider: str = "test-prov... function _make_middleware_with_trigger (line 550) | def _make_middleware_with_trigger( class TestIsEligibleForCompaction (line 564) | class TestIsEligibleForCompaction: method test_under_50pct_tokens_trigger_returns_nothing (line 567) | def test_under_50pct_tokens_trigger_returns_nothing(self) -> None: method test_over_50pct_tokens_trigger_proceeds (line 575) | def test_over_50pct_tokens_trigger_proceeds(self) -> None: method test_under_50pct_fraction_trigger_returns_nothing (line 589) | def test_under_50pct_fraction_trigger_returns_nothing(self) -> None: method test_over_50pct_fraction_trigger_proceeds (line 597) | def test_over_50pct_fraction_trigger_proceeds(self) -> None: method test_no_usage_metadata_falls_through (line 611) | def test_no_usage_metadata_falls_through(self) -> None: method test_under_50pct_async (line 621) | async def test_under_50pct_async(self) -> None: function test_create_summarization_tool_middleware_returns_instance (line 630) | def test_create_summarization_tool_middleware_returns_instance() -> None: FILE: libs/deepagents/tests/unit_tests/middleware/test_filesystem_middleware_init.py function build_composite_state_backend (line 17) | def build_composite_state_backend(runtime: ToolRuntime, *, routes: dict[... class TestFilesystemMiddlewareInit (line 28) | class TestFilesystemMiddlewareInit: method test_filesystem_tool_prompt_override (line 31) | def test_filesystem_tool_prompt_override(self) -> None: method test_filesystem_tool_prompt_override_with_longterm_memory (line 56) | def test_filesystem_tool_prompt_override_with_longterm_memory(self) ->... FILE: libs/deepagents/tests/unit_tests/middleware/test_memory_middleware.py function make_memory_content (line 28) | def make_memory_content(title: str, content: str) -> str: function create_store_memory_item (line 44) | def create_store_memory_item(content: str) -> dict: function test_format_agent_memory_empty (line 62) | def test_format_agent_memory_empty() -> None: function test_format_agent_memory_empty_sources (line 75) | def test_format_agent_memory_empty_sources() -> None: function test_format_agent_memory_single (line 88) | def test_format_agent_memory_single() -> None: function test_format_agent_memory_multiple (line 109) | def test_format_agent_memory_multiple() -> None: function test_format_agent_memory_preserves_order (line 133) | def test_format_agent_memory_preserves_order() -> None: function test_format_agent_memory_skips_missing_sources (line 154) | def test_format_agent_memory_skips_missing_sources() -> None: function test_format_agent_memory_location_content_pairing (line 174) | def test_format_agent_memory_location_content_pairing() -> None: function test_load_memory_from_backend_single_source (line 199) | def test_load_memory_from_backend_single_source(tmp_path: Path) -> None: function test_load_memory_from_backend_multiple_sources (line 230) | def test_load_memory_from_backend_multiple_sources(tmp_path: Path) -> None: function test_load_memory_handles_missing_file (line 267) | def test_load_memory_handles_missing_file(tmp_path: Path) -> None: function test_before_agent_skips_if_already_loaded (line 292) | def test_before_agent_skips_if_already_loaded(tmp_path: Path) -> None: function test_load_memory_with_empty_sources (line 311) | def test_load_memory_with_empty_sources(tmp_path: Path) -> None: function test_memory_content_with_special_characters (line 323) | def test_memory_content_with_special_characters(tmp_path: Path) -> None: function test_memory_content_with_unicode (line 353) | def test_memory_content_with_unicode(tmp_path: Path) -> None: function test_memory_content_with_large_file (line 383) | def test_memory_content_with_large_file(tmp_path: Path) -> None: function test_agent_with_memory_middleware_system_prompt (line 406) | def test_agent_with_memory_middleware_system_prompt(tmp_path: Path) -> N... function test_agent_with_memory_middleware_multiple_sources (line 457) | def test_agent_with_memory_middleware_multiple_sources(tmp_path: Path) -... function test_agent_with_memory_middleware_empty_sources (line 507) | def test_agent_with_memory_middleware_empty_sources(tmp_path: Path) -> N... function test_agent_with_memory_middleware_async (line 535) | async def test_agent_with_memory_middleware_async(tmp_path: Path) -> None: function test_memory_middleware_with_state_backend_factory (line 574) | def test_memory_middleware_with_state_backend_factory() -> None: function test_memory_middleware_with_store_backend_factory (line 601) | def test_memory_middleware_with_store_backend_factory() -> None: function test_memory_middleware_with_store_backend_assistant_id (line 627) | def test_memory_middleware_with_store_backend_assistant_id() -> None: function test_memory_middleware_with_store_backend_no_assistant_id (line 684) | def test_memory_middleware_with_store_backend_no_assistant_id() -> None: function test_create_deep_agent_with_memory_and_filesystem_backend (line 718) | def test_create_deep_agent_with_memory_and_filesystem_backend(tmp_path: ... function test_create_deep_agent_with_memory_missing_files (line 742) | def test_create_deep_agent_with_memory_missing_files(tmp_path: Path) -> ... function test_create_deep_agent_with_memory_default_backend (line 758) | def test_create_deep_agent_with_memory_default_backend() -> None: function test_memory_middleware_order_matters (line 804) | def test_memory_middleware_order_matters(tmp_path: Path) -> None: class _SpyBackend (line 855) | class _SpyBackend(FilesystemBackend): method __init__ (line 858) | def __init__(self, root_dir: str) -> None: method download_files (line 862) | def download_files(self, paths: list[str]) -> list: function test_before_agent_batches_download_into_single_call (line 867) | def test_before_agent_batches_download_into_single_call(tmp_path: Path) ... function test_before_agent_batch_skips_missing_keeps_found (line 891) | def test_before_agent_batch_skips_missing_keeps_found(tmp_path: Path) ->... FILE: libs/deepagents/tests/unit_tests/middleware/test_memory_middleware_async.py function make_memory_content (line 16) | def make_memory_content(title: str, content: str) -> str: function test_load_memory_from_backend_single_source_async (line 32) | async def test_load_memory_from_backend_single_source_async(tmp_path: Pa... function test_load_memory_from_backend_multiple_sources_async (line 63) | async def test_load_memory_from_backend_multiple_sources_async(tmp_path:... function test_load_memory_handles_missing_file_async (line 100) | async def test_load_memory_handles_missing_file_async(tmp_path: Path) ->... function test_before_agent_skips_if_already_loaded_async (line 125) | async def test_before_agent_skips_if_already_loaded_async(tmp_path: Path... function test_load_memory_with_empty_sources_async (line 144) | async def test_load_memory_with_empty_sources_async(tmp_path: Path) -> N... function test_memory_content_with_special_characters_async (line 156) | async def test_memory_content_with_special_characters_async(tmp_path: Pa... function test_memory_content_with_unicode_async (line 186) | async def test_memory_content_with_unicode_async(tmp_path: Path) -> None: function test_memory_content_with_large_file_async (line 216) | async def test_memory_content_with_large_file_async(tmp_path: Path) -> N... function test_agent_with_memory_middleware_multiple_sources_async (line 239) | async def test_agent_with_memory_middleware_multiple_sources_async(tmp_p... function test_agent_with_memory_middleware_empty_sources_async (line 289) | async def test_agent_with_memory_middleware_empty_sources_async(tmp_path... function test_memory_middleware_order_matters_async (line 317) | async def test_memory_middleware_order_matters_async(tmp_path: Path) -> ... class _AsyncSpyBackend (line 368) | class _AsyncSpyBackend(FilesystemBackend): method __init__ (line 371) | def __init__(self, root_dir: str) -> None: method adownload_files (line 375) | async def adownload_files(self, paths: list[str]) -> list: function test_abefore_agent_batches_download_into_single_call (line 380) | async def test_abefore_agent_batches_download_into_single_call(tmp_path:... FILE: libs/deepagents/tests/unit_tests/middleware/test_skills_middleware.py function make_skill_content (line 41) | def make_skill_content(name: str, description: str) -> str: function test_validate_skill_name_valid (line 62) | def test_validate_skill_name_valid() -> None: function test_validate_skill_name_invalid (line 80) | def test_validate_skill_name_invalid() -> None: function test_parse_skill_metadata_valid (line 124) | def test_parse_skill_metadata_valid() -> None: function test_parse_skill_metadata_minimal (line 155) | def test_parse_skill_metadata_minimal() -> None: function test_parse_skill_metadata_no_frontmatter (line 178) | def test_parse_skill_metadata_no_frontmatter() -> None: function test_parse_skill_metadata_invalid_yaml (line 189) | def test_parse_skill_metadata_invalid_yaml() -> None: function test_parse_skill_metadata_missing_required_fields (line 203) | def test_parse_skill_metadata_missing_required_fields() -> None: function test_parse_skill_metadata_description_truncation (line 226) | def test_parse_skill_metadata_description_truncation() -> None: function test_parse_skill_metadata_too_large (line 242) | def test_parse_skill_metadata_too_large() -> None: function test_parse_skill_metadata_empty_optional_fields (line 256) | def test_parse_skill_metadata_empty_optional_fields() -> None: function test_parse_skill_metadata_compatibility_max_length (line 274) | def test_parse_skill_metadata_compatibility_max_length() -> None: function test_parse_skill_metadata_whitespace_only_description (line 295) | def test_parse_skill_metadata_whitespace_only_description() -> None: function test_parse_skill_metadata_allowed_tools_multiple_spaces (line 313) | def test_parse_skill_metadata_allowed_tools_multiple_spaces() -> None: function test_validate_skill_name_unicode_lowercase (line 329) | def test_validate_skill_name_unicode_lowercase() -> None: function test_validate_skill_name_rejects_unicode_uppercase (line 339) | def test_validate_skill_name_rejects_unicode_uppercase() -> None: function test_validate_skill_name_rejects_cjk_characters (line 346) | def test_validate_skill_name_rejects_cjk_characters() -> None: function test_validate_skill_name_rejects_emoji (line 353) | def test_validate_skill_name_rejects_emoji() -> None: function test_format_skill_annotations_both_fields (line 360) | def test_format_skill_annotations_both_fields() -> None: function test_format_skill_annotations_license_only (line 374) | def test_format_skill_annotations_license_only() -> None: function test_format_skill_annotations_compatibility_only (line 388) | def test_format_skill_annotations_compatibility_only() -> None: function test_format_skill_annotations_neither_field (line 402) | def test_format_skill_annotations_neither_field() -> None: function test_validate_metadata_non_dict_returns_empty (line 416) | def test_validate_metadata_non_dict_returns_empty() -> None: function test_validate_metadata_list_returns_empty (line 422) | def test_validate_metadata_list_returns_empty() -> None: function test_validate_metadata_coerces_values_to_str (line 428) | def test_validate_metadata_coerces_values_to_str() -> None: function test_validate_metadata_valid_dict_passthrough (line 434) | def test_validate_metadata_valid_dict_passthrough() -> None: function test_parse_skill_metadata_allowed_tools_yaml_list_ignored (line 440) | def test_parse_skill_metadata_allowed_tools_yaml_list_ignored() -> None: function test_parse_skill_metadata_allowed_tools_yaml_list_non_strings_ignored (line 458) | def test_parse_skill_metadata_allowed_tools_yaml_list_non_strings_ignore... function test_parse_skill_metadata_license_boolean_coerced (line 479) | def test_parse_skill_metadata_license_boolean_coerced() -> None: function test_parse_skill_metadata_non_dict_metadata_ignored (line 499) | def test_parse_skill_metadata_non_dict_metadata_ignored() -> None: function test_list_skills_from_backend_single_skill (line 519) | def test_list_skills_from_backend_single_skill(tmp_path: Path) -> None: function test_list_skills_from_backend_multiple_skills (line 548) | def test_list_skills_from_backend_multiple_skills(tmp_path: Path) -> None: function test_list_skills_from_backend_empty_directory (line 581) | def test_list_skills_from_backend_empty_directory(tmp_path: Path) -> None: function test_list_skills_from_backend_nonexistent_path (line 594) | def test_list_skills_from_backend_nonexistent_path(tmp_path: Path) -> None: function test_list_skills_from_backend_missing_skill_md (line 603) | def test_list_skills_from_backend_missing_skill_md(tmp_path: Path) -> None: function test_list_skills_from_backend_invalid_frontmatter (line 637) | def test_list_skills_from_backend_invalid_frontmatter(tmp_path: Path) ->... function test_list_skills_from_backend_with_helper_files (line 677) | def test_list_skills_from_backend_with_helper_files(tmp_path: Path) -> N... function test_format_skills_locations_single_registry (line 712) | def test_format_skills_locations_single_registry() -> None: function test_format_skills_locations_multiple_registries (line 726) | def test_format_skills_locations_multiple_registries() -> None: function test_format_skills_list_empty (line 746) | def test_format_skills_list_empty() -> None: function test_format_skills_list_single_skill (line 763) | def test_format_skills_list_single_skill() -> None: function test_format_skills_list_multiple_skills_multiple_registries (line 789) | def test_format_skills_list_multiple_skills_multiple_registries() -> None: function test_format_skills_list_with_license_and_compatibility (line 843) | def test_format_skills_list_with_license_and_compatibility() -> None: function test_format_skills_list_license_only (line 863) | def test_format_skills_list_license_only() -> None: function test_format_skills_list_compatibility_only (line 884) | def test_format_skills_list_compatibility_only() -> None: function test_format_skills_list_no_optional_fields (line 905) | def test_format_skills_list_no_optional_fields() -> None: function test_before_agent_loads_skills (line 929) | def test_before_agent_loads_skills(tmp_path: Path) -> None: function test_before_agent_skill_override (line 965) | def test_before_agent_skill_override(tmp_path: Path) -> None: function test_before_agent_empty_registries (line 1014) | def test_before_agent_empty_registries(tmp_path: Path) -> None: function test_agent_with_skills_middleware_system_prompt (line 1033) | def test_agent_with_skills_middleware_system_prompt(tmp_path: Path) -> N... function test_skills_middleware_with_state_backend_factory (line 1086) | def test_skills_middleware_with_state_backend_factory() -> None: function test_skills_middleware_with_store_backend_factory (line 1116) | def test_skills_middleware_with_store_backend_factory() -> None: function test_agent_with_skills_middleware_async (line 1148) | async def test_agent_with_skills_middleware_async(tmp_path: Path) -> None: function test_agent_with_skills_middleware_multiple_registries_override (line 1204) | def test_agent_with_skills_middleware_multiple_registries_override(tmp_p... function test_before_agent_skips_loading_if_metadata_present (line 1277) | def test_before_agent_skips_loading_if_metadata_present(tmp_path: Path) ... function test_create_deep_agent_with_skills_and_filesystem_backend (line 1330) | def test_create_deep_agent_with_skills_and_filesystem_backend(tmp_path: ... function test_create_deep_agent_with_skills_empty_directory (line 1355) | def test_create_deep_agent_with_skills_empty_directory(tmp_path: Path) -... function test_create_deep_agent_with_skills_default_backend (line 1377) | def test_create_deep_agent_with_skills_default_backend() -> None: function create_store_skill_item (line 1437) | def create_store_skill_item(content: str) -> dict: function test_skills_middleware_with_store_backend_assistant_id (line 1455) | def test_skills_middleware_with_store_backend_assistant_id() -> None: function test_skills_middleware_with_store_backend_no_assistant_id (line 1513) | def test_skills_middleware_with_store_backend_no_assistant_id() -> None: function test_skills_middleware_with_store_backend_assistant_id_async (line 1548) | async def test_skills_middleware_with_store_backend_assistant_id_async()... FILE: libs/deepagents/tests/unit_tests/middleware/test_skills_middleware_async.py function make_skill_content (line 16) | def make_skill_content(name: str, description: str) -> str: function test_alist_skills_from_backend_single_skill (line 37) | async def test_alist_skills_from_backend_single_skill(tmp_path: Path) ->... function test_alist_skills_from_backend_multiple_skills (line 66) | async def test_alist_skills_from_backend_multiple_skills(tmp_path: Path)... function test_alist_skills_from_backend_empty_directory (line 99) | async def test_alist_skills_from_backend_empty_directory(tmp_path: Path)... function test_alist_skills_from_backend_nonexistent_path (line 112) | async def test_alist_skills_from_backend_nonexistent_path(tmp_path: Path... function test_alist_skills_from_backend_missing_skill_md (line 121) | async def test_alist_skills_from_backend_missing_skill_md(tmp_path: Path... function test_alist_skills_from_backend_invalid_frontmatter (line 155) | async def test_alist_skills_from_backend_invalid_frontmatter(tmp_path: P... function test_abefore_agent_loads_skills (line 195) | async def test_abefore_agent_loads_skills(tmp_path: Path) -> None: function test_abefore_agent_skill_override (line 231) | async def test_abefore_agent_skill_override(tmp_path: Path) -> None: function test_abefore_agent_empty_sources (line 280) | async def test_abefore_agent_empty_sources(tmp_path: Path) -> None: function test_abefore_agent_skips_loading_if_metadata_present (line 299) | async def test_abefore_agent_skips_loading_if_metadata_present(tmp_path:... function test_agent_with_skills_middleware_multiple_sources_async (line 324) | async def test_agent_with_skills_middleware_multiple_sources_async(tmp_p... function test_agent_with_skills_middleware_empty_sources_async (line 377) | async def test_agent_with_skills_middleware_empty_sources_async(tmp_path... FILE: libs/deepagents/tests/unit_tests/middleware/test_subagent_middleware_init.py function get_weather (line 18) | def get_weather(city: str) -> str: class TestSubagentMiddlewareInit (line 23) | class TestSubagentMiddlewareInit: method set_env_vars (line 27) | def set_env_vars(self, monkeypatch: pytest.MonkeyPatch) -> None: method test_subagent_middleware_init (line 31) | def test_subagent_middleware_init(self) -> None: method test_subagent_middleware_with_custom_subagent (line 50) | def test_subagent_middleware_with_custom_subagent(self) -> None: method test_subagent_middleware_custom_system_prompt (line 69) | def test_subagent_middleware_custom_system_prompt(self) -> None: method test_new_api_requires_backend (line 90) | def test_new_api_requires_backend(self) -> None: method test_new_api_requires_subagents (line 105) | def test_new_api_requires_subagents(self) -> None: method test_new_api_no_deprecation_warning (line 113) | def test_new_api_no_deprecation_warning(self) -> None: method test_new_api_subagent_requires_model (line 134) | def test_new_api_subagent_requires_model(self) -> None: method test_new_api_subagent_requires_tools (line 150) | def test_new_api_subagent_requires_tools(self) -> None: method test_deprecated_api_still_works (line 168) | def test_deprecated_api_still_works(self) -> None: method test_deprecated_api_general_purpose_agent_disabled (line 189) | def test_deprecated_api_general_purpose_agent_disabled(self) -> None: method test_mixed_args_prefers_new_api (line 210) | def test_mixed_args_prefers_new_api(self) -> None: method test_multiple_subagents_with_interrupt_on (line 228) | def test_multiple_subagents_with_interrupt_on(self) -> None: FILE: libs/deepagents/tests/unit_tests/middleware/test_summarization_factory.py function _make_model (line 13) | def _make_model(*, with_profile_limit: int | None) -> GenericFakeChatModel: function test_factory_uses_profile_based_defaults (line 23) | def test_factory_uses_profile_based_defaults() -> None: function test_factory_uses_fallback_defaults_without_profile (line 34) | def test_factory_uses_fallback_defaults_without_profile() -> None: function test_factory_rejects_string_model (line 45) | def test_factory_rejects_string_model() -> None: FILE: libs/deepagents/tests/unit_tests/middleware/test_summarization_middleware.py function make_conversation_messages (line 26) | def make_conversation_messages( class MockBackend (line 83) | class MockBackend(BackendProtocol): method __init__ (line 86) | def __init__( method read (line 114) | def read(self, path: str, offset: int = 0, limit: int = 2000) -> ReadR... method aread (line 120) | async def aread(self, path: str, offset: int = 0, limit: int = 2000) -... method download_files (line 123) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method adownload_files (line 149) | async def adownload_files(self, paths: list[str]) -> list[FileDownload... method write (line 156) | def write(self, path: str, content: str) -> WriteResult: method awrite (line 165) | async def awrite(self, path: str, content: str) -> WriteResult: method edit (line 171) | def edit(self, path: str, old_string: str, new_string: str, replace_al... method aedit (line 181) | async def aedit(self, path: str, old_string: str, new_string: str, rep... function make_mock_runtime (line 189) | def make_mock_runtime() -> MagicMock: function mock_get_config (line 206) | def mock_get_config(thread_id: str | None = "test-thread-123") -> Genera... function make_mock_model (line 221) | def make_mock_model(summary_response: str = "This is a test summary.") -... function make_model_request (line 235) | def make_model_request( function call_wrap_model_call (line 259) | def call_wrap_model_call( function call_awrap_model_call (line 289) | async def call_awrap_model_call( class TestSummarizationMiddlewareInit (line 322) | class TestSummarizationMiddlewareInit: method test_init_with_backend (line 325) | def test_init_with_backend(self) -> None: method test_init_with_backend_factory (line 338) | def test_init_with_backend_factory(self) -> None: class TestOffloadingBasic (line 353) | class TestOffloadingBasic: method test_offload_writes_to_backend (line 356) | def test_offload_writes_to_backend(self) -> None: method test_offload_appends_to_existing_content (line 388) | def test_offload_appends_to_existing_content(self) -> None: method test_typical_tool_heavy_conversation (line 418) | def test_typical_tool_heavy_conversation(self) -> None: method test_second_summarization_after_first (line 474) | def test_second_summarization_after_first(self) -> None: method test_filters_previous_summary_messages (line 524) | def test_filters_previous_summary_messages(self) -> None: class TestSummaryMessageFormat (line 558) | class TestSummaryMessageFormat: method test_summary_includes_file_path (line 561) | def test_summary_includes_file_path(self) -> None: method test_summary_has_lc_source_marker (line 597) | def test_summary_has_lc_source_marker(self) -> None: method test_summarization_aborts_on_backend_failure (line 621) | def test_summarization_aborts_on_backend_failure(self) -> None: method test_summary_includes_file_path_after_second_summarization (line 651) | def test_summary_includes_file_path_after_second_summarization(self) -... class TestNoSummarizationTriggered (line 710) | class TestNoSummarizationTriggered: method test_no_offload_when_below_threshold (line 713) | def test_no_offload_when_below_threshold(self) -> None: function test_system_message_counts_for_trigger_only (line 738) | def test_system_message_counts_for_trigger_only() -> None: function test_async_tools_passed_to_token_counter_for_summarization (line 780) | async def test_async_tools_passed_to_token_counter_for_summarization() -... function test_async_system_message_counts_for_truncate_trigger (line 831) | async def test_async_system_message_counts_for_truncate_trigger() -> None: class TestBackendFailureHandling (line 891) | class TestBackendFailureHandling: method test_summarization_aborts_on_write_failure (line 894) | def test_summarization_aborts_on_write_failure(self) -> None: method test_summarization_aborts_on_write_exception (line 924) | def test_summarization_aborts_on_write_exception(self) -> None: class TestThreadIdExtraction (line 957) | class TestThreadIdExtraction: method test_thread_id_from_config (line 960) | def test_thread_id_from_config(self) -> None: method test_fallback_thread_id_when_missing (line 982) | def test_fallback_thread_id_when_missing(self) -> None: class TestAsyncBehavior (line 1008) | class TestAsyncBehavior: method test_async_offload_writes_to_backend (line 1012) | async def test_async_offload_writes_to_backend(self) -> None: method test_async_aborts_on_failure (line 1038) | async def test_async_aborts_on_failure(self) -> None: class TestBackendFactoryInvocation (line 1065) | class TestBackendFactoryInvocation: method test_backend_factory_invoked_during_summarization (line 1068) | def test_backend_factory_invoked_during_summarization(self) -> None: class TestCustomHistoryPathPrefix (line 1096) | class TestCustomHistoryPathPrefix: method test_custom_history_path_prefix (line 1099) | def test_custom_history_path_prefix(self) -> None: class TestMarkdownFormatting (line 1123) | class TestMarkdownFormatting: method test_markdown_format_includes_message_content (line 1126) | def test_markdown_format_includes_message_content(self) -> None: class TestDownloadFilesException (line 1156) | class TestDownloadFilesException: method test_summarization_continues_on_download_files_exception (line 1159) | def test_summarization_continues_on_download_files_exception(self) -> ... method test_async_summarization_continues_on_download_files_exception (line 1187) | async def test_async_summarization_continues_on_download_files_excepti... class TestWriteEditException (line 1214) | class TestWriteEditException: method test_summarization_aborts_on_write_exception (line 1217) | def test_summarization_aborts_on_write_exception(self) -> None: method test_async_summarization_aborts_on_write_exception (line 1246) | async def test_async_summarization_aborts_on_write_exception(self) -> ... method test_summarization_aborts_on_edit_exception (line 1275) | def test_summarization_aborts_on_edit_exception(self) -> None: method test_async_summarization_aborts_on_edit_exception (line 1305) | async def test_async_summarization_aborts_on_edit_exception(self) -> N... class TestCutoffIndexEdgeCases (line 1336) | class TestCutoffIndexEdgeCases: method test_no_summarization_when_cutoff_index_zero (line 1339) | def test_no_summarization_when_cutoff_index_zero(self) -> None: method test_async_no_summarization_when_not_triggered (line 1368) | async def test_async_no_summarization_when_not_triggered(self) -> None: method test_async_no_summarization_when_cutoff_index_zero (line 1392) | async def test_async_no_summarization_when_cutoff_index_zero(self) -> ... function test_no_truncation_when_trigger_is_none (line 1427) | def test_no_truncation_when_trigger_is_none() -> None: function test_truncate_old_write_file_tool_call (line 1466) | def test_truncate_old_write_file_tool_call() -> None: function test_truncate_old_edit_file_tool_call (line 1524) | def test_truncate_old_edit_file_tool_call() -> None: function test_truncate_ignores_other_tool_calls (line 1583) | def test_truncate_ignores_other_tool_calls() -> None: function test_truncate_respects_recent_messages (line 1635) | def test_truncate_respects_recent_messages() -> None: function test_truncate_with_token_keep_policy (line 1688) | def test_truncate_with_token_keep_policy() -> None: function test_truncate_with_fraction_trigger_and_keep (line 1746) | def test_truncate_with_fraction_trigger_and_keep() -> None: function test_truncate_before_summarization (line 1803) | def test_truncate_before_summarization() -> None: function test_truncate_without_summarization (line 1858) | def test_truncate_without_summarization() -> None: function test_truncate_preserves_small_arguments (line 1914) | def test_truncate_preserves_small_arguments() -> None: function test_truncate_mixed_tool_calls (line 1966) | def test_truncate_mixed_tool_calls() -> None: function test_truncate_custom_truncation_text (line 2042) | def test_truncate_custom_truncation_text() -> None: function test_truncate_async_works (line 2096) | async def test_truncate_async_works() -> None: function test_chained_summarization_cutoff_index (line 2153) | def test_chained_summarization_cutoff_index() -> None: function test_context_overflow_triggers_summarization (line 2246) | def test_context_overflow_triggers_summarization() -> None: function test_async_context_overflow_triggers_summarization (line 2292) | async def test_async_context_overflow_triggers_summarization() -> None: function test_profile_inference_triggers_summary (line 2338) | def test_profile_inference_triggers_summary() -> None: function test_usage_metadata_trigger (line 2451) | def test_usage_metadata_trigger() -> None: function test_async_offload_and_summary_run_concurrently (line 2521) | async def test_async_offload_and_summary_run_concurrently() -> None: FILE: libs/deepagents/tests/unit_tests/middleware/test_tool_schemas.py class TestFilesystemToolSchemas (line 9) | class TestFilesystemToolSchemas: method test_all_filesystem_tools_have_arg_descriptions (line 12) | def test_all_filesystem_tools_have_arg_descriptions(self) -> None: method test_sync_async_schema_parity (line 57) | def test_sync_async_schema_parity(self) -> None: FILE: libs/deepagents/tests/unit_tests/smoke_tests/conftest.py function pytest_addoption (line 8) | def pytest_addoption(parser: pytest.Parser) -> None: function snapshots_dir (line 18) | def snapshots_dir() -> Path: function update_snapshots (line 25) | def update_snapshots(request: pytest.FixtureRequest) -> bool: FILE: libs/deepagents/tests/unit_tests/smoke_tests/test_system_prompt.py function _system_message_as_text (line 13) | def _system_message_as_text(message: SystemMessage) -> str: function _assert_snapshot (line 20) | def _assert_snapshot(snapshot_path: Path, actual: str, *, update_snapsho... function test_system_prompt_snapshot_with_execute (line 32) | def test_system_prompt_snapshot_with_execute(snapshots_dir: Path, *, upd... function test_system_prompt_snapshot_without_execute (line 54) | def test_system_prompt_snapshot_without_execute(snapshots_dir: Path, *, ... function test_custom_system_message_snapshot (line 76) | def test_custom_system_message_snapshot(snapshots_dir: Path, *, update_s... function test_system_prompt_snapshot_with_sync_and_async_subagents (line 103) | def test_system_prompt_snapshot_with_sync_and_async_subagents(snapshots_... function test_system_prompt_with_memory_and_skills (line 148) | def test_system_prompt_with_memory_and_skills(snapshots_dir: Path, *, up... FILE: libs/deepagents/tests/unit_tests/test_async_subagents.py function _make_spec (line 22) | def _make_spec(name: str = "test-agent", **overrides: Any) -> AsyncSubAg... function _make_runtime (line 33) | def _make_runtime(tool_call_id: str = "tc_test") -> ToolRuntime: function _make_runtime_with_job (line 44) | def _make_runtime_with_job( function _get_tool (line 71) | def _get_tool(tools: list, name: str) -> Any: # noqa: ANN401 class TestAsyncSubAgentMiddleware (line 80) | class TestAsyncSubAgentMiddleware: method test_init_requires_at_least_one_agent (line 81) | def test_init_requires_at_least_one_agent(self) -> None: method test_init_creates_five_tools (line 85) | def test_init_creates_five_tools(self) -> None: method test_system_prompt_includes_agent_descriptions (line 96) | def test_system_prompt_includes_agent_descriptions(self) -> None: method test_system_prompt_can_be_disabled (line 108) | def test_system_prompt_can_be_disabled(self) -> None: method test_init_rejects_duplicate_names (line 112) | def test_init_rejects_duplicate_names(self) -> None: method test_state_schema_is_set (line 116) | def test_state_schema_is_set(self) -> None: class TestResolveHeaders (line 120) | class TestResolveHeaders: method test_adds_auth_scheme_by_default (line 121) | def test_adds_auth_scheme_by_default(self) -> None: method test_preserves_custom_headers (line 126) | def test_preserves_custom_headers(self) -> None: method test_does_not_override_explicit_auth_scheme (line 132) | def test_does_not_override_explicit_auth_scheme(self) -> None: class TestJobsReducer (line 138) | class TestJobsReducer: method test_merge_into_empty (line 139) | def test_merge_into_empty(self) -> None: method test_merge_updates_existing (line 150) | def test_merge_updates_existing(self) -> None: method test_merge_preserves_other_keys (line 162) | def test_merge_preserves_other_keys(self) -> None: class TestBuildAsyncSubagentTools (line 183) | class TestBuildAsyncSubagentTools: method test_returns_five_tools (line 184) | def test_returns_five_tools(self) -> None: method test_launch_description_includes_agent_info (line 196) | def test_launch_description_includes_agent_info(self) -> None: class TestLaunchTool (line 203) | class TestLaunchTool: method test_launch_invalid_type_returns_error_string (line 204) | def test_launch_invalid_type_returns_error_string(self) -> None: method test_launch_returns_command_with_job (line 217) | def test_launch_returns_command_with_job(self, mock_get_client: MagicM... class TestCheckTool (line 260) | class TestCheckTool: method _make_check_runtime (line 261) | def _make_check_runtime(self, tool_call_id: str = "tc_check") -> ToolR... method test_check_running_job (line 282) | def test_check_running_job(self, mock_get_client: MagicMock) -> None: method test_check_completed_job_returns_result (line 304) | def test_check_completed_job_returns_result(self, mock_get_client: Mag... method test_check_errored_job (line 332) | def test_check_errored_job(self, mock_get_client: MagicMock) -> None: class TestUpdateTool (line 353) | class TestUpdateTool: method test_update_returns_command_with_same_job_id (line 355) | def test_update_returns_command_with_same_job_id(self, mock_get_client... class TestListJobsTool (line 406) | class TestListJobsTool: method test_empty_state_returns_no_jobs (line 407) | def test_empty_state_returns_no_jobs(self) -> None: method test_returns_live_statuses (line 415) | def test_returns_live_statuses(self, mock_get_client: MagicMock) -> None: method test_skips_sdk_call_for_terminal_statuses (line 463) | def test_skips_sdk_call_for_terminal_statuses(self, mock_get_client: M... method test_status_filter_running (line 510) | def test_status_filter_running(self, mock_get_client: MagicMock) -> None: method test_async_list_returns_no_jobs (line 548) | async def test_async_list_returns_no_jobs(self) -> None: function _async_return (line 559) | def _async_return(value: _T) -> Any: # noqa: ANN401 class TestAsyncTools (line 569) | class TestAsyncTools: method test_async_launch_returns_command (line 571) | async def test_async_launch_returns_command(self, mock_get_client: Mag... method test_async_check_returns_command (line 591) | async def test_async_check_returns_command(self, mock_get_client: Magi... method test_async_update_returns_command (line 628) | async def test_async_update_returns_command(self, mock_get_client: Mag... method test_async_cancel_returns_command (line 663) | async def test_async_cancel_returns_command(self, mock_get_client: Mag... class TestCancelTool (line 677) | class TestCancelTool: method test_cancel_returns_command_with_cancelled_status (line 679) | def test_cancel_returns_command_with_cancelled_status(self, mock_get_c... method test_cancel_unknown_job_returns_error (line 700) | def test_cancel_unknown_job_returns_error(self) -> None: method test_cancel_sdk_error_returns_error_string (line 709) | def test_cancel_sdk_error_returns_error_string(self, mock_get_client: ... class TestUnknownJobId (line 723) | class TestUnknownJobId: method test_check_unknown_job_returns_error (line 726) | def test_check_unknown_job_returns_error(self) -> None: method test_update_unknown_job_returns_error (line 734) | def test_update_unknown_job_returns_error(self) -> None: class TestLaunchErrorHandling (line 743) | class TestLaunchErrorHandling: method test_launch_sdk_error_returns_error_string (line 745) | def test_launch_sdk_error_returns_error_string(self, mock_get_client: ... method test_update_sdk_error_returns_error_string (line 762) | def test_update_sdk_error_returns_error_string(self, mock_get_client: ... class TestCheckEdgeCases (line 776) | class TestCheckEdgeCases: method test_check_errored_job_includes_server_error (line 778) | def test_check_errored_job_includes_server_error(self, mock_get_client... method test_check_success_empty_messages (line 798) | def test_check_success_empty_messages(self, mock_get_client: MagicMock... method test_check_threads_get_failure_still_returns_status (line 815) | def test_check_threads_get_failure_still_returns_status(self, mock_get... FILE: libs/deepagents/tests/unit_tests/test_benchmark_create_deep_agent.py function _fake_model (line 34) | def _fake_model() -> GenericFakeChatModel: function add (line 44) | def add(a: int, b: int) -> int: function multiply (line 50) | def multiply(a: int, b: int) -> int: function echo (line 56) | def echo(text: str) -> str: function _make_tool (line 61) | def _make_tool(idx: int) -> BaseTool: function _build_kwargs (line 72) | def _build_kwargs(**overrides: Any) -> dict[str, Any]: class TestCreateDeepAgentBenchmark (line 85) | class TestCreateDeepAgentBenchmark: method test_bare_minimum (line 88) | def test_bare_minimum(self, benchmark: BenchmarkFixture) -> None: method test_with_tools (line 96) | def test_with_tools(self, benchmark: BenchmarkFixture) -> None: method test_with_one_subagent (line 104) | def test_with_one_subagent(self, benchmark: BenchmarkFixture) -> None: method test_with_multiple_subagents (line 118) | def test_with_multiple_subagents(self, benchmark: BenchmarkFixture) ->... method test_full_featured (line 135) | def test_full_featured(self, benchmark: BenchmarkFixture) -> None: method test_with_string_model_resolution (line 161) | def test_with_string_model_resolution(self, benchmark: BenchmarkFixtur... class TestCreateDeepAgentScaling (line 178) | class TestCreateDeepAgentScaling: method test_scaling_tools (line 182) | def test_scaling_tools(self, benchmark: BenchmarkFixture, tool_count: ... method test_scaling_subagents (line 192) | def test_scaling_subagents(self, benchmark: BenchmarkFixture, sub_coun... FILE: libs/deepagents/tests/unit_tests/test_end_to_end.py class SystemMessageCapturingMiddleware (line 30) | class SystemMessageCapturingMiddleware(AgentMiddleware): method __init__ (line 33) | def __init__(self) -> None: method wrap_model_call (line 36) | def wrap_model_call( method awrap_model_call (line 45) | async def awrap_model_call( function sample_tool (line 56) | def sample_tool(sample_input: str) -> str: function make_runtime (line 61) | def make_runtime(tid: str = "tc") -> ToolRuntime: function create_filesystem_backend_virtual (line 73) | def create_filesystem_backend_virtual(tmp_path: Path) -> BackendProtocol: function create_state_backend (line 78) | def create_state_backend(tmp_path: Path) -> BackendProtocol: # noqa: AR... function create_store_backend (line 83) | def create_store_backend(tmp_path: Path) -> BackendProtocol: # noqa: AR... class FixedGenericFakeChatModel (line 96) | class FixedGenericFakeChatModel(GenericFakeChatModel): method bind_tools (line 99) | def bind_tools( class TestDeepAgentEndToEnd (line 110) | class TestDeepAgentEndToEnd: method test_deep_agent_with_fake_llm_basic (line 113) | def test_deep_agent_with_fake_llm_basic(self) -> None: method test_deep_agent_with_fake_llm_with_tools (line 159) | def test_deep_agent_with_fake_llm_with_tools(self) -> None: method test_deep_agent_with_fake_llm_filesystem_tool (line 203) | def test_deep_agent_with_fake_llm_filesystem_tool(self) -> None: method test_deep_agent_with_fake_llm_multiple_tool_calls (line 244) | def test_deep_agent_with_fake_llm_multiple_tool_calls(self) -> None: method test_deep_agent_with_string_model_name (line 301) | def test_deep_agent_with_string_model_name(self) -> None: method test_deep_agent_truncate_lines (line 327) | def test_deep_agent_truncate_lines(self, tmp_path: Path, backend_facto... method test_deep_agent_read_empty_file (line 408) | def test_deep_agent_read_empty_file(self, tmp_path: Path, backend_fact... method test_deep_agent_with_system_message (line 459) | def test_deep_agent_with_system_message(self) -> None: method test_deep_agent_with_system_message_string_content (line 485) | def test_deep_agent_with_system_message_string_content(self) -> None: method test_deep_agent_two_turns_no_initial_files (line 505) | def test_deep_agent_two_turns_no_initial_files(self) -> None: method test_deep_agent_two_turns_state_backend_edge_case (line 582) | def test_deep_agent_two_turns_state_backend_edge_case(self) -> None: method test_deep_agent_two_turns_no_initial_files_async (line 661) | async def test_deep_agent_two_turns_no_initial_files_async(self) -> None: method test_deep_agent_two_turns_state_backend_edge_case_async (line 737) | async def test_deep_agent_two_turns_state_backend_edge_case_async(self... method test_deep_agent_read_file_truncation (line 816) | def test_deep_agent_read_file_truncation(self, tmp_path: Path, backend... method test_deep_agent_read_file_no_truncation_small_file (line 875) | def test_deep_agent_read_file_no_truncation_small_file(self, tmp_path:... method test_deep_agent_read_file_truncation_with_offset (line 930) | def test_deep_agent_read_file_truncation_with_offset(self, tmp_path: P... method test_deep_agent_read_file_truncation_async (line 987) | async def test_deep_agent_read_file_truncation_async(self, tmp_path: P... method test_deep_agent_read_file_single_long_line_behavior (line 1045) | def test_deep_agent_read_file_single_long_line_behavior(self, tmp_path... method test_read_large_single_line_file_returns_reasonable_size (line 1120) | def test_read_large_single_line_file_returns_reasonable_size(self) -> ... method test_deep_agent_read_image_file (line 1182) | def test_deep_agent_read_image_file(self, tmp_path: Path, backend_fact... class TestDeepAgentStructure (line 1227) | class TestDeepAgentStructure: method test_base_deep_agent (line 1230) | def test_base_deep_agent(self) -> None: method test_deep_agent_with_tool (line 1235) | def test_deep_agent_with_tool(self) -> None: method test_deep_agent_with_middleware_with_tool (line 1241) | def test_deep_agent_with_middleware_with_tool(self) -> None: method test_deep_agent_with_middleware_with_tool_and_state (line 1247) | def test_deep_agent_with_middleware_with_tool_and_state(self) -> None: FILE: libs/deepagents/tests/unit_tests/test_file_system_tools.py function test_parallel_write_file_calls_trigger_list_reducer (line 19) | def test_parallel_write_file_calls_trigger_list_reducer(file_format: str... function test_edit_file_single_replacement (line 80) | def test_edit_file_single_replacement(file_format: str) -> None: function test_edit_file_replace_all (line 142) | def test_edit_file_replace_all(file_format: str) -> None: function test_edit_file_nonexistent_file (line 201) | def test_edit_file_nonexistent_file() -> None: function test_edit_file_string_not_found (line 246) | def test_edit_file_string_not_found() -> None: function test_grep_finds_written_file (line 298) | def test_grep_finds_written_file() -> None: function test_parallel_edit_file_calls (line 372) | def test_parallel_edit_file_calls() -> None: function test_path_traversal_returns_error_message (line 434) | def test_path_traversal_returns_error_message() -> None: function test_windows_absolute_path_returns_error_message (line 479) | def test_windows_absolute_path_returns_error_message() -> None: function test_tilde_path_returns_error_message (line 523) | def test_tilde_path_returns_error_message() -> None: function test_ls_with_invalid_path_returns_error_message (line 564) | def test_ls_with_invalid_path_returns_error_message() -> None: FILE: libs/deepagents/tests/unit_tests/test_file_system_tools_async.py function test_path_traversal_returns_error_message_async (line 13) | async def test_path_traversal_returns_error_message_async() -> None: function test_windows_absolute_path_returns_error_message_async (line 58) | async def test_windows_absolute_path_returns_error_message_async() -> None: function test_tilde_path_returns_error_message_async (line 102) | async def test_tilde_path_returns_error_message_async() -> None: function test_ls_with_invalid_path_returns_error_message_async (line 143) | async def test_ls_with_invalid_path_returns_error_message_async() -> None: FILE: libs/deepagents/tests/unit_tests/test_local_sandbox_operations.py class LocalSubprocessSandbox (line 41) | class LocalSubprocessSandbox(BaseSandbox): method __init__ (line 44) | def __init__(self) -> None: method set_real_root (line 50) | def set_real_root(self, real_root: str) -> None: method _translate_command_paths (line 54) | def _translate_command_paths(self, command: str) -> str: method _translate_output_paths (line 60) | def _translate_output_paths(self, output: str) -> str: method _to_real_path (line 66) | def _to_real_path(self, path: str) -> str: method _to_virtual_path (line 72) | def _to_virtual_path(self, value: str) -> str: method execute (line 78) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... method ls (line 123) | def ls(self, path: str) -> LsResult: method read (line 131) | def read(self, file_path: str, offset: int = 0, limit: int = 2000) -> ... method write (line 140) | def write(self, file_path: str, content: str) -> WriteResult: method edit (line 149) | def edit( method grep (line 169) | def grep(self, pattern: str, path: str | None = None, glob: str | None... method glob (line 180) | def glob(self, pattern: str, path: str = "/") -> GlobResult: method id (line 185) | def id(self) -> str: method upload_files (line 189) | def upload_files(self, files: list[tuple[str, bytes]]) -> list: method download_files (line 193) | def download_files(self, paths: list[str]) -> list: class TestLocalSandboxOperations (line 198) | class TestLocalSandboxOperations: method sandbox (line 202) | def sandbox(self) -> Iterator[LocalSubprocessSandbox]: method setup_test_dir (line 207) | def setup_test_dir(self, sandbox: LocalSubprocessSandbox, tmp_path: Pa... method test_write_new_file (line 214) | def test_write_new_file(self, sandbox: LocalSubprocessSandbox) -> None: method test_write_creates_parent_dirs (line 227) | def test_write_creates_parent_dirs(self, sandbox: LocalSubprocessSandb... method test_write_existing_file_fails (line 239) | def test_write_existing_file_fails(self, sandbox: LocalSubprocessSandb... method test_write_special_characters (line 254) | def test_write_special_characters(self, sandbox: LocalSubprocessSandbo... method test_write_empty_file (line 266) | def test_write_empty_file(self, sandbox: LocalSubprocessSandbox) -> None: method test_write_path_with_spaces (line 278) | def test_write_path_with_spaces(self, sandbox: LocalSubprocessSandbox)... method test_write_unicode_content (line 290) | def test_write_unicode_content(self, sandbox: LocalSubprocessSandbox) ... method test_write_consecutive_slashes_in_path (line 302) | def test_write_consecutive_slashes_in_path(self, sandbox: LocalSubproc... method test_write_very_long_content (line 314) | def test_write_very_long_content(self, sandbox: LocalSubprocessSandbox... method test_write_content_with_only_newlines (line 327) | def test_write_content_with_only_newlines(self, sandbox: LocalSubproce... method test_read_basic_file (line 340) | def test_read_basic_file(self, sandbox: LocalSubprocessSandbox) -> None: method test_read_nonexistent_file (line 353) | def test_read_nonexistent_file(self, sandbox: LocalSubprocessSandbox) ... method test_read_empty_file (line 362) | def test_read_empty_file(self, sandbox: LocalSubprocessSandbox) -> None: method test_read_with_offset (line 374) | def test_read_with_offset(self, sandbox: LocalSubprocessSandbox) -> None: method test_read_with_limit (line 388) | def test_read_with_limit(self, sandbox: LocalSubprocessSandbox) -> None: method test_read_with_offset_and_limit (line 403) | def test_read_with_offset_and_limit(self, sandbox: LocalSubprocessSand... method test_read_unicode_content (line 419) | def test_read_unicode_content(self, sandbox: LocalSubprocessSandbox) -... method test_read_file_with_very_long_lines (line 433) | def test_read_file_with_very_long_lines(self, sandbox: LocalSubprocess... method test_read_with_zero_limit (line 448) | def test_read_with_zero_limit(self, sandbox: LocalSubprocessSandbox) -... method test_read_offset_beyond_file_length (line 460) | def test_read_offset_beyond_file_length(self, sandbox: LocalSubprocess... method test_read_offset_at_exact_file_length (line 475) | def test_read_offset_at_exact_file_length(self, sandbox: LocalSubproce... method test_read_very_large_file_in_chunks (line 489) | def test_read_very_large_file_in_chunks(self, sandbox: LocalSubprocess... method test_edit_single_occurrence (line 521) | def test_edit_single_occurrence(self, sandbox: LocalSubprocessSandbox)... method test_edit_multiple_occurrences_without_replace_all (line 538) | def test_edit_multiple_occurrences_without_replace_all(self, sandbox: ... method test_edit_multiple_occurrences_with_replace_all (line 555) | def test_edit_multiple_occurrences_with_replace_all(self, sandbox: Loc... method test_edit_string_not_found (line 572) | def test_edit_string_not_found(self, sandbox: LocalSubprocessSandbox) ... method test_edit_nonexistent_file (line 583) | def test_edit_nonexistent_file(self, sandbox: LocalSubprocessSandbox) ... method test_edit_special_characters (line 592) | def test_edit_special_characters(self, sandbox: LocalSubprocessSandbox... method test_edit_multiline_support (line 613) | def test_edit_multiline_support(self, sandbox: LocalSubprocessSandbox)... method test_edit_with_empty_new_string (line 632) | def test_edit_with_empty_new_string(self, sandbox: LocalSubprocessSand... method test_edit_identical_strings (line 649) | def test_edit_identical_strings(self, sandbox: LocalSubprocessSandbox)... method test_edit_unicode_content (line 665) | def test_edit_unicode_content(self, sandbox: LocalSubprocessSandbox) -... method test_edit_whitespace_only_strings (line 681) | def test_edit_whitespace_only_strings(self, sandbox: LocalSubprocessSa... method test_edit_with_very_long_strings (line 696) | def test_edit_with_very_long_strings(self, sandbox: LocalSubprocessSan... method test_edit_line_ending_preservation (line 714) | def test_edit_line_ending_preservation(self, sandbox: LocalSubprocessS... method test_edit_partial_line_match (line 730) | def test_edit_partial_line_match(self, sandbox: LocalSubprocessSandbox... method test_ls_info_path_is_absolute (line 748) | def test_ls_info_path_is_absolute(self, sandbox: LocalSubprocessSandbo... method test_ls_info_basic_directory (line 758) | def test_ls_info_basic_directory(self, sandbox: LocalSubprocessSandbox... method test_ls_info_empty_directory (line 781) | def test_ls_info_empty_directory(self, sandbox: LocalSubprocessSandbox... method test_ls_info_nonexistent_directory (line 790) | def test_ls_info_nonexistent_directory(self, sandbox: LocalSubprocessS... method test_ls_info_hidden_files (line 798) | def test_ls_info_hidden_files(self, sandbox: LocalSubprocessSandbox) -... method test_ls_info_directory_with_spaces (line 812) | def test_ls_info_directory_with_spaces(self, sandbox: LocalSubprocessS... method test_ls_info_unicode_filenames (line 826) | def test_ls_info_unicode_filenames(self, sandbox: LocalSubprocessSandb... method test_ls_info_large_directory (line 840) | def test_ls_info_large_directory(self, sandbox: LocalSubprocessSandbox... method test_ls_info_path_with_trailing_slash (line 855) | def test_ls_info_path_with_trailing_slash(self, sandbox: LocalSubproce... method test_ls_info_special_characters_in_filenames (line 868) | def test_ls_info_special_characters_in_filenames(self, sandbox: LocalS... method test_ls_info_path_is_sanitized (line 885) | def test_ls_info_path_is_sanitized(self, sandbox: LocalSubprocessSandb... method test_read_path_is_sanitized (line 891) | def test_read_path_is_sanitized(self, sandbox: LocalSubprocessSandbox)... method test_grep_basic_search (line 900) | def test_grep_basic_search(self, sandbox: LocalSubprocessSandbox) -> N... method test_grep_with_glob_pattern (line 920) | def test_grep_with_glob_pattern(self, sandbox: LocalSubprocessSandbox)... method test_grep_no_matches (line 934) | def test_grep_no_matches(self, sandbox: LocalSubprocessSandbox) -> None: method test_grep_multiple_matches_per_file (line 945) | def test_grep_multiple_matches_per_file(self, sandbox: LocalSubprocess... method test_grep_literal_string_matching (line 960) | def test_grep_literal_string_matching(self, sandbox: LocalSubprocessSa... method test_grep_unicode_pattern (line 973) | def test_grep_unicode_pattern(self, sandbox: LocalSubprocessSandbox) -... method test_grep_case_sensitivity (line 985) | def test_grep_case_sensitivity(self, sandbox: LocalSubprocessSandbox) ... method test_grep_with_special_characters (line 998) | def test_grep_with_special_characters(self, sandbox: LocalSubprocessSa... method test_grep_empty_directory (line 1016) | def test_grep_empty_directory(self, sandbox: LocalSubprocessSandbox) -... method test_grep_across_nested_directories (line 1026) | def test_grep_across_nested_directories(self, sandbox: LocalSubprocess... method test_grep_with_globstar_include_pattern (line 1040) | def test_grep_with_globstar_include_pattern(self, sandbox: LocalSubpro... method test_grep_with_multiline_matches (line 1050) | def test_grep_with_multiline_matches(self, sandbox: LocalSubprocessSan... method test_glob_basic_pattern (line 1065) | def test_glob_basic_pattern(self, sandbox: LocalSubprocessSandbox) -> ... method test_glob_recursive_pattern (line 1082) | def test_glob_recursive_pattern(self, sandbox: LocalSubprocessSandbox)... method test_glob_no_matches (line 1098) | def test_glob_no_matches(self, sandbox: LocalSubprocessSandbox) -> None: method test_glob_with_directories (line 1108) | def test_glob_with_directories(self, sandbox: LocalSubprocessSandbox) ... method test_glob_specific_extension (line 1124) | def test_glob_specific_extension(self, sandbox: LocalSubprocessSandbox... method test_glob_hidden_files_explicitly (line 1138) | def test_glob_hidden_files_explicitly(self, sandbox: LocalSubprocessSa... method test_glob_with_character_class (line 1155) | def test_glob_with_character_class(self, sandbox: LocalSubprocessSandb... method test_glob_with_question_mark (line 1174) | def test_glob_with_question_mark(self, sandbox: LocalSubprocessSandbox... method test_glob_multiple_extensions (line 1190) | def test_glob_multiple_extensions(self, sandbox: LocalSubprocessSandbo... method test_glob_deeply_nested_pattern (line 1208) | def test_glob_deeply_nested_pattern(self, sandbox: LocalSubprocessSand... method test_glob_with_no_path_argument (line 1221) | def test_glob_with_no_path_argument(self, sandbox: LocalSubprocessSand... method test_write_read_edit_workflow (line 1235) | def test_write_read_edit_workflow(self, sandbox: LocalSubprocessSandbo... method test_complex_directory_operations (line 1259) | def test_complex_directory_operations(self, sandbox: LocalSubprocessSa... FILE: libs/deepagents/tests/unit_tests/test_local_shell.py class TestDefaultTimeoutConstant (line 11) | class TestDefaultTimeoutConstant: method test_default_timeout_uses_constant (line 14) | def test_default_timeout_uses_constant(self) -> None: class TestInitTimeoutValidation (line 20) | class TestInitTimeoutValidation: method test_custom_timeout_accepted (line 23) | def test_custom_timeout_accepted(self) -> None: method test_zero_timeout_raises (line 28) | def test_zero_timeout_raises(self) -> None: method test_negative_timeout_raises (line 33) | def test_negative_timeout_raises(self) -> None: class TestPerCommandTimeout (line 39) | class TestPerCommandTimeout: method test_per_command_timeout_overrides_default (line 42) | def test_per_command_timeout_overrides_default(self) -> None: method test_default_timeout_used_when_not_specified (line 51) | def test_default_timeout_used_when_not_specified(self) -> None: method test_per_command_timeout_actually_expires (line 58) | def test_per_command_timeout_actually_expires(self) -> None: method test_per_command_zero_timeout_raises (line 65) | def test_per_command_zero_timeout_raises(self) -> None: method test_per_command_negative_timeout_raises (line 71) | def test_per_command_negative_timeout_raises(self) -> None: class TestTimeoutErrorMessage (line 78) | class TestTimeoutErrorMessage: method test_default_timeout_error_includes_retry_guidance (line 81) | def test_default_timeout_error_includes_retry_guidance(self) -> None: method test_custom_timeout_error_shows_effective_value (line 90) | def test_custom_timeout_error_shows_effective_value(self) -> None: FILE: libs/deepagents/tests/unit_tests/test_middleware.py function build_composite_state_backend (line 50) | def build_composite_state_backend(runtime: ToolRuntime, *, routes): class TestAddMiddleware (line 61) | class TestAddMiddleware: method test_filesystem_middleware (line 62) | def test_filesystem_middleware(self): method test_subagent_middleware (line 74) | def test_subagent_middleware(self): method test_multiple_middleware (line 84) | def test_multiple_middleware(self): class TestFilesystemMiddleware (line 104) | class TestFilesystemMiddleware: method test_init_default (line 105) | def test_init_default(self): method test_init_with_composite_backend (line 111) | def test_init_with_composite_backend(self): method test_init_custom_system_prompt_default (line 120) | def test_init_custom_system_prompt_default(self): method test_init_custom_system_prompt_with_composite (line 126) | def test_init_custom_system_prompt_with_composite(self): method test_init_custom_tool_descriptions_default (line 135) | def test_init_custom_tool_descriptions_default(self): method test_init_custom_tool_descriptions_with_composite (line 142) | def test_init_custom_tool_descriptions_with_composite(self): method test_ls_shortterm (line 152) | def test_ls_shortterm(self): method test_ls_shortterm_with_path (line 175) | def test_ls_shortterm_with_path(self): method test_ls_shortterm_lists_directories (line 217) | def test_ls_shortterm_lists_directories(self): method test_glob_search_shortterm_simple_pattern (line 261) | def test_glob_search_shortterm_simple_pattern(self): method test_glob_search_shortterm_wildcard_pattern (line 299) | def test_glob_search_shortterm_wildcard_pattern(self): method test_glob_search_shortterm_with_path (line 333) | def test_glob_search_shortterm_with_path(self): method test_glob_search_shortterm_brace_expansion (line 368) | def test_glob_search_shortterm_brace_expansion(self): method test_glob_search_shortterm_no_matches (line 402) | def test_glob_search_shortterm_no_matches(self): method test_glob_timeout_returns_error_message (line 423) | def test_glob_timeout_returns_error_message(self): method test_glob_search_truncates_large_results (line 449) | def test_glob_search_truncates_large_results(self): method test_grep_search_shortterm_files_with_matches (line 482) | def test_grep_search_shortterm_files_with_matches(self): method test_grep_search_shortterm_content_mode (line 515) | def test_grep_search_shortterm_content_mode(self): method test_grep_search_shortterm_count_mode (line 539) | def test_grep_search_shortterm_count_mode(self): method test_grep_search_shortterm_with_include (line 567) | def test_grep_search_shortterm_with_include(self): method test_grep_search_shortterm_with_path (line 595) | def test_grep_search_shortterm_with_path(self): method test_grep_search_shortterm_regex_pattern (line 623) | def test_grep_search_shortterm_regex_pattern(self): method test_grep_search_shortterm_no_matches (line 649) | def test_grep_search_shortterm_no_matches(self): method test_grep_search_shortterm_invalid_regex (line 670) | def test_grep_search_shortterm_invalid_regex(self): method test_search_store_paginated_empty (line 693) | def test_search_store_paginated_empty(self): method test_search_store_paginated_less_than_page_size (line 699) | def test_search_store_paginated_less_than_page_size(self): method test_search_store_paginated_exact_page_size (line 720) | def test_search_store_paginated_exact_page_size(self): method test_search_store_paginated_multiple_pages (line 740) | def test_search_store_paginated_multiple_pages(self): method test_search_store_paginated_with_filter (line 760) | def test_search_store_paginated_with_filter(self): method test_search_store_paginated_custom_page_size (line 783) | def test_search_store_paginated_custom_page_size(self): method test_create_file_data_preserves_long_lines (line 805) | def test_create_file_data_preserves_long_lines(self): method test_update_file_data_preserves_long_lines (line 817) | def test_update_file_data_preserves_long_lines(self): method test_format_content_with_line_numbers_short_lines (line 833) | def test_format_content_with_line_numbers_short_lines(self): method test_format_content_with_line_numbers_long_line_with_continuation (line 844) | def test_format_content_with_line_numbers_long_line_with_continuation(... method test_format_content_with_line_numbers_multiple_long_lines (line 865) | def test_format_content_with_line_numbers_multiple_long_lines(self): method test_format_content_with_line_numbers_exact_limit (line 887) | def test_format_content_with_line_numbers_exact_limit(self): method test_read_file_with_long_lines_shows_continuation_markers (line 898) | def test_read_file_with_long_lines_shows_continuation_markers(self): method test_read_file_with_offset_and_long_lines (line 915) | def test_read_file_with_offset_and_long_lines(self): method test_intercept_short_toolmessage (line 931) | def test_intercept_short_toolmessage(self): method test_intercept_long_toolmessage (line 943) | def test_intercept_long_toolmessage(self): method test_intercept_long_toolmessage_preserves_name (line 957) | def test_intercept_long_toolmessage_preserves_name(self): method test_intercept_long_toolmessage_preserves_artifact_and_metadata (line 970) | def test_intercept_long_toolmessage_preserves_artifact_and_metadata(se... method test_intercept_command_with_short_toolmessage (line 999) | def test_intercept_command_with_short_toolmessage(self): method test_intercept_command_with_long_toolmessage (line 1013) | def test_intercept_command_with_long_toolmessage(self): method test_intercept_command_with_files_and_long_toolmessage (line 1028) | def test_intercept_command_with_files_and_long_toolmessage(self): method test_sanitize_tool_call_id (line 1045) | def test_sanitize_tool_call_id(self): method test_intercept_sanitizes_tool_call_id (line 1051) | def test_intercept_sanitizes_tool_call_id(self): method test_intercept_content_block_with_large_text (line 1064) | def test_intercept_content_block_with_large_text(self): method test_intercept_content_block_with_small_text (line 1082) | def test_intercept_content_block_with_small_text(self): method test_intercept_content_block_non_text_type_not_evicted (line 1097) | def test_intercept_content_block_non_text_type_not_evicted(self): method test_single_text_block_extracts_text_directly (line 1110) | def test_single_text_block_extracts_text_directly(self, file_format): method test_multiple_text_blocks_joins_text (line 1135) | def test_multiple_text_blocks_joins_text(self, file_format): method test_mixed_content_blocks_preserves_non_text (line 1161) | def test_mixed_content_blocks_preserves_non_text(self, file_format): method test_mixed_content_small_text_large_image_not_evicted (line 1187) | def test_mixed_content_small_text_large_image_not_evicted(self): method test_read_file_image_returns_standard_image_content_block (line 1202) | def test_read_file_image_returns_standard_image_content_block(self): method test_read_file_image_returns_error_when_download_fails (line 1240) | def test_read_file_image_returns_error_when_download_fails(self): method test_read_file_handles_str_from_backend (line 1264) | def test_read_file_handles_str_from_backend(self): method test_read_file_str_backend_line_limit_truncation (line 1289) | def test_read_file_str_backend_line_limit_truncation(self): method test_read_file_str_backend_token_truncation (line 1315) | def test_read_file_str_backend_token_truncation(self): method test_read_file_empty_file_returns_warning (line 1345) | def test_read_file_empty_file_returns_warning(self): method test_execute_tool_returns_error_when_backend_doesnt_support (line 1369) | def test_execute_tool_returns_error_when_backend_doesnt_support(self): method test_execute_tool_output_formatting (line 1394) | def test_execute_tool_output_formatting(self): method test_execute_tool_output_formatting_with_failure (line 1430) | def test_execute_tool_output_formatting_with_failure(self): method test_execute_tool_output_formatting_with_truncation (line 1466) | def test_execute_tool_output_formatting_with_truncation(self): method test_supports_execution_helper_with_composite_backend (line 1501) | def test_supports_execution_helper_with_composite_backend(self): method test_intercept_truncates_content_sample_lines (line 1539) | def test_intercept_truncates_content_sample_lines(self): method test_content_preview_edge_cases (line 1610) | def test_content_preview_edge_cases(self, num_lines, should_truncate): class TestExtractTextFromMessage (line 1642) | class TestExtractTextFromMessage: method test_string_content (line 1643) | def test_string_content(self): method test_single_text_block (line 1647) | def test_single_text_block(self): method test_multiple_text_blocks_joined (line 1651) | def test_multiple_text_blocks_joined(self): method test_text_and_image_extracts_text_only (line 1661) | def test_text_and_image_extracts_text_only(self): method test_image_only_returns_empty (line 1671) | def test_image_only_returns_empty(self): method test_plain_string_blocks (line 1675) | def test_plain_string_blocks(self): method test_mixed_string_and_text_blocks (line 1679) | def test_mixed_string_and_text_blocks(self): class TestBuildEvictedContent (line 1687) | class TestBuildEvictedContent: method test_string_content_returns_string (line 1688) | def test_string_content_returns_string(self): method test_text_only_blocks_returns_string (line 1693) | def test_text_only_blocks_returns_string(self): method test_text_and_image_preserves_image (line 1698) | def test_text_and_image_preserves_image(self): method test_multiple_non_text_blocks_preserved (line 1710) | def test_multiple_non_text_blocks_preserved(self): class TestPatchToolCallsMiddleware (line 1725) | class TestPatchToolCallsMiddleware: method test_first_message (line 1726) | def test_first_message(self) -> None: method test_missing_tool_call (line 1743) | def test_missing_tool_call(self) -> None: method test_no_missing_tool_calls (line 1775) | def test_no_missing_tool_calls(self) -> None: method test_two_missing_tool_calls (line 1807) | def test_two_missing_tool_calls(self) -> None: class TestTruncation (line 1856) | class TestTruncation: method test_truncate_list_result_no_truncation (line 1857) | def test_truncate_list_result_no_truncation(self): method test_truncate_list_result_with_truncation (line 1862) | def test_truncate_list_result_with_truncation(self): method test_truncate_string_result_no_truncation (line 1873) | def test_truncate_string_result_no_truncation(self): method test_truncate_string_result_with_truncation (line 1878) | def test_truncate_string_result_with_truncation(self): class TestBuiltinTruncationTools (line 1890) | class TestBuiltinTruncationTools: method test_builtin_truncation_tool_not_evicted (line 1891) | def test_builtin_truncation_tool_not_evicted(self): method test_non_builtin_truncation_tool_evicted (line 1921) | def test_non_builtin_truncation_tool_evicted(self): method test_execute_tool_large_output_evicted (line 1951) | def test_execute_tool_large_output_evicted(self) -> None: method test_execute_tool_forwards_zero_timeout_to_backend (line 1994) | def test_execute_tool_forwards_zero_timeout_to_backend(self): method test_execute_tool_rejects_negative_timeout (line 2027) | def test_execute_tool_rejects_negative_timeout(self): method test_execute_tool_forwards_valid_timeout_to_backend (line 2058) | def test_execute_tool_forwards_valid_timeout_to_backend(self): method test_execute_tool_rejects_timeout_exceeding_max (line 2089) | def test_execute_tool_rejects_timeout_exceeding_max(self): method test_execute_tool_accepts_timeout_at_max (line 2121) | def test_execute_tool_accepts_timeout_at_max(self): method test_execute_tool_none_timeout_skips_max_check (line 2152) | def test_execute_tool_none_timeout_skips_max_check(self): method test_max_execute_timeout_init_validation (line 2184) | def test_max_execute_timeout_init_validation(self): FILE: libs/deepagents/tests/unit_tests/test_middleware_async.py function build_composite_state_backend (line 16) | def build_composite_state_backend(runtime: ToolRuntime, *, routes): class TestFilesystemMiddlewareAsync (line 27) | class TestFilesystemMiddlewareAsync: method test_als_shortterm (line 30) | async def test_als_shortterm(self): method test_als_shortterm_with_path (line 54) | async def test_als_shortterm_with_path(self): method test_als_shortterm_lists_directories (line 95) | async def test_als_shortterm_lists_directories(self): method test_aglob_search_shortterm_simple_pattern (line 138) | async def test_aglob_search_shortterm_simple_pattern(self): method test_aglob_search_shortterm_wildcard_pattern (line 176) | async def test_aglob_search_shortterm_wildcard_pattern(self): method test_aglob_search_shortterm_with_path (line 210) | async def test_aglob_search_shortterm_with_path(self): method test_aglob_search_shortterm_brace_expansion (line 245) | async def test_aglob_search_shortterm_brace_expansion(self): method test_aglob_search_shortterm_no_matches (line 279) | async def test_aglob_search_shortterm_no_matches(self): method test_glob_timeout_returns_error_message_async (line 301) | async def test_glob_timeout_returns_error_message_async(self): method test_agrep_search_shortterm_files_with_matches (line 326) | async def test_agrep_search_shortterm_files_with_matches(self): method test_agrep_search_shortterm_content_mode (line 360) | async def test_agrep_search_shortterm_content_mode(self): method test_agrep_search_shortterm_count_mode (line 385) | async def test_agrep_search_shortterm_count_mode(self): method test_agrep_search_shortterm_with_include (line 414) | async def test_agrep_search_shortterm_with_include(self): method test_agrep_search_shortterm_with_path (line 443) | async def test_agrep_search_shortterm_with_path(self): method test_agrep_search_shortterm_regex_pattern (line 472) | async def test_agrep_search_shortterm_regex_pattern(self): method test_agrep_search_shortterm_no_matches (line 498) | async def test_agrep_search_shortterm_no_matches(self): method test_agrep_search_shortterm_invalid_regex (line 520) | async def test_agrep_search_shortterm_invalid_regex(self): method test_aread_file (line 543) | async def test_aread_file(self): method test_aread_file_with_offset (line 567) | async def test_aread_file_with_offset(self): method test_awrite_file (line 594) | async def test_awrite_file(self): method test_aedit_file (line 610) | async def test_aedit_file(self): method test_aedit_file_replace_all (line 636) | async def test_aedit_file_replace_all(self): method test_aexecute_tool_returns_error_when_backend_doesnt_support (line 662) | async def test_aexecute_tool_returns_error_when_backend_doesnt_support... method test_aexecute_tool_forwards_zero_timeout_to_backend (line 687) | async def test_aexecute_tool_forwards_zero_timeout_to_backend(self): method test_aexecute_tool_output_formatting (line 727) | async def test_aexecute_tool_output_formatting(self): method test_aexecute_tool_output_formatting_with_failure (line 770) | async def test_aexecute_tool_output_formatting_with_failure(self): method test_aexecute_tool_output_formatting_with_truncation (line 813) | async def test_aexecute_tool_output_formatting_with_truncation(self): FILE: libs/deepagents/tests/unit_tests/test_models.py function _make_model (line 15) | def _make_model(dump: dict) -> MagicMock: class TestResolveModel (line 22) | class TestResolveModel: method test_passthrough_when_already_model (line 25) | def test_passthrough_when_already_model(self) -> None: method test_openai_prefix_uses_responses_api (line 29) | def test_openai_prefix_uses_responses_api(self) -> None: method test_non_openai_string (line 37) | def test_non_openai_string(self) -> None: class TestGetModelIdentifier (line 46) | class TestGetModelIdentifier: method test_returns_model_name (line 49) | def test_returns_model_name(self) -> None: method test_falls_back_to_model (line 53) | def test_falls_back_to_model(self) -> None: method test_returns_none_when_missing (line 57) | def test_returns_none_when_missing(self) -> None: method test_skips_empty_model_name (line 61) | def test_skips_empty_model_name(self) -> None: method test_skips_non_string_model_name (line 65) | def test_skips_non_string_model_name(self) -> None: class TestModelMatchesSpec (line 70) | class TestModelMatchesSpec: method test_exact_match (line 73) | def test_exact_match(self) -> None: method test_provider_prefixed_match (line 77) | def test_provider_prefixed_match(self) -> None: method test_no_match (line 81) | def test_no_match(self) -> None: method test_none_identifier_returns_false (line 85) | def test_none_identifier_returns_false(self) -> None: method test_bare_spec_without_colon_no_false_positive (line 89) | def test_bare_spec_without_colon_no_false_positive(self) -> None: class TestStringValue (line 94) | class TestStringValue: method test_present (line 97) | def test_present(self) -> None: method test_missing (line 100) | def test_missing(self) -> None: method test_empty (line 103) | def test_empty(self) -> None: method test_non_string (line 106) | def test_non_string(self) -> None: FILE: libs/deepagents/tests/unit_tests/test_subagents.py function _make_skill_content (line 31) | def _make_skill_content(name: str, description: str) -> str: class TestSubAgents (line 44) | class TestSubAgents: method test_create_deep_agent_routes_async_subagents_from_subagents_param (line 47) | def test_create_deep_agent_routes_async_subagents_from_subagents_param... method test_create_deep_agent_keeps_sync_subagents_in_task_middleware (line 65) | def test_create_deep_agent_keeps_sync_subagents_in_task_middleware(sel... method test_subagent_returns_final_message_as_tool_result (line 81) | def test_subagent_returns_final_message_as_tool_result(self) -> None: method test_multiple_subagents_invoked_in_parallel (line 164) | def test_multiple_subagents_invoked_in_parallel(self) -> None: method test_agent_with_structured_output_tool_strategy (line 283) | def test_agent_with_structured_output_tool_strategy(self) -> None: method test_parallel_subagents_with_todo_lists (line 349) | def test_parallel_subagents_with_todo_lists(self) -> None: method test_parallel_subagents_with_different_structured_outputs (line 558) | def test_parallel_subagents_with_different_structured_outputs(self) ->... method test_lc_agent_name_and_tags_in_streaming_metadata (line 736) | def test_lc_agent_name_and_tags_in_streaming_metadata(self) -> None: method test_config_passed_to_runnable_lambda_subagent (line 799) | def test_config_passed_to_runnable_lambda_subagent(self) -> None: method test_context_passed_to_subagent_tool_runtime (line 848) | def test_context_passed_to_subagent_tool_runtime(self) -> None: method test_compiled_subagent_without_messages_raises_error (line 913) | def test_compiled_subagent_without_messages_raises_error(self) -> None: method test_custom_subagent_does_not_inherit_skills (line 978) | def test_custom_subagent_does_not_inherit_skills(self, tmp_path: Path)... method test_skills_metadata_not_bubbled_to_parent (line 1077) | def test_skills_metadata_not_bubbled_to_parent(self, tmp_path: Path) -... method test_general_purpose_subagent_inherits_skills_from_main_agent (line 1162) | def test_general_purpose_subagent_inherits_skills_from_main_agent(self... method test_custom_subagent_with_skills_parameter (line 1279) | def test_custom_subagent_with_skills_parameter(self, tmp_path: Path) -... method test_custom_subagent_with_skills_multiple_sources (line 1381) | def test_custom_subagent_with_skills_multiple_sources(self, tmp_path: ... method test_custom_subagent_without_skills_has_no_skills_metadata (line 1499) | def test_custom_subagent_without_skills_has_no_skills_metadata(self, t... method test_general_purpose_subagent_override (line 1587) | def test_general_purpose_subagent_override(self) -> None: class TestSubAgentMiddlewareValidation (line 1642) | class TestSubAgentMiddlewareValidation: method test_unknown_kwargs_raises_type_error (line 1645) | def test_unknown_kwargs_raises_type_error(self) -> None: method test_multiple_unknown_kwargs_reported (line 1657) | def test_multiple_unknown_kwargs_reported(self) -> None: method test_valid_deprecated_kwargs_accepted (line 1666) | def test_valid_deprecated_kwargs_accepted(self) -> None: FILE: libs/deepagents/tests/unit_tests/test_todo_middleware.py class TestTodoMiddleware (line 14) | class TestTodoMiddleware: method test_todo_middleware_rejects_multiple_write_todos_in_same_message (line 17) | def test_todo_middleware_rejects_multiple_write_todos_in_same_message(... FILE: libs/deepagents/tests/unit_tests/test_version.py function test_version_matches_pyproject (line 9) | def test_version_matches_pyproject() -> None: FILE: libs/deepagents/tests/utils.py function assert_all_deepagent_qualities (line 10) | def assert_all_deepagent_qualities(agent): function get_premier_league_standings (line 29) | def get_premier_league_standings(runtime: ToolRuntime): function get_la_liga_standings (line 41) | def get_la_liga_standings(runtime: ToolRuntime): function get_nba_standings (line 51) | def get_nba_standings(): function get_nfl_standings (line 56) | def get_nfl_standings(): function get_weather (line 61) | def get_weather(location: str): function get_soccer_scores (line 66) | def get_soccer_scores(team: str): function sample_tool (line 71) | def sample_tool(sample_input: str): function sample_tool_with_injected_state (line 76) | def sample_tool_with_injected_state(sample_input: str, runtime: ToolRunt... function research_basketball (line 84) | def research_basketball(topic: str, runtime: ToolRuntime): class ResearchState (line 90) | class ResearchState(AgentState): class ResearchMiddlewareWithTools (line 94) | class ResearchMiddlewareWithTools(AgentMiddleware): class ResearchMiddleware (line 99) | class ResearchMiddleware(AgentMiddleware): class SampleMiddlewareWithTools (line 103) | class SampleMiddlewareWithTools(AgentMiddleware): class SampleState (line 107) | class SampleState(AgentState): class SampleMiddlewareWithToolsAndState (line 111) | class SampleMiddlewareWithToolsAndState(AgentMiddleware): class WeatherToolMiddleware (line 116) | class WeatherToolMiddleware(AgentMiddleware): FILE: libs/evals/deepagents_evals/radar.py class ModelResult (line 59) | class ModelResult: function generate_radar (line 71) | def generate_radar( function generate_individual_radars (line 160) | def generate_individual_radars( function _safe_filename (line 202) | def _safe_filename(model: str) -> str: function _short_model_name (line 218) | def _short_model_name(model: str) -> str: function load_results_from_summary (line 239) | def load_results_from_summary(path: str | Path) -> list[ModelResult]: function toy_data (line 269) | def toy_data() -> list[ModelResult]: FILE: libs/evals/deepagents_harbor/backend.py class HarborSandbox (line 47) | class HarborSandbox(SandboxBackendProtocol): method __init__ (line 54) | def __init__(self, environment: BaseEnvironment) -> None: method aexecute (line 58) | async def aexecute( method execute (line 135) | def execute( method id (line 145) | def id(self) -> str: method aread (line 149) | async def aread( method read (line 188) | def read( method awrite (line 197) | async def awrite( method write (line 233) | def write( method aedit (line 241) | async def aedit( method edit (line 338) | def edit( method als (line 348) | async def als(self, path: str) -> LsResult: method ls (line 388) | def ls(self, path: str) -> LsResult: method agrep (line 392) | async def agrep( method grep (line 446) | def grep( method aglob (line 455) | async def aglob(self, pattern: str, path: str = "/") -> GlobResult: method glob (line 508) | def glob(self, pattern: str, path: str = "/") -> GlobResult: FILE: libs/evals/deepagents_harbor/deepagents_wrapper.py class DeepAgentsWrapper (line 69) | class DeepAgentsWrapper(BaseAgent): method __init__ (line 75) | def __init__( method name (line 135) | def name() -> str: method setup (line 139) | async def setup(self, environment: BaseEnvironment) -> None: method version (line 146) | def version(self) -> str | None: method _get_formatted_system_prompt (line 150) | async def _get_formatted_system_prompt(self, backend: HarborSandbox) -... method run (line 192) | async def run( method _save_trajectory (line 311) | def _save_trajectory( FILE: libs/evals/deepagents_harbor/failure.py class FailureCategory (line 18) | class FailureCategory(Enum): method is_infrastructure (line 40) | def is_infrastructure(self) -> bool: function _extract_observation_texts (line 95) | def _extract_observation_texts(trajectory_json: str) -> list[str] | None: function extract_exit_codes (line 133) | def extract_exit_codes(trajectory_json: str) -> list[int]: function _extract_exit_codes_raw (line 159) | def _extract_exit_codes_raw(text: str) -> list[int]: function classify_failure (line 178) | def classify_failure( FILE: libs/evals/deepagents_harbor/langsmith.py function create_example_id_from_instruction (line 40) | def create_example_id_from_instruction(instruction: str, seed: int = 42)... function _read_instruction (line 65) | def _read_instruction(task_path: Path) -> str: function _read_task_metadata (line 73) | def _read_task_metadata(task_path: Path) -> dict[str, Any]: function _read_solution (line 81) | def _read_solution(task_path: Path) -> str | None: function _scan_downloaded_tasks (line 96) | def _scan_downloaded_tasks( function create_dataset (line 145) | def create_dataset(dataset_name: str, version: str = "head", overwrite: ... function ensure_dataset (line 184) | def ensure_dataset(dataset_name: str, version: str = "head", overwrite: ... function _create_experiment_session (line 208) | async def _create_experiment_session( function _get_dataset_by_name (line 244) | async def _get_dataset_by_name(dataset_name: str, session: aiohttp.Clien... function create_experiment_async (line 273) | async def create_experiment_async( function create_experiment (line 325) | def create_experiment( function _extract_reward (line 346) | def _extract_reward(trial_dir: Path) -> float | None: function _process_trial (line 384) | def _process_trial( function add_feedback (line 453) | def add_feedback(job_folder: Path, project_name: str, dry_run: bool = Fa... FILE: libs/evals/deepagents_harbor/metadata.py class SandboxLike (line 18) | class SandboxLike(Protocol): method aexecute (line 28) | async def aexecute( # noqa: D102 class InfraMetadata (line 40) | class InfraMetadata: method to_dict (line 65) | def to_dict(self) -> dict[str, Any]: function collect_host_metadata (line 70) | def collect_host_metadata() -> dict[str, str]: function collect_sandbox_metadata (line 82) | async def collect_sandbox_metadata(backend: SandboxLike) -> InfraMetadata: FILE: libs/evals/deepagents_harbor/stats.py function wilson_ci (line 12) | def wilson_ci( function format_ci (line 44) | def format_ci( function min_detectable_effect (line 69) | def min_detectable_effect(total: int, *, z: float = 1.96, p: float = 0.5... FILE: libs/evals/scripts/analyze.py function scan_dataset_for_solutions (line 25) | def scan_dataset_for_solutions(dataset_path: Path) -> dict[str, Path]: function find_task_directory (line 61) | def find_task_directory(trial_dir: Path, task_name: str, task_source: st... class TrialStatus (line 92) | class TrialStatus(Enum): class Trial (line 101) | class Trial: function parse_reward (line 116) | async def parse_reward(reward_path: Path) -> bool: function extract_task_metadata (line 123) | def extract_task_metadata(trial_dir: Path) -> dict: function extract_task_instructions (line 164) | def extract_task_instructions(trajectory_path: Path) -> Optional[str]: function count_tool_usage (line 183) | def count_tool_usage(trajectory_path: Path) -> dict[str, int]: function get_task_name_from_trial (line 213) | def get_task_name_from_trial(trial_dir: Path) -> Optional[str]: function enrich_trials_with_solutions (line 233) | def enrich_trials_with_solutions( function analyze_trial (line 253) | async def analyze_trial( function scan_jobs_directory (line 360) | async def scan_jobs_directory( function print_summary (line 386) | def print_summary(trials: list[Trial]) -> None: function analyze_failed_trial (line 617) | async def analyze_failed_trial(trial: Trial, analyze_pending: bool = Fal... function write_trial_analysis (line 679) | async def write_trial_analysis( function main (line 767) | async def main(): FILE: libs/evals/scripts/generate_radar.py function _load_category_results (line 31) | def _load_category_results(path: Path) -> list[ModelResult]: function main (line 58) | def main() -> None: FILE: libs/evals/scripts/harbor_langsmith.py function main (line 25) | def main() -> int: FILE: libs/evals/tests/evals/conftest.py function pytest_configure (line 19) | def pytest_configure(config: pytest.Config) -> None: function pytest_addoption (line 51) | def pytest_addoption(parser: pytest.Parser) -> None: function pytest_collection_modifyitems (line 66) | def pytest_collection_modifyitems(config: pytest.Config, items: list[pyt... function pytest_generate_tests (line 94) | def pytest_generate_tests(metafunc: pytest.Metafunc) -> None: function model_name (line 104) | def model_name(request: pytest.FixtureRequest) -> str: function langsmith_experiment_metadata (line 109) | def langsmith_experiment_metadata(request: pytest.FixtureRequest) -> dic... function model (line 123) | def model(model_name: str) -> BaseChatModel: FILE: libs/evals/tests/evals/data/bfcl_apis/message_api.py class MessageAPI (line 30) | class MessageAPI: method __init__ (line 57) | def __init__(self): method _load_scenario (line 69) | def _load_scenario(self, scenario: dict, long_context=False) -> None: method __eq__ (line 89) | def __eq__(self, value: object) -> bool: method _generate_id (line 104) | def _generate_id(self): method list_users (line 119) | def list_users(self) -> Dict[str, List[str]]: method get_user_id (line 128) | def get_user_id(self, user: str) -> Dict[str, Optional[str]]: method message_login (line 142) | def message_login(self, user_id: str) -> Dict[str, Union[str, bool]]: method message_get_login_status (line 161) | def message_get_login_status(self) -> Dict[str, bool]: method send_message (line 170) | def send_message(self, receiver_id: str, message: str) -> Dict[str, Un... method delete_message (line 198) | def delete_message(self, receiver_id: str) -> Dict[str, Union[bool, st... method view_messages_sent (line 223) | def view_messages_sent(self) -> Dict[str, Union[Dict[str, List[str]], ... method add_contact (line 244) | def add_contact(self, user_name: str) -> Dict[str, Union[bool, str]]: method search_messages (line 267) | def search_messages( method get_message_stats (line 296) | def get_message_stats(self) -> Dict[str, Union[Dict[str, int], str]]: FILE: libs/evals/tests/evals/data/bfcl_apis/ticket_api.py class TicketAPI (line 11) | class TicketAPI: method __init__ (line 26) | def __init__(self): method _load_scenario (line 35) | def _load_scenario(self, scenario: dict, long_context=False) -> None: method create_ticket (line 49) | def create_ticket( method get_ticket (line 83) | def get_ticket(self, ticket_id: int) -> Dict[str, Union[int, str]]: method close_ticket (line 103) | def close_ticket(self, ticket_id: int) -> Dict[str, str]: method resolve_ticket (line 121) | def resolve_ticket(self, ticket_id: int, resolution: str) -> Dict[str,... method edit_ticket (line 141) | def edit_ticket( method _find_ticket (line 173) | def _find_ticket(self, ticket_id: int) -> Optional[Dict[str, Union[int... method ticket_login (line 193) | def ticket_login(self, username: str, password: str) -> Dict[str, bool]: method ticket_get_login_status (line 210) | def ticket_get_login_status(self) -> Dict[str, bool]: method logout (line 220) | def logout(self) -> Dict[str, bool]: method get_user_tickets (line 232) | def get_user_tickets( FILE: libs/evals/tests/evals/data/bfcl_apis/trading_bot.py class TradingBot (line 130) | class TradingBot: method __init__ (line 145) | def __init__(self): method _load_scenario (line 159) | def _load_scenario(self, scenario: dict, long_context=False) -> None: method _generate_transaction_timestamp (line 193) | def _generate_transaction_timestamp(self) -> str: method get_current_time (line 215) | def get_current_time(self) -> Dict[str, str]: method get_symbol_by_name (line 224) | def get_symbol_by_name(self, name: str) -> Dict[str, str]: method get_stock_info (line 252) | def get_stock_info(self, symbol: str) -> Dict[str, Union[float, int, s... method get_order_details (line 275) | def get_order_details(self, order_id: int) -> Dict[str, Union[str, flo... method cancel_order (line 314) | def cancel_order(self, order_id: int) -> Dict[str, Union[int, str]]: method place_order (line 332) | def place_order( method withdraw_funds (line 391) | def withdraw_funds(self, amount: float) -> Dict[str, Union[str, float]]: method get_account_info (line 425) | def get_account_info(self) -> Dict[str, Union[int, float]]: method trading_login (line 440) | def trading_login(self, username: str, password: str) -> Dict[str, str]: method trading_get_login_status (line 457) | def trading_get_login_status(self) -> Dict[str, bool]: method trading_logout (line 467) | def trading_logout(self) -> Dict[str, str]: method fund_account (line 479) | def fund_account(self, amount: float) -> Dict[str, Union[str, float]]: method remove_stock_from_watchlist (line 507) | def remove_stock_from_watchlist(self, symbol: str) -> Dict[str, str]: method get_watchlist (line 526) | def get_watchlist(self) -> Dict[str, List[str]]: method get_order_history (line 542) | def get_order_history(self) -> Dict[str, List[Dict[str, Union[str, int... method get_transaction_history (line 556) | def get_transaction_history( method get_available_stocks (line 603) | def get_available_stocks(self, sector: str) -> Dict[str, List[str]]: method filter_stocks_by_price (line 623) | def filter_stocks_by_price( method add_to_watchlist (line 645) | def add_to_watchlist(self, stock: str) -> Dict[str, List[str]]: method notify_price_change (line 660) | def notify_price_change(self, stocks: List[str], threshold: float) -> ... FILE: libs/evals/tests/evals/data/bfcl_apis/travel_booking.py class TravelAPI (line 25) | class TravelAPI: method __init__ (line 27) | def __init__(self): method _load_scenario (line 41) | def _load_scenario( method __eq__ (line 80) | def __eq__(self, value: object) -> bool: method _add_credit_cards (line 95) | def _add_credit_cards(self) -> None: method _add_booking_records (line 104) | def _add_booking_records(self) -> None: method _cache_flight_cost_entry (line 113) | def _cache_flight_cost_entry( method authenticate_travel (line 119) | def authenticate_travel( method travel_get_login_status (line 157) | def travel_get_login_status(self) -> Dict[str, bool]: method get_budget_fiscal_year (line 167) | def get_budget_fiscal_year( method register_credit_card (line 183) | def register_credit_card( method _set_card_balance (line 221) | def _set_card_balance(self, card_id: str, balance: float) -> None: method get_flight_cost (line 231) | def get_flight_cost( method get_credit_card_balance (line 443) | def get_credit_card_balance( method book_flight (line 465) | def book_flight( method retrieve_invoice (line 588) | def retrieve_invoice( method get_booking_history (line 628) | def get_booking_history( method list_all_airports (line 656) | def list_all_airports(self) -> List[str]: method cancel_booking (line 689) | def cancel_booking( method compute_exchange_rate (line 713) | def compute_exchange_rate( method verify_traveler_information (line 746) | def verify_traveler_information( method set_budget_limit (line 800) | def set_budget_limit( method get_nearest_airport_by_city (line 820) | def get_nearest_airport_by_city(self, location: str) -> Dict[str, str]: method purchase_insurance (line 857) | def purchase_insurance( method contact_customer_support (line 894) | def contact_customer_support(self, booking_id: str, message: str) -> D... method get_all_credit_cards (line 911) | def get_all_credit_cards(self) -> Dict[str, Dict[str, Union[str, int, ... FILE: libs/evals/tests/evals/data/bfcl_apis/vehicle_control.py class VehicleControlAPI (line 50) | class VehicleControlAPI: method __init__ (line 52) | def __init__(self): method _load_scenario (line 81) | def _load_scenario(self, scenario: dict, long_context=False) -> None: method __eq__ (line 160) | def __eq__(self, value: object) -> bool: method startEngine (line 175) | def startEngine(self, ignitionMode: str) -> Dict[str, Union[str, float]]: method fillFuelTank (line 215) | def fillFuelTank(self, fuelAmount: float) -> Dict[str, Union[str, floa... method lockDoors (line 232) | def lockDoors(self, unlock: bool, door: list[str]) -> Dict[str, Union[... method adjustClimateControl (line 263) | def adjustClimateControl( method get_outside_temperature_from_google (line 295) | def get_outside_temperature_from_google(self) -> Dict[str, float]: method get_outside_temperature_from_weather_com (line 306) | def get_outside_temperature_from_weather_com(self) -> Dict[str, float]: method setHeadlights (line 314) | def setHeadlights(self, mode: str) -> Dict[str, str]: method displayCarStatus (line 331) | def displayCarStatus(self, option: str) -> Dict[str, Union[str, float,... method activateParkingBrake (line 387) | def activateParkingBrake(self, mode: str) -> Dict[str, Union[str, floa... method pressBrakePedal (line 424) | def pressBrakePedal(self, pedalPosition: float) -> Dict[str, Union[str... method releaseBrakePedal (line 453) | def releaseBrakePedal(self) -> Dict[str, Union[str, float]]: method setCruiseControl (line 464) | def setCruiseControl( method get_current_speed (line 502) | def get_current_speed(self) -> Dict[str, float]: method display_log (line 510) | def display_log(self, messages: List[str]): method estimate_drive_feasibility_by_mileage (line 520) | def estimate_drive_feasibility_by_mileage(self, distance: float) -> Di... method liter_to_gallon (line 533) | def liter_to_gallon(self, liter: float) -> Dict[str, float]: method gallon_to_liter (line 543) | def gallon_to_liter(self, gallon: float) -> Dict[str, float]: method estimate_distance (line 553) | def estimate_distance(self, cityA: str, cityB: str) -> Dict[str, float]: method get_zipcode_based_on_city (line 618) | def get_zipcode_based_on_city(self, city: str) -> Dict[str, str]: method set_navigation (line 651) | def set_navigation(self, destination: str) -> Dict[str, str]: method check_tire_pressure (line 662) | def check_tire_pressure(self): method find_nearest_tire_shop (line 697) | def find_nearest_tire_shop(self) -> Dict[str, str]: FILE: libs/evals/tests/evals/external_benchmarks.py class _NormalizedSubstringsPresent (line 37) | class _NormalizedSubstringsPresent(SuccessAssertion): method _normalize (line 43) | def _normalize(text: str) -> str: method check (line 46) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 50) | def describe_failure(self, trajectory: AgentTrajectory) -> str: function _load_final (line 85) | def _load_final(name: str) -> list[dict[str, Any]]: function _external_eval_metadata (line 113) | def _external_eval_metadata( function _create_file_backed_agent (line 131) | def _create_file_backed_agent(model: BaseChatModel) -> CompiledStateGraph: function _create_text_scorer (line 135) | def _create_text_scorer(case: dict[str, Any]) -> TrajectoryScorer: function run_frames_case (line 141) | def run_frames_case(case: dict[str, Any], model: BaseChatModel) -> None: function run_nexus_case (line 166) | def run_nexus_case(case: dict[str, Any], model: BaseChatModel) -> None: function _instantiate_bfcl_apis (line 211) | def _instantiate_bfcl_apis(case: dict[str, Any]) -> dict[str, Any]: function _wrap_bfcl_methods_as_tools (line 223) | def _wrap_bfcl_methods_as_tools(instances: dict[str, Any]) -> list[Struc... function _fix_bfcl_gt_call (line 240) | def _fix_bfcl_gt_call(call_str: str) -> str: function _replay_bfcl_ground_truth (line 249) | def _replay_bfcl_ground_truth(case: dict[str, Any]) -> dict[str, Any]: function _bfcl_state_diff (line 270) | def _bfcl_state_diff( function run_bfcl_case (line 290) | def run_bfcl_case(case: dict[str, Any], model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/llm_judge.py class LLMJudge (line 40) | class LLMJudge(SuccessAssertion): method __post_init__ (line 58) | def __post_init__(self) -> None: method check (line 63) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 76) | def describe_failure(self, trajectory: AgentTrajectory) -> str: method _grade (line 94) | def _grade(self, trajectory: AgentTrajectory) -> list[dict[str, Any]]: function llm_judge (line 159) | def llm_judge( FILE: libs/evals/tests/evals/memory_agent_bench/configs.py class DatasetConfig (line 15) | class DatasetConfig: FILE: libs/evals/tests/evals/memory_agent_bench/data_utils.py class BenchmarkSample (line 31) | class BenchmarkSample: function load_benchmark_data (line 49) | def load_benchmark_data( function chunk_text (line 105) | def chunk_text(text: str, *, chunk_size: int = 4096) -> list[str]: function _ensure_list (line 151) | def _ensure_list(value: object) -> list: function _ensure_nltk_tokenizer (line 167) | def _ensure_nltk_tokenizer(nltk_module: object) -> None: function _sent_tokenize (line 190) | def _sent_tokenize(nltk_module: object, text: str) -> list[str]: FILE: libs/evals/tests/evals/memory_agent_bench/eval_utils.py function normalize_answer (line 16) | def normalize_answer(text: str) -> str: function substring_match (line 33) | def substring_match(prediction: str, ground_truth: str) -> bool: function substring_match_any (line 46) | def substring_match_any( FILE: libs/evals/tests/evals/memory_agent_bench/test_memory_agent_bench.py function _log_feedback (line 55) | def _log_feedback(*, key: str, value: object) -> None: function _require_memory_agent_bench_dependencies (line 61) | def _require_memory_agent_bench_dependencies() -> None: class _QAPrediction (line 83) | class _QAPrediction: class _SampleOutput (line 93) | class _SampleOutput: function _run_benchmark_sample (line 104) | def _run_benchmark_sample( function _score_predictions (line 179) | def _score_predictions(output: _SampleOutput) -> list[bool]: function _log_sample_feedback (line 196) | def _log_sample_feedback(results: list[bool]) -> None: function _config_id (line 217) | def _config_id(cfg: DatasetConfig) -> str: function test_conflict_resolution (line 229) | def test_conflict_resolution(model: BaseChatModel, config: DatasetConfig... function test_time_learning (line 258) | def test_time_learning(model: BaseChatModel, config: DatasetConfig) -> N... function test_memory_agent_bench_ci (line 286) | def test_memory_agent_bench_ci(model: BaseChatModel, config: DatasetConf... FILE: libs/evals/tests/evals/pytest_reporter.py function _micro_step_ratio (line 39) | def _micro_step_ratio() -> float | None: function _micro_tool_call_ratio (line 55) | def _micro_tool_call_ratio() -> float | None: function _solve_rate (line 71) | def _solve_rate() -> float | None: function pytest_configure (line 94) | def pytest_configure(config: pytest.Config) -> None: function pytest_collection_modifyitems (line 99) | def pytest_collection_modifyitems( function pytest_addoption (line 109) | def pytest_addoption(parser: pytest.Parser) -> None: function pytest_runtest_logreport (line 120) | def pytest_runtest_logreport(report: pytest.TestReport) -> None: function pytest_sessionfinish (line 144) | def pytest_sessionfinish(session: pytest.Session, exitstatus: int) -> None: FILE: libs/evals/tests/evals/tau2_airline/domain.py class AirportCode (line 35) | class AirportCode(BaseModel): class Name (line 40) | class Name(BaseModel): class Address (line 45) | class Address(BaseModel): class Payment (line 54) | class Payment(BaseModel): class CreditCard (line 59) | class CreditCard(BaseModel): class GiftCard (line 66) | class GiftCard(BaseModel): class Certificate (line 72) | class Certificate(BaseModel): class Passenger (line 81) | class Passenger(BaseModel): class FlightDateStatusAvailable (line 87) | class FlightDateStatusAvailable(BaseModel): class FlightDateStatusDelayed (line 93) | class FlightDateStatusDelayed(BaseModel): class FlightDateStatusOnTime (line 99) | class FlightDateStatusOnTime(BaseModel): class FlightDateStatusFlying (line 105) | class FlightDateStatusFlying(BaseModel): class FlightDateStatusLanded (line 111) | class FlightDateStatusLanded(BaseModel): class FlightDateStatusCancelled (line 117) | class FlightDateStatusCancelled(BaseModel): class Flight (line 131) | class Flight(BaseModel): class DirectFlight (line 140) | class DirectFlight(BaseModel): class ReservationFlight (line 152) | class ReservationFlight(BaseModel): class FlightInfo (line 160) | class FlightInfo(BaseModel): class User (line 167) | class User(BaseModel): class Reservation (line 179) | class Reservation(BaseModel): class FlightDB (line 196) | class FlightDB(BaseModel): function load_db (line 209) | def load_db() -> FlightDB: function load_policy (line 215) | def load_policy() -> str: function load_task (line 221) | def load_task(task_id: str) -> dict[str, Any]: class ToolCallEntry (line 248) | class ToolCallEntry: function _get_user (line 266) | def _get_user(db: FlightDB, user_id: str) -> User: function _get_reservation (line 273) | def _get_reservation(db: FlightDB, reservation_id: str) -> Reservation: function _get_flight (line 280) | def _get_flight(db: FlightDB, flight_number: str) -> Flight: function _get_flight_instance (line 287) | def _get_flight_instance(db: FlightDB, flight_number: str, date: str) ->... function _search_direct_flights (line 295) | def _search_direct_flights( function _get_new_reservation_id (line 331) | def _get_new_reservation_id(db: FlightDB) -> str: function _payment_for_update (line 339) | def _payment_for_update(user: User, payment_id: str, total_price: int) -... function _serialize (line 357) | def _serialize(obj: BaseModel | list[BaseModel]) -> str: class BookReservationInput (line 376) | class BookReservationInput(BaseModel): class UpdateReservationFlightsInput (line 400) | class UpdateReservationFlightsInput(BaseModel): class UpdateReservationPassengersInput (line 413) | class UpdateReservationPassengersInput(BaseModel): function create_airline_tools (line 425) | def create_airline_tools( FILE: libs/evals/tests/evals/tau2_airline/evaluation.py class ActionCheckResult (line 43) | class ActionCheckResult: class TaskReward (line 52) | class TaskReward: class EpisodeScore (line 71) | class EpisodeScore: function _hash_db (line 90) | def _hash_db(db: FlightDB) -> str: function _replay_expected_actions (line 97) | def _replay_expected_actions(task: dict[str, Any]) -> FlightDB: function _apply_initial_state (line 131) | def _apply_initial_state(db: FlightDB, initial_state: dict[str, Any]) ->... function check_db_state (line 154) | def check_db_state(actual_db: FlightDB, task: dict[str, Any]) -> float: function check_actions (line 180) | def check_actions( function _args_match (line 218) | def _args_match(actual: dict[str, Any], expected: dict[str, Any]) -> bool: function check_communicate (line 233) | def check_communicate( function evaluate_task (line 260) | def evaluate_task( function score_tau2_episode (line 301) | def score_tau2_episode(reward: TaskReward) -> EpisodeScore: FILE: libs/evals/tests/evals/tau2_airline/runner.py class Message (line 33) | class Message: class ConversationResult (line 41) | class ConversationResult: function run_multi_turn (line 57) | def run_multi_turn( FILE: libs/evals/tests/evals/tau2_airline/test_tau2_airline.py function _task_id_label (line 74) | def _task_id_label(task_id: str) -> str: function test_tau2_airline (line 81) | def test_tau2_airline(model: BaseChatModel, task_id: str) -> None: FILE: libs/evals/tests/evals/tau2_airline/user_sim.py function _build_system_prompt (line 49) | def _build_system_prompt(scenario: dict[str, Any]) -> str: class UserSimulator (line 77) | class UserSimulator: method __init__ (line 85) | def __init__(self, model: BaseChatModel, scenario: dict[str, Any]) -> ... method is_done (line 93) | def is_done(self) -> bool: method get_opening_message (line 97) | def get_opening_message(self) -> str: method respond (line 109) | def respond(self, agent_message: str) -> str: FILE: libs/evals/tests/evals/test_external_benchmarks.py function test_frames (line 28) | def test_frames(model: BaseChatModel, case: dict[str, Any]) -> None: function test_nexus (line 35) | def test_nexus(model: BaseChatModel, case: dict[str, Any]) -> None: function test_bfcl_v3 (line 42) | def test_bfcl_v3(model: BaseChatModel, case: dict[str, Any]) -> None: FILE: libs/evals/tests/evals/test_file_operations.py function test_read_file_seeded_state_backend_file (line 25) | def test_read_file_seeded_state_backend_file(model: BaseChatModel) -> None: function test_write_file_simple (line 43) | def test_write_file_simple(model: BaseChatModel) -> None: function test_write_files_in_parallel (line 63) | def test_write_files_in_parallel(model: str) -> None: function test_write_files_in_parallel_confirm_with_verification (line 93) | def test_write_files_in_parallel_confirm_with_verification(model: str) -... function test_write_files_in_parallel_ambiguous_confirmation (line 126) | def test_write_files_in_parallel_ambiguous_confirmation(model: BaseChatM... function test_ls_directory_contains_file_yes_no (line 159) | def test_ls_directory_contains_file_yes_no(model: BaseChatModel) -> None: function test_ls_directory_missing_file_yes_no (line 181) | def test_ls_directory_missing_file_yes_no(model: BaseChatModel) -> None: function test_edit_file_replace_text (line 202) | def test_edit_file_replace_text(model: BaseChatModel) -> None: function test_read_then_write_derived_output (line 223) | def test_read_then_write_derived_output(model: BaseChatModel) -> None: function test_avoid_unnecessary_tool_calls (line 246) | def test_avoid_unnecessary_tool_calls(model: BaseChatModel) -> None: function test_read_files_in_parallel (line 262) | def test_read_files_in_parallel(model: BaseChatModel) -> None: function test_grep_finds_matching_paths (line 290) | def test_grep_finds_matching_paths(model: BaseChatModel) -> None: function test_glob_lists_markdown_files (line 316) | def test_glob_lists_markdown_files(model: BaseChatModel) -> None: function test_find_magic_phrase_deep_nesting (line 342) | def test_find_magic_phrase_deep_nesting(model: BaseChatModel) -> None: function test_identify_quote_author_from_directory_parallel_reads (line 376) | def test_identify_quote_author_from_directory_parallel_reads( function test_identify_quote_author_from_directory_unprompted_efficiency (line 449) | def test_identify_quote_author_from_directory_unprompted_efficiency( FILE: libs/evals/tests/evals/test_followup_quality.py function test_followup_question_quality (line 94) | def test_followup_question_quality(model: BaseChatModel, case: dict[str,... FILE: libs/evals/tests/evals/test_hitl.py function get_weather (line 22) | def get_weather(location: str) -> str: function get_soccer_scores (line 27) | def get_soccer_scores(team: str) -> str: function sample_tool (line 32) | def sample_tool(sample_input: str) -> str: function test_hitl_agent (line 44) | def test_hitl_agent(model: BaseChatModel) -> None: function test_subagent_with_hitl (line 112) | def test_subagent_with_hitl(model: BaseChatModel) -> None: function test_subagent_with_custom_interrupt_on (line 173) | def test_subagent_with_custom_interrupt_on(model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/test_memory.py function test_memory_basic_recall (line 29) | def test_memory_basic_recall(model: BaseChatModel) -> None: function test_memory_guided_behavior_naming_convention (line 61) | def test_memory_guided_behavior_naming_convention(model: BaseChatModel) ... function test_memory_influences_file_content (line 104) | def test_memory_influences_file_content(model: BaseChatModel) -> None: function test_memory_multiple_sources_combined (line 132) | def test_memory_multiple_sources_combined(model: BaseChatModel) -> None: function test_memory_with_missing_file_graceful (line 166) | def test_memory_with_missing_file_graceful(model: BaseChatModel) -> None: function test_memory_prevents_unnecessary_file_reads (line 183) | def test_memory_prevents_unnecessary_file_reads(model: BaseChatModel) ->... function test_memory_does_not_persist_transient_info (line 217) | def test_memory_does_not_persist_transient_info(model: BaseChatModel) ->... function test_memory_updates_user_formatting_preference (line 242) | def test_memory_updates_user_formatting_preference(model: BaseChatModel)... function test_memory_missing_file_graceful_without_claiming_context (line 275) | def test_memory_missing_file_graceful_without_claiming_context( function test_memory_middleware_composite_backend (line 299) | def test_memory_middleware_composite_backend(model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/test_memory_multiturn.py function test_implicit_preference_remembered (line 204) | def test_implicit_preference_remembered(model: BaseChatModel, case: dict... function test_explicit_preference_remembered (line 231) | def test_explicit_preference_remembered(model: BaseChatModel, case: dict... function test_transient_info_not_persisted (line 258) | def test_transient_info_not_persisted(model: BaseChatModel, case: dict[s... FILE: libs/evals/tests/evals/test_skills.py function _skill_content (line 24) | def _skill_content(name: str, description: str, body: str) -> str: function test_read_skill_full_content (line 30) | def test_read_skill_full_content(model: BaseChatModel) -> None: function test_read_skill_by_name (line 68) | def test_read_skill_by_name(model: BaseChatModel) -> None: function test_combine_two_skills (line 112) | def test_combine_two_skills(model: BaseChatModel) -> None: function test_update_skill_typo_fix_no_read (line 163) | def test_update_skill_typo_fix_no_read(model: BaseChatModel) -> None: function test_update_skill_typo_fix_requires_read (line 204) | def test_update_skill_typo_fix_requires_read(model: BaseChatModel) -> None: function test_find_skill_in_correct_path (line 251) | def test_find_skill_in_correct_path(model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/test_subagents.py function get_weather_fake (line 24) | def get_weather_fake(location: str) -> str: # noqa: ARG001 function test_task_calls_weather_subagent (line 30) | def test_task_calls_weather_subagent(model: BaseChatModel) -> None: function test_task_calls_general_purpose_subagent (line 70) | def test_task_calls_general_purpose_subagent(model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/test_summarization.py function _write_file (line 54) | def _write_file(p: Path, content: str) -> None: function _setup_summarization_test (line 60) | def _setup_summarization_test( function test_summarize_continues_task (line 104) | def test_summarize_continues_task(tmp_path: Path, model: BaseChatModel) ... function test_summarization_offloads_to_filesystem (line 143) | def test_summarization_offloads_to_filesystem(tmp_path: Path, model: Bas... function _called_compact (line 211) | def _called_compact(trajectory: AgentTrajectory) -> bool: function _load_seed_messages (line 220) | def _load_seed_messages() -> list[AnyMessage]: function test_compact_tool_new_task (line 232) | def test_compact_tool_new_task(tmp_path: Path, model: BaseChatModel) -> ... function test_compact_tool_not_overly_sensitive (line 246) | def test_compact_tool_not_overly_sensitive(tmp_path: Path, model: BaseCh... function test_compact_tool_large_reads (line 260) | def test_compact_tool_large_reads(tmp_path: Path, model: BaseChatModel) ... FILE: libs/evals/tests/evals/test_system_prompt.py function test_custom_system_prompt (line 21) | def test_custom_system_prompt(model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/test_tool_selection.py function slack_send_dm (line 37) | def slack_send_dm(user_id: str, message: str) -> str: function slack_post_channel (line 43) | def slack_post_channel(channel: str, message: str) -> str: function github_create_issue (line 49) | def github_create_issue(repo: str, title: str, body: str) -> str: function github_create_pr (line 55) | def github_create_pr(repo: str, title: str, head: str, base: str) -> str: function linear_create_issue (line 61) | def linear_create_issue(team: str, title: str, description: str) -> str: function gmail_send_email (line 67) | def gmail_send_email(to: str, subject: str, body: str) -> str: function web_search (line 73) | def web_search(query: str) -> str: function calendar_create_event (line 79) | def calendar_create_event(title: str, date: str, attendees: list[str]) -... function test_direct_request_slack_dm (line 102) | def test_direct_request_slack_dm(model: BaseChatModel) -> None: function test_direct_request_github_pr (line 124) | def test_direct_request_github_pr(model: BaseChatModel) -> None: function test_direct_request_multiple_tools (line 151) | def test_direct_request_multiple_tools(model: BaseChatModel) -> None: function test_indirect_schedule_meeting (line 182) | def test_indirect_schedule_meeting(model: BaseChatModel) -> None: function test_indirect_notify_team (line 204) | def test_indirect_notify_team(model: BaseChatModel) -> None: function test_indirect_email_report (line 231) | def test_indirect_email_report(model: BaseChatModel) -> None: function test_chain_search_then_email (line 263) | def test_chain_search_then_email(model: BaseChatModel) -> None: function test_chain_create_issue_then_notify (line 286) | def test_chain_create_issue_then_notify(model: BaseChatModel) -> None: FILE: libs/evals/tests/evals/test_tool_usage_relational.py class UserRecord (line 34) | class UserRecord(TypedDict): class LocationRecord (line 43) | class LocationRecord(TypedDict): class FoodRecord (line 50) | class FoodRecord(TypedDict): class UserSearchResult (line 57) | class UserSearchResult(TypedDict): class LocationSearchResult (line 62) | class LocationSearchResult(TypedDict): class FoodSearchResult (line 67) | class FoodSearchResult(TypedDict): function _similarity_search (line 207) | def _similarity_search( function _get_user (line 221) | def _get_user(user_id: int) -> UserRecord: function _get_location (line 229) | def _get_location(location_id: int) -> LocationRecord: function _get_food (line 237) | def _get_food(food_id: int) -> FoodRecord: function get_user_name (line 251) | def get_user_name(user_id: int) -> str: function list_user_ids (line 261) | def list_user_ids() -> list[int]: function find_users_by_name (line 267) | def find_users_by_name(name: str) -> list[UserSearchResult]: function find_locations_by_name (line 277) | def find_locations_by_name(city: str) -> list[LocationSearchResult]: function find_foods_by_name (line 287) | def find_foods_by_name(food: str) -> list[FoodSearchResult]: function get_user_email (line 297) | def get_user_email(user_id: int) -> str: function get_user_location (line 307) | def get_user_location(user_id: int) -> int: function get_user_favorite_color (line 317) | def get_user_favorite_color(user_id: int) -> str: function get_user_favorite_foods (line 327) | def get_user_favorite_foods(user_id: int) -> list[int]: function get_weather_at_location (line 337) | def get_weather_at_location(location_id: int) -> str: function get_city_for_location (line 347) | def get_city_for_location(location_id: int) -> str: function get_current_time_for_location (line 357) | def get_current_time_for_location(location_id: int) -> str: function get_food_name (line 367) | def get_food_name(food_id: int) -> str: function get_food_calories (line 377) | def get_food_calories(food_id: int) -> int: function get_food_allergic_ingredients (line 387) | def get_food_allergic_ingredients(food_id: int) -> list[str]: function get_current_user_id (line 397) | def get_current_user_id() -> int: function _create_agent (line 433) | def _create_agent(model: BaseChatModel): function test_single_tool_list_user_ids (line 442) | def test_single_tool_list_user_ids(model: BaseChatModel) -> None: function test_single_tool_get_user_email (line 470) | def test_single_tool_get_user_email(model: BaseChatModel) -> None: function test_single_tool_get_food_calories (line 493) | def test_single_tool_get_food_calories(model: BaseChatModel) -> None: function test_two_tools_user_name_from_current_id (line 516) | def test_two_tools_user_name_from_current_id(model: BaseChatModel) -> None: function test_two_tools_city_for_user (line 543) | def test_two_tools_city_for_user(model: BaseChatModel) -> None: function test_two_tools_find_user_then_email (line 574) | def test_two_tools_find_user_then_email(model: BaseChatModel) -> None: function test_three_tools_current_user_city (line 601) | def test_three_tools_current_user_city(model: BaseChatModel) -> None: function test_three_tools_find_user_then_city (line 634) | def test_three_tools_find_user_then_city(model: BaseChatModel) -> None: function test_three_tools_current_user_weather (line 667) | def test_three_tools_current_user_weather(model: BaseChatModel) -> None: function test_four_tools_current_user_favorite_food_names (line 700) | def test_four_tools_current_user_favorite_food_names(model: BaseChatMode... function test_four_tools_find_user_food_name_and_calories (line 738) | def test_four_tools_find_user_food_name_and_calories(model: BaseChatMode... function test_four_tools_current_user_location_time_and_weather (line 776) | def test_four_tools_current_user_location_time_and_weather( function test_five_steps_current_user_food_names_and_calories (line 819) | def test_five_steps_current_user_food_names_and_calories(model: BaseChat... function test_four_steps_find_user_city_and_weather (line 864) | def test_four_steps_find_user_city_and_weather(model: BaseChatModel) -> ... function test_four_steps_find_user_food_allergies (line 913) | def test_four_steps_find_user_food_allergies(model: BaseChatModel) -> None: function test_four_steps_current_user_food_names_calories_and_allergies (line 965) | def test_four_steps_current_user_food_names_calories_and_allergies( function test_four_steps_find_user_city_weather_time_and_food_details (line 1028) | def test_four_steps_find_user_city_weather_time_and_food_details( function test_four_steps_find_user_email_city_foods_calories_and_allergies (line 1097) | def test_four_steps_find_user_email_city_foods_calories_and_allergies( FILE: libs/evals/tests/evals/utils.py class AgentStep (line 24) | class AgentStep: method __post_init__ (line 34) | def __post_init__(self) -> None: class AgentTrajectory (line 41) | class AgentTrajectory: method answer (line 48) | def answer(self) -> str: method pretty (line 52) | def pretty(self) -> str: class SuccessAssertion (line 75) | class SuccessAssertion: method check (line 78) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 92) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class EfficiencyAssertion (line 108) | class EfficiencyAssertion: method check (line 111) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 125) | def describe_failure(self, trajectory: AgentTrajectory) -> str: function _strip_common_zero_width (line 145) | def _strip_common_zero_width(text: str) -> str: function _coerce_result_files_to_strings (line 172) | def _coerce_result_files_to_strings(raw_files: object) -> dict[str, str]: class FinalTextContains (line 216) | class FinalTextContains(SuccessAssertion): method check (line 227) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 243) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class FinalTextExcludes (line 257) | class FinalTextExcludes(SuccessAssertion): method check (line 268) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 284) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class FileEquals (line 298) | class FileEquals(SuccessAssertion): method check (line 309) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 320) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class FileContains (line 336) | class FileContains(SuccessAssertion): method check (line 347) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 361) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class FileExcludes (line 379) | class FileExcludes(SuccessAssertion): method check (line 390) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 401) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class AgentSteps (line 420) | class AgentSteps(EfficiencyAssertion): method check (line 429) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 440) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class ToolCallRequests (line 453) | class ToolCallRequests(EfficiencyAssertion): method check (line 462) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 474) | def describe_failure(self, trajectory: AgentTrajectory) -> str: class ToolCall (line 488) | class ToolCall(EfficiencyAssertion): method check (line 506) | def check(self, trajectory: AgentTrajectory) -> bool: method describe_failure (line 517) | def describe_failure(self, trajectory: AgentTrajectory) -> str: method _matches_tool_call (line 529) | def _matches_tool_call(self, tc: dict[str, object]) -> bool: method _find_matches (line 548) | def _find_matches(self, trajectory: AgentTrajectory) -> list[dict[str,... function final_text_contains (line 574) | def final_text_contains( function final_text_excludes (line 591) | def final_text_excludes( function file_equals (line 608) | def file_equals(path: str, content: str) -> FileEquals: function file_contains (line 621) | def file_contains(path: str, substring: str) -> FileContains: function file_excludes (line 634) | def file_excludes(path: str, substring: str) -> FileExcludes: function agent_steps (line 647) | def agent_steps(n: int) -> AgentSteps: function tool_call_requests (line 659) | def tool_call_requests(n: int) -> ToolCallRequests: function tool_call (line 671) | def tool_call( class TrajectoryScorer (line 703) | class TrajectoryScorer: method success (line 717) | def success(self, *assertions: SuccessAssertion) -> TrajectoryScorer: method expect (line 731) | def expect( function _trajectory_from_result (line 766) | def _trajectory_from_result(result: Mapping[str, object]) -> AgentTrajec... class EfficiencyResult (line 805) | class EfficiencyResult: function _log_efficiency (line 820) | def _log_efficiency( function _assert_expectations (line 863) | def _assert_expectations( function run_agent (line 899) | def run_agent( FILE: libs/evals/tests/unit_tests/test_category_tagging.py function test_all_categories_have_labels (line 32) | def test_all_categories_have_labels(): function test_all_labeled_categories_are_registered (line 37) | def test_all_labeled_categories_are_registered(): function test_expected_categories_match_eval_categories (line 42) | def test_expected_categories_match_eval_categories(): function test_category_scores_computation (line 51) | def test_category_scores_computation(): function test_load_results_with_category_scores (line 78) | def test_load_results_with_category_scores(tmp_path): function test_load_results_missing_category_scores_raises (line 95) | def test_load_results_missing_category_scores_raises(tmp_path): function test_load_results_empty_category_scores (line 106) | def test_load_results_empty_category_scores(tmp_path): function test_eval_category_is_valid_mark_name (line 122) | def test_eval_category_is_valid_mark_name(): FILE: libs/evals/tests/unit_tests/test_external_benchmark_helpers.py function _make_trajectory (line 12) | def _make_trajectory(answer: str) -> AgentTrajectory: class TestNormalizedSubstringsPresent (line 25) | class TestNormalizedSubstringsPresent: method test_matching_snippets (line 26) | def test_matching_snippets(self) -> None: method test_non_matching_snippet (line 31) | def test_non_matching_snippet(self) -> None: method test_whitespace_normalization (line 36) | def test_whitespace_normalization(self) -> None: method test_quote_stripping (line 41) | def test_quote_stripping(self) -> None: method test_backtick_stripping (line 46) | def test_backtick_stripping(self) -> None: method test_empty_snippets_passes (line 56) | def test_empty_snippets_passes(self) -> None: method test_describe_failure (line 61) | def test_describe_failure(self) -> None: class TestFixBfclGtCall (line 74) | class TestFixBfclGtCall: method test_sender_id_middle (line 75) | def test_sender_id_middle(self) -> None: method test_sender_id_last (line 82) | def test_sender_id_last(self) -> None: method test_sender_id_only_is_noop (line 88) | def test_sender_id_only_is_noop(self) -> None: method test_no_sender_id (line 94) | def test_no_sender_id(self) -> None: method test_double_quoted_sender_id (line 99) | def test_double_quoted_sender_id(self) -> None: FILE: libs/evals/tests/unit_tests/test_imports.py function test_placeholder (line 4) | def test_placeholder() -> None: FILE: libs/evals/tests/unit_tests/test_infra.py function _make_trajectory (line 24) | def _make_trajectory(observation_contents: list[str]) -> str: class TestClassifyFailure (line 60) | class TestClassifyFailure: method test_oom_exit_code (line 63) | def test_oom_exit_code(self): method test_timeout_exit_code (line 67) | def test_timeout_exit_code(self): method test_oom_pattern_in_exception (line 71) | def test_oom_pattern_in_exception(self): method test_timeout_pattern_in_exception (line 75) | def test_timeout_pattern_in_exception(self): method test_sandbox_pattern_in_exception (line 79) | def test_sandbox_pattern_in_exception(self): method test_sandbox_crashed_in_exception (line 83) | def test_sandbox_crashed_in_exception(self): method test_exit_code_takes_precedence_over_text (line 87) | def test_exit_code_takes_precedence_over_text(self): method test_capability_failure_default (line 92) | def test_capability_failure_default(self): method test_unknown_with_exception_no_infra_pattern (line 96) | def test_unknown_with_exception_no_infra_pattern(self): method test_multiple_exit_codes_first_match_wins (line 100) | def test_multiple_exit_codes_first_match_wins(self): method test_zero_exit_code_ignored (line 104) | def test_zero_exit_code_ignored(self): method test_case_insensitive_patterns (line 108) | def test_case_insensitive_patterns(self): method test_signal_9_pattern (line 112) | def test_signal_9_pattern(self): method test_no_exception_no_exit_codes_is_capability (line 116) | def test_no_exception_no_exit_codes_is_capability(self): method test_bare_killed_does_not_false_positive (line 120) | def test_bare_killed_does_not_false_positive(self): method test_bare_sandbox_does_not_false_positive (line 125) | def test_bare_sandbox_does_not_false_positive(self): class TestClassifyFailureNoTrajectoryLeakage (line 132) | class TestClassifyFailureNoTrajectoryLeakage: method test_model_discussing_oom_not_misclassified (line 135) | def test_model_discussing_oom_not_misclassified(self): method test_model_discussing_connection_refused_not_misclassified (line 140) | def test_model_discussing_connection_refused_not_misclassified(self): class TestExtractObservationTexts (line 147) | class TestExtractObservationTexts: method test_extracts_observation_content (line 150) | def test_extracts_observation_content(self): method test_ignores_agent_messages (line 155) | def test_ignores_agent_messages(self): method test_handles_content_part_list (line 168) | def test_handles_content_part_list(self): method test_invalid_json_returns_none (line 190) | def test_invalid_json_returns_none(self): method test_non_atif_json_returns_none (line 194) | def test_non_atif_json_returns_none(self): method test_empty_trajectory (line 198) | def test_empty_trajectory(self): class TestExtractExitCodes (line 203) | class TestExtractExitCodes: method test_json_field_in_observation (line 206) | def test_json_field_in_observation(self): method test_prose_format_in_observation (line 210) | def test_prose_format_in_observation(self): method test_zero_exit_code_filtered (line 214) | def test_zero_exit_code_filtered(self): method test_multiple_codes (line 218) | def test_multiple_codes(self): method test_empty_string (line 224) | def test_empty_string(self): method test_no_exit_codes (line 227) | def test_no_exit_codes(self): method test_exit_code_in_agent_message_ignored (line 231) | def test_exit_code_in_agent_message_ignored(self): method test_fallback_raw_for_non_atif (line 245) | def test_fallback_raw_for_non_atif(self): class TestWilsonCI (line 251) | class TestWilsonCI: method test_zero_trials (line 254) | def test_zero_trials(self): method test_all_successes (line 259) | def test_all_successes(self): method test_no_successes (line 264) | def test_no_successes(self): method test_half_success (line 269) | def test_half_success(self): method test_bounds_within_zero_one (line 274) | def test_bounds_within_zero_one(self): method test_small_sample (line 279) | def test_small_sample(self): class TestFormatCI (line 286) | class TestFormatCI: method test_basic_format (line 289) | def test_basic_format(self): method test_zero_trials (line 295) | def test_zero_trials(self): class TestMinDetectableEffect (line 300) | class TestMinDetectableEffect: method test_zero_total (line 303) | def test_zero_total(self): method test_larger_sample_smaller_mde (line 306) | def test_larger_sample_smaller_mde(self): method test_reasonable_range (line 311) | def test_reasonable_range(self): class TestInfraMetadata (line 317) | class TestInfraMetadata: method test_to_dict_all_fields (line 320) | def test_to_dict_all_fields(self): method test_to_dict_defaults (line 338) | def test_to_dict_defaults(self): class TestFailureCategoryIsInfrastructure (line 345) | class TestFailureCategoryIsInfrastructure: method test_infra_oom (line 348) | def test_infra_oom(self): method test_infra_timeout (line 351) | def test_infra_timeout(self): method test_infra_sandbox (line 354) | def test_infra_sandbox(self): method test_capability (line 357) | def test_capability(self): method test_unknown (line 360) | def test_unknown(self): class TestCollectHostMetadata (line 364) | class TestCollectHostMetadata: method test_returns_expected_keys (line 367) | def test_returns_expected_keys(self): class _FakeExecResult (line 376) | class _FakeExecResult: class _FakeEnvironment (line 380) | class _FakeEnvironment: class _FakeBackend (line 384) | class _FakeBackend(SandboxLike): method __init__ (line 389) | def __init__(self, responses: list[str | Exception]) -> None: method aexecute (line 394) | async def aexecute(self, command: str, *, timeout: int | None = None) ... class TestCollectSandboxMetadata (line 402) | class TestCollectSandboxMetadata: method test_happy_path (line 405) | async def test_happy_path(self): method test_non_numeric_output_sets_none (line 416) | async def test_non_numeric_output_sets_none(self): method test_partial_failure_still_collects (line 432) | async def test_partial_failure_still_collects(self): method test_all_commands_fail (line 448) | async def test_all_commands_fail(self): FILE: libs/evals/tests/unit_tests/test_radar.py function test_toy_data_covers_all_categories (line 23) | def test_toy_data_covers_all_categories(): function test_category_labels_cover_all_categories (line 32) | def test_category_labels_cover_all_categories(): function test_short_model_name_strips_provider (line 36) | def test_short_model_name_strips_provider(): function test_short_model_name_truncates_long (line 41) | def test_short_model_name_truncates_long(): function test_short_model_name_exact_boundary (line 45) | def test_short_model_name_exact_boundary(): function test_short_model_name_no_provider (line 50) | def test_short_model_name_no_provider(): function test_short_model_name_provider_and_long (line 54) | def test_short_model_name_provider_and_long(): function test_generate_radar_returns_figure (line 61) | def test_generate_radar_returns_figure(): function test_generate_radar_saves_to_file (line 68) | def test_generate_radar_saves_to_file(tmp_path): function test_generate_radar_saves_nested_directory (line 76) | def test_generate_radar_saves_nested_directory(tmp_path): function test_generate_radar_custom_categories (line 83) | def test_generate_radar_custom_categories(): function test_generate_radar_missing_scores_default_zero (line 89) | def test_generate_radar_missing_scores_default_zero(): function test_generate_radar_many_models_color_cycling (line 95) | def test_generate_radar_many_models_color_cycling(): function test_generate_individual_radars_creates_per_model_files (line 104) | def test_generate_individual_radars_creates_per_model_files(tmp_path): function test_generate_individual_radars_filenames_are_safe (line 114) | def test_generate_individual_radars_filenames_are_safe(tmp_path): function test_generate_individual_radars_single_model (line 125) | def test_generate_individual_radars_single_model(tmp_path): function test_safe_filename_replaces_colons (line 134) | def test_safe_filename_replaces_colons(): function test_safe_filename_replaces_slashes (line 138) | def test_safe_filename_replaces_slashes(): function test_safe_filename_empty_string (line 142) | def test_safe_filename_empty_string(): function test_safe_filename_only_special_chars (line 146) | def test_safe_filename_only_special_chars(): function test_load_results_from_summary_happy_path (line 153) | def test_load_results_from_summary_happy_path(tmp_path): function test_load_results_from_summary_missing_category_scores_raises (line 174) | def test_load_results_from_summary_missing_category_scores_raises(tmp_pa... function test_load_results_from_summary_missing_model_defaults (line 183) | def test_load_results_from_summary_missing_model_defaults(tmp_path): function test_load_results_from_summary_empty_array (line 192) | def test_load_results_from_summary_empty_array(tmp_path): function test_load_results_from_summary_file_not_found (line 200) | def test_load_results_from_summary_file_not_found(): function test_load_results_from_summary_invalid_json (line 205) | def test_load_results_from_summary_invalid_json(tmp_path): FILE: libs/partners/daytona/langchain_daytona/sandbox.py class DaytonaSandbox (line 23) | class DaytonaSandbox(BaseSandbox): method __init__ (line 30) | def __init__( method id (line 62) | def id(self) -> str: method execute (line 66) | def execute( method _execute_via_session_logs (line 86) | def _execute_via_session_logs( method download_files (line 136) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method upload_files (line 186) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... FILE: libs/partners/daytona/tests/integration_tests/test_integration.py class TestDaytonaSandboxStandard (line 17) | class TestDaytonaSandboxStandard(SandboxIntegrationTests): method sandbox (line 19) | def sandbox(self) -> Iterator[SandboxBackendProtocol]: FILE: libs/partners/daytona/tests/test_import.py function test_import_daytona (line 6) | def test_import_daytona() -> None: FILE: libs/partners/daytona/tests/unit_tests/test_import.py function _make_sandbox (line 18) | def _make_sandbox( function test_import_daytona (line 31) | def test_import_daytona() -> None: function test_execute_returns_stdout (line 35) | def test_execute_returns_stdout() -> None: function test_execute_polls_with_fixed_interval (line 52) | def test_execute_polls_with_fixed_interval() -> None: function test_execute_polls_with_callable_interval (line 71) | def test_execute_polls_with_callable_interval() -> None: function test_execute_timeout (line 111) | def test_execute_timeout() -> None: FILE: libs/partners/modal/langchain_modal/sandbox.py class ModalSandbox (line 16) | class ModalSandbox(BaseSandbox): method __init__ (line 19) | def __init__(self, *, sandbox: modal.Sandbox) -> None: method _read_file (line 24) | def _read_file(self, path: str) -> FileDownloadResponse: method _write_file (line 53) | def _write_file(self, path: str, content: bytes) -> FileUploadResponse: method id (line 71) | def id(self) -> str: method execute (line 75) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... method download_files (line 107) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method upload_files (line 111) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... FILE: libs/partners/modal/tests/integration_tests/test_integration.py class TestModalSandboxStandard (line 18) | class TestModalSandboxStandard(SandboxIntegrationTests): method sandbox (line 20) | def sandbox(self) -> Iterator[SandboxBackendProtocol]: function _create_modal_sandbox (line 38) | def _create_modal_sandbox() -> modal.Sandbox: FILE: libs/partners/modal/tests/test_import.py function test_import_modal (line 4) | def test_import_modal() -> None: FILE: libs/partners/modal/tests/unit_tests/test_import.py function test_import_modal (line 6) | def test_import_modal() -> None: FILE: libs/partners/quickjs/langchain_quickjs/_foreign_function_docs.py function _format_basic_annotation (line 24) | def _format_basic_annotation(annotation: Any) -> str | None: function _format_collection_annotation (line 43) | def _format_collection_annotation(origin: Any, args: tuple[Any, ...]) ->... function _format_generic_annotation (line 59) | def _format_generic_annotation(origin: Any, args: tuple[Any, ...]) -> st... function _format_stringified_annotation (line 73) | def _format_stringified_annotation(annotation: Any) -> str: function _format_annotation (line 83) | def _format_annotation(annotation: Any) -> str: function _unwrap_typed_dict_annotation (line 112) | def _unwrap_typed_dict_annotation(annotation: Any) -> tuple[Any, str]: function _is_not_required_annotation (line 128) | def _is_not_required_annotation(annotation: Any) -> bool: function _typed_dict_key_sets (line 137) | def _typed_dict_key_sets( function _render_typed_dict_fields (line 158) | def _render_typed_dict_fields( function _format_typed_dict_structure (line 176) | def _format_typed_dict_structure(annotation: Any) -> str | None: function render_external_functions_section (line 196) | def render_external_functions_section( function _get_tool_doc_target (line 210) | def _get_tool_doc_target(tool: BaseTool) -> Callable[..., Any] | None: function _get_foreign_function_mode (line 229) | def _get_foreign_function_mode(implementation: Callable[..., Any] | Base... function _get_return_annotation (line 237) | def _get_return_annotation(target: Callable[..., Any]) -> Any: function _render_jsdoc (line 246) | def _render_jsdoc(doc: str) -> str: function _render_function_stub (line 278) | def _render_function_stub( function _collect_referenced_types (line 336) | def _collect_referenced_types( function _render_typed_dict_definition (line 377) | def _render_typed_dict_definition(annotation: type[Any]) -> str: function render_foreign_function_section (line 398) | def render_foreign_function_section( function format_foreign_function_docs (line 435) | def format_foreign_function_docs( FILE: libs/partners/quickjs/langchain_quickjs/_foreign_functions.py class _AsyncLoopThread (line 32) | class _AsyncLoopThread: method __init__ (line 35) | def __init__(self) -> None: method _run (line 42) | def _run(self) -> None: method submit (line 49) | def submit(self, coroutine: Coroutine[Any, Any, Any]) -> Future[Any]: function _await_if_needed (line 60) | def _await_if_needed(value: Any) -> Any: function _invoke_tool (line 67) | def _invoke_tool( function get_ptc_implementations (line 85) | def get_ptc_implementations( function _get_runtime_arg_name (line 100) | def _get_runtime_arg_name(tool: BaseTool) -> str | None: function _build_tool_payload (line 108) | def _build_tool_payload( function _wrap_tool_for_js (line 147) | def _wrap_tool_for_js( function _serialize_for_js (line 162) | def _serialize_for_js(value: Any) -> Any: function _wrap_function_for_js (line 169) | def _wrap_function_for_js(implementation: Callable[..., Any]) -> Callabl... function _raw_function_name (line 178) | def _raw_function_name(name: str) -> str: function _build_external_functions (line 183) | def _build_external_functions( function inject_external_function_shims (line 220) | def inject_external_function_shims( function install_external_functions (line 239) | def install_external_functions( FILE: libs/partners/quickjs/langchain_quickjs/middleware.py class QuickJSMiddleware (line 54) | class QuickJSMiddleware(AgentMiddleware[AgentState[Any], ContextT, Respo... method __init__ (line 57) | def __init__( method _format_repl_system_prompt (line 80) | def _format_repl_system_prompt(self) -> str: method modify_request (line 90) | def modify_request(self, request: ModelRequest[ContextT]) -> ModelRequ... method wrap_model_call (line 98) | def wrap_model_call( method awrap_model_call (line 107) | async def awrap_model_call( method _create_context (line 118) | def _create_context( method _evaluate (line 149) | def _evaluate( method _create_repl_tool (line 185) | def _create_repl_tool(self) -> BaseTool: FILE: libs/partners/quickjs/tests/unit_tests/chat_model.py class GenericFakeChatModel (line 19) | class GenericFakeChatModel(BaseChatModel): method __init__ (line 83) | def __init__(self, **kwargs: Any) -> None: method bind_tools (line 87) | def bind_tools( method _generate (line 98) | def _generate( method _stream (line 113) | def _stream( method _llm_type (line 158) | def _llm_type(self) -> str: FILE: libs/partners/quickjs/tests/unit_tests/smoke_tests/conftest.py function pytest_addoption (line 8) | def pytest_addoption(parser: pytest.Parser) -> None: function snapshots_dir (line 18) | def snapshots_dir() -> Path: function update_snapshots (line 25) | def update_snapshots(request: pytest.FixtureRequest) -> bool: FILE: libs/partners/quickjs/tests/unit_tests/smoke_tests/test_system_prompt.py class UserLookup (line 18) | class UserLookup(TypedDict): function find_users_by_name (line 24) | def find_users_by_name(name: str) -> list[UserLookup]: function get_user_location (line 34) | def get_user_location(user_id: int) -> int: function get_city_for_location (line 44) | def get_city_for_location(location_id: int) -> str: function normalize_name (line 53) | def normalize_name(name: str) -> str: function fetch_weather (line 58) | async def fetch_weather(city: str) -> str: function _system_message_as_text (line 63) | def _system_message_as_text(message: SystemMessage) -> str: function _assert_snapshot (line 73) | def _assert_snapshot( function _capture_system_prompt (line 87) | def _capture_system_prompt(middleware: QuickJSMiddleware) -> str: function test_system_prompt_snapshot_no_tools (line 95) | def test_system_prompt_snapshot_no_tools( function test_system_prompt_snapshot_with_mixed_foreign_functions (line 103) | def test_system_prompt_snapshot_with_mixed_foreign_functions( FILE: libs/partners/quickjs/tests/unit_tests/test_end_to_end.py function test_deepagent_with_quickjs_interpreter (line 16) | def test_deepagent_with_quickjs_interpreter() -> None: function foo_tool (line 58) | def foo_tool(value: str) -> str: function test_quickjs_tool_single_arg_foreign_function (line 63) | def test_quickjs_tool_single_arg_foreign_function() -> None: function join_tool (line 100) | def join_tool(left: str, right: str) -> str: function list_numbers (line 106) | def list_numbers(limit: int) -> list[int]: function list_user_ids (line 112) | def list_user_ids() -> list[str]: function get_user_profile (line 118) | def get_user_profile() -> dict[str, str | int]: function runtime_marker (line 124) | def runtime_marker(value: str, runtime: ToolRuntime) -> str: function runtime_configurable (line 132) | def runtime_configurable(value: str, runtime: ToolRuntime) -> str: function test_quickjs_tool_multi_arg_foreign_function (line 137) | def test_quickjs_tool_multi_arg_foreign_function() -> None: function test_quickjs_tool_list_of_ints_foreign_function (line 175) | def test_quickjs_tool_list_of_ints_foreign_function() -> None: function test_quickjs_tool_json_stringify_foreign_function (line 213) | def test_quickjs_tool_json_stringify_foreign_function() -> None: function test_quickjs_toolruntime_foreign_function (line 262) | def test_quickjs_toolruntime_foreign_function() -> None: function test_quickjs_memory_limit_error (line 298) | def test_quickjs_memory_limit_error() -> None: function test_quickjs_timeout_error (line 349) | def test_quickjs_timeout_error() -> None: function test_quickjs_toolruntime_configurable_foreign_function (line 391) | def test_quickjs_toolruntime_configurable_foreign_function() -> None: function test_quickjs_parallel_agents_across_threads (line 432) | def test_quickjs_parallel_agents_across_threads() -> None: function test_quickjs_tool_dict_foreign_function (line 483) | def test_quickjs_tool_dict_foreign_function() -> None: FILE: libs/partners/quickjs/tests/unit_tests/test_end_to_end_async.py function list_user_ids (line 18) | def list_user_ids() -> list[str]: function sync_label_tool (line 24) | def sync_label_tool(value: str) -> str: function async_label_tool (line 30) | async def async_label_tool(value: str) -> str: function runtime_configurable (line 37) | def runtime_configurable(value: str, runtime: ToolRuntime) -> str: function async_uppercase (line 42) | async def async_uppercase(value: str) -> str: function capture_thread_name (line 48) | async def capture_thread_name() -> str: function async_boom (line 54) | async def async_boom() -> str: function test_deepagent_with_quickjs_interpreter (line 61) | async def test_deepagent_with_quickjs_interpreter() -> None: function test_deepagent_with_quickjs_json_stringify_foreign_function (line 102) | async def test_deepagent_with_quickjs_json_stringify_foreign_function() ... function test_deepagent_with_quickjs_async_foreign_function (line 150) | async def test_deepagent_with_quickjs_async_foreign_function() -> None: function test_quickjs_async_langchain_tool (line 198) | async def test_quickjs_async_langchain_tool() -> None: function test_quickjs_async_timeout_error (line 246) | async def test_quickjs_async_timeout_error() -> None: function test_quickjs_async_tool_exception (line 288) | async def test_quickjs_async_tool_exception() -> None: function test_quickjs_async_toolruntime_configurable_foreign_function (line 327) | async def test_quickjs_async_toolruntime_configurable_foreign_function()... function test_quickjs_async_foreign_function_runs_on_daemon_loop_thread (line 368) | async def test_quickjs_async_foreign_function_runs_on_daemon_loop_thread... function test_quickjs_async_parallel_agents (line 407) | async def test_quickjs_async_parallel_agents() -> None: FILE: libs/partners/quickjs/tests/unit_tests/test_foreign_function_docs.py class UserLookup (line 24) | class UserLookup(TypedDict): class OptionalUserLookup (line 29) | class OptionalUserLookup(TypedDict): class NameRecord (line 34) | class NameRecord(BaseModel): function find_users_by_name (line 39) | def find_users_by_name(name: str) -> list[UserLookup]: function get_user_location (line 49) | def get_user_location(user_id: int) -> int: function get_city_for_location (line 59) | def get_city_for_location(location_id: int) -> str: function combine_user_details (line 69) | def combine_user_details(name: str, city: str, active: bool) -> str: function greet_user (line 81) | def greet_user(name: str) -> str: function normalize_name (line 86) | def normalize_name(name: str) -> str: function fetch_weather (line 91) | async def fetch_weather(city: str) -> str: function summarize_lookup (line 96) | def summarize_lookup(user: OptionalUserLookup) -> dict[str, str]: function no_doc (line 100) | def no_doc(value: int): class BareTool (line 104) | class BareTool(BaseTool): method _run (line 108) | def _run(self, *args: Any, **kwargs: Any) -> str: function async_tool (line 113) | async def async_tool(city: str) -> str: function test_format_foreign_function_docs_for_plain_function (line 118) | def test_format_foreign_function_docs_for_plain_function() -> None: function test_format_foreign_function_docs_for_tool_with_args_and_return_type (line 128) | def test_format_foreign_function_docs_for_tool_with_args_and_return_type... function test_format_foreign_function_docs_for_async_function (line 140) | def test_format_foreign_function_docs_for_async_function() -> None: function test_format_foreign_function_docs_for_three_arg_tool (line 150) | def test_format_foreign_function_docs_for_three_arg_tool() -> None: function test_format_foreign_function_docs_for_single_line_tool_docstring (line 164) | def test_format_foreign_function_docs_for_single_line_tool_docstring() -... function test_format_annotation_handles_additional_shapes (line 174) | def test_format_annotation_handles_additional_shapes() -> None: function test_get_ptc_implementations_and_external_section_without_docs (line 196) | def test_get_ptc_implementations_and_external_section_without_docs() -> ... function test_render_external_functions_section_with_docs (line 210) | def test_render_external_functions_section_with_docs() -> None: function test_format_typed_dict_structure_variants (line 216) | def test_format_typed_dict_structure_variants() -> None: function test_render_typed_dict_definition_and_referenced_type_filtering (line 232) | def test_render_typed_dict_definition_and_referenced_type_filtering() ->... function test_format_foreign_function_docs_fallbacks (line 249) | def test_format_foreign_function_docs_fallbacks() -> None: function test_get_return_annotation_without_hints (line 264) | def test_get_return_annotation_without_hints() -> None: function test_render_foreign_function_section (line 268) | def test_render_foreign_function_section() -> None: FILE: libs/partners/quickjs/tests/unit_tests/test_import.py function test_version_matches_pyproject (line 8) | def test_version_matches_pyproject() -> None: FILE: libs/partners/quickjs/tests/unit_tests/test_system_prompt.py class UserLookup (line 14) | class UserLookup(TypedDict): function find_users_by_name (line 20) | def find_users_by_name(name: str) -> list[UserLookup]: function get_user_location (line 30) | def get_user_location(user_id: int) -> int: function get_city_for_location (line 40) | def get_city_for_location(location_id: int) -> str: function normalize_name (line 49) | def normalize_name(name: str) -> str: function fetch_weather (line 54) | async def fetch_weather(city: str) -> str: function _system_message_as_text (line 59) | def _system_message_as_text(message: SystemMessage) -> str: function test_system_prompt_includes_rendered_foreign_function_docs (line 69) | def test_system_prompt_includes_rendered_foreign_function_docs() -> None: FILE: libs/partners/runloop/langchain_runloop/sandbox.py class RunloopSandbox (line 18) | class RunloopSandbox(BaseSandbox): method __init__ (line 21) | def __init__( method id (line 32) | def id(self) -> str: method execute (line 36) | def execute(self, command: str, *, timeout: int | None = None) -> Exec... method download_files (line 62) | def download_files(self, paths: list[str]) -> list[FileDownloadResponse]: method upload_files (line 72) | def upload_files(self, files: list[tuple[str, bytes]]) -> list[FileUpl... FILE: libs/partners/runloop/tests/integration_tests/test_integration.py class TestRunloopSandboxStandard (line 22) | class TestRunloopSandboxStandard(SandboxIntegrationTests): method sandbox (line 24) | def sandbox(self) -> Iterator[SandboxBackendProtocol]: function _create_runloop_devbox (line 38) | def _create_runloop_devbox(*, api_key: str) -> tuple[Runloop, Devbox]: FILE: libs/partners/runloop/tests/test_import.py function test_import_runloop (line 4) | def test_import_runloop() -> None: FILE: libs/partners/runloop/tests/unit_tests/test_import.py function test_import_runloop (line 6) | def test_import_runloop() -> None: