SYMBOL INDEX (3245 symbols across 50 files) FILE: build.rs function main (line 1) | fn main() { FILE: scripts/build_site.py function read_file (line 13) | def read_file(name): function md_inline (line 21) | def md_inline(text): function parse_journal (line 33) | def parse_journal(content): function parse_identity (line 52) | def parse_identity(content): function render_entry_body (line 84) | def render_entry_body(body): function render_journal (line 111) | def render_journal(entries): function render_identity (line 140) | def render_identity(identity): function build (line 640) | def build(): FILE: scripts/extract_trajectory.py function warn (line 41) | def warn(msg: str) -> None: function run_cmd (line 45) | def run_cmd(cmd: list[str], timeout: int = 10) -> tuple[int, str, str]: function strip_ansi (line 74) | def strip_ansi(s: str) -> str: function truncate_lines (line 78) | def truncate_lines(s: str, n: int) -> str: function load_outcomes (line 88) | def load_outcomes(audit_dir: Path) -> list[dict]: function render_outcomes (line 118) | def render_outcomes(outcomes: list[dict]) -> str: function collect_task_commits (line 169) | def collect_task_commits() -> tuple[list[tuple[int, str]], int]: function render_task_success (line 189) | def render_task_success(tasks: list[tuple[int, str]]) -> str: function render_reverts (line 227) | def render_reverts(reverts: int, total_sessions: int) -> str: function fingerprint_error_line (line 241) | def fingerprint_error_line(line: str) -> str: function collect_failed_ci_fingerprints (line 254) | def collect_failed_ci_fingerprints(repo: str) -> list[tuple[str, list[st... function render_ci_errors (line 308) | def render_ci_errors(clusters: list[tuple[str, list[str]]]) -> str: function collect_provider_errors (line 330) | def collect_provider_errors(audit_dir: Path) -> tuple[int, int]: function render_provider_health (line 364) | def render_provider_health(sessions: int, hits: int) -> str: function main (line 375) | def main() -> int: FILE: scripts/format_discussions.py function generate_boundary (line 26) | def generate_boundary(): function strip_html_comments (line 32) | def strip_html_comments(text): function sanitize_content (line 37) | def sanitize_content(text, boundary_begin, boundary_end): function run_graphql (line 45) | def run_graphql(query): function fetch_discussions (line 61) | def fetch_discussions(repo): function _bot_logins (line 152) | def _bot_logins(bot_username): function classify_discussion (line 158) | def classify_discussion(discussion, bot_username): function select_discussions (line 205) | def select_discussions(discussions, bot_username, day=0): function format_discussions (line 266) | def format_discussions(discussions, bot_username): FILE: scripts/format_issues.py function compute_net_score (line 11) | def compute_net_score(reaction_groups): function generate_boundary (line 24) | def generate_boundary(): function strip_html_comments (line 34) | def strip_html_comments(text): function sanitize_content (line 39) | def sanitize_content(text, boundary_begin, boundary_end): function select_issues (line 47) | def select_issues(issues, sponsor_logins=None, pick=2, day=0): function _is_bot (line 95) | def _is_bot(comment): function classify_issue (line 105) | def classify_issue(issue): function format_issues (line 133) | def format_issues(issues, sponsor_logins=None, pick=2, day=0): FILE: scripts/lint_evolve_heredocs.py function find_param_expansion_blocks (line 24) | def find_param_expansion_blocks(src): function main (line 56) | def main(): FILE: scripts/refresh_sponsors.py class FetchFailed (line 68) | class FetchFailed(Exception): function warn (line 72) | def warn(msg): function err (line 76) | def err(msg): function load_raw_nodes (line 80) | def load_raw_nodes(path): function recurring_benefits (line 126) | def recurring_benefits(monthly_cents): function onetime_benefits (line 140) | def onetime_benefits(total_cents): function split_nodes (line 156) | def split_nodes(nodes): function load_json_or_default (line 175) | def load_json_or_default(path, default): function _compute_benefit_expires (line 192) | def _compute_benefit_expires(total_cents, first_seen): function _extract_onetime (line 214) | def _extract_onetime(entry): function build_sponsor_info (line 230) | def build_sponsor_info(recurring, onetime_from_api, existing_state, today): function update_sponsors_md (line 336) | def update_sponsors_md(sponsor_info, path=SPONSORS_MD): function render_readme_block (line 399) | def render_readme_block(sponsor_info): function update_readme (line 456) | def update_readme(sponsor_info, path=README_MD): function write_active_json (line 499) | def write_active_json(sponsor_info, path=ACTIVE_FILE): function create_shoutout_issues (line 519) | def create_shoutout_issues(sponsor_info): function _maybe_shoutout (line 544) | def _maybe_shoutout(login, entry): function _gh_available (line 617) | def _gh_available(): function _atomic_write_text (line 625) | def _atomic_write_text(path, text): function write_json (line 641) | def write_json(path, data): function _onetime_with_unused_run (line 646) | def _onetime_with_unused_run(sponsor_info): function main (line 661) | def main(): FILE: scripts/skill_evolve_report.py function parse_frontmatter (line 32) | def parse_frontmatter(path: Path) -> dict: function load_skills (line 60) | def load_skills() -> list[dict]: function parse_journal_events (line 76) | def parse_journal_events() -> list[dict]: function load_audit_outcomes (line 117) | def load_audit_outcomes() -> tuple[list[dict], str]: function load_learnings (line 143) | def load_learnings() -> list[dict]: function days_ago (line 163) | def days_ago(ts_str: str) -> int | None: function section (line 176) | def section(title: str) -> None: function report_skills (line 181) | def report_skills(skills: list[dict]) -> None: function report_events (line 206) | def report_events(events: list[dict]) -> None: function report_outcomes (line 227) | def report_outcomes(outcomes: list[dict], status: str) -> None: function report_recurrence (line 251) | def report_recurrence(learnings: list[dict]) -> None: function main (line 283) | def main() -> int: FILE: src/cli.rs constant VERSION (line 10) | pub const VERSION: &str = env!("CARGO_PKG_VERSION"); constant DEFAULT_CONTEXT_TOKENS (line 11) | pub const DEFAULT_CONTEXT_TOKENS: u64 = 200_000; constant AUTO_COMPACT_THRESHOLD (line 12) | pub const AUTO_COMPACT_THRESHOLD: f64 = 0.80; constant PROACTIVE_COMPACT_THRESHOLD (line 13) | pub const PROACTIVE_COMPACT_THRESHOLD: f64 = 0.70; function set_effective_context_tokens (line 22) | pub fn set_effective_context_tokens(tokens: u64) { function effective_context_tokens (line 27) | pub fn effective_context_tokens() -> u64 { constant DEFAULT_SESSION_PATH (line 30) | pub const DEFAULT_SESSION_PATH: &str = "yoyo-session.json"; constant AUTO_SAVE_SESSION_PATH (line 31) | pub const AUTO_SAVE_SESSION_PATH: &str = ".yoyo/last-session.json"; constant SYSTEM_PROMPT (line 33) | pub const SYSTEM_PROMPT: &str = r#"You are a coding assistant working in... type ContextStrategy (line 47) | pub enum ContextStrategy { type Config (line 62) | pub struct Config { function enable_verbose (line 101) | pub fn enable_verbose() { function is_verbose (line 106) | pub fn is_verbose() -> bool { function print_help (line 113) | pub fn print_help() { function help_text (line 122) | pub fn help_text() -> String { function print_banner (line 126) | pub fn print_banner() { function parse_thinking_level (line 140) | pub fn parse_thinking_level(s: &str) -> ThinkingLevel { function clamp_temperature (line 158) | pub fn clamp_temperature(t: f32) -> f32 { constant KNOWN_FLAGS (line 171) | const KNOWN_FLAGS: &[&str] = &[ function warn_unknown_flags (line 221) | pub fn warn_unknown_flags(args: &[String], flags_needing_values: &[&str]) { constant CONFIG_FILE_NAMES (line 244) | const CONFIG_FILE_NAMES: &[&str] = &[".yoyo.toml"]; function user_config_path (line 246) | pub fn user_config_path() -> Option { function home_config_path (line 251) | pub fn home_config_path() -> Option { function dirs_hint (line 258) | fn dirs_hint() -> Option { function data_dir_hint (line 270) | fn data_dir_hint() -> Option { function history_file_path (line 283) | pub fn history_file_path() -> Option { function parse_config_file (line 300) | pub fn parse_config_file(content: &str) -> HashMap { function resolve_system_prompt (line 331) | pub fn resolve_system_prompt( function load_config_file (line 370) | pub(crate) fn load_config_file() -> (HashMap, String) { function parse_numeric_flag (line 406) | fn parse_numeric_flag( function collect_repeatable_flag (line 429) | pub(crate) fn collect_repeatable_flag(args: &[String], flag: &str) -> Ve... type ModelConfig (line 438) | struct ModelConfig { function parse_model_config (line 448) | fn parse_model_config( type OutputFlags (line 542) | struct OutputFlags { function parse_output_flags (line 553) | fn parse_output_flags(args: &[String], file_config: &HashMap Option { function get_welcome_text (line 917) | pub fn get_welcome_text() -> String { function print_welcome (line 949) | pub fn print_welcome() { function test_version_constant_exists (line 959) | fn test_version_constant_exists() { function help_text_documents_all_subcommands (line 967) | fn help_text_documents_all_subcommands() { function help_text_documents_all_repl_commands (line 1016) | fn help_text_documents_all_repl_commands() { function test_parse_thinking_level (line 1035) | fn test_parse_thinking_level() { function test_system_flag_parsing (line 1053) | fn test_system_flag_parsing() { function test_system_flag_missing (line 1068) | fn test_system_flag_missing() { function test_system_file_flag (line 1079) | fn test_system_file_flag() { function test_continue_flag_parsing (line 1094) | fn test_continue_flag_parsing() { function test_prompt_flag_parsing (line 1106) | fn test_prompt_flag_parsing() { function test_output_flag_parsing (line 1141) | fn test_output_flag_parsing() { function test_default_session_path (line 1176) | fn test_default_session_path() { function test_auto_compact_threshold_constants (line 1181) | fn test_auto_compact_threshold_constants() { function test_proactive_threshold_lower_than_auto (line 1188) | fn test_proactive_threshold_lower_than_auto() { function test_max_tokens_flag_parsing (line 1198) | fn test_max_tokens_flag_parsing() { function test_max_tokens_flag_missing (line 1210) | fn test_max_tokens_flag_missing() { function test_max_tokens_flag_invalid (line 1218) | fn test_max_tokens_flag_invalid() { function test_no_color_flag_recognized (line 1230) | fn test_no_color_flag_recognized() { function test_no_bell_flag_recognized (line 1236) | fn test_no_bell_flag_recognized() { function test_quiet_flag_recognized (line 1243) | fn test_quiet_flag_recognized() { function test_quiet_short_flag_recognized (line 1250) | fn test_quiet_short_flag_recognized() { function test_parse_config_file_basic (line 1257) | fn test_parse_config_file_basic() { function test_parse_config_file_comments_and_blanks (line 1270) | fn test_parse_config_file_comments_and_blanks() { function test_parse_config_file_no_quotes (line 1285) | fn test_parse_config_file_no_quotes() { function test_parse_config_file_single_quotes (line 1293) | fn test_parse_config_file_single_quotes() { function test_parse_config_file_empty (line 1300) | fn test_parse_config_file_empty() { function test_parse_config_file_whitespace_handling (line 1306) | fn test_parse_config_file_whitespace_handling() { function test_parse_config_file_mcp_array (line 1313) | fn test_parse_config_file_mcp_array() { function test_parse_config_file_mcp_empty_array (line 1327) | fn test_parse_config_file_mcp_empty_array() { function test_parse_config_file_mcp_single_entry (line 1336) | fn test_parse_config_file_mcp_single_entry() { function test_temperature_flag_parsing (line 1346) | fn test_temperature_flag_parsing() { function test_temperature_flag_missing (line 1358) | fn test_temperature_flag_missing() { function test_temperature_flag_invalid (line 1366) | fn test_temperature_flag_invalid() { function test_verbose_flag_parsing (line 1378) | fn test_verbose_flag_parsing() { function test_clamp_temperature_in_range (line 1390) | fn test_clamp_temperature_in_range() { function test_clamp_temperature_below_zero (line 1397) | fn test_clamp_temperature_below_zero() { function test_clamp_temperature_above_one (line 1403) | fn test_clamp_temperature_above_one() { function test_known_flags_contains_all_flags (line 1409) | fn test_known_flags_contains_all_flags() { function test_warn_unknown_flags_no_panic (line 1440) | fn test_warn_unknown_flags_no_panic() { function test_api_key_flag_parsing (line 1459) | fn test_api_key_flag_parsing() { function test_api_key_flag_missing (line 1474) | fn test_api_key_flag_missing() { function test_api_key_flag_in_known_flags (line 1485) | fn test_api_key_flag_in_known_flags() { function test_api_key_from_config_file (line 1493) | fn test_api_key_from_config_file() { function test_home_config_path_returns_yoyo_toml_in_home (line 1500) | fn test_home_config_path_returns_yoyo_toml_in_home() { function test_home_config_path_file_is_loadable (line 1518) | fn test_home_config_path_file_is_loadable() { function test_config_precedence_project_over_home (line 1535) | fn test_config_precedence_project_over_home() { function test_config_search_order_documented (line 1558) | fn test_config_search_order_documented() { function test_help_text_mentions_home_config (line 1586) | fn test_help_text_mentions_home_config() { function help_text_documents_session_budget_env_var (line 1600) | fn help_text_documents_session_budget_env_var() { function help_text_documents_known_env_vars (line 1612) | fn help_text_documents_known_env_vars() { function test_history_file_path_returns_some (line 1627) | fn test_history_file_path_returns_some() { function test_history_file_path_prefers_xdg (line 1646) | fn test_history_file_path_prefers_xdg() { function test_data_dir_hint_returns_path (line 1661) | fn test_data_dir_hint_returns_path() { function test_glob_match_exact (line 1672) | fn test_glob_match_exact() { function test_glob_match_wildcard_suffix (line 1679) | fn test_glob_match_wildcard_suffix() { function test_glob_match_wildcard_prefix (line 1687) | fn test_glob_match_wildcard_prefix() { function test_glob_match_wildcard_middle (line 1694) | fn test_glob_match_wildcard_middle() { function test_glob_match_multiple_wildcards (line 1701) | fn test_glob_match_multiple_wildcards() { function test_glob_match_star_only (line 1709) | fn test_glob_match_star_only() { function test_glob_match_empty_pattern (line 1716) | fn test_glob_match_empty_pattern() { function test_glob_match_rm_rf (line 1722) | fn test_glob_match_rm_rf() { function test_permission_config_check_allow (line 1730) | fn test_permission_config_check_allow() { function test_permission_config_check_deny (line 1741) | fn test_permission_config_check_deny() { function test_permission_config_deny_overrides_allow (line 1752) | fn test_permission_config_deny_overrides_allow() { function test_permission_config_empty (line 1764) | fn test_permission_config_empty() { function test_parse_toml_array_basic (line 1771) | fn test_parse_toml_array_basic() { function test_parse_toml_array_single (line 1777) | fn test_parse_toml_array_single() { function test_parse_toml_array_empty (line 1783) | fn test_parse_toml_array_empty() { function test_parse_toml_array_single_quotes (line 1789) | fn test_parse_toml_array_single_quotes() { function test_parse_toml_array_not_array (line 1795) | fn test_parse_toml_array_not_array() { function test_parse_permissions_from_config (line 1801) | fn test_parse_permissions_from_config() { function test_parse_permissions_from_config_no_section (line 1816) | fn test_parse_permissions_from_config_no_section() { function test_parse_permissions_from_config_empty_section (line 1826) | fn test_parse_permissions_from_config_empty_section() { function test_parse_permissions_from_config_only_allow (line 1835) | fn test_parse_permissions_from_config_only_allow() { function test_parse_permissions_from_config_other_section_after (line 1846) | fn test_parse_permissions_from_config_other_section_after() { function test_permission_config_realistic_scenario (line 1860) | fn test_permission_config_realistic_scenario() { function test_allow_deny_flags_parsing (line 1892) | fn test_allow_deny_flags_parsing() { function test_openapi_flag_parsing_single (line 1919) | fn test_openapi_flag_parsing_single() { function test_openapi_flag_parsing_multiple (line 1935) | fn test_openapi_flag_parsing_multiple() { function test_openapi_flag_in_known_flags (line 1955) | fn test_openapi_flag_in_known_flags() { function test_directory_restrictions_empty_allows_everything (line 1965) | fn test_directory_restrictions_empty_allows_everything() { function test_directory_restrictions_deny_blocks_path (line 1973) | fn test_directory_restrictions_deny_blocks_path() { function test_directory_restrictions_allow_restricts_to_listed (line 1985) | fn test_directory_restrictions_allow_restricts_to_listed() { function test_directory_restrictions_deny_overrides_allow (line 2003) | fn test_directory_restrictions_deny_overrides_allow() { function test_directory_restrictions_parent_dir_escape_blocked (line 2023) | fn test_directory_restrictions_parent_dir_escape_blocked() { function test_directory_restrictions_relative_paths (line 2039) | fn test_directory_restrictions_relative_paths() { function test_directory_restrictions_exact_dir_match (line 2056) | fn test_directory_restrictions_exact_dir_match() { function test_parse_directories_from_config (line 2070) | fn test_parse_directories_from_config() { function test_parse_directories_from_config_no_section (line 2084) | fn test_parse_directories_from_config_no_section() { function test_parse_directories_from_config_does_not_interfere_with_permissions (line 2093) | fn test_parse_directories_from_config_does_not_interfere_with_permission... function test_allow_dir_deny_dir_flags_parsing (line 2112) | fn test_allow_dir_deny_dir_flags_parsing() { function test_allow_dir_deny_dir_in_known_flags (line 2139) | fn test_allow_dir_deny_dir_in_known_flags() { function test_print_welcome_contains_key_phrases (line 2151) | fn test_print_welcome_contains_key_phrases() { function test_print_welcome_mentions_setup_steps (line 2177) | fn test_print_welcome_mentions_setup_steps() { function test_print_welcome_mentions_other_providers (line 2189) | fn test_print_welcome_mentions_other_providers() { function test_config_system_prompt_key (line 2208) | fn test_config_system_prompt_key() { function test_config_system_file_key (line 2223) | fn test_config_system_file_key() { function test_config_system_file_overrides_system_prompt (line 2248) | fn test_config_system_file_overrides_system_prompt() { function test_cli_system_overrides_config (line 2267) | fn test_cli_system_overrides_config() { function test_cli_system_file_overrides_config (line 2279) | fn test_cli_system_file_overrides_config() { function test_resolve_system_prompt_default (line 2298) | fn test_resolve_system_prompt_default() { function test_cli_system_overrides_config_system_file (line 2305) | fn test_cli_system_overrides_config_system_file() { function test_welcome_text_mentions_bedrock (line 2324) | fn test_welcome_text_mentions_bedrock() { function test_context_strategy_default_is_compaction (line 2333) | fn test_context_strategy_default_is_compaction() { function test_context_strategy_parses_checkpoint (line 2339) | fn test_context_strategy_parses_checkpoint() { function test_context_strategy_parses_compaction_explicit (line 2352) | fn test_context_strategy_parses_compaction_explicit() { function test_context_strategy_unknown_defaults_to_compaction (line 2364) | fn test_context_strategy_unknown_defaults_to_compaction() { function test_context_strategy_absent_defaults_to_compaction (line 2372) | fn test_context_strategy_absent_defaults_to_compaction() { function test_context_strategy_in_known_flags (line 2380) | fn test_context_strategy_in_known_flags() { function test_fallback_in_known_flags (line 2388) | fn test_fallback_in_known_flags() { function test_parse_fallback_flag (line 2396) | fn test_parse_fallback_flag() { function test_parse_fallback_missing (line 2408) | fn test_parse_fallback_missing() { function test_parse_fallback_case_insensitive (line 2417) | fn test_parse_fallback_case_insensitive() { function test_parse_fallback_derives_model (line 2425) | fn test_parse_fallback_derives_model() { function test_no_update_check_flag_recognized (line 2434) | fn test_no_update_check_flag_recognized() { function test_no_update_check_flag_parsed (line 2439) | fn test_no_update_check_flag_parsed() { function test_no_update_check_default_false (line 2451) | fn test_no_update_check_default_false() { function test_json_flag_in_known_flags (line 2466) | fn test_json_flag_in_known_flags() { function test_parse_args_json_flag (line 2471) | fn test_parse_args_json_flag() { function test_parse_args_json_default (line 2483) | fn test_parse_args_json_default() { function test_audit_flag_in_known_flags (line 2494) | fn test_audit_flag_in_known_flags() { function test_parse_args_audit_flag (line 2499) | fn test_parse_args_audit_flag() { function test_parse_args_audit_default_false (line 2511) | fn test_parse_args_audit_default_false() { function test_print_system_prompt_flag_parsed (line 2526) | fn test_print_system_prompt_flag_parsed() { function test_print_system_prompt_flag_default_false (line 2534) | fn test_print_system_prompt_flag_default_false() { function test_mcp_server_config_struct (line 2542) | fn test_mcp_server_config_struct() { function test_parse_mcp_servers_basic (line 2562) | fn test_parse_mcp_servers_basic() { function test_parse_mcp_servers_empty_config (line 2602) | fn test_parse_mcp_servers_empty_config() { function test_parse_mcp_servers_no_args_or_env (line 2614) | fn test_parse_mcp_servers_no_args_or_env() { function test_parse_mcp_servers_multiple_env_vars (line 2628) | fn test_parse_mcp_servers_multiple_env_vars() { function test_parse_mcp_servers_skips_incomplete (line 2646) | fn test_parse_mcp_servers_skips_incomplete() { function test_parse_mcp_servers_mixed_with_other_sections (line 2661) | fn test_parse_mcp_servers_mixed_with_other_sections() { function test_parse_numeric_flag_config_fallback (line 2685) | fn test_parse_numeric_flag_config_fallback() { function test_parse_numeric_flag_cli_overrides_config (line 2694) | fn test_parse_numeric_flag_cli_overrides_config() { function test_parse_numeric_flag_invalid_cli_falls_to_config (line 2707) | fn test_parse_numeric_flag_invalid_cli_falls_to_config() { function test_parse_numeric_flag_invalid_config_returns_none (line 2721) | fn test_parse_numeric_flag_invalid_config_returns_none() { function test_parse_numeric_flag_usize (line 2730) | fn test_parse_numeric_flag_usize() { function test_auto_commit_flag_default_false (line 2742) | fn test_auto_commit_flag_default_false() { function test_auto_commit_flag_parsed (line 2751) | fn test_auto_commit_flag_parsed() { function test_print_banner_does_not_panic (line 2768) | fn test_print_banner_does_not_panic() { FILE: src/commands.rs constant KNOWN_COMMANDS (line 45) | pub const KNOWN_COMMANDS: &[&str] = &[ constant KNOWN_MODELS (line 126) | pub const KNOWN_MODELS: &[&str] = &[ constant THINKING_LEVELS (line 144) | pub const THINKING_LEVELS: &[&str] = &["off", "minimal", "low", "medium"... constant GIT_SUBCOMMANDS (line 147) | pub const GIT_SUBCOMMANDS: &[&str] = &["status", "log", "add", "diff", "... constant PR_SUBCOMMANDS (line 150) | pub const PR_SUBCOMMANDS: &[&str] = &["list", "view", "diff", "comment",... constant UNDO_OPTIONS (line 153) | pub const UNDO_OPTIONS: &[&str] = &["--all", "--last-commit"]; constant REFACTOR_SUBCOMMANDS (line 156) | pub const REFACTOR_SUBCOMMANDS: &[&str] = &["rename", "extract", "move"]; constant DIFF_FLAGS (line 159) | pub const DIFF_FLAGS: &[&str] = &["--staged", "--cached", "--name-only",... constant BG_SUBCOMMANDS (line 161) | pub const BG_SUBCOMMANDS: &[&str] = &["run", "list", "output", "kill"]; constant CONFIG_SUBCOMMANDS (line 164) | pub const CONFIG_SUBCOMMANDS: &[&str] = &["show", "edit", "set", "get"]; function command_arg_hint (line 170) | pub fn command_arg_hint(cmd: &str) -> Option<&'static str> { function command_arg_completions (line 230) | pub fn command_arg_completions(cmd: &str, partial_arg: &str) -> Vec Vec Vec { function is_unknown_command (line 292) | pub fn is_unknown_command(input: &str) -> bool { function edit_distance (line 307) | fn edit_distance(a: &str, b: &str) -> usize { function suggest_command (line 333) | pub fn suggest_command(input: &str) -> Option<&'static str> { function thinking_level_name (line 376) | pub fn thinking_level_name(level: ThinkingLevel) -> &'static str { function handle_provider_switch (line 393) | pub fn handle_provider_switch( function discover_custom_commands (line 495) | pub fn discover_custom_commands() -> Vec<(String, String)> { function discover_custom_commands_from (line 501) | pub(crate) fn discover_custom_commands_from( function load_single_dir_commands (line 533) | fn load_single_dir_commands(dir: &std::path::Path) -> Vec<(String, Strin... function load_commands_from_dir (line 541) | fn load_commands_from_dir( function is_custom_command (line 563) | pub fn is_custom_command(cmd: &str) -> bool { function get_custom_command_content (line 569) | pub fn get_custom_command_content(cmd: &str) -> Option { function custom_command_names (line 586) | pub fn custom_command_names() -> Vec { function test_format_config_masks_secret_values (line 609) | fn test_format_config_masks_secret_values() { function test_format_config_no_file_loaded (line 641) | fn test_format_config_no_file_loaded() { function test_format_config_sorts_keys_deterministically (line 658) | fn test_format_config_sorts_keys_deterministically() { function test_command_parsing_quit (line 676) | fn test_command_parsing_quit() { function test_command_parsing_model (line 687) | fn test_command_parsing_model() { function test_command_parsing_model_whitespace (line 695) | fn test_command_parsing_model_whitespace() { function test_command_help_recognized (line 702) | fn test_command_help_recognized() { function test_model_switch_updates_variable (line 757) | fn test_model_switch_updates_variable() { function test_bare_model_command_is_recognized (line 766) | fn test_bare_model_command_is_recognized() { function test_provider_command_recognized (line 773) | fn test_provider_command_recognized() { function test_provider_command_matching (line 783) | fn test_provider_command_matching() { function test_provider_show_does_not_panic (line 793) | fn test_provider_show_does_not_panic() { function test_provider_switch_valid (line 801) | fn test_provider_switch_valid() { function test_provider_switch_invalid (line 832) | fn test_provider_switch_invalid() { function test_provider_switch_sets_default_model (line 864) | fn test_provider_switch_sets_default_model() { function test_provider_arg_completions_empty (line 896) | fn test_provider_arg_completions_empty() { function test_provider_arg_completions_partial (line 905) | fn test_provider_arg_completions_partial() { function test_provider_arg_completions_no_match (line 920) | fn test_provider_arg_completions_no_match() { function test_unknown_slash_command_detection (line 929) | fn test_unknown_slash_command_detection() { function test_thinking_level_name (line 953) | fn test_thinking_level_name() { function test_arg_completions_model_empty_prefix (line 962) | fn test_arg_completions_model_empty_prefix() { function test_arg_completions_model_partial_prefix (line 972) | fn test_arg_completions_model_partial_prefix() { function test_arg_completions_model_gpt_prefix (line 987) | fn test_arg_completions_model_gpt_prefix() { function test_arg_completions_model_no_match (line 1002) | fn test_arg_completions_model_no_match() { function test_arg_completions_think_empty (line 1011) | fn test_arg_completions_think_empty() { function test_arg_completions_think_partial (line 1019) | fn test_arg_completions_think_partial() { function test_arg_completions_git_empty (line 1027) | fn test_arg_completions_git_empty() { function test_arg_completions_git_partial (line 1039) | fn test_arg_completions_git_partial() { function test_arg_completions_pr_empty (line 1051) | fn test_arg_completions_pr_empty() { function test_arg_completions_pr_partial (line 1060) | fn test_arg_completions_pr_partial() { function test_arg_completions_bg_empty (line 1070) | fn test_arg_completions_bg_empty() { function test_arg_completions_bg_partial (line 1092) | fn test_arg_completions_bg_partial() { function test_arg_completions_unknown_command (line 1098) | fn test_arg_completions_unknown_command() { function test_arg_completions_help_has_args (line 1107) | fn test_arg_completions_help_has_args() { function test_arg_completions_case_insensitive (line 1114) | fn test_arg_completions_case_insensitive() { function test_arg_completions_save_load_json_files (line 1124) | fn test_arg_completions_save_load_json_files() { function test_arg_completions_config_subcommands (line 1146) | fn test_arg_completions_config_subcommands() { function test_arg_completions_config_partial (line 1168) | fn test_arg_completions_config_partial() { function test_edit_distance (line 1176) | fn test_edit_distance() { function test_suggest_command_typos (line 1185) | fn test_suggest_command_typos() { function test_suggest_command_no_match (line 1193) | fn test_suggest_command_no_match() { function test_suggest_command_prefix_match (line 1200) | fn test_suggest_command_prefix_match() { function test_suggest_command_valid_command_returns_none (line 1207) | fn test_suggest_command_valid_command_returns_none() { function test_suggest_command_with_args (line 1215) | fn test_suggest_command_with_args() { function test_command_arg_hint_diff_contains_stat (line 1222) | fn test_command_arg_hint_diff_contains_stat() { function test_command_arg_hint_help_contains_command (line 1232) | fn test_command_arg_hint_help_contains_command() { function test_command_arg_hint_version_returns_none (line 1242) | fn test_command_arg_hint_version_returns_none() { function test_command_arg_hint_model_shows_placeholder (line 1248) | fn test_command_arg_hint_model_shows_placeholder() { function test_command_arg_hint_think_shows_levels (line 1258) | fn test_command_arg_hint_think_shows_levels() { function test_command_arg_hint_no_args_commands (line 1267) | fn test_command_arg_hint_no_args_commands() { function test_command_arg_hint_git_shows_subcommands (line 1280) | fn test_command_arg_hint_git_shows_subcommands() { function test_command_arg_hint_pr_shows_subcommands (line 1287) | fn test_command_arg_hint_pr_shows_subcommands() { function test_quick_in_known_commands (line 1294) | fn test_quick_in_known_commands() { function test_quick_arg_hint (line 1302) | fn test_quick_arg_hint() { function test_quick_not_unknown (line 1309) | fn test_quick_not_unknown() { function test_discover_custom_commands_empty (line 1315) | fn test_discover_custom_commands_empty() { function test_discover_custom_commands_finds_files (line 1325) | fn test_discover_custom_commands_finds_files() { function test_custom_command_project_overrides_global (line 1347) | fn test_custom_command_project_overrides_global() { FILE: src/commands_bg.rs function lock_or_recover (line 19) | fn lock_or_recover(mutex: &std::sync::Mutex) -> std::sync::MutexGu... constant MAX_OUTPUT_BYTES (line 24) | const MAX_OUTPUT_BYTES: usize = 256 * 1024; constant DEFAULT_TAIL_LINES (line 27) | const DEFAULT_TAIL_LINES: usize = 50; type BackgroundJob (line 30) | pub struct BackgroundJob { type BackgroundJobTracker (line 41) | pub struct BackgroundJobTracker { method new (line 48) | pub fn new() -> Self { method launch (line 57) | pub fn launch(&self, command: &str) -> u32 { method list (line 95) | pub fn list(&self) -> Vec { method get_output (line 112) | pub async fn get_output(&self, id: u32) -> Option { method kill (line 127) | pub async fn kill(&self, id: u32) -> bool { method exists (line 152) | pub fn exists(&self, id: u32) -> bool { method is_finished (line 158) | pub fn is_finished(&self, id: u32) -> bool { type JobSnapshot (line 167) | pub struct JobSnapshot { function run_background_command (line 176) | async fn run_background_command( function format_elapsed (line 288) | fn format_elapsed(d: std::time::Duration) -> String { function tail_lines (line 300) | fn tail_lines(s: &str, n: usize) -> &str { function handle_bg (line 323) | pub async fn handle_bg(input: &str, tracker: &BackgroundJobTracker) { function handle_bg_run (line 352) | fn handle_bg_run(command: &str, tracker: &BackgroundJobTracker) { function handle_bg_list (line 365) | fn handle_bg_list(tracker: &BackgroundJobTracker) { function handle_bg_output (line 393) | async fn handle_bg_output(args: &str, tracker: &BackgroundJobTracker) { function handle_bg_kill (line 438) | async fn handle_bg_kill(args: &str, tracker: &BackgroundJobTracker) { function truncate_command (line 462) | fn truncate_command(cmd: &str, max: usize) -> String { function create_tracker (line 480) | fn create_tracker() -> BackgroundJobTracker { function test_launch_and_list (line 485) | async fn test_launch_and_list() { function test_output_capture (line 501) | async fn test_output_capture() { function test_kill_running (line 520) | async fn test_kill_running() { function test_job_ids_increment (line 539) | async fn test_job_ids_increment() { function test_tail_lines (line 548) | fn test_tail_lines() { function test_tail_lines_short (line 557) | fn test_tail_lines_short() { function test_truncate_command (line 564) | fn test_truncate_command() { function test_truncate_command_multibyte (line 575) | fn test_truncate_command_multibyte() { function test_format_elapsed (line 583) | fn test_format_elapsed() { function test_exists (line 590) | async fn test_exists() { function test_failed_command (line 599) | async fn test_failed_command() { function test_lock_or_recover_normal (line 612) | fn test_lock_or_recover_normal() { function test_lock_or_recover_poisoned (line 619) | fn test_lock_or_recover_poisoned() { FILE: src/commands_config.rs function set_teach_mode (line 23) | pub fn set_teach_mode(enabled: bool) { function is_teach_mode (line 28) | pub fn is_teach_mode() -> bool { constant TEACH_MODE_PROMPT (line 33) | pub const TEACH_MODE_PROMPT: &str = "\ function handle_config (line 44) | pub fn handle_config( function detect_loaded_config_path (line 162) | fn detect_loaded_config_path() -> Option { function is_secret_key (line 188) | fn is_secret_key(key: &str) -> bool { function format_config_output (line 208) | pub fn format_config_output( function handle_config_show (line 269) | pub fn handle_config_show() { function resolve_config_edit_path (line 301) | pub fn resolve_config_edit_path() -> Option { function resolve_config_edit_path_in (line 309) | fn resolve_config_edit_path_in(root: &std::path::Path) -> Option Result<(String, String, boo... function handle_config_set (line 426) | pub fn handle_config_set(input: &str, agent_config: &mut crate::AgentCon... function apply_config_to_runtime (line 465) | fn apply_config_to_runtime( function handle_config_get (line 514) | pub fn handle_config_get(input: &str) { function settable_keys_list (line 557) | fn settable_keys_list() -> String { function handle_hooks (line 567) | pub fn handle_hooks(hooks: &[crate::hooks::ShellHook]) { function handle_permissions (line 603) | pub fn handle_permissions( function handle_teach (line 666) | pub fn handle_teach(input: &str) { function mcp_help_text (line 699) | pub(crate) fn mcp_help_text() -> String { function mcp_not_connected_message (line 739) | pub(crate) fn mcp_not_connected_message(total: usize) -> String { function handle_mcp (line 757) | pub fn handle_mcp( function test_format_config_masks_secret_values (line 830) | fn test_format_config_masks_secret_values() { function test_format_config_no_file_loaded (line 862) | fn test_format_config_no_file_loaded() { function test_is_secret_key_matches_common_patterns (line 879) | fn test_is_secret_key_matches_common_patterns() { function test_format_config_sorts_keys_deterministically (line 896) | fn test_format_config_sorts_keys_deterministically() { function test_hooks_command_recognized (line 914) | fn test_hooks_command_recognized() { function test_handle_hooks_empty (line 923) | fn test_handle_hooks_empty() { function test_handle_hooks_with_hooks (line 929) | fn test_handle_hooks_with_hooks() { function test_teach_mode_default_off (line 950) | fn test_teach_mode_default_off() { function test_teach_mode_toggle (line 957) | fn test_teach_mode_toggle() { function test_teach_known_command (line 967) | fn test_teach_known_command() { function test_teach_mode_prompt_not_empty (line 972) | fn test_teach_mode_prompt_not_empty() { function test_teach_in_help_text (line 978) | fn test_teach_in_help_text() { function test_teach_command_help_exists (line 987) | fn test_teach_command_help_exists() { function test_teach_short_description_exists (line 995) | fn test_teach_short_description_exists() { function test_mcp_in_known_commands (line 1001) | fn test_mcp_in_known_commands() { function test_mcp_short_description_exists (line 1009) | fn test_mcp_short_description_exists() { function test_handle_mcp_no_servers (line 1015) | fn test_handle_mcp_no_servers() { function test_handle_mcp_with_configs (line 1023) | fn test_handle_mcp_with_configs() { function test_handle_mcp_unknown_subcommand (line 1040) | fn test_handle_mcp_unknown_subcommand() { function test_mcp_help_text_no_coming_soon (line 1052) | fn test_mcp_help_text_no_coming_soon() { function test_mcp_not_connected_message_no_coming_soon (line 1061) | fn test_mcp_not_connected_message_no_coming_soon() { function test_mcp_help_primary_example_is_not_filesystem (line 1075) | fn test_mcp_help_primary_example_is_not_filesystem() { function test_mcp_help_mentions_collision_warning (line 1097) | fn test_mcp_help_mentions_collision_warning() { function test_permissions_command_recognized (line 1113) | fn test_permissions_command_recognized() { function test_handle_permissions_defaults (line 1122) | fn test_handle_permissions_defaults() { function test_handle_permissions_auto_approve (line 1130) | fn test_handle_permissions_auto_approve() { function test_handle_permissions_with_patterns (line 1137) | fn test_handle_permissions_with_patterns() { function test_handle_permissions_with_dir_restrictions (line 1147) | fn test_handle_permissions_with_dir_restrictions() { function test_handle_permissions_fully_configured (line 1157) | fn test_handle_permissions_fully_configured() { function test_resolve_config_edit_path_prefers_project_config (line 1170) | fn test_resolve_config_edit_path_prefers_project_config() { function test_resolve_config_edit_path_falls_back_to_user_config (line 1191) | fn test_resolve_config_edit_path_falls_back_to_user_config() { function test_parse_config_set_args_basic (line 1216) | fn test_parse_config_set_args_basic() { function test_parse_config_set_args_with_global (line 1225) | fn test_parse_config_set_args_with_global() { function test_parse_config_set_args_numeric (line 1234) | fn test_parse_config_set_args_numeric() { function test_parse_config_set_args_empty (line 1241) | fn test_parse_config_set_args_empty() { function test_parse_config_set_args_missing_value (line 1247) | fn test_parse_config_set_args_missing_value() { function test_parse_config_set_args_global_only_no_value (line 1252) | fn test_parse_config_set_args_global_only_no_value() { FILE: src/commands_dev.rs function handle_update (line 15) | pub fn handle_update() -> Result<(), String> { function platform_asset_name (line 198) | fn platform_asset_name(os: &str, arch: &str) -> Option<&'static str> { function is_cargo_dev_build (line 209) | fn is_cargo_dev_build() -> bool { function fetch_latest_release (line 223) | fn fetch_latest_release() -> Result { function find_asset_url (line 248) | fn find_asset_url(assets: &[serde_json::Value], asset_name: &str) -> Opt... function download_file (line 264) | fn download_file(url: &str, path: &str) -> Result<(), String> { function extract_archive (line 276) | fn extract_archive(archive_path: &str, extract_dir: &str) -> Result Vec { function print_doctor_report (line 588) | pub fn print_doctor_report(checks: &[DoctorCheck]) { function handle_doctor (line 614) | pub fn handle_doctor(provider: &str, model: &str) { function health_checks_for_project (line 621) | pub fn health_checks_for_project( function run_health_check_for_project (line 675) | pub fn run_health_check_for_project( function run_health_checks_full_output (line 712) | pub fn run_health_checks_full_output( function build_fix_prompt (line 750) | pub fn build_fix_prompt(failures: &[(&str, &str)]) -> String { function handle_health (line 766) | pub fn handle_health() { function handle_fix (line 798) | pub async fn handle_fix( function test_command_for_project (line 846) | pub fn test_command_for_project( function handle_test (line 861) | pub fn handle_test() -> Option { type LintStrictness (line 936) | pub enum LintStrictness { constant LINT_SUBCOMMANDS (line 946) | pub const LINT_SUBCOMMANDS: &[&str] = &["fix", "pedantic", "strict", "un... function lint_command_for_project (line 949) | pub fn lint_command_for_project( function handle_lint (line 997) | pub fn handle_lint(input: &str) -> Option { function build_lint_fix_prompt (line 1083) | pub fn build_lint_fix_prompt(lint_command: &str, lint_output: &str) -> S... function handle_lint_fix (line 1098) | pub async fn handle_lint_fix( type UnsafeOccurrence (line 1132) | pub struct UnsafeOccurrence { type UnsafeKind (line 1141) | pub enum UnsafeKind { method fmt (line 1149) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function scan_for_unsafe (line 1161) | pub fn scan_for_unsafe(file_path: &str, content: &str) -> Vec Option<&'static str> { function collect_rs_files (line 1225) | fn collect_rs_files(dir: &std::path::Path) -> Vec { function collect_rs_files_recursive (line 1232) | fn collect_rs_files_recursive(dir: &std::path::Path, files: &mut Vec Option { function detect_test_command (line 1369) | pub fn detect_test_command() -> Option { function auto_detect_watch_command (line 1378) | pub fn auto_detect_watch_command() -> Option { function detect_watch_all_command (line 1386) | pub fn detect_watch_all_command() -> Option { constant WATCH_SUBCOMMANDS (line 1402) | pub const WATCH_SUBCOMMANDS: &[&str] = &["off", "status", "all"]; function handle_watch (line 1405) | pub fn handle_watch(input: &str) { function build_project_tree (line 1466) | pub fn build_project_tree(max_depth: usize) -> String { function format_tree_from_paths (line 1488) | pub fn format_tree_from_paths(paths: &[String], max_depth: usize) -> Str... function handle_tree (line 1522) | pub fn handle_tree(input: &str) { function run_shell_command (line 1542) | pub fn run_shell_command(cmd: &str) { function handle_run (line 1604) | pub fn handle_run(input: &str) { function handle_run_usage (line 1619) | pub fn handle_run_usage() { function test_command_rust (line 1632) | fn test_command_rust() { function test_command_unknown (line 1640) | fn test_command_unknown() { function auto_detect_watch_command_returns_cargo_test_in_rust_project (line 1645) | fn auto_detect_watch_command_returns_cargo_test_in_rust_project() { function detect_watch_all_command_returns_lint_and_test_for_rust (line 1659) | fn detect_watch_all_command_returns_lint_and_test_for_rust() { function watch_subcommands_includes_all (line 1682) | fn watch_subcommands_includes_all() { function handle_watch_all_sets_combined_command (line 1690) | fn handle_watch_all_sets_combined_command() { function lint_command_rust (line 1712) | fn lint_command_rust() { function lint_command_make_none (line 1719) | fn lint_command_make_none() { function lint_command_unknown_none (line 1724) | fn lint_command_unknown_none() { function health_checks_rust_has_build (line 1731) | fn health_checks_rust_has_build() { function health_checks_unknown_empty (line 1737) | fn health_checks_unknown_empty() { function doctor_checks_include_rtk (line 1743) | fn doctor_checks_include_rtk() { function build_fix_prompt_empty (line 1761) | fn build_fix_prompt_empty() { function build_fix_prompt_with_failures (line 1767) | fn build_fix_prompt_with_failures() { function build_fix_prompt_multiple_failures (line 1776) | fn build_fix_prompt_multiple_failures() { function lint_fix_prompt_contains_command_and_output (line 1789) | fn lint_fix_prompt_contains_command_and_output() { function lint_fix_prompt_asks_to_fix (line 1800) | fn lint_fix_prompt_asks_to_fix() { function lint_fix_prompt_includes_structured_output (line 1809) | fn lint_fix_prompt_includes_structured_output() { function update_platform_linux_x86_64 (line 1820) | fn update_platform_linux_x86_64() { function update_platform_macos_intel (line 1826) | fn update_platform_macos_intel() { function update_platform_macos_arm (line 1832) | fn update_platform_macos_arm() { function update_platform_windows (line 1838) | fn update_platform_windows() { function update_platform_unsupported (line 1844) | fn update_platform_unsupported() { function update_find_asset_url_found (line 1851) | fn update_find_asset_url_found() { function update_find_asset_url_not_found (line 1870) | fn update_find_asset_url_not_found() { function update_find_asset_url_empty (line 1880) | fn update_find_asset_url_empty() { function update_version_comparison (line 1887) | fn update_version_comparison() { function update_is_cargo_dev_build_runs (line 1895) | fn update_is_cargo_dev_build_runs() { function format_tree_basic (line 1908) | fn format_tree_basic() { function format_tree_depth_limit (line 1922) | fn format_tree_depth_limit() { function format_tree_empty (line 1933) | fn format_tree_empty() { function format_tree_root_files (line 1940) | fn format_tree_root_files() { function test_health_check_function (line 1949) | fn test_health_check_function() { function test_health_checks_for_rust_project (line 1972) | fn test_health_checks_for_rust_project() { function test_health_checks_for_node_project (line 1986) | fn test_health_checks_for_node_project() { function test_health_checks_for_go_project (line 1993) | fn test_health_checks_for_go_project() { function test_health_checks_for_python_project (line 2001) | fn test_health_checks_for_python_project() { function test_health_checks_for_unknown_returns_empty (line 2009) | fn test_health_checks_for_unknown_returns_empty() { function test_run_command_recognized (line 2015) | fn test_run_command_recognized() { function test_run_shell_command_basic (line 2022) | fn test_run_shell_command_basic() { function test_run_shell_command_failing (line 2029) | fn test_run_shell_command_failing() { function test_run_shell_command_streams_multiline (line 2035) | fn test_run_shell_command_streams_multiline() { function test_run_shell_command_mixed_stdout_stderr (line 2041) | fn test_run_shell_command_mixed_stdout_stderr() { function test_run_shell_command_large_output (line 2047) | fn test_run_shell_command_large_output() { function test_bang_shortcut_matching (line 2053) | fn test_bang_shortcut_matching() { function test_run_command_matching (line 2063) | fn test_run_command_matching() { function test_format_tree_from_paths_basic (line 2073) | fn test_format_tree_from_paths_basic() { function test_format_tree_from_paths_nested (line 2090) | fn test_format_tree_from_paths_nested() { function test_format_tree_from_paths_depth_limit (line 2104) | fn test_format_tree_from_paths_depth_limit() { function test_format_tree_from_paths_empty (line 2122) | fn test_format_tree_from_paths_empty() { function test_format_tree_from_paths_root_files_only (line 2129) | fn test_format_tree_from_paths_root_files_only() { function test_format_tree_from_paths_depth_zero (line 2144) | fn test_format_tree_from_paths_depth_zero() { function test_format_tree_dir_printed_once (line 2154) | fn test_format_tree_dir_printed_once() { function test_build_project_tree_runs (line 2166) | fn test_build_project_tree_runs() { function test_tree_command_recognized (line 2175) | fn test_tree_command_recognized() { function test_fix_command_recognized (line 2182) | fn test_fix_command_recognized() { function test_run_health_checks_full_output_returns_results (line 2191) | fn test_run_health_checks_full_output_returns_results() { function test_build_fix_prompt_with_failures (line 2209) | fn test_build_fix_prompt_with_failures() { function test_build_fix_prompt_empty_failures (line 2234) | fn test_build_fix_prompt_empty_failures() { function test_test_command_recognized (line 2244) | fn test_test_command_recognized() { function test_test_command_for_rust_project (line 2253) | fn test_test_command_for_rust_project() { function test_test_command_for_node_project (line 2266) | fn test_test_command_for_node_project() { function test_test_command_for_python_project (line 2276) | fn test_test_command_for_python_project() { function test_test_command_for_go_project (line 2287) | fn test_test_command_for_go_project() { function test_test_command_for_make_project (line 2297) | fn test_test_command_for_make_project() { function test_test_command_for_unknown_project (line 2310) | fn test_test_command_for_unknown_project() { function test_lint_command_recognized (line 2319) | fn test_lint_command_recognized() { function test_lint_command_for_rust_project (line 2328) | fn test_lint_command_for_rust_project() { function test_lint_command_for_node_project (line 2341) | fn test_lint_command_for_node_project() { function test_lint_command_for_python_project (line 2354) | fn test_lint_command_for_python_project() { function test_lint_command_for_go_project (line 2365) | fn test_lint_command_for_go_project() { function test_lint_command_for_make_project (line 2377) | fn test_lint_command_for_make_project() { function test_lint_command_for_unknown_project (line 2383) | fn test_lint_command_for_unknown_project() { function test_lint_pedantic_adds_flag (line 2394) | fn test_lint_pedantic_adds_flag() { function test_lint_strict_adds_both_flags (line 2408) | fn test_lint_strict_adds_both_flags() { function test_lint_default_no_extra_flags (line 2430) | fn test_lint_default_no_extra_flags() { function test_lint_strictness_ignored_for_non_rust (line 2448) | fn test_lint_strictness_ignored_for_non_rust() { function scan_for_unsafe_finds_blocks (line 2460) | fn scan_for_unsafe_finds_blocks() { function scan_for_unsafe_finds_functions (line 2476) | fn scan_for_unsafe_finds_functions() { function scan_for_unsafe_finds_impl (line 2489) | fn scan_for_unsafe_finds_impl() { function scan_for_unsafe_finds_trait (line 2499) | fn scan_for_unsafe_finds_trait() { function scan_for_unsafe_ignores_comments (line 2509) | fn scan_for_unsafe_ignores_comments() { function scan_for_unsafe_ignores_strings (line 2519) | fn scan_for_unsafe_ignores_strings() { function scan_for_unsafe_no_occurrences (line 2528) | fn scan_for_unsafe_no_occurrences() { function scan_for_unsafe_multiple_occurrences (line 2539) | fn scan_for_unsafe_multiple_occurrences() { function detects_forbid_attribute (line 2559) | fn detects_forbid_attribute() { function detects_deny_attribute (line 2565) | fn detects_deny_attribute() { function no_attribute_returns_none (line 2571) | fn no_attribute_returns_none() { function ignores_commented_attribute (line 2577) | fn ignores_commented_attribute() { function lint_unsafe_in_subcommands (line 2583) | fn lint_unsafe_in_subcommands() { FILE: src/commands_file.rs constant WEB_MAX_CHARS (line 11) | const WEB_MAX_CHARS: usize = 5000; function find_ascii_ci (line 17) | fn find_ascii_ci(haystack: &str, needle: &str) -> Option { function starts_with_ascii_ci (line 35) | fn starts_with_ascii_ci(haystack: &str, needle: &str) -> bool { function strip_html_tags (line 59) | pub fn strip_html_tags(html: &str, max_chars: usize) -> String { function is_valid_url (line 223) | pub fn is_valid_url(url: &str) -> bool { function fetch_url (line 230) | fn fetch_url(url: &str) -> Result { function handle_web (line 261) | pub fn handle_web(input: &str) { function parse_add_arg (line 316) | pub fn parse_add_arg(arg: &str) -> (&str, Option<(usize, usize)>) { function expand_add_paths (line 335) | pub fn expand_add_paths(pattern: &str) -> Vec { function read_file_for_add (line 355) | pub fn read_file_for_add( function format_add_content (line 385) | pub fn format_add_content(path: &str, content: &str) -> String { function is_image_extension (line 418) | pub fn is_image_extension(path: &str) -> bool { function mime_type_for_extension (line 428) | pub fn mime_type_for_extension(ext: &str) -> &'static str { type AddResult (line 441) | pub enum AddResult { function read_image_for_add (line 453) | pub fn read_image_for_add(path: &str) -> Result<(String, String), String> { function handle_add (line 466) | pub fn handle_add(input: &str) -> Vec { function expand_file_mentions (line 574) | pub fn expand_file_mentions(input: &str) -> (String, Vec) { function byte_offset (line 708) | fn byte_offset(chars: &[char], char_idx: usize) -> usize { constant APPLY_FLAGS (line 715) | pub const APPLY_FLAGS: &[&str] = &["--check"]; type ApplyArgs (line 719) | pub struct ApplyArgs { function parse_apply_args (line 733) | pub fn parse_apply_args(input: &str) -> ApplyArgs { function apply_patch (line 759) | pub fn apply_patch(path: &str, check_only: bool) -> (bool, String) { function apply_patch_from_string (line 816) | pub fn apply_patch_from_string(patch: &str, check_only: bool) -> (bool, ... function handle_apply (line 839) | pub fn handle_apply(input: &str) { function build_explain_prompt (line 895) | pub fn build_explain_prompt(input: &str) -> Option { function strip_html_basic_paragraph (line 959) | fn strip_html_basic_paragraph() { function strip_html_removes_script_and_style (line 966) | fn strip_html_removes_script_and_style() { function strip_html_removes_nav_footer_header (line 977) | fn strip_html_removes_nav_footer_header() { function strip_html_converts_br_to_newline (line 986) | fn strip_html_converts_br_to_newline() { function strip_html_converts_li_to_bullets (line 993) | fn strip_html_converts_li_to_bullets() { function strip_html_headings (line 1002) | fn strip_html_headings() { function strip_html_decodes_entities (line 1011) | fn strip_html_decodes_entities() { function strip_html_decodes_numeric_entities (line 1018) | fn strip_html_decodes_numeric_entities() { function strip_html_decodes_quotes_and_apostrophes (line 1025) | fn strip_html_decodes_quotes_and_apostrophes() { function strip_html_collapses_whitespace (line 1032) | fn strip_html_collapses_whitespace() { function strip_html_truncates_long_content (line 1040) | fn strip_html_truncates_long_content() { function strip_html_empty_input (line 1048) | fn strip_html_empty_input() { function strip_html_no_tags (line 1054) | fn strip_html_no_tags() { function strip_html_nested_tags (line 1060) | fn strip_html_nested_tags() { function strip_html_case_insensitive_tags (line 1067) | fn strip_html_case_insensitive_tags() { function strip_html_nbsp (line 1075) | fn strip_html_nbsp() { function strip_html_non_ascii_content (line 1082) | fn strip_html_non_ascii_content() { function strip_html_non_ascii_in_skip_tag (line 1093) | fn strip_html_non_ascii_in_skip_tag() { function strip_html_chinese_japanese (line 1103) | fn strip_html_chinese_japanese() { function strip_html_mixed_multibyte (line 1111) | fn strip_html_mixed_multibyte() { function strip_html_emoji_in_tags (line 1123) | fn strip_html_emoji_in_tags() { function strip_html_non_ascii_truncation (line 1131) | fn strip_html_non_ascii_truncation() { function valid_urls (line 1141) | fn valid_urls() { function invalid_urls (line 1150) | fn invalid_urls() { function parse_add_arg_simple_path (line 1161) | fn parse_add_arg_simple_path() { function parse_add_arg_with_line_range (line 1168) | fn parse_add_arg_with_line_range() { function parse_add_arg_with_single_line (line 1175) | fn parse_add_arg_with_single_line() { function parse_add_arg_with_colon_in_path_no_range (line 1182) | fn parse_add_arg_with_colon_in_path_no_range() { function parse_add_arg_windows_path_with_range (line 1190) | fn parse_add_arg_windows_path_with_range() { function format_add_content_basic (line 1198) | fn format_add_content_basic() { function format_add_content_wraps_in_code_block (line 1206) | fn format_add_content_wraps_in_code_block() { function expand_add_globs_no_glob (line 1214) | fn expand_add_globs_no_glob() { function expand_add_globs_with_glob (line 1220) | fn expand_add_globs_with_glob() { function expand_add_globs_no_matches (line 1231) | fn expand_add_globs_no_matches() { function add_read_file_with_range (line 1237) | fn add_read_file_with_range() { function add_read_file_full (line 1247) | fn add_read_file_full() { function add_read_file_not_found (line 1256) | fn add_read_file_not_found() { function is_image_extension_supported_formats (line 1264) | fn is_image_extension_supported_formats() { function is_image_extension_case_insensitive (line 1274) | fn is_image_extension_case_insensitive() { function is_image_extension_non_image_files (line 1284) | fn is_image_extension_non_image_files() { function is_image_extension_no_extension (line 1294) | fn is_image_extension_no_extension() { function is_image_extension_with_full_paths (line 1300) | fn is_image_extension_with_full_paths() { function mime_type_png (line 1310) | fn mime_type_png() { function mime_type_jpg_and_jpeg (line 1315) | fn mime_type_jpg_and_jpeg() { function mime_type_gif (line 1321) | fn mime_type_gif() { function mime_type_webp (line 1326) | fn mime_type_webp() { function mime_type_bmp (line 1331) | fn mime_type_bmp() { function mime_type_unknown_extension (line 1336) | fn mime_type_unknown_extension() { function mime_type_case_insensitive (line 1343) | fn mime_type_case_insensitive() { function add_result_text_fields_accessible (line 1352) | fn add_result_text_fields_accessible() { function add_result_image_fields_accessible (line 1367) | fn add_result_image_fields_accessible() { function add_result_partial_eq (line 1388) | fn add_result_partial_eq() { function read_image_for_add_valid_png (line 1423) | fn read_image_for_add_valid_png() { function read_image_for_add_nonexistent_file (line 1469) | fn read_image_for_add_nonexistent_file() { function read_image_for_add_jpg_mime_type (line 1480) | fn read_image_for_add_jpg_mime_type() { function read_image_for_add_webp_mime_type (line 1492) | fn read_image_for_add_webp_mime_type() { function expand_file_mentions_no_mentions (line 1504) | fn expand_file_mentions_no_mentions() { function expand_file_mentions_resolves_real_file (line 1511) | fn expand_file_mentions_resolves_real_file() { function expand_file_mentions_nonexistent_file_unchanged (line 1522) | fn expand_file_mentions_nonexistent_file_unchanged() { function expand_file_mentions_with_line_range (line 1529) | fn expand_file_mentions_with_line_range() { function expand_file_mentions_multiple_mentions (line 1539) | fn expand_file_mentions_multiple_mentions() { function expand_file_mentions_at_end_of_string_no_path (line 1546) | fn expand_file_mentions_at_end_of_string_no_path() { function expand_file_mentions_at_followed_by_space (line 1553) | fn expand_file_mentions_at_followed_by_space() { function expand_file_mentions_skips_email_like (line 1560) | fn expand_file_mentions_skips_email_like() { function expand_file_mentions_path_with_dirs (line 1567) | fn expand_file_mentions_path_with_dirs() { function expand_file_mentions_mixed_real_and_fake (line 1578) | fn expand_file_mentions_mixed_real_and_fake() { function test_apply_in_known_commands (line 1588) | fn test_apply_in_known_commands() { function test_apply_in_help_text (line 1596) | fn test_apply_in_help_text() { function test_apply_parse_args_file (line 1602) | fn test_apply_parse_args_file() { function test_apply_parse_args_check (line 1609) | fn test_apply_parse_args_check() { function test_apply_parse_args_check_after_file (line 1616) | fn test_apply_parse_args_check_after_file() { function test_apply_parse_args_empty (line 1623) | fn test_apply_parse_args_empty() { function test_apply_parse_args_empty_with_spaces (line 1630) | fn test_apply_parse_args_empty_with_spaces() { function test_apply_patch_nonexistent_file (line 1637) | fn test_apply_patch_nonexistent_file() { function test_apply_patch_from_string_empty (line 1647) | fn test_apply_patch_from_string_empty() { function test_apply_help_text_exists (line 1657) | fn test_apply_help_text_exists() { function test_apply_tab_completion (line 1666) | fn test_apply_tab_completion() { function test_apply_tab_completion_filters (line 1676) | fn test_apply_tab_completion_filters() { function test_apply_patch_from_string_valid_in_git_repo (line 1686) | fn test_apply_patch_from_string_valid_in_git_repo() { function test_add_command_recognized (line 1736) | fn test_add_command_recognized() { function test_add_in_help_text (line 1747) | fn test_add_in_help_text() { function test_handle_add_no_args_returns_empty (line 1757) | fn test_handle_add_no_args_returns_empty() { function test_handle_add_with_space_no_args_returns_empty (line 1763) | fn test_handle_add_with_space_no_args_returns_empty() { function test_handle_add_real_file (line 1772) | fn test_handle_add_real_file() { function test_handle_add_with_line_range (line 1793) | fn test_handle_add_with_line_range() { function test_handle_add_glob_pattern (line 1813) | fn test_handle_add_glob_pattern() { function test_handle_add_nonexistent_file (line 1820) | fn test_handle_add_nonexistent_file() { function test_handle_add_multiple_files (line 1826) | fn test_handle_add_multiple_files() { function explain_prompt_with_real_file (line 1835) | fn explain_prompt_with_real_file() { function explain_prompt_nonexistent_file_returns_none (line 1860) | fn explain_prompt_nonexistent_file_returns_none() { function explain_prompt_with_line_range (line 1866) | fn explain_prompt_with_line_range() { function explain_prompt_empty_input_returns_none (line 1885) | fn explain_prompt_empty_input_returns_none() { function test_handle_add_large_file_truncated (line 1896) | fn test_handle_add_large_file_truncated() { function test_handle_add_line_range_skips_truncation (line 1947) | fn test_handle_add_line_range_skips_truncation() { FILE: src/commands_git.rs type DiffStatEntry (line 17) | pub struct DiffStatEntry { type DiffStatSummary (line 25) | pub struct DiffStatSummary { function parse_diff_stat (line 37) | pub fn parse_diff_stat(stat_output: &str) -> DiffStatSummary { function format_diff_stat (line 106) | pub fn format_diff_stat(summary: &DiffStatSummary) -> String { type DiffOptions (line 167) | pub struct DiffOptions { function parse_diff_args (line 182) | pub fn parse_diff_args(input: &str) -> DiffOptions { function handle_diff (line 207) | pub fn handle_diff(input: &str) { function combine_stats (line 431) | fn combine_stats(a: &str, b: &str) -> String { function build_undo_context (line 445) | fn build_undo_context(actions: &[String]) -> String { function handle_undo (line 470) | pub fn handle_undo(input: &str, history: &mut crate::prompt::TurnHistory... function handle_undo_last_commit (line 558) | fn handle_undo_last_commit() -> Option { function handle_undo_all (line 618) | fn handle_undo_all(history: &mut crate::prompt::TurnHistory) -> Option PrSubcommand { function handle_pr (line 803) | pub async fn handle_pr(input: &str, agent: &mut Agent, session_total: &m... function handle_git (line 1016) | pub fn handle_git(input: &str) { function build_review_content (line 1026) | pub fn build_review_content(arg: &str) -> Option<(String, String)> { function build_review_prompt (line 1077) | pub fn build_review_prompt(label: &str, content: &str) -> String { function handle_review (line 1110) | pub async fn handle_review( type BlameArgs (line 1133) | pub struct BlameArgs { function parse_blame_args (line 1139) | pub fn parse_blame_args(input: &str) -> Result { function colorize_blame_line (line 1190) | pub fn colorize_blame_line(line: &str) -> String { function colorize_blame (line 1254) | pub fn colorize_blame(output: &str) -> String { function handle_blame (line 1263) | pub fn handle_blame(input: &str) { function parse_diff_stat_single_file (line 1309) | fn parse_diff_stat_single_file() { function parse_diff_stat_multiple_files (line 1322) | fn parse_diff_stat_multiple_files() { function parse_diff_stat_insertions_only (line 1350) | fn parse_diff_stat_insertions_only() { function parse_diff_stat_deletions_only (line 1362) | fn parse_diff_stat_deletions_only() { function parse_diff_stat_empty_input (line 1374) | fn parse_diff_stat_empty_input() { function parse_diff_stat_whitespace_only (line 1382) | fn parse_diff_stat_whitespace_only() { function parse_diff_stat_no_summary_line (line 1390) | fn parse_diff_stat_no_summary_line() { function parse_diff_stat_binary_file (line 1403) | fn parse_diff_stat_binary_file() { function format_diff_stat_empty_entries (line 1422) | fn format_diff_stat_empty_entries() { function format_diff_stat_single_entry_insertions_only (line 1436) | fn format_diff_stat_single_entry_insertions_only() { function format_diff_stat_single_entry_deletions_only (line 1455) | fn format_diff_stat_single_entry_deletions_only() { function format_diff_stat_mixed_changes (line 1472) | fn format_diff_stat_mixed_changes() { function format_diff_stat_singular_file (line 1504) | fn format_diff_stat_singular_file() { function parse_pr_args_empty_is_list (line 1524) | fn parse_pr_args_empty_is_list() { function parse_pr_args_number_is_view (line 1530) | fn parse_pr_args_number_is_view() { function parse_pr_args_number_diff (line 1537) | fn parse_pr_args_number_diff() { function parse_pr_args_number_checkout (line 1542) | fn parse_pr_args_number_checkout() { function parse_pr_args_number_comment (line 1547) | fn parse_pr_args_number_comment() { function parse_pr_args_comment_without_text_is_help (line 1555) | fn parse_pr_args_comment_without_text_is_help() { function parse_pr_args_create (line 1560) | fn parse_pr_args_create() { function parse_pr_args_create_draft (line 1568) | fn parse_pr_args_create_draft() { function parse_pr_args_create_case_insensitive (line 1576) | fn parse_pr_args_create_case_insensitive() { function parse_pr_args_invalid_is_help (line 1593) | fn parse_pr_args_invalid_is_help() { function parse_pr_args_unknown_subcommand_is_help (line 1599) | fn parse_pr_args_unknown_subcommand_is_help() { function build_review_prompt_contains_label (line 1607) | fn build_review_prompt_contains_label() { function build_review_prompt_contains_content (line 1616) | fn build_review_prompt_contains_content() { function build_review_prompt_contains_review_criteria (line 1623) | fn build_review_prompt_contains_review_criteria() { function build_review_prompt_truncates_large_content (line 1633) | fn build_review_prompt_truncates_large_content() { function build_review_prompt_does_not_truncate_small_content (line 1652) | fn build_review_prompt_does_not_truncate_small_content() { function build_review_prompt_wraps_in_code_block (line 1666) | fn build_review_prompt_wraps_in_code_block() { function diff_stat_entry_equality (line 1674) | fn diff_stat_entry_equality() { function diff_stat_summary_round_trip (line 1689) | fn diff_stat_summary_round_trip() { function test_parse_diff_args_empty (line 1709) | fn test_parse_diff_args_empty() { function test_parse_diff_args_staged (line 1718) | fn test_parse_diff_args_staged() { function test_parse_diff_args_cached (line 1726) | fn test_parse_diff_args_cached() { function test_parse_diff_args_name_only (line 1734) | fn test_parse_diff_args_name_only() { function test_parse_diff_args_file (line 1742) | fn test_parse_diff_args_file() { function test_parse_diff_args_staged_and_file (line 1750) | fn test_parse_diff_args_staged_and_file() { function test_parse_diff_args_all_flags (line 1758) | fn test_parse_diff_args_all_flags() { function test_parse_diff_args_stat (line 1767) | fn test_parse_diff_args_stat() { function test_parse_diff_args_staged_stat (line 1776) | fn test_parse_diff_args_staged_stat() { function test_parse_diff_args_stat_with_file (line 1785) | fn test_parse_diff_args_stat_with_file() { function test_pr_command_recognized (line 1795) | fn test_pr_command_recognized() { function test_pr_command_matching (line 1802) | fn test_pr_command_matching() { function test_pr_number_parsing (line 1813) | fn test_pr_number_parsing() { function test_pr_subcommand_list (line 1828) | fn test_pr_subcommand_list() { function test_pr_subcommand_view (line 1834) | fn test_pr_subcommand_view() { function test_pr_subcommand_diff (line 1841) | fn test_pr_subcommand_diff() { function test_pr_subcommand_checkout (line 1847) | fn test_pr_subcommand_checkout() { function test_pr_subcommand_comment (line 1853) | fn test_pr_subcommand_comment() { function test_pr_subcommand_comment_requires_text (line 1865) | fn test_pr_subcommand_comment_requires_text() { function test_pr_subcommand_invalid (line 1872) | fn test_pr_subcommand_invalid() { function test_pr_subcommand_case_insensitive (line 1879) | fn test_pr_subcommand_case_insensitive() { function test_pr_subcommand_create (line 1889) | fn test_pr_subcommand_create() { function test_pr_subcommand_create_draft (line 1905) | fn test_pr_subcommand_create_draft() { function test_pr_subcommand_create_no_flag (line 1921) | fn test_pr_subcommand_create_no_flag() { function test_pr_subcommand_recognized (line 1930) | fn test_pr_subcommand_recognized() { function test_review_command_recognized (line 1940) | fn test_review_command_recognized() { function test_review_command_matching (line 1950) | fn test_review_command_matching() { function test_build_review_prompt_contains_content (line 1961) | fn test_build_review_prompt_contains_content() { function test_build_review_prompt_truncates_large_content (line 1983) | fn test_build_review_prompt_truncates_large_content() { function test_build_review_content_nonexistent_file (line 1998) | fn test_build_review_content_nonexistent_file() { function test_build_review_content_existing_file (line 2004) | fn test_build_review_content_existing_file() { function test_build_review_content_empty_arg_in_git_repo (line 2017) | fn test_build_review_content_empty_arg_in_git_repo() { function test_review_help_text_present (line 2031) | fn test_review_help_text_present() { function test_init_command_recognized (line 2039) | fn test_init_command_recognized() { function test_parse_diff_stat_basic (line 2048) | fn test_parse_diff_stat_basic() { function test_parse_diff_stat_single_file (line 2062) | fn test_parse_diff_stat_single_file() { function test_parse_diff_stat_insertions_only (line 2074) | fn test_parse_diff_stat_insertions_only() { function test_parse_diff_stat_deletions_only (line 2088) | fn test_parse_diff_stat_deletions_only() { function test_parse_diff_stat_empty (line 2102) | fn test_parse_diff_stat_empty() { function test_parse_diff_stat_no_summary_line (line 2110) | fn test_parse_diff_stat_no_summary_line() { function test_parse_diff_stat_multiple_files (line 2122) | fn test_parse_diff_stat_multiple_files() { function test_format_diff_stat_empty (line 2138) | fn test_format_diff_stat_empty() { function test_format_diff_stat_single_entry (line 2152) | fn test_format_diff_stat_single_entry() { function test_format_diff_stat_multiple_entries (line 2173) | fn test_format_diff_stat_multiple_entries() { function test_format_diff_stat_insertions_only_no_deletions_shown (line 2197) | fn test_format_diff_stat_insertions_only_no_deletions_shown() { function build_undo_context_includes_all_actions (line 2216) | fn build_undo_context_includes_all_actions() { function build_undo_context_single_action (line 2231) | fn build_undo_context_single_action() { function build_undo_context_warns_about_stale_references (line 2244) | fn build_undo_context_warns_about_stale_references() { function build_undo_context_recommends_rereading_files (line 2258) | fn build_undo_context_recommends_rereading_files() { function handle_undo_returns_none_on_empty_history (line 2273) | fn handle_undo_returns_none_on_empty_history() { function handle_undo_returns_some_when_files_reverted (line 2280) | fn handle_undo_returns_some_when_files_reverted() { function handle_undo_returns_none_on_zero_count (line 2333) | fn handle_undo_returns_none_on_zero_count() { function handle_undo_returns_none_on_bad_arg (line 2340) | fn handle_undo_returns_none_on_bad_arg() { function handle_undo_dispatches_last_commit (line 2349) | fn handle_undo_dispatches_last_commit() { function undo_last_commit_context_format (line 2364) | fn undo_last_commit_context_format() { function undo_last_commit_in_real_repo (line 2398) | fn undo_last_commit_in_real_repo() { function test_parse_blame_args_file_only (line 2518) | fn test_parse_blame_args_file_only() { function test_parse_blame_args_with_range (line 2525) | fn test_parse_blame_args_with_range() { function test_parse_blame_args_single_line_range (line 2532) | fn test_parse_blame_args_single_line_range() { function test_parse_blame_args_no_args (line 2539) | fn test_parse_blame_args_no_args() { function test_parse_blame_args_no_args_with_spaces (line 2546) | fn test_parse_blame_args_no_args_with_spaces() { function test_parse_blame_args_invalid_range_reversed (line 2552) | fn test_parse_blame_args_invalid_range_reversed() { function test_parse_blame_args_zero_start (line 2559) | fn test_parse_blame_args_zero_start() { function test_parse_blame_args_non_numeric_range_treated_as_file (line 2566) | fn test_parse_blame_args_non_numeric_range_treated_as_file() { function test_colorize_blame_line_typical (line 2574) | fn test_colorize_blame_line_typical() { function test_colorize_blame_line_no_paren (line 2586) | fn test_colorize_blame_line_no_paren() { function test_colorize_blame_multiple_lines (line 2593) | fn test_colorize_blame_multiple_lines() { FILE: src/commands_info.rs function version_line (line 27) | pub fn version_line() -> String { function handle_version (line 35) | pub fn handle_version() { function handle_version_verbose (line 41) | pub fn handle_version_verbose(provider: &str, model: &str) { function handle_status (line 50) | pub fn handle_status( function handle_tokens (line 87) | pub fn handle_tokens(agent: &Agent, session_total: &Usage, model: &str) { function handle_cost (line 133) | pub fn handle_cost(session_total: &Usage, model: &str, messages: &[yoage... function handle_model_show (line 178) | pub fn handle_model_show(model: &str) { function handle_provider_show (line 185) | pub fn handle_provider_show(provider: &str) { function handle_think_show (line 193) | pub fn handle_think_show(thinking: ThinkingLevel) { function handle_profile (line 201) | pub fn handle_profile( function parse_changelog_count (line 304) | pub fn parse_changelog_count(input: &str) -> usize { function handle_changelog (line 312) | pub fn handle_changelog(input: &str) { type EvolutionSession (line 345) | pub struct EvolutionSession { function parse_evolution_tag (line 353) | pub fn parse_evolution_tag(tag: &str) -> Option { function parse_journal_titles (line 375) | pub fn parse_journal_titles(content: &str) -> std::collections::HashMap<... function parse_evolution_count (line 399) | pub fn parse_evolution_count(input: &str) -> usize { function session_stats (line 409) | pub fn session_stats(sessions: &[EvolutionSession], current_day: u32) ->... type CiRun (line 452) | pub struct CiRun { function format_ci_status (line 461) | pub fn format_ci_status(status: &str, conclusion: &str) -> &'static str { function format_ci_time_ago (line 474) | pub fn format_ci_time_ago(created_at: &str) -> String { function parse_iso8601_to_epoch (line 506) | pub fn parse_iso8601_to_epoch(ts: &str) -> Option { function is_leap_year (line 551) | fn is_leap_year(y: u64) -> bool { function parse_ci_runs (line 557) | pub fn parse_ci_runs(json_str: &str) -> Vec { function fetch_ci_runs (line 592) | pub fn fetch_ci_runs(limit: usize) -> Vec { function format_ci_runs (line 614) | pub fn format_ci_runs(runs: &[CiRun]) -> Vec { function handle_evolution (line 633) | pub fn handle_evolution(input: &str) { function test_tokens_display_labels (line 770) | fn test_tokens_display_labels() { function test_tokens_display_with_large_values (line 790) | fn test_tokens_display_with_large_values() { function test_tokens_labels_are_clarified (line 810) | fn test_tokens_labels_are_clarified() { function test_handle_status_with_timing (line 829) | fn test_handle_status_with_timing() { function test_handle_status_context_line (line 862) | fn test_handle_status_context_line() { function test_handle_status_skips_context_when_zero (line 877) | fn test_handle_status_skips_context_when_zero() { function test_parse_changelog_count_default (line 892) | fn test_parse_changelog_count_default() { function test_parse_changelog_count_custom (line 897) | fn test_parse_changelog_count_custom() { function test_parse_changelog_count_clamped (line 904) | fn test_parse_changelog_count_clamped() { function test_parse_changelog_count_invalid (line 910) | fn test_parse_changelog_count_invalid() { function test_handle_changelog_no_panic (line 917) | fn test_handle_changelog_no_panic() { function test_handle_profile_no_panic (line 924) | fn test_handle_profile_no_panic() { function test_handle_profile_with_usage (line 943) | fn test_handle_profile_with_usage() { function test_version_line_contains_version (line 968) | fn test_version_line_contains_version() { function test_version_line_contains_target (line 977) | fn test_version_line_contains_target() { function test_version_line_format (line 988) | fn test_version_line_format() { function test_handle_version_no_panic (line 1000) | fn test_handle_version_no_panic() { function test_handle_version_verbose_no_panic (line 1006) | fn test_handle_version_verbose_no_panic() { function test_parse_evolution_tag_valid (line 1014) | fn test_parse_evolution_tag_valid() { function test_parse_evolution_tag_single_digits (line 1023) | fn test_parse_evolution_tag_single_digits() { function test_parse_evolution_tag_invalid_no_prefix (line 1031) | fn test_parse_evolution_tag_invalid_no_prefix() { function test_parse_evolution_tag_invalid_bad_time (line 1036) | fn test_parse_evolution_tag_invalid_bad_time() { function test_parse_evolution_tag_invalid_not_numbers (line 1042) | fn test_parse_evolution_tag_invalid_not_numbers() { function test_parse_evolution_tag_too_few_parts (line 1048) | fn test_parse_evolution_tag_too_few_parts() { function test_parse_journal_titles (line 1054) | fn test_parse_journal_titles() { function test_parse_journal_titles_empty (line 1085) | fn test_parse_journal_titles_empty() { function test_parse_journal_titles_no_entries (line 1091) | fn test_parse_journal_titles_no_entries() { function test_parse_evolution_count_default (line 1097) | fn test_parse_evolution_count_default() { function test_parse_evolution_count_custom (line 1102) | fn test_parse_evolution_count_custom() { function test_parse_evolution_count_clamped (line 1108) | fn test_parse_evolution_count_clamped() { function test_parse_evolution_count_invalid (line 1114) | fn test_parse_evolution_count_invalid() { function test_session_stats_empty (line 1119) | fn test_session_stats_empty() { function test_session_stats_basic (line 1128) | fn test_session_stats_basic() { function test_session_stats_streak_with_gap (line 1157) | fn test_session_stats_streak_with_gap() { function test_handle_evolution_no_panic (line 1178) | fn test_handle_evolution_no_panic() { function test_parse_ci_runs_valid_json (line 1187) | fn test_parse_ci_runs_valid_json() { function test_parse_ci_runs_empty_array (line 1228) | fn test_parse_ci_runs_empty_array() { function test_parse_ci_runs_invalid_json (line 1234) | fn test_parse_ci_runs_invalid_json() { function test_parse_ci_runs_missing_fields (line 1240) | fn test_parse_ci_runs_missing_fields() { function test_parse_ci_runs_null_conclusion (line 1254) | fn test_parse_ci_runs_null_conclusion() { function test_format_ci_status_icons (line 1271) | fn test_format_ci_status_icons() { function test_format_ci_runs_output (line 1281) | fn test_format_ci_runs_output() { function test_format_ci_runs_empty (line 1310) | fn test_format_ci_runs_empty() { function test_fetch_ci_runs_graceful_when_gh_unavailable (line 1316) | fn test_fetch_ci_runs_graceful_when_gh_unavailable() { function test_parse_iso8601_to_epoch_valid (line 1325) | fn test_parse_iso8601_to_epoch_valid() { function test_parse_iso8601_to_epoch_known_value (line 1335) | fn test_parse_iso8601_to_epoch_known_value() { function test_parse_iso8601_to_epoch_with_time (line 1342) | fn test_parse_iso8601_to_epoch_with_time() { function test_parse_iso8601_to_epoch_invalid (line 1349) | fn test_parse_iso8601_to_epoch_invalid() { function test_format_ci_time_ago_fallback (line 1357) | fn test_format_ci_time_ago_fallback() { FILE: src/commands_map.rs type SymbolKind (line 12) | pub enum SymbolKind { type Symbol (line 27) | pub struct Symbol { type FileSymbols (line 36) | pub struct FileSymbols { function detect_language (line 43) | pub fn detect_language(path: &str) -> Option<&'static str> { function extract_symbols (line 59) | pub fn extract_symbols(code: &str, language: &str) -> Vec { function extract_rust_symbols (line 73) | fn extract_rust_symbols(code: &str) -> Vec { function extract_python_symbols (line 208) | fn extract_python_symbols(code: &str) -> Vec { function extract_js_symbols (line 253) | fn extract_js_symbols(code: &str) -> Vec { function extract_ts_symbols (line 299) | fn extract_ts_symbols(code: &str) -> Vec { function extract_go_symbols (line 336) | fn extract_go_symbols(code: &str) -> Vec { function extract_java_symbols (line 400) | fn extract_java_symbols(code: &str) -> Vec { function ast_grep_rule_for_language (line 472) | fn ast_grep_rule_for_language(language: &str) -> Option { function parse_ast_grep_symbols (line 527) | pub fn parse_ast_grep_symbols(json_str: &str, language: &str) -> Vec(s: &'a str, stops: &[char]) -> &'a str { function first_ident_uppercase (line 715) | fn first_ident_uppercase(line: &str) -> bool { function extract_symbols_ast_grep (line 739) | pub fn extract_symbols_ast_grep(path: &str, language: &str) -> Option, public_only: bool) -> Vec String { function format_repo_map (line 898) | pub fn format_repo_map(entries: &[FileSymbols]) -> String { function generate_repo_map_for_prompt_with_limit (line 930) | pub fn generate_repo_map_for_prompt_with_limit(max_chars: usize) -> Opti... constant REPO_MAP_MAX_CHARS (line 970) | const REPO_MAP_MAX_CHARS: usize = 16_000; function generate_repo_map_for_prompt (line 973) | pub fn generate_repo_map_for_prompt() -> Option { function handle_map (line 982) | pub fn handle_map(input: &str) { function extract_rust_symbols_basic (line 1034) | fn extract_rust_symbols_basic() { function extract_rust_skips_test_module (line 1080) | fn extract_rust_skips_test_module() { function extract_rust_pub_visibility (line 1101) | fn extract_rust_pub_visibility() { function extract_python_symbols (line 1111) | fn extract_python_symbols() { function extract_python_skips_indented (line 1147) | fn extract_python_skips_indented() { function extract_js_symbols (line 1159) | fn extract_js_symbols() { function extract_typescript_symbols (line 1183) | fn extract_typescript_symbols() { function extract_go_symbols (line 1211) | fn extract_go_symbols() { function extract_go_method (line 1240) | fn extract_go_method() { function extract_java_symbols (line 1252) | fn extract_java_symbols() { function detect_language_known_extensions (line 1287) | fn detect_language_known_extensions() { function detect_language_unknown_extension (line 1299) | fn detect_language_unknown_extension() { function format_repo_map_empty_project (line 1308) | fn format_repo_map_empty_project() { function format_repo_map_basic (line 1318) | fn format_repo_map_basic() { function generate_repo_map_respects_size_limit (line 1347) | fn generate_repo_map_respects_size_limit() { function generate_repo_map_for_prompt_does_not_panic (line 1361) | fn generate_repo_map_for_prompt_does_not_panic() { function handle_map_no_panic_empty (line 1369) | fn handle_map_no_panic_empty() { function handle_map_no_panic_with_path (line 1375) | fn handle_map_no_panic_with_path() { function handle_map_no_panic_with_all (line 1381) | fn handle_map_no_panic_with_all() { function map_in_known_commands (line 1389) | fn map_in_known_commands() { function map_in_help_text (line 1397) | fn map_in_help_text() { function map_has_detailed_help (line 1406) | fn map_has_detailed_help() { function ast_grep_rule_exists_for_supported_languages (line 1420) | fn ast_grep_rule_exists_for_supported_languages() { function ast_grep_rule_none_for_unknown_language (line 1430) | fn ast_grep_rule_none_for_unknown_language() { function parse_ast_grep_symbols_empty_input (line 1436) | fn parse_ast_grep_symbols_empty_input() { function parse_ast_grep_symbols_invalid_json (line 1442) | fn parse_ast_grep_symbols_invalid_json() { function parse_ast_grep_symbols_rust_function (line 1448) | fn parse_ast_grep_symbols_rust_function() { function parse_ast_grep_symbols_rust_struct (line 1464) | fn parse_ast_grep_symbols_rust_struct() { function parse_ast_grep_symbols_rust_impl (line 1479) | fn parse_ast_grep_symbols_rust_impl() { function parse_ast_grep_symbols_rust_enum_and_trait (line 1493) | fn parse_ast_grep_symbols_rust_enum_and_trait() { function parse_ast_grep_symbols_private_fn (line 1517) | fn parse_ast_grep_symbols_private_fn() { function parse_ast_grep_symbols_python (line 1531) | fn parse_ast_grep_symbols_python() { function parse_ast_grep_symbols_go (line 1555) | fn parse_ast_grep_symbols_go() { function parse_symbol_from_text_various_rust (line 1569) | fn parse_symbol_from_text_various_rust() { function parse_symbol_from_text_typescript (line 1586) | fn parse_symbol_from_text_typescript() { function extract_symbols_ast_grep_returns_none_when_sg_unavailable (line 1599) | fn extract_symbols_ast_grep_returns_none_when_sg_unavailable() { function build_repo_map_with_regex_backend (line 1610) | fn build_repo_map_with_regex_backend() { function handle_map_no_panic_with_regex_flag (line 1626) | fn handle_map_no_panic_with_regex_flag() { function handle_map_no_panic_with_regex_and_all (line 1631) | fn handle_map_no_panic_with_regex_and_all() { function map_backend_display (line 1636) | fn map_backend_display() { FILE: src/commands_memory.rs function handle_remember (line 14) | pub fn handle_remember(input: &str) { function handle_memories (line 46) | pub fn handle_memories(input: &str) { function handle_forget (line 88) | pub fn handle_forget(input: &str) { function test_remember_command_recognized (line 134) | fn test_remember_command_recognized() { function test_memories_command_recognized (line 144) | fn test_memories_command_recognized() { function test_forget_command_recognized (line 153) | fn test_forget_command_recognized() { function test_remember_command_matching (line 163) | fn test_remember_command_matching() { function test_forget_command_matching (line 172) | fn test_forget_command_matching() { function test_memory_crud_roundtrip (line 182) | fn test_memory_crud_roundtrip() { function test_memory_format_for_prompt_integration (line 215) | fn test_memory_format_for_prompt_integration() { function test_memories_command_with_search_arg (line 230) | fn test_memories_command_with_search_arg() { function test_search_memories_from_command (line 237) | fn test_search_memories_from_command() { FILE: src/commands_project.rs function set_plan_mode (line 29) | pub fn set_plan_mode(enabled: bool) { function is_plan_mode (line 34) | pub fn is_plan_mode() -> bool { constant PLAN_MODE_PROMPT (line 39) | pub const PLAN_MODE_PROMPT: &str = "\ function rw_read_or_recover (line 48) | fn rw_read_or_recover(lock: &RwLock) -> std::sync::RwLockReadGuard... function rw_write_or_recover (line 53) | fn rw_write_or_recover(lock: &RwLock) -> std::sync::RwLockWriteGua... type TodoStatus (line 60) | pub enum TodoStatus { method fmt (line 67) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type TodoItem (line 77) | pub struct TodoItem { function todo_add (line 87) | pub fn todo_add(description: &str) -> usize { function todo_update (line 99) | pub fn todo_update(id: usize, status: TodoStatus) -> Result<(), String> { function todo_list (line 111) | pub fn todo_list() -> Vec { function todo_clear (line 116) | pub fn todo_clear() { function todo_remove (line 122) | pub fn todo_remove(id: usize) -> Result { function format_todo_list (line 132) | pub fn format_todo_list(items: &[TodoItem]) -> String { function handle_todo (line 151) | pub fn handle_todo(input: &str) -> String { constant CONTEXT_SUBCOMMANDS (line 226) | const CONTEXT_SUBCOMMANDS: &[&str] = &["system", "tokens"]; function context_subcommands (line 228) | pub fn context_subcommands() -> &'static [&'static str] { function handle_context (line 232) | pub fn handle_context(input: &str, system_prompt: &str, agent: &Agent) { function show_context_tokens (line 244) | fn show_context_tokens(system_prompt: &str, agent: &Agent) { function show_project_context_files (line 308) | fn show_project_context_files() { type PromptSection (line 327) | pub struct PromptSection { function parse_prompt_sections (line 336) | pub fn parse_prompt_sections(prompt: &str) -> Vec { function estimate_tokens (line 384) | pub fn estimate_tokens(text: &str) -> usize { function show_system_prompt_sections (line 388) | fn show_system_prompt_sections(prompt: &str) { function scan_important_files (line 443) | pub fn scan_important_files(dir: &std::path::Path) -> Vec { function scan_important_dirs (line 497) | pub fn scan_important_dirs(dir: &std::path::Path) -> Vec { function build_commands_for_project (line 524) | pub fn build_commands_for_project(project_type: &ProjectType) -> Vec<(&'... function extract_project_name_from_readme (line 555) | fn extract_project_name_from_readme(dir: &std::path::Path) -> Option Option { function extract_name_from_package_json (line 592) | fn extract_name_from_package_json(dir: &std::path::Path) -> Option String { function generate_init_content (line 631) | pub fn generate_init_content(dir: &std::path::Path) -> String { function handle_init (line 696) | pub fn handle_init() { function handle_docs (line 725) | pub fn handle_docs(input: &str) { type ProjectType (line 763) | pub enum ProjectType { method fmt (line 773) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function detect_project_type (line 786) | pub fn detect_project_type(dir: &std::path::Path) -> ProjectType { constant PLAN_SUBCOMMANDS (line 808) | pub const PLAN_SUBCOMMANDS: &[&str] = &["on", "off", "open", "close"]; function parse_plan_task (line 812) | pub fn parse_plan_task(input: &str) -> Option { function build_plan_prompt (line 827) | pub fn build_plan_prompt(task: &str) -> String { function handle_plan (line 857) | pub async fn handle_plan( constant SKILL_SUBCOMMANDS (line 924) | pub const SKILL_SUBCOMMANDS: &[&str] = &["list", "show", "path"]; function handle_skill (line 931) | pub fn handle_skill(input: &str, skills: &yoagent::skills::SkillSet) { function skill_list (line 950) | fn skill_list(skills: &yoagent::skills::SkillSet) { function skill_path (line 978) | fn skill_path(skills: &yoagent::skills::SkillSet) { function skill_show (line 1006) | fn skill_show(name: &str, skills: &yoagent::skills::SkillSet) { function detect_project_type_rust (line 1053) | fn detect_project_type_rust() { function detect_project_type_node (line 1060) | fn detect_project_type_node() { function detect_project_type_python_pyproject (line 1067) | fn detect_project_type_python_pyproject() { function detect_project_type_python_setup_py (line 1074) | fn detect_project_type_python_setup_py() { function detect_project_type_python_setup_cfg (line 1081) | fn detect_project_type_python_setup_cfg() { function detect_project_type_go (line 1088) | fn detect_project_type_go() { function detect_project_type_make (line 1095) | fn detect_project_type_make() { function detect_project_type_make_lowercase (line 1102) | fn detect_project_type_make_lowercase() { function detect_project_type_unknown_empty_dir (line 1109) | fn detect_project_type_unknown_empty_dir() { function detect_project_type_priority_rust_over_make (line 1115) | fn detect_project_type_priority_rust_over_make() { function project_type_display (line 1126) | fn project_type_display() { function scan_important_files_finds_known_files (line 1138) | fn scan_important_files_finds_known_files() { function scan_important_files_empty_dir (line 1150) | fn scan_important_files_empty_dir() { function scan_important_files_ignores_unknown (line 1157) | fn scan_important_files_ignores_unknown() { function scan_important_dirs_finds_known_dirs (line 1167) | fn scan_important_dirs_finds_known_dirs() { function scan_important_dirs_empty_dir (line 1179) | fn scan_important_dirs_empty_dir() { function scan_important_dirs_ignores_files (line 1186) | fn scan_important_dirs_ignores_files() { function detect_project_name_from_cargo_toml (line 1197) | fn detect_project_name_from_cargo_toml() { function detect_project_name_from_package_json (line 1208) | fn detect_project_name_from_package_json() { function detect_project_name_from_readme (line 1219) | fn detect_project_name_from_readme() { function detect_project_name_cargo_over_readme (line 1226) | fn detect_project_name_cargo_over_readme() { function detect_project_name_fallback_to_dir_name (line 1239) | fn detect_project_name_fallback_to_dir_name() { function extract_readme_skips_blank_lines (line 1250) | fn extract_readme_skips_blank_lines() { function extract_readme_empty_title_skipped (line 1257) | fn extract_readme_empty_title_skipped() { function cargo_toml_name_with_single_quotes (line 1266) | fn cargo_toml_name_with_single_quotes() { function cargo_toml_name_with_spaces_around_equals (line 1273) | fn cargo_toml_name_with_spaces_around_equals() { function build_commands_rust (line 1286) | fn build_commands_rust() { function build_commands_unknown_empty (line 1294) | fn build_commands_unknown_empty() { function build_commands_node (line 1300) | fn build_commands_node() { function build_commands_python (line 1306) | fn build_commands_python() { function build_commands_go (line 1312) | fn build_commands_go() { function generate_init_content_rust_project (line 1320) | fn generate_init_content_rust_project() { function generate_init_content_unknown_project (line 1339) | fn generate_init_content_unknown_project() { function generate_init_content_includes_dirs_and_files (line 1351) | fn generate_init_content_includes_dirs_and_files() { function parse_plan_task_with_description (line 1364) | fn parse_plan_task_with_description() { function parse_plan_task_empty (line 1370) | fn parse_plan_task_empty() { function parse_plan_task_whitespace_only (line 1376) | fn parse_plan_task_whitespace_only() { function parse_plan_task_preserves_full_description (line 1382) | fn parse_plan_task_preserves_full_description() { function build_plan_prompt_contains_task (line 1393) | fn build_plan_prompt_contains_task() { function build_plan_prompt_contains_no_tools_instruction (line 1402) | fn build_plan_prompt_contains_no_tools_instruction() { function build_plan_prompt_contains_structure_sections (line 1411) | fn build_plan_prompt_contains_structure_sections() { function test_todo_add_returns_incrementing_ids (line 1437) | fn test_todo_add_returns_incrementing_ids() { function test_todo_update_status (line 1450) | fn test_todo_update_status() { function test_todo_update_invalid_id (line 1464) | fn test_todo_update_invalid_id() { function test_todo_remove (line 1473) | fn test_todo_remove() { function test_todo_remove_invalid_id (line 1485) | fn test_todo_remove_invalid_id() { function test_todo_clear (line 1494) | fn test_todo_clear() { function test_todo_list_empty (line 1506) | fn test_todo_list_empty() { function test_format_todo_list (line 1513) | fn test_format_todo_list() { function test_format_todo_list_empty (line 1536) | fn test_format_todo_list_empty() { function test_handle_todo_add (line 1543) | fn test_handle_todo_add() { function test_handle_todo_show_empty (line 1553) | fn test_handle_todo_show_empty() { function test_handle_todo_done (line 1561) | fn test_handle_todo_done() { function test_handle_todo_wip (line 1571) | fn test_handle_todo_wip() { function test_handle_todo_remove_via_command (line 1581) | fn test_handle_todo_remove_via_command() { function test_handle_todo_clear_via_command (line 1591) | fn test_handle_todo_clear_via_command() { function test_handle_todo_unknown_subcommand (line 1601) | fn test_handle_todo_unknown_subcommand() { function test_handle_todo_add_empty_description (line 1608) | fn test_handle_todo_add_empty_description() { function test_todo_in_known_commands (line 1616) | fn test_todo_in_known_commands() { function test_todo_help_exists (line 1624) | fn test_todo_help_exists() { function test_todo_in_help_text (line 1634) | fn test_todo_in_help_text() { function test_context_system_sections (line 1642) | fn test_context_system_sections() { function test_context_system_empty_prompt (line 1664) | fn test_context_system_empty_prompt() { function test_context_system_no_headers (line 1670) | fn test_context_system_no_headers() { function test_context_system_preamble_before_header (line 1680) | fn test_context_system_preamble_before_header() { function test_context_system_consecutive_headers (line 1689) | fn test_context_system_consecutive_headers() { function test_estimate_tokens (line 1701) | fn test_estimate_tokens() { function test_context_default_behavior (line 1711) | fn test_context_default_behavior() { function test_context_system_subcommand (line 1722) | fn test_context_system_subcommand() { function test_context_subcommands_list (line 1732) | fn test_context_subcommands_list() { function test_context_tokens_subcommand (line 1739) | fn test_context_tokens_subcommand() { function test_context_tokens_section_breakdown (line 1749) | fn test_context_tokens_section_breakdown() { function test_context_tokens_single_section_no_breakdown (line 1763) | fn test_context_tokens_single_section_no_breakdown() { function test_section_breakdown_token_counts (line 1774) | fn test_section_breakdown_token_counts() { function test_detect_project_type_rust (line 1794) | fn test_detect_project_type_rust() { function test_detect_project_type_node (line 1801) | fn test_detect_project_type_node() { function test_detect_project_type_python_pyproject (line 1810) | fn test_detect_project_type_python_pyproject() { function test_detect_project_type_python_setup_py (line 1819) | fn test_detect_project_type_python_setup_py() { function test_detect_project_type_go (line 1828) | fn test_detect_project_type_go() { function test_detect_project_type_makefile (line 1837) | fn test_detect_project_type_makefile() { function test_detect_project_type_unknown (line 1846) | fn test_detect_project_type_unknown() { function test_detect_project_type_priority_rust_over_makefile (line 1855) | fn test_detect_project_type_priority_rust_over_makefile() { function test_project_type_display (line 1866) | fn test_project_type_display() { function test_scan_important_files_in_current_project (line 1876) | fn test_scan_important_files_in_current_project() { function test_scan_important_files_empty_dir (line 1887) | fn test_scan_important_files_empty_dir() { function test_scan_important_files_with_readme (line 1896) | fn test_scan_important_files_with_readme() { function test_scan_important_dirs_in_current_project (line 1914) | fn test_scan_important_dirs_in_current_project() { function test_scan_important_dirs_empty_dir (line 1925) | fn test_scan_important_dirs_empty_dir() { function test_scan_important_dirs_with_subdirs (line 1934) | fn test_scan_important_dirs_with_subdirs() { function test_build_commands_for_rust (line 1947) | fn test_build_commands_for_rust() { function test_build_commands_for_node (line 1957) | fn test_build_commands_for_node() { function test_build_commands_for_unknown (line 1965) | fn test_build_commands_for_unknown() { function test_detect_project_name_rust (line 1974) | fn test_detect_project_name_rust() { function test_detect_project_name_fallback_to_dir (line 1985) | fn test_detect_project_name_fallback_to_dir() { function test_detect_project_name_from_readme (line 1997) | fn test_detect_project_name_from_readme() { function test_detect_project_name_from_package_json (line 2010) | fn test_detect_project_name_from_package_json() { function test_generate_init_content_rust_project (line 2024) | fn test_generate_init_content_rust_project() { function test_generate_init_content_empty_dir (line 2070) | fn test_generate_init_content_empty_dir() { function test_generate_init_content_node_project (line 2084) | fn test_generate_init_content_node_project() { function test_parse_plan_task_extracts_task (line 2103) | fn test_parse_plan_task_extracts_task() { function test_parse_plan_task_empty_returns_none (line 2109) | fn test_parse_plan_task_empty_returns_none() { function test_build_plan_prompt_structure (line 2115) | fn test_build_plan_prompt_structure() { function test_plan_mode_toggle (line 2124) | fn test_plan_mode_toggle() { function test_parse_plan_task_skips_mode_keywords (line 2137) | fn test_parse_plan_task_skips_mode_keywords() { function test_plan_mode_prompt_content (line 2156) | fn test_plan_mode_prompt_content() { function test_plan_subcommands (line 2166) | fn test_plan_subcommands() { function test_docs_command_recognized (line 2176) | fn test_docs_command_recognized() { function test_docs_command_matching (line 2188) | fn test_docs_command_matching() { function test_docs_crate_arg_extraction (line 2199) | fn test_docs_crate_arg_extraction() { function test_plan_in_known_commands (line 2215) | fn test_plan_in_known_commands() { function test_plan_in_help_text (line 2224) | fn test_plan_in_help_text() { function test_skill_in_known_commands (line 2237) | fn test_skill_in_known_commands() { function test_skill_in_help_text (line 2245) | fn test_skill_in_help_text() { function test_skill_list_with_real_skills (line 2252) | fn test_skill_list_with_real_skills() { function test_skill_list_empty (line 2271) | fn test_skill_list_empty() { function test_skill_show_existing (line 2279) | fn test_skill_show_existing() { function test_skill_show_nonexistent (line 2286) | fn test_skill_show_nonexistent() { function test_skill_path (line 2293) | fn test_skill_path() { function test_skill_path_empty (line 2300) | fn test_skill_path_empty() { function test_skill_unknown_subcommand (line 2307) | fn test_skill_unknown_subcommand() { function test_skill_show_bare (line 2314) | fn test_skill_show_bare() { function test_skill_with_temp_dir (line 2321) | fn test_skill_with_temp_dir() { FILE: src/commands_refactor.rs function parse_extract_args (line 9) | pub fn parse_extract_args(input: &str) -> Option<(String, String, String... function find_symbol_block (line 30) | pub fn find_symbol_block(source: &str, symbol: &str) -> Option<(usize, u... function extract_symbol (line 156) | pub fn extract_symbol( function handle_extract (line 239) | pub fn handle_extract(input: &str) { function handle_refactor (line 329) | pub fn handle_refactor(input: &str) { function is_word_boundary_char (line 393) | fn is_word_boundary_char(c: char) -> bool { function is_word_start (line 400) | fn is_word_start(text: &str, pos: usize) -> bool { function is_word_end (line 413) | fn is_word_end(text: &str, pos: usize) -> bool { type RenameMatch (line 425) | pub struct RenameMatch { type RenameResult (line 434) | pub struct RenameResult { function rename_in_project (line 444) | pub fn rename_in_project( function find_rename_matches (line 493) | pub fn find_rename_matches(old_name: &str) -> Vec { function find_word_boundary_matches (line 528) | pub fn find_word_boundary_matches(text: &str, pattern: &str) -> Vec Vec { function format_rename_preview (line 581) | pub fn format_rename_preview(matches: &[RenameMatch], old_name: &str, ne... function apply_rename (line 625) | pub fn apply_rename(matches: &[RenameMatch], old_name: &str, new_name: &... function replace_word_boundary (line 669) | pub fn replace_word_boundary(text: &str, old: &str, new: &str) -> String { function parse_rename_args (line 701) | pub fn parse_rename_args(input: &str) -> Option<(String, String)> { function handle_rename (line 713) | pub fn handle_rename(input: &str) { type MoveArgs (line 771) | pub struct MoveArgs { function parse_move_args (line 779) | pub fn parse_move_args(input: &str) -> Option { function find_impl_blocks (line 821) | pub fn find_impl_blocks(source: &str, type_name: &str) -> Vec<(usize, us... function find_method_in_impl (line 922) | pub fn find_method_in_impl( function move_method (line 1009) | pub fn move_method( function reindent_method (line 1186) | fn reindent_method(method_text: &str, target_indent: &str) -> String { function handle_move (line 1219) | pub fn handle_move(input: &str) { function find_file_with_impl (line 1363) | fn find_file_with_impl(type_name: &str) -> Option { function find_word_boundary_simple_match (line 1398) | fn find_word_boundary_simple_match() { function find_word_boundary_no_match_substring (line 1404) | fn find_word_boundary_no_match_substring() { function find_word_boundary_no_match_prefix (line 1411) | fn find_word_boundary_no_match_prefix() { function find_word_boundary_at_start_of_line (line 1419) | fn find_word_boundary_at_start_of_line() { function find_word_boundary_at_end_of_line (line 1425) | fn find_word_boundary_at_end_of_line() { function find_word_boundary_multiple_matches (line 1431) | fn find_word_boundary_multiple_matches() { function find_word_boundary_with_underscore (line 1437) | fn find_word_boundary_with_underscore() { function find_word_boundary_dots_are_boundaries (line 1444) | fn find_word_boundary_dots_are_boundaries() { function find_word_boundary_empty_pattern (line 1451) | fn find_word_boundary_empty_pattern() { function find_word_boundary_empty_text (line 1457) | fn find_word_boundary_empty_text() { function find_word_boundary_exact_match (line 1463) | fn find_word_boundary_exact_match() { function find_word_boundary_parens_are_boundaries (line 1469) | fn find_word_boundary_parens_are_boundaries() { function replace_word_boundary_simple (line 1477) | fn replace_word_boundary_simple() { function replace_word_boundary_no_partial (line 1483) | fn replace_word_boundary_no_partial() { function replace_word_boundary_multiple (line 1489) | fn replace_word_boundary_multiple() { function replace_word_boundary_empty_pattern (line 1495) | fn replace_word_boundary_empty_pattern() { function replace_word_boundary_no_matches (line 1501) | fn replace_word_boundary_no_matches() { function replace_word_boundary_with_longer_replacement (line 1507) | fn replace_word_boundary_with_longer_replacement() { function replace_word_boundary_with_shorter_replacement (line 1513) | fn replace_word_boundary_with_shorter_replacement() { function parse_rename_args_valid (line 1522) | fn parse_rename_args_valid() { function parse_rename_args_no_args (line 1528) | fn parse_rename_args_no_args() { function parse_rename_args_one_arg (line 1534) | fn parse_rename_args_one_arg() { function parse_rename_args_too_many_args (line 1540) | fn parse_rename_args_too_many_args() { function parse_rename_args_extra_whitespace (line 1546) | fn parse_rename_args_extra_whitespace() { function format_rename_preview_no_matches (line 1554) | fn format_rename_preview_no_matches() { function format_rename_preview_shows_file_and_line (line 1560) | fn format_rename_preview_shows_file_and_line() { function format_rename_preview_multiple_files (line 1575) | fn format_rename_preview_multiple_files() { function apply_rename_modifies_files (line 1600) | fn apply_rename_modifies_files() { function apply_rename_preserves_non_matching_lines (line 1630) | fn apply_rename_preserves_non_matching_lines() { function apply_rename_no_partial_replace (line 1651) | fn apply_rename_no_partial_replace() { function apply_rename_empty_matches (line 1672) | fn apply_rename_empty_matches() { function parse_extract_args_valid (line 1680) | fn parse_extract_args_valid() { function parse_extract_args_missing_target (line 1693) | fn parse_extract_args_missing_target() { function parse_extract_args_too_many (line 1698) | fn parse_extract_args_too_many() { function parse_extract_args_empty (line 1703) | fn parse_extract_args_empty() { function find_symbol_block_simple_fn (line 1710) | fn find_symbol_block_simple_fn() { function find_symbol_block_pub_fn (line 1722) | fn find_symbol_block_pub_fn() { function find_symbol_block_struct (line 1733) | fn find_symbol_block_struct() { function find_symbol_block_enum (line 1743) | fn find_symbol_block_enum() { function find_symbol_block_impl (line 1753) | fn find_symbol_block_impl() { function find_symbol_block_with_doc_comments (line 1764) | fn find_symbol_block_with_doc_comments() { function find_symbol_block_with_attributes (line 1776) | fn find_symbol_block_with_attributes() { function find_symbol_block_not_found (line 1787) | fn find_symbol_block_not_found() { function find_symbol_block_nested_braces (line 1793) | fn find_symbol_block_nested_braces() { function find_symbol_block_among_multiple (line 1803) | fn find_symbol_block_among_multiple() { function find_symbol_block_unit_struct (line 1815) | fn find_symbol_block_unit_struct() { function find_symbol_block_trait (line 1826) | fn find_symbol_block_trait() { function find_symbol_block_async_fn (line 1836) | fn find_symbol_block_async_fn() { function find_symbol_block_no_partial_match (line 1845) | fn find_symbol_block_no_partial_match() { function extract_symbol_moves_function (line 1858) | fn extract_symbol_moves_function() { function extract_symbol_creates_target_if_missing (line 1889) | fn extract_symbol_creates_target_if_missing() { function extract_symbol_not_found (line 1909) | fn extract_symbol_not_found() { function extract_symbol_source_not_found (line 1926) | fn extract_symbol_source_not_found() { function extract_symbol_with_doc_comments_moves_docs (line 1938) | fn extract_symbol_with_doc_comments_moves_docs() { function extract_command_in_known_commands (line 1963) | fn extract_command_in_known_commands() { function find_symbol_block_type_alias (line 1973) | fn find_symbol_block_type_alias() { function find_symbol_block_type_alias_simple (line 1984) | fn find_symbol_block_type_alias_simple() { function find_symbol_block_const (line 1995) | fn find_symbol_block_const() { function find_symbol_block_const_with_doc (line 2006) | fn find_symbol_block_const_with_doc() { function find_symbol_block_static (line 2018) | fn find_symbol_block_static() { function find_symbol_block_static_mut (line 2027) | fn find_symbol_block_static_mut() { function find_symbol_block_pub_const_crate (line 2036) | fn find_symbol_block_pub_const_crate() { function find_symbol_block_const_multiline (line 2045) | fn find_symbol_block_const_multiline() { function extract_symbol_moves_type_alias (line 2059) | fn extract_symbol_moves_type_alias() { function extract_symbol_moves_const (line 2087) | fn extract_symbol_moves_const() { function extract_symbol_moves_static (line 2106) | fn extract_symbol_moves_static() { function test_parse_move_args_basic (line 2135) | fn test_parse_move_args_basic() { function test_parse_move_args_cross_file (line 2144) | fn test_parse_move_args_cross_file() { function test_parse_move_args_missing_method (line 2153) | fn test_parse_move_args_missing_method() { function test_parse_move_args_empty (line 2158) | fn test_parse_move_args_empty() { function test_parse_move_args_too_many (line 2163) | fn test_parse_move_args_too_many() { function test_find_impl_blocks_single (line 2168) | fn test_find_impl_blocks_single() { function test_find_impl_blocks_multiple (line 2176) | fn test_find_impl_blocks_multiple() { function test_find_impl_blocks_not_found (line 2195) | fn test_find_impl_blocks_not_found() { function test_find_method_in_impl_basic (line 2202) | fn test_find_method_in_impl_basic() { function test_find_method_in_impl_with_self_ref (line 2212) | fn test_find_method_in_impl_with_self_ref() { function test_find_method_in_impl_not_found (line 2219) | fn test_find_method_in_impl_not_found() { function test_find_method_with_doc_comments (line 2225) | fn test_find_method_with_doc_comments() { function test_find_method_with_attributes (line 2234) | fn test_find_method_with_attributes() { function test_move_method_same_file (line 2243) | fn test_move_method_same_file() { function test_move_method_cross_file (line 2289) | fn test_move_method_cross_file() { function test_move_method_with_doc_comments (line 2339) | fn test_move_method_with_doc_comments() { function test_move_method_not_found (line 2375) | fn test_move_method_not_found() { function test_move_method_target_impl_not_found (line 2390) | fn test_move_method_target_impl_not_found() { function test_move_method_self_reference_warning (line 2401) | fn test_move_method_self_reference_warning() { function test_move_source_impl_not_found (line 2431) | fn test_move_source_impl_not_found() { function test_move_in_known_commands (line 2442) | fn test_move_in_known_commands() { function test_move_in_help_text (line 2450) | fn test_move_in_help_text() { function test_reindent_method (line 2456) | fn test_reindent_method() { function impl_block_contains (line 2464) | fn impl_block_contains(source: &str, type_name: &str, needle: &str) -> b... function extract_impl_block (line 2470) | fn extract_impl_block(source: &str, type_name: &str) -> String { function test_rename_in_project_empty_old_name (line 2482) | fn test_rename_in_project_empty_old_name() { function test_rename_in_project_empty_new_name (line 2489) | fn test_rename_in_project_empty_new_name() { function test_rename_in_project_same_name (line 2496) | fn test_rename_in_project_same_name() { function test_rename_result_fields (line 2503) | fn test_rename_result_fields() { function test_rename_in_project_scoped_no_match (line 2515) | fn test_rename_in_project_scoped_no_match() { function test_refactor_no_args_shows_help (line 2525) | fn test_refactor_no_args_shows_help() { function test_refactor_in_known_commands (line 2532) | fn test_refactor_in_known_commands() { function test_refactor_help_exists (line 2540) | fn test_refactor_help_exists() { function test_refactor_tab_completion (line 2549) | fn test_refactor_tab_completion() { function test_refactor_tab_completion_filters (line 2567) | fn test_refactor_tab_completion_filters() { function test_refactor_unknown_subcommand (line 2585) | fn test_refactor_unknown_subcommand() { function test_refactor_in_help_text (line 2591) | fn test_refactor_in_help_text() { function find_word_boundary_with_multibyte_context (line 2602) | fn find_word_boundary_with_multibyte_context() { function find_word_boundary_multibyte_no_panic (line 2610) | fn find_word_boundary_multibyte_no_panic() { function find_word_boundary_multibyte_pattern_repeated (line 2618) | fn find_word_boundary_multibyte_pattern_repeated() { function find_word_boundary_multibyte_pattern_no_boundary (line 2627) | fn find_word_boundary_multibyte_pattern_no_boundary() { function find_word_boundary_empty_inputs (line 2635) | fn find_word_boundary_empty_inputs() { function replace_word_boundary_multibyte (line 2642) | fn replace_word_boundary_multibyte() { function replace_word_boundary_multibyte_pattern (line 2649) | fn replace_word_boundary_multibyte_pattern() { function is_word_start_end_at_boundaries (line 2657) | fn is_word_start_end_at_boundaries() { function find_symbol_block_multibyte_comments (line 2667) | fn find_symbol_block_multibyte_comments() { function reindent_method_multibyte (line 2682) | fn reindent_method_multibyte() { function reindent_method_empty (line 2690) | fn reindent_method_empty() { function find_impl_blocks_multibyte_content (line 2695) | fn find_impl_blocks_multibyte_content() { function find_method_in_impl_multibyte (line 2709) | fn find_method_in_impl_multibyte() { FILE: src/commands_retry.rs function handle_retry (line 19) | pub async fn handle_retry( function format_exit_summary (line 58) | pub fn format_exit_summary( function wants_diff (line 133) | fn wants_diff(input: &str) -> bool { function collect_diffs (line 144) | fn collect_diffs(paths: &[String]) -> String { function handle_changes (line 168) | pub fn handle_changes(changes: &SessionChanges, input: &str) { function make_usage (line 195) | fn make_usage(input: u64, output: u64) -> Usage { function test_handle_changes_empty_does_not_panic (line 204) | fn test_handle_changes_empty_does_not_panic() { function test_handle_changes_with_entries_does_not_panic (line 211) | fn test_handle_changes_with_entries_does_not_panic() { function test_handle_changes_diff_flag_does_not_panic (line 220) | fn test_handle_changes_diff_flag_does_not_panic() { function test_handle_changes_diff_flag_with_entries_does_not_panic (line 227) | fn test_handle_changes_diff_flag_with_entries_does_not_panic() { function test_wants_diff_flag_parsing (line 235) | fn test_wants_diff_flag_parsing() { function test_format_exit_summary_empty_returns_none (line 244) | fn test_format_exit_summary_empty_returns_none() { function test_format_exit_summary_single_write (line 251) | fn test_format_exit_summary_single_write() { function test_format_exit_summary_single_edit (line 265) | fn test_format_exit_summary_single_edit() { function test_format_exit_summary_mixed (line 276) | fn test_format_exit_summary_mixed() { function test_format_exit_summary_all_writes (line 290) | fn test_format_exit_summary_all_writes() { function test_exit_summary_with_tokens_no_files (line 302) | fn test_exit_summary_with_tokens_no_files() { function test_exit_summary_with_files_and_cost (line 320) | fn test_exit_summary_with_files_and_cost() { function test_exit_summary_unknown_model_omits_cost (line 339) | fn test_exit_summary_unknown_model_omits_cost() { function test_changes_command_recognized (line 350) | fn test_changes_command_recognized() { function test_changes_command_not_confused_with_other_commands (line 360) | fn test_changes_command_not_confused_with_other_commands() { FILE: src/commands_search.rs function tokenize_quoted (line 22) | pub(crate) fn tokenize_quoted(input: &str) -> Vec { type FindMatch (line 57) | pub struct FindMatch { function fuzzy_score (line 70) | pub fn fuzzy_score(path: &str, pattern: &str) -> Option { function find_files (line 109) | pub fn find_files(pattern: &str) -> Vec { function list_project_files (line 127) | pub(crate) fn list_project_files() -> Vec { constant WALK_DIR_FILE_CAP (line 168) | const WALK_DIR_FILE_CAP: usize = 10_000; constant WALK_DIR_IGNORE (line 173) | const WALK_DIR_IGNORE: &[&str] = &[ function walk_directory (line 188) | fn walk_directory(dir: &str, max_depth: usize) -> Vec { function walk_directory_inner (line 194) | fn walk_directory_inner(dir: &str, max_depth: usize, depth: usize, files... function highlight_match (line 226) | pub fn highlight_match(path: &str, pattern: &str) -> String { function handle_find (line 244) | pub fn handle_find(input: &str) { type IndexEntry (line 278) | pub struct IndexEntry { function extract_first_meaningful_line (line 287) | pub fn extract_first_meaningful_line(content: &str) -> String { function build_project_index (line 302) | pub fn build_project_index() -> Vec { function is_binary_extension (line 332) | pub fn is_binary_extension(path: &str) -> bool { function format_project_index (line 343) | pub fn format_project_index(entries: &[IndexEntry]) -> String { function handle_index (line 402) | pub fn handle_index() { constant OUTLINE_DEFAULT_LIMIT (line 420) | const OUTLINE_DEFAULT_LIMIT: usize = 30; type OutlineMatch (line 424) | struct OutlineMatch { function outline_score (line 437) | fn outline_score(name: &str, query: &str) -> Option { function collect_outline_matches (line 469) | fn collect_outline_matches(entries: &[FileSymbols], query: &str) -> Vec<... function format_outline_match (line 490) | fn format_outline_match(m: &OutlineMatch) -> String { function handle_outline (line 524) | pub fn handle_outline(input: &str) { constant GREP_MAX_MATCHES (line 581) | const GREP_MAX_MATCHES: usize = 50; type GrepArgs (line 585) | pub struct GrepArgs { function parse_grep_args (line 599) | pub fn parse_grep_args(input: &str) -> Option { type GrepMatch (line 639) | pub struct GrepMatch { function run_grep (line 649) | pub fn run_grep(args: &GrepArgs) -> Result, String> { function format_grep_results (line 719) | pub fn format_grep_results(matches: &[GrepMatch], pattern: &str, case_se... function highlight_grep_match (line 754) | fn highlight_grep_match(text: &str, pattern: &str, case_sensitive: bool)... function handle_grep (line 786) | pub fn handle_grep(input: &str) { constant AST_GREP_FLAGS (line 816) | pub const AST_GREP_FLAGS: &[&str] = &["--lang", "--in"]; function is_ast_grep_available (line 819) | pub fn is_ast_grep_available() -> bool { function run_ast_grep_search (line 831) | pub fn run_ast_grep_search( function parse_ast_grep_args (line 876) | pub fn parse_ast_grep_args( function handle_ast_grep (line 924) | pub fn handle_ast_grep(input: &str) { function tokenize_quoted_simple_words (line 960) | fn tokenize_quoted_simple_words() { function tokenize_quoted_double_quoted_group (line 965) | fn tokenize_quoted_double_quoted_group() { function tokenize_quoted_mixed (line 973) | fn tokenize_quoted_mixed() { function tokenize_quoted_empty (line 981) | fn tokenize_quoted_empty() { function tokenize_quoted_no_quotes (line 988) | fn tokenize_quoted_no_quotes() { function tokenize_quoted_adjacent_to_text (line 993) | fn tokenize_quoted_adjacent_to_text() { function tokenize_quoted_empty_quotes (line 999) | fn tokenize_quoted_empty_quotes() { function tokenize_quoted_multiple_spaces (line 1006) | fn tokenize_quoted_multiple_spaces() { function fuzzy_score_no_match (line 1013) | fn fuzzy_score_no_match() { function fuzzy_score_exact_filename (line 1018) | fn fuzzy_score_exact_filename() { function fuzzy_score_case_insensitive (line 1024) | fn fuzzy_score_case_insensitive() { function fuzzy_score_directory_match_lower_than_filename (line 1030) | fn fuzzy_score_directory_match_lower_than_filename() { function fuzzy_score_shorter_path_preferred (line 1041) | fn fuzzy_score_shorter_path_preferred() { function fuzzy_score_extension_match (line 1048) | fn fuzzy_score_extension_match() { function highlight_match_contains_pattern (line 1056) | fn highlight_match_contains_pattern() { function highlight_match_no_match_returns_plain (line 1065) | fn highlight_match_no_match_returns_plain() { function highlight_match_case_insensitive (line 1071) | fn highlight_match_case_insensitive() { function extract_first_meaningful_line_basic (line 1080) | fn extract_first_meaningful_line_basic() { function extract_first_meaningful_line_skips_blanks (line 1086) | fn extract_first_meaningful_line_skips_blanks() { function extract_first_meaningful_line_empty (line 1092) | fn extract_first_meaningful_line_empty() { function extract_first_meaningful_line_all_blank (line 1098) | fn extract_first_meaningful_line_all_blank() { function extract_first_meaningful_line_truncates_long (line 1104) | fn extract_first_meaningful_line_truncates_long() { function is_binary_extension_images (line 1113) | fn is_binary_extension_images() { function is_binary_extension_archives (line 1121) | fn is_binary_extension_archives() { function is_binary_extension_source_files (line 1128) | fn is_binary_extension_source_files() { function is_binary_extension_case_insensitive (line 1137) | fn is_binary_extension_case_insensitive() { function is_binary_extension_lock_files (line 1143) | fn is_binary_extension_lock_files() { function is_binary_extension_compiled (line 1149) | fn is_binary_extension_compiled() { function format_project_index_empty (line 1159) | fn format_project_index_empty() { function format_project_index_single_file (line 1165) | fn format_project_index_single_file() { function format_project_index_multiple_files (line 1180) | fn format_project_index_multiple_files() { function format_project_index_long_path_truncated (line 1199) | fn format_project_index_long_path_truncated() { function find_match_equality (line 1214) | fn find_match_equality() { function find_match_debug (line 1227) | fn find_match_debug() { function walk_directory_finds_files (line 1240) | fn walk_directory_finds_files() { function walk_directory_skips_hidden (line 1252) | fn walk_directory_skips_hidden() { function walk_directory_skips_node_modules (line 1264) | fn walk_directory_skips_node_modules() { function walk_directory_respects_max_depth (line 1276) | fn walk_directory_respects_max_depth() { function walk_directory_respects_file_cap (line 1289) | fn walk_directory_respects_file_cap() { function walk_directory_skips_expanded_ignore_dirs (line 1308) | fn walk_directory_skips_expanded_ignore_dirs() { function parse_grep_args_basic_pattern (line 1336) | fn parse_grep_args_basic_pattern() { function parse_grep_args_with_path (line 1344) | fn parse_grep_args_with_path() { function parse_grep_args_case_sensitive_flag (line 1352) | fn parse_grep_args_case_sensitive_flag() { function parse_grep_args_case_long_flag (line 1360) | fn parse_grep_args_case_long_flag() { function parse_grep_args_empty_returns_none (line 1367) | fn parse_grep_args_empty_returns_none() { function parse_grep_args_only_flag_returns_none (line 1373) | fn parse_grep_args_only_flag_returns_none() { function parse_grep_args_quoted_pattern (line 1379) | fn parse_grep_args_quoted_pattern() { function parse_grep_args_quoted_pattern_with_path (line 1387) | fn parse_grep_args_quoted_pattern_with_path() { function parse_grep_args_quoted_pattern_case_sensitive (line 1395) | fn parse_grep_args_quoted_pattern_case_sensitive() { function parse_grep_args_backward_compat_single_word (line 1403) | fn parse_grep_args_backward_compat_single_word() { function format_grep_results_empty (line 1411) | fn format_grep_results_empty() { function format_grep_results_with_matches (line 1417) | fn format_grep_results_with_matches() { function format_grep_results_truncation (line 1439) | fn format_grep_results_truncation() { function format_grep_results_single_match (line 1455) | fn format_grep_results_single_match() { function handle_grep_finds_real_matches (line 1468) | fn handle_grep_finds_real_matches() { function grep_in_known_commands (line 1484) | fn grep_in_known_commands() { function grep_in_help_text (line 1492) | fn grep_in_help_text() { function test_is_ast_grep_available_no_panic (line 1500) | fn test_is_ast_grep_available_no_panic() { function test_ast_grep_search_no_sg (line 1506) | fn test_ast_grep_search_no_sg() { function test_ast_in_known_commands (line 1516) | fn test_ast_in_known_commands() { function test_ast_in_help_text (line 1524) | fn test_ast_in_help_text() { function test_parse_ast_grep_args_simple_pattern (line 1530) | fn test_parse_ast_grep_args_simple_pattern() { function test_parse_ast_grep_args_with_lang (line 1540) | fn test_parse_ast_grep_args_with_lang() { function test_parse_ast_grep_args_with_lang_and_path (line 1550) | fn test_parse_ast_grep_args_with_lang_and_path() { function test_parse_ast_grep_args_flags_before_pattern (line 1560) | fn test_parse_ast_grep_args_flags_before_pattern() { function test_parse_ast_grep_args_empty (line 1569) | fn test_parse_ast_grep_args_empty() { function test_parse_ast_grep_args_missing_lang_value (line 1576) | fn test_parse_ast_grep_args_missing_lang_value() { function test_parse_ast_grep_args_missing_in_value (line 1583) | fn test_parse_ast_grep_args_missing_in_value() { function test_ast_tab_completion (line 1590) | fn test_ast_tab_completion() { function test_ast_tab_completion_filters (line 1604) | fn test_ast_tab_completion_filters() { function test_handle_ast_grep_no_panic_empty (line 1618) | fn test_handle_ast_grep_no_panic_empty() { function test_handle_ast_grep_no_panic_with_pattern (line 1624) | fn test_handle_ast_grep_no_panic_with_pattern() { function list_project_files_returns_known_file (line 1630) | fn list_project_files_returns_known_file() { function test_find_command_recognized (line 1648) | fn test_find_command_recognized() { function test_fuzzy_score_basic_match (line 1660) | fn test_fuzzy_score_basic_match() { function test_fuzzy_score_no_match (line 1668) | fn test_fuzzy_score_no_match() { function test_fuzzy_score_case_insensitive (line 1674) | fn test_fuzzy_score_case_insensitive() { function test_fuzzy_score_filename_match_higher (line 1684) | fn test_fuzzy_score_filename_match_higher() { function test_fuzzy_score_start_of_filename_bonus (line 1700) | fn test_fuzzy_score_start_of_filename_bonus() { function test_find_files_returns_sorted (line 1715) | fn test_find_files_returns_sorted() { function test_find_files_no_results (line 1731) | fn test_find_files_no_results() { function test_find_command_matching (line 1740) | fn test_find_command_matching() { function test_highlight_match_basic (line 1751) | fn test_highlight_match_basic() { function test_extract_first_meaningful_line_skips_blanks (line 1760) | fn test_extract_first_meaningful_line_skips_blanks() { function test_extract_first_meaningful_line_empty (line 1767) | fn test_extract_first_meaningful_line_empty() { function test_extract_first_meaningful_line_truncates_long_lines (line 1774) | fn test_extract_first_meaningful_line_truncates_long_lines() { function test_is_binary_extension (line 1782) | fn test_is_binary_extension() { function test_format_project_index_empty (line 1792) | fn test_format_project_index_empty() { function test_format_project_index_with_entries (line 1799) | fn test_format_project_index_with_entries() { function test_build_project_index_tempdir (line 1821) | fn test_build_project_index_tempdir() { function test_index_entry_construction (line 1849) | fn test_index_entry_construction() { function test_format_project_index_single_file (line 1861) | fn test_format_project_index_single_file() { function outline_score_exact_match (line 1874) | fn outline_score_exact_match() { function outline_score_prefix_match (line 1880) | fn outline_score_prefix_match() { function outline_score_substring_match (line 1886) | fn outline_score_substring_match() { function outline_score_no_match (line 1892) | fn outline_score_no_match() { function outline_score_case_insensitive (line 1897) | fn outline_score_case_insensitive() { function outline_score_case_bonus (line 1903) | fn outline_score_case_bonus() { function outline_score_exact_beats_prefix (line 1913) | fn outline_score_exact_beats_prefix() { function outline_collect_matches_filters (line 1923) | fn outline_collect_matches_filters() { function outline_collect_matches_sorts_by_score (line 1962) | fn outline_collect_matches_sorts_by_score() { function outline_format_match_contains_path_and_line (line 1996) | fn outline_format_match_contains_path_and_line() { function outline_result_limit (line 2011) | fn outline_result_limit() { FILE: src/commands_session.rs function rw_read_or_recover (line 20) | fn rw_read_or_recover(lock: &RwLock) -> std::sync::RwLockReadGuard... function rw_write_or_recover (line 25) | fn rw_write_or_recover(lock: &RwLock) -> std::sync::RwLockWriteGua... constant COMPACT_THRASH_THRESHOLD (line 35) | const COMPACT_THRASH_THRESHOLD: u32 = 2; constant COMPACT_MIN_REDUCTION (line 38) | const COMPACT_MIN_REDUCTION: f64 = 0.10; function reset_compact_thrash (line 41) | pub fn reset_compact_thrash() { function is_compact_thrashing (line 46) | pub fn is_compact_thrashing() -> bool { function compact_agent (line 54) | pub fn compact_agent(agent: &mut Agent) -> Option<(usize, u64, usize, u6... function auto_compact_if_needed (line 83) | pub fn auto_compact_if_needed(agent: &mut Agent) { function proactive_compact_if_needed (line 111) | pub fn proactive_compact_if_needed(agent: &mut Agent) -> bool { function handle_compact (line 136) | pub fn handle_compact(agent: &mut Agent) { function last_session_exists (line 161) | pub fn last_session_exists() -> bool { function auto_save_on_exit (line 168) | pub fn auto_save_on_exit(agent: &Agent) { function auto_save_on_exit_in (line 174) | fn auto_save_on_exit_in(agent: &Agent, root: &std::path::Path) { function continue_session_path (line 194) | pub fn continue_session_path() -> &'static str { function continue_session_path_in (line 200) | fn continue_session_path_in(root: &std::path::Path) -> &'static str { function handle_save (line 210) | pub fn handle_save(agent: &Agent, input: &str) { function handle_load (line 231) | pub fn handle_load(agent: &mut Agent, input: &str) { function handle_history (line 252) | pub fn handle_history(agent: &Agent) { function handle_search (line 269) | pub fn handle_search(agent: &Agent, input: &str) { type Bookmarks (line 307) | pub type Bookmarks = HashMap; function parse_bookmark_name (line 311) | pub fn parse_bookmark_name(input: &str, prefix: &str) -> Option { function handle_mark (line 321) | pub fn handle_mark(agent: &Agent, input: &str, bookmarks: &mut Bookmarks) { function handle_jump (line 348) | pub fn handle_jump(agent: &mut Agent, input: &str, bookmarks: &Bookmarks) { function handle_marks (line 381) | pub fn handle_marks(bookmarks: &Bookmarks) { constant DEFAULT_EXPORT_PATH (line 399) | const DEFAULT_EXPORT_PATH: &str = "conversation.md"; function format_conversation_as_markdown (line 407) | pub fn format_conversation_as_markdown(messages: &[AgentMessage]) -> Str... function parse_export_path (line 466) | pub fn parse_export_path(input: &str) -> &str { function handle_export (line 476) | pub fn handle_export(agent: &Agent, input: &str) { type StashEntry (line 498) | struct StashEntry { function parse_stash_subcommand (line 511) | pub fn parse_stash_subcommand(input: &str) -> (&str, &str) { function handle_stash_push (line 540) | pub fn handle_stash_push(agent: &mut Agent, description: &str) -> String { function handle_stash_pop (line 581) | pub fn handle_stash_pop(agent: &mut Agent) -> String { function handle_stash_list (line 604) | pub fn handle_stash_list() -> String { function handle_stash_drop (line 627) | pub fn handle_stash_drop(index_str: &str) -> String { function handle_stash (line 658) | pub fn handle_stash(agent: &mut Agent, input: &str) -> String { function stash_default_description (line 672) | pub fn stash_default_description(index: usize) -> String { function clear_confirmation_message (line 682) | pub fn clear_confirmation_message(message_count: usize, token_count: u64... type Checkpoint (line 696) | pub struct Checkpoint { type CheckpointStore (line 703) | pub struct CheckpointStore { method new (line 712) | pub fn new() -> Self { method save (line 719) | pub fn save(&mut self, name: &str, changes: &SessionChanges) { method restore (line 739) | pub fn restore(&self, name: &str) -> Result, String> { method list (line 768) | pub fn list(&self) -> Vec<(&str, usize, std::time::Instant)> { method diff (line 780) | pub fn diff(&self, name: &str) -> Result { method delete (line 814) | pub fn delete(&mut self, name: &str) -> bool { method len (line 820) | pub fn len(&self) -> usize { constant CHECKPOINT_SUBCOMMANDS (line 708) | const CHECKPOINT_SUBCOMMANDS: &[&str] = &["save", "list", "restore", "di... function is_valid_checkpoint_name (line 826) | fn is_valid_checkpoint_name(name: &str) -> bool { function format_checkpoint_age (line 834) | fn format_checkpoint_age(created: std::time::Instant) -> String { function handle_checkpoint (line 847) | pub fn handle_checkpoint(input: &str, store: &mut CheckpointStore, chang... function checkpoint_subcommands (line 958) | pub fn checkpoint_subcommands() -> &'static [&'static str] { function test_compact_thrash_constants (line 972) | fn test_compact_thrash_constants() { function test_reset_compact_thrash (line 978) | fn test_reset_compact_thrash() { function test_compact_thrash_detection_increments_on_low_reduction (line 986) | fn test_compact_thrash_detection_increments_on_low_reduction() { function test_compact_thrash_detection_resets_on_meaningful_reduction (line 1000) | fn test_compact_thrash_detection_resets_on_meaningful_reduction() { function test_is_compact_thrashing_boundary (line 1015) | fn test_is_compact_thrashing_boundary() { function test_auto_save_session_path_constant (line 1034) | fn test_auto_save_session_path_constant() { function test_continue_session_path_fallback (line 1039) | fn test_continue_session_path_fallback() { function test_last_session_exists_returns_bool (line 1051) | fn test_last_session_exists_returns_bool() { function test_auto_save_creates_directory_and_file (line 1057) | fn test_auto_save_creates_directory_and_file() { function test_continue_session_path_prefers_auto_save (line 1081) | fn test_continue_session_path_prefers_auto_save() { function test_continue_session_path_falls_back_to_default (line 1098) | fn test_continue_session_path_falls_back_to_default() { function test_format_conversation_as_markdown_empty (line 1116) | fn test_format_conversation_as_markdown_empty() { function test_format_conversation_as_markdown_user_message (line 1123) | fn test_format_conversation_as_markdown_user_message() { function test_format_conversation_as_markdown_mixed_messages (line 1131) | fn test_format_conversation_as_markdown_mixed_messages() { function test_format_conversation_as_markdown_thinking_block (line 1169) | fn test_format_conversation_as_markdown_thinking_block() { function test_format_conversation_as_markdown_skips_tool_calls (line 1200) | fn test_format_conversation_as_markdown_skips_tool_calls() { function test_parse_export_path_default (line 1232) | fn test_parse_export_path_default() { function test_parse_export_path_custom (line 1237) | fn test_parse_export_path_custom() { function test_parse_export_path_with_directory (line 1242) | fn test_parse_export_path_with_directory() { function test_parse_export_path_whitespace (line 1250) | fn test_parse_export_path_whitespace() { function test_clear_confirmation_empty_conversation (line 1257) | fn test_clear_confirmation_empty_conversation() { function test_clear_confirmation_at_threshold (line 1262) | fn test_clear_confirmation_at_threshold() { function test_clear_confirmation_above_threshold_contains_count (line 1267) | fn test_clear_confirmation_above_threshold_contains_count() { function test_clear_confirmation_above_threshold_contains_tokens (line 1278) | fn test_clear_confirmation_above_threshold_contains_tokens() { function test_clear_confirmation_just_above_threshold (line 1289) | fn test_clear_confirmation_just_above_threshold() { function test_clear_force_in_known_commands (line 1298) | fn test_clear_force_in_known_commands() { function test_proactive_compact_threshold_is_lower_than_auto (line 1308) | fn test_proactive_compact_threshold_is_lower_than_auto() { function test_proactive_compact_threshold_in_valid_range (line 1319) | fn test_proactive_compact_threshold_in_valid_range() { function test_parse_stash_subcommand_push (line 1332) | fn test_parse_stash_subcommand_push() { function test_parse_stash_subcommand_pop (line 1339) | fn test_parse_stash_subcommand_pop() { function test_parse_stash_subcommand_list (line 1346) | fn test_parse_stash_subcommand_list() { function test_parse_stash_subcommand_drop (line 1353) | fn test_parse_stash_subcommand_drop() { function test_parse_stash_subcommand_default (line 1360) | fn test_parse_stash_subcommand_default() { function test_parse_stash_subcommand_implicit_push_with_description (line 1368) | fn test_parse_stash_subcommand_implicit_push_with_description() { function test_stash_entry_description_default (line 1376) | fn test_stash_entry_description_default() { function test_stash_list_empty (line 1385) | fn test_stash_list_empty() { function test_stash_drop_empty (line 1396) | fn test_stash_drop_empty() { function test_stash_drop_out_of_range (line 1409) | fn test_stash_drop_out_of_range() { function test_stash_drop_invalid_index (line 1422) | fn test_stash_drop_invalid_index() { function test_stash_pop_empty (line 1428) | fn test_stash_pop_empty() { function test_save_load_command_matching (line 1449) | fn test_save_load_command_matching() { function test_mark_command_recognized (line 1467) | fn test_mark_command_recognized() { function test_jump_command_recognized (line 1477) | fn test_jump_command_recognized() { function test_marks_command_recognized (line 1487) | fn test_marks_command_recognized() { function test_parse_bookmark_name_with_name (line 1496) | fn test_parse_bookmark_name_with_name() { function test_parse_bookmark_name_with_spaces (line 1502) | fn test_parse_bookmark_name_with_spaces() { function test_parse_bookmark_name_empty (line 1508) | fn test_parse_bookmark_name_empty() { function test_parse_bookmark_name_whitespace_only (line 1514) | fn test_parse_bookmark_name_whitespace_only() { function test_parse_bookmark_name_for_jump (line 1520) | fn test_parse_bookmark_name_for_jump() { function test_bookmarks_create_and_list (line 1526) | fn test_bookmarks_create_and_list() { function test_bookmarks_overwrite_same_name (line 1536) | fn test_bookmarks_overwrite_same_name() { function test_bookmarks_nonexistent_returns_none (line 1546) | fn test_bookmarks_nonexistent_returns_none() { function test_bookmarks_multiple_entries (line 1552) | fn test_bookmarks_multiple_entries() { function test_handle_marks_empty_does_not_panic (line 1564) | fn test_handle_marks_empty_does_not_panic() { function test_handle_marks_with_entries_does_not_panic (line 1571) | fn test_handle_marks_with_entries_does_not_panic() { function test_mark_command_matching (line 1580) | fn test_mark_command_matching() { function test_jump_command_matching (line 1590) | fn test_jump_command_matching() { function test_checkpoint_save_and_list (line 1600) | fn test_checkpoint_save_and_list() { function test_checkpoint_restore (line 1618) | fn test_checkpoint_restore() { function test_checkpoint_diff (line 1640) | fn test_checkpoint_diff() { function test_checkpoint_delete (line 1660) | fn test_checkpoint_delete() { function test_checkpoint_duplicate_name_overwrites (line 1677) | fn test_checkpoint_duplicate_name_overwrites() { function test_checkpoint_restore_nonexistent (line 1701) | fn test_checkpoint_restore_nonexistent() { function test_valid_checkpoint_names (line 1709) | fn test_valid_checkpoint_names() { function test_checkpoint_diff_no_changes (line 1720) | fn test_checkpoint_diff_no_changes() { FILE: src/commands_spawn.rs function lock_or_recover (line 18) | fn lock_or_recover(mutex: &Mutex) -> std::sync::MutexGuard<'_, T> { type SpawnStatus (line 26) | pub enum SpawnStatus { method fmt (line 33) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type SpawnTask (line 44) | pub struct SpawnTask { type SpawnTracker (line 59) | pub struct SpawnTracker { method new (line 65) | pub fn new() -> Self { method register (line 72) | pub fn register(&self, task: &str, output_path: Option) -> usi... method complete (line 86) | pub fn complete(&self, id: usize, result: String) { method fail (line 95) | pub fn fail(&self, id: usize, error: String) { method snapshot (line 104) | pub fn snapshot(&self) -> Vec { method count_by_status (line 109) | pub fn count_by_status(&self) -> (usize, usize, usize) { method get (line 130) | pub fn get(&self, id: usize) -> Option { method len (line 136) | pub fn len(&self) -> usize { method is_empty (line 141) | pub fn is_empty(&self) -> bool { type SpawnArgs (line 148) | pub struct SpawnArgs { function parse_spawn_args (line 162) | pub fn parse_spawn_args(input: &str) -> Option { function parse_spawn_task (line 193) | pub fn parse_spawn_task(input: &str) -> Option { function spawn_context_prompt (line 205) | pub fn spawn_context_prompt( function summarize_conversation_for_spawn (line 244) | pub fn summarize_conversation_for_spawn(messages: &[AgentMessage]) -> St... function format_spawn_result (line 261) | pub fn format_spawn_result(task: &str, result: &str, spawn_id: usize) ->... function handle_spawn_status (line 276) | pub fn handle_spawn_status(tracker: &SpawnTracker) { function handle_spawn (line 322) | pub async fn handle_spawn( function clone_agent_config (line 403) | fn clone_agent_config(config: &crate::AgentConfig) -> crate::AgentConfig { function test_parse_spawn_args_basic_task (line 437) | fn test_parse_spawn_args_basic_task() { function test_parse_spawn_args_with_output_flag (line 446) | fn test_parse_spawn_args_with_output_flag() { function test_parse_spawn_args_empty (line 455) | fn test_parse_spawn_args_empty() { function test_parse_spawn_args_status_returns_none (line 461) | fn test_parse_spawn_args_status_returns_none() { function test_parse_spawn_args_output_with_complex_path (line 466) | fn test_parse_spawn_args_output_with_complex_path() { function test_spawn_tracker_new_is_empty (line 477) | fn test_spawn_tracker_new_is_empty() { function test_spawn_tracker_register_returns_sequential_ids (line 484) | fn test_spawn_tracker_register_returns_sequential_ids() { function test_spawn_tracker_complete_updates_status (line 494) | fn test_spawn_tracker_complete_updates_status() { function test_spawn_tracker_fail_updates_status (line 506) | fn test_spawn_tracker_fail_updates_status() { function test_spawn_tracker_count_by_status (line 519) | fn test_spawn_tracker_count_by_status() { function test_spawn_tracker_get_nonexistent (line 534) | fn test_spawn_tracker_get_nonexistent() { function test_spawn_tracker_snapshot (line 540) | fn test_spawn_tracker_snapshot() { function test_spawn_context_prompt_without_context (line 554) | fn test_spawn_context_prompt_without_context() { function test_spawn_context_prompt_with_project_context (line 562) | fn test_spawn_context_prompt_with_project_context() { function test_spawn_context_prompt_with_messages (line 570) | fn test_spawn_context_prompt_with_messages() { function test_spawn_context_prompt_truncates_large_context (line 579) | fn test_spawn_context_prompt_truncates_large_context() { function test_summarize_conversation_empty (line 590) | fn test_summarize_conversation_empty() { function test_summarize_conversation_includes_roles (line 596) | fn test_summarize_conversation_includes_roles() { function test_summarize_conversation_limits_messages (line 617) | fn test_summarize_conversation_limits_messages() { function test_format_spawn_result_includes_id (line 636) | fn test_format_spawn_result_includes_id() { function test_format_spawn_result_empty_output (line 644) | fn test_format_spawn_result_empty_output() { function test_spawn_status_display (line 652) | fn test_spawn_status_display() { function test_spawn_command_recognized (line 664) | fn test_spawn_command_recognized() { function test_spawn_command_matching (line 674) | fn test_spawn_command_matching() { function test_parse_spawn_task_with_task (line 685) | fn test_parse_spawn_task_with_task() { function test_parse_spawn_task_empty (line 691) | fn test_parse_spawn_task_empty() { function test_parse_spawn_task_whitespace_only (line 697) | fn test_parse_spawn_task_whitespace_only() { function test_parse_spawn_task_preserves_full_task (line 703) | fn test_parse_spawn_task_preserves_full_task() { function test_parse_spawn_args_basic (line 712) | fn test_parse_spawn_args_basic() { function test_parse_spawn_args_with_output (line 721) | fn test_parse_spawn_args_with_output() { function test_parse_spawn_args_status (line 730) | fn test_parse_spawn_args_status() { FILE: src/config.rs type PermissionConfig (line 8) | pub struct PermissionConfig { method check (line 18) | pub fn check(&self, command: &str) -> Option { method is_empty (line 36) | pub fn is_empty(&self) -> bool { type DirectoryRestrictions (line 52) | pub struct DirectoryRestrictions { method is_empty (line 61) | pub fn is_empty(&self) -> bool { method check_path (line 73) | pub fn check_path(&self, path: &str) -> Result<(), String> { function resolve_path (line 112) | fn resolve_path(path: &str) -> String { function path_is_under (line 145) | fn path_is_under(path: &str, dir: &str) -> bool { function glob_match (line 157) | pub fn glob_match(pattern: &str, text: &str) -> bool { function parse_toml_array (line 196) | pub fn parse_toml_array(value: &str) -> Vec { function parse_permissions_from_config (line 221) | pub fn parse_permissions_from_config(content: &str) -> PermissionConfig { function parse_directories_from_config (line 253) | pub fn parse_directories_from_config(content: &str) -> DirectoryRestrict... function parse_mcp_servers_from_config (line 295) | pub fn parse_mcp_servers_from_config(content: &str) -> Vec String { function parse_inline_table (line 405) | fn parse_inline_table(s: &str) -> Vec<(String, String)> { type McpServerConfig (line 441) | pub struct McpServerConfig { function parse_auto_watch_from_config (line 453) | pub fn parse_auto_watch_from_config(config: &std::collections::HashMap Result String { function format_toml_value (line 630) | fn format_toml_value(value: &str) -> String { function test_config_module_glob_match (line 648) | fn test_config_module_glob_match() { function test_config_module_permission_check (line 657) | fn test_config_module_permission_check() { function test_config_module_parse_toml_array (line 668) | fn test_config_module_parse_toml_array() { function test_config_module_parse_permissions (line 674) | fn test_config_module_parse_permissions() { function test_config_module_parse_directories (line 686) | fn test_config_module_parse_directories() { function test_config_module_parse_mcp_servers (line 698) | fn test_config_module_parse_mcp_servers() { function test_config_module_strip_quotes (line 717) | fn test_config_module_strip_quotes() { function test_config_module_parse_inline_table (line 726) | fn test_config_module_parse_inline_table() { function test_config_module_parse_inline_table_empty (line 734) | fn test_config_module_parse_inline_table_empty() { function test_config_module_resolve_path_normalizes_parent_dir (line 743) | fn test_config_module_resolve_path_normalizes_parent_dir() { function test_config_module_resolve_path_absolute (line 749) | fn test_config_module_resolve_path_absolute() { function test_config_module_path_is_under_basic (line 756) | fn test_config_module_path_is_under_basic() { function test_set_toml_key_creates_new_key (line 766) | fn test_set_toml_key_creates_new_key() { function test_set_toml_key_replaces_existing_key (line 777) | fn test_set_toml_key_replaces_existing_key() { function test_set_toml_key_preserves_comments (line 786) | fn test_set_toml_key_preserves_comments() { function test_set_toml_key_numeric_value_unquoted (line 796) | fn test_set_toml_key_numeric_value_unquoted() { function test_set_toml_key_string_value_quoted (line 803) | fn test_set_toml_key_string_value_quoted() { function test_set_toml_key_empty_content (line 809) | fn test_set_toml_key_empty_content() { function test_validate_config_value_valid_keys (line 816) | fn test_validate_config_value_valid_keys() { function test_validate_config_value_invalid (line 827) | fn test_validate_config_value_invalid() { function test_validate_config_thinking_aliases (line 838) | fn test_validate_config_thinking_aliases() { function test_write_config_value_to_creates_file (line 846) | fn test_write_config_value_to_creates_file() { function test_write_config_value_to_updates_existing (line 862) | fn test_write_config_value_to_updates_existing() { function test_write_config_value_to_preserves_other_keys (line 885) | fn test_write_config_value_to_preserves_other_keys() { function test_format_toml_value (line 908) | fn test_format_toml_value() { function auto_watch_defaults_to_true (line 921) | fn auto_watch_defaults_to_true() { function auto_watch_respects_false (line 927) | fn auto_watch_respects_false() { function auto_watch_respects_off (line 934) | fn auto_watch_respects_off() { function auto_watch_explicit_true (line 941) | fn auto_watch_explicit_true() { function validate_auto_watch_values (line 948) | fn validate_auto_watch_values() { FILE: src/context.rs constant PROJECT_CONTEXT_FILES (line 9) | pub const PROJECT_CONTEXT_FILES: &[&str] = &["YOYO.md", "CLAUDE.md", ".y... constant MAX_PROJECT_FILES (line 12) | pub const MAX_PROJECT_FILES: usize = 200; constant MAX_RECENT_FILES (line 15) | pub const MAX_RECENT_FILES: usize = 20; function get_project_file_listing (line 20) | pub fn get_project_file_listing() -> Option { function get_git_status_context (line 40) | pub fn get_git_status_context() -> Option { function get_recently_changed_files (line 76) | pub fn get_recently_changed_files(max_files: usize) -> Option Option { function list_project_context_files (line 190) | pub fn list_project_context_files() -> Vec<(&'static str, usize)> { function test_project_context_file_names_not_empty (line 209) | fn test_project_context_file_names_not_empty() { function test_max_project_files_constant (line 222) | fn test_max_project_files_constant() { function test_max_recent_files_constant (line 227) | fn test_max_recent_files_constant() { function test_list_project_context_files_returns_vec (line 232) | fn test_list_project_context_files_returns_vec() { function test_get_project_file_listing_no_panic (line 243) | fn test_get_project_file_listing_no_panic() { function test_load_project_context_includes_file_listing (line 265) | fn test_load_project_context_includes_file_listing() { function test_get_recently_changed_files_in_git_repo (line 280) | fn test_get_recently_changed_files_in_git_repo() { function test_get_recently_changed_files_respects_limit (line 298) | fn test_get_recently_changed_files_respects_limit() { function test_get_recently_changed_files_no_duplicates (line 311) | fn test_get_recently_changed_files_no_duplicates() { function test_load_project_context_includes_recently_changed (line 320) | fn test_load_project_context_includes_recently_changed() { function test_get_git_status_context_in_repo (line 334) | fn test_get_git_status_context_in_repo() { function test_get_git_status_context_contains_branch (line 345) | fn test_get_git_status_context_contains_branch() { function test_git_status_context_format (line 356) | fn test_git_status_context_format() { function test_load_project_context_includes_git_status (line 365) | fn test_load_project_context_includes_git_status() { function test_yoyo_md_is_primary_context_file (line 379) | fn test_yoyo_md_is_primary_context_file() { FILE: src/dispatch.rs type CommandResult (line 32) | pub(crate) enum CommandResult { function quote_args_as_command (line 48) | fn quote_args_as_command(args: &[String]) -> String { function try_dispatch_subcommand (line 74) | pub(crate) fn try_dispatch_subcommand(args: &[String]) -> Option Option... type FlagValueCheck (line 364) | pub(crate) enum FlagValueCheck<'a> { function require_flag_value (line 389) | pub(crate) fn require_flag_value<'a>(next: Option<&'a String>) -> FlagVa... function dispatch_command (line 408) | pub(crate) async fn dispatch_command( function test_flag_value_finds_value_for_single_flag (line 1043) | fn test_flag_value_finds_value_for_single_flag() { function test_flag_value_returns_none_when_flag_missing (line 1053) | fn test_flag_value_returns_none_when_flag_missing() { function test_flag_value_returns_none_when_value_missing (line 1063) | fn test_flag_value_returns_none_when_value_missing() { function test_flag_value_supports_aliases (line 1074) | fn test_flag_value_supports_aliases() { function test_flag_value_finds_first_occurrence (line 1086) | fn test_flag_value_finds_first_occurrence() { function test_require_flag_value_ok_on_plain_value (line 1104) | fn test_require_flag_value_ok_on_plain_value() { function test_require_flag_value_missing_on_end_of_args (line 1114) | fn test_require_flag_value_missing_on_end_of_args() { function test_require_flag_value_flag_like_on_double_dash (line 1123) | fn test_require_flag_value_flag_like_on_double_dash() { function test_require_flag_value_flag_like_on_bare_dash (line 1135) | fn test_require_flag_value_flag_like_on_bare_dash() { function test_require_flag_value_accepts_negative_numbers (line 1147) | fn test_require_flag_value_accepts_negative_numbers() { function test_try_dispatch_subcommand_help_long (line 1168) | fn test_try_dispatch_subcommand_help_long() { function test_try_dispatch_subcommand_help_short (line 1179) | fn test_try_dispatch_subcommand_help_short() { function test_try_dispatch_subcommand_version_long (line 1187) | fn test_try_dispatch_subcommand_version_long() { function test_try_dispatch_subcommand_version_short (line 1197) | fn test_try_dispatch_subcommand_version_short() { function test_try_dispatch_subcommand_falls_through_on_unknown_flag (line 1204) | fn test_try_dispatch_subcommand_falls_through_on_unknown_flag() { function test_try_dispatch_subcommand_falls_through_on_empty_args (line 1213) | fn test_try_dispatch_subcommand_falls_through_on_empty_args() { function test_try_dispatch_subcommand_falls_through_on_normal_flags (line 1221) | fn test_try_dispatch_subcommand_falls_through_on_normal_flags() { function test_try_dispatch_subcommand_help_wins_over_other_flags (line 1235) | fn test_try_dispatch_subcommand_help_wins_over_other_flags() { function test_try_dispatch_subcommand_falls_through_on_unknown_subcommand (line 1251) | fn test_try_dispatch_subcommand_falls_through_on_unknown_subcommand() { function test_try_dispatch_subcommand_help_bare (line 1265) | fn test_try_dispatch_subcommand_help_bare() { function test_try_dispatch_subcommand_version_bare (line 1276) | fn test_try_dispatch_subcommand_version_bare() { function test_try_dispatch_subcommand_setup_bare (line 1287) | fn test_try_dispatch_subcommand_setup_bare() { function test_try_dispatch_subcommand_init_bare (line 1298) | fn test_try_dispatch_subcommand_init_bare() { function test_try_dispatch_subcommand_lint (line 1309) | fn test_try_dispatch_subcommand_lint() { function test_try_dispatch_subcommand_test (line 1320) | fn test_try_dispatch_subcommand_test() { function test_try_dispatch_subcommand_tree (line 1330) | fn test_try_dispatch_subcommand_tree() { function test_try_dispatch_subcommand_map (line 1340) | fn test_try_dispatch_subcommand_map() { function test_try_dispatch_subcommand_run_no_args (line 1350) | fn test_try_dispatch_subcommand_run_no_args() { function test_try_dispatch_subcommand_diff (line 1361) | fn test_try_dispatch_subcommand_diff() { function test_try_dispatch_subcommand_commit (line 1371) | fn test_try_dispatch_subcommand_commit() { function test_try_dispatch_subcommand_blame (line 1382) | fn test_try_dispatch_subcommand_blame() { function test_try_dispatch_subcommand_grep (line 1393) | fn test_try_dispatch_subcommand_grep() { function test_try_dispatch_subcommand_find (line 1403) | fn test_try_dispatch_subcommand_find() { function test_try_dispatch_subcommand_index (line 1413) | fn test_try_dispatch_subcommand_index() { function test_try_dispatch_subcommand_update (line 1423) | fn test_try_dispatch_subcommand_update() { function test_try_dispatch_subcommand_docs (line 1433) | fn test_try_dispatch_subcommand_docs() { function test_try_dispatch_subcommand_watch (line 1443) | fn test_try_dispatch_subcommand_watch() { function test_try_dispatch_subcommand_status (line 1454) | fn test_try_dispatch_subcommand_status() { function test_try_dispatch_subcommand_undo (line 1464) | fn test_try_dispatch_subcommand_undo() { function test_try_dispatch_subcommand_changelog (line 1475) | fn test_try_dispatch_subcommand_changelog() { function test_try_dispatch_subcommand_changelog_with_count (line 1485) | fn test_try_dispatch_subcommand_changelog_with_count() { function test_try_dispatch_subcommand_config (line 1495) | fn test_try_dispatch_subcommand_config() { function test_try_dispatch_subcommand_config_show (line 1505) | fn test_try_dispatch_subcommand_config_show() { function test_try_dispatch_subcommand_config_unknown (line 1515) | fn test_try_dispatch_subcommand_config_unknown() { function test_try_dispatch_subcommand_permissions (line 1526) | fn test_try_dispatch_subcommand_permissions() { function test_try_dispatch_subcommand_todo (line 1536) | fn test_try_dispatch_subcommand_todo() { function test_try_dispatch_subcommand_todo_list (line 1546) | fn test_try_dispatch_subcommand_todo_list() { function test_try_dispatch_subcommand_memories (line 1556) | fn test_try_dispatch_subcommand_memories() { function quote_args_simple (line 1566) | fn quote_args_simple() { function quote_args_multi_word (line 1575) | fn quote_args_multi_word() { function quote_args_multi_word_with_path (line 1584) | fn quote_args_multi_word_with_path() { function quote_args_no_unnecessary_quoting (line 1593) | fn quote_args_no_unnecessary_quoting() { function quote_args_tab_in_arg (line 1602) | fn quote_args_tab_in_arg() { FILE: src/docs.rs function is_valid_crate_name (line 7) | pub fn is_valid_crate_name(name: &str) -> bool { function fetch_docs_html (line 15) | fn fetch_docs_html(url: &str) -> Result { type DocsItem (line 39) | pub struct DocsItem { function parse_docs_items (line 47) | pub fn parse_docs_items(html: &str) -> Vec { function format_docs_items (line 99) | pub fn format_docs_items(items: &[DocsItem], max_per_kind: usize) -> Str... function build_docs_display (line 149) | fn build_docs_display(url: &str, description: Option, items_disp... function fetch_docs_summary (line 165) | pub fn fetch_docs_summary(crate_name: &str) -> (bool, String) { function fetch_docs_item (line 194) | pub fn fetch_docs_item(crate_name: &str, item: &str) -> (bool, String) { function extract_meta_description (line 223) | pub fn extract_meta_description(html: &str) -> Option { function test_is_valid_crate_name (line 248) | fn test_is_valid_crate_name() { function test_extract_meta_description_basic (line 260) | fn test_extract_meta_description_basic() { function test_extract_meta_description_with_entities (line 267) | fn test_extract_meta_description_with_entities() { function test_extract_meta_description_missing (line 274) | fn test_extract_meta_description_missing() { function test_extract_meta_description_empty (line 281) | fn test_extract_meta_description_empty() { function test_parse_docs_items_modules (line 288) | fn test_parse_docs_items_modules() { function test_parse_docs_items_mixed_kinds (line 320) | fn test_parse_docs_items_mixed_kinds() { function test_parse_docs_items_structs_enums_fns (line 348) | fn test_parse_docs_items_structs_enums_fns() { function test_parse_docs_items_empty_html (line 368) | fn test_parse_docs_items_empty_html() { function test_parse_docs_items_no_matching_classes (line 374) | fn test_parse_docs_items_no_matching_classes() { function test_parse_docs_items_deduplication (line 381) | fn test_parse_docs_items_deduplication() { function test_format_docs_items_basic (line 392) | fn test_format_docs_items_basic() { function test_format_docs_items_capped_with_more (line 413) | fn test_format_docs_items_capped_with_more() { function test_format_docs_items_empty (line 431) | fn test_format_docs_items_empty() { function test_format_docs_items_ordering (line 437) | fn test_format_docs_items_ordering() { function test_fetch_docs_summary_invalid_crate_name (line 467) | fn test_fetch_docs_summary_invalid_crate_name() { function test_fetch_docs_summary_valid_crate_name_accepted (line 482) | fn test_fetch_docs_summary_valid_crate_name_accepted() { function test_fetch_docs_item_invalid_crate (line 494) | fn test_fetch_docs_item_invalid_crate() { function test_fetch_docs_item_empty_item_delegates_to_summary (line 501) | fn test_fetch_docs_item_empty_item_delegates_to_summary() { function test_build_docs_display_with_desc_and_items (line 509) | fn test_build_docs_display_with_desc_and_items() { function test_build_docs_display_with_desc_no_items (line 521) | fn test_build_docs_display_with_desc_no_items() { function test_build_docs_display_no_desc_no_items (line 532) | fn test_build_docs_display_no_desc_no_items() { function test_build_docs_display_no_desc_with_items (line 539) | fn test_build_docs_display_no_desc_with_items() { FILE: src/format/cost.rs function model_pricing (line 3) | fn model_pricing(model: &str) -> Option<(f64, f64, f64, f64)> { function estimate_cost (line 154) | pub fn estimate_cost(usage: &yoagent::Usage, model: &str) -> Option { function cost_breakdown (line 161) | pub fn cost_breakdown(usage: &yoagent::Usage, model: &str) -> Option<(f6... function format_cost (line 173) | pub fn format_cost(cost: f64) -> String { function format_duration (line 184) | pub fn format_duration(d: std::time::Duration) -> String { function format_token_count (line 198) | pub fn format_token_count(count: u64) -> String { function context_bar (line 209) | pub fn context_bar(used: u64, max: u64) -> String { function pluralize (line 235) | pub fn pluralize<'a>(count: usize, singular: &'a str, plural: &'a str) -... type TurnCost (line 246) | pub struct TurnCost { function extract_turn_costs (line 254) | pub fn extract_turn_costs(messages: &[yoagent::AgentMessage], model: &st... function format_turn_costs (line 271) | pub fn format_turn_costs(costs: &[TurnCost]) -> String { function test_format_token_count (line 326) | fn test_format_token_count() { function test_context_bar (line 338) | fn test_context_bar() { function context_bar_shows_less_than_one_percent_for_tiny_usage (line 353) | fn context_bar_shows_less_than_one_percent_for_tiny_usage() { function context_bar_zero_usage_still_shows_zero (line 360) | fn context_bar_zero_usage_still_shows_zero() { function context_bar_normal_usage_unchanged (line 370) | fn context_bar_normal_usage_unchanged() { function test_format_cost (line 376) | fn test_format_cost() { function test_format_duration_ms (line 386) | fn test_format_duration_ms() { function test_format_duration_seconds (line 398) | fn test_format_duration_seconds() { function test_format_duration_minutes (line 414) | fn test_format_duration_minutes() { function test_estimate_cost_opus (line 430) | fn test_estimate_cost_opus() { function test_estimate_cost_sonnet (line 443) | fn test_estimate_cost_sonnet() { function test_estimate_cost_haiku (line 456) | fn test_estimate_cost_haiku() { function test_estimate_cost_unknown_model (line 469) | fn test_estimate_cost_unknown_model() { function test_cost_breakdown_opus (line 482) | fn test_cost_breakdown_opus() { function test_cost_breakdown_unknown_model (line 506) | fn test_cost_breakdown_unknown_model() { function test_estimate_cost_gpt4o (line 520) | fn test_estimate_cost_gpt4o() { function test_estimate_cost_gpt4o_mini (line 534) | fn test_estimate_cost_gpt4o_mini() { function test_estimate_cost_gpt41 (line 548) | fn test_estimate_cost_gpt41() { function test_estimate_cost_gpt41_mini (line 562) | fn test_estimate_cost_gpt41_mini() { function test_estimate_cost_o3 (line 576) | fn test_estimate_cost_o3() { function test_estimate_cost_o4_mini (line 590) | fn test_estimate_cost_o4_mini() { function test_estimate_cost_gemini_25_pro (line 606) | fn test_estimate_cost_gemini_25_pro() { function test_estimate_cost_gemini_25_flash (line 620) | fn test_estimate_cost_gemini_25_flash() { function test_estimate_cost_gemini_20_flash (line 634) | fn test_estimate_cost_gemini_20_flash() { function test_estimate_cost_deepseek_chat (line 650) | fn test_estimate_cost_deepseek_chat() { function test_estimate_cost_deepseek_reasoner (line 664) | fn test_estimate_cost_deepseek_reasoner() { function test_estimate_cost_mistral_large (line 683) | fn test_estimate_cost_mistral_large() { function test_estimate_cost_mistral_small (line 697) | fn test_estimate_cost_mistral_small() { function test_estimate_cost_codestral (line 711) | fn test_estimate_cost_codestral() { function test_estimate_cost_grok3 (line 727) | fn test_estimate_cost_grok3() { function test_estimate_cost_grok3_mini (line 741) | fn test_estimate_cost_grok3_mini() { function test_estimate_cost_groq_llama70b (line 757) | fn test_estimate_cost_groq_llama70b() { function test_estimate_cost_groq_llama8b (line 771) | fn test_estimate_cost_groq_llama8b() { function test_estimate_cost_glm4_plus (line 787) | fn test_estimate_cost_glm4_plus() { function test_estimate_cost_glm4_air (line 801) | fn test_estimate_cost_glm4_air() { function test_estimate_cost_glm4_flash (line 815) | fn test_estimate_cost_glm4_flash() { function test_estimate_cost_glm5 (line 829) | fn test_estimate_cost_glm5() { function test_estimate_cost_openrouter_anthropic_prefix (line 845) | fn test_estimate_cost_openrouter_anthropic_prefix() { function test_estimate_cost_openrouter_openai_prefix (line 863) | fn test_estimate_cost_openrouter_openai_prefix() { function test_estimate_cost_openrouter_google_prefix (line 880) | fn test_estimate_cost_openrouter_google_prefix() { function test_non_anthropic_providers_zero_cache_costs (line 899) | fn test_non_anthropic_providers_zero_cache_costs() { function test_pluralize_singular (line 917) | fn test_pluralize_singular() { function test_pluralize_plural (line 923) | fn test_pluralize_plural() { function test_extract_turn_costs_empty (line 934) | fn test_extract_turn_costs_empty() { function test_extract_turn_costs_skips_non_assistant (line 941) | fn test_extract_turn_costs_skips_non_assistant() { function test_extract_turn_costs_single_assistant (line 955) | fn test_extract_turn_costs_single_assistant() { function test_extract_turn_costs_multiple (line 982) | fn test_extract_turn_costs_multiple() { function test_format_turn_costs_empty (line 1024) | fn test_format_turn_costs_empty() { function test_format_turn_costs_single (line 1030) | fn test_format_turn_costs_single() { function test_format_turn_costs_multiple (line 1051) | fn test_format_turn_costs_multiple() { function test_format_turn_costs_unknown_model (line 1086) | fn test_format_turn_costs_unknown_model() { FILE: src/format/diff.rs constant MAX_DIFF_LINES (line 6) | const MAX_DIFF_LINES: usize = 20; constant DIFF_CONTEXT_LINES (line 9) | const DIFF_CONTEXT_LINES: usize = 3; type DiffOp (line 13) | enum DiffOp<'a> { function compute_line_diff (line 22) | fn compute_line_diff<'a>(old_lines: &[&'a str], new_lines: &[&'a str]) -... function format_edit_diff (line 67) | pub fn format_edit_diff(old_text: &str, new_text: &str) -> String { function test_format_edit_diff_single_line_change (line 161) | fn test_format_edit_diff_single_line_change() { function test_format_edit_diff_multi_line_change (line 171) | fn test_format_edit_diff_multi_line_change() { function test_format_edit_diff_addition_only (line 183) | fn test_format_edit_diff_addition_only() { function test_format_edit_diff_deletion_only (line 193) | fn test_format_edit_diff_deletion_only() { function test_format_edit_diff_long_diff_truncation (line 203) | fn test_format_edit_diff_long_diff_truncation() { function test_format_edit_diff_empty_both (line 215) | fn test_format_edit_diff_empty_both() { function test_format_edit_diff_empty_old_text_new_file_section (line 221) | fn test_format_edit_diff_empty_old_text_new_file_section() { function test_format_edit_diff_short_diff_not_truncated (line 230) | fn test_format_edit_diff_short_diff_not_truncated() { function test_format_edit_diff_context_lines_around_change (line 236) | fn test_format_edit_diff_context_lines_around_change() { function test_format_edit_diff_adjacent_changes_grouped (line 253) | fn test_format_edit_diff_adjacent_changes_grouped() { function test_format_edit_diff_nonadjacent_changes_get_separator (line 267) | fn test_format_edit_diff_nonadjacent_changes_get_separator() { function test_format_edit_diff_single_line_change_with_context (line 281) | fn test_format_edit_diff_single_line_change_with_context() { function test_format_edit_diff_identical_texts (line 294) | fn test_format_edit_diff_identical_texts() { FILE: src/format/highlight.rs function normalize_lang (line 5) | fn normalize_lang(lang: &str) -> Option<&'static str> { function lang_keywords (line 21) | fn lang_keywords(lang: &str) -> &'static [&'static str] { function lang_types (line 217) | fn lang_types(lang: &str) -> &'static [&'static str] { function comment_prefix (line 311) | fn comment_prefix(lang: &str) -> &'static str { function highlight_code_line (line 326) | pub fn highlight_code_line(lang: &str, line: &str) -> String { function highlight_json_line (line 451) | fn highlight_json_line(line: &str) -> String { function highlight_yaml_line (line 545) | fn highlight_yaml_line(line: &str) -> String { function highlight_yaml_value (line 580) | fn highlight_yaml_value(value: &str) -> String { function highlight_yaml_value_inner (line 596) | fn highlight_yaml_value_inner(value: &str) -> String { function highlight_toml_line (line 622) | fn highlight_toml_line(line: &str) -> String { function highlight_toml_value (line 647) | fn highlight_toml_value(value: &str) -> String { function render_full (line 677) | fn render_full(input: &str) -> String { function test_highlight_rust_keywords (line 685) | fn test_highlight_rust_keywords() { function test_highlight_rust_fn (line 693) | fn test_highlight_rust_fn() { function test_highlight_rust_string (line 700) | fn test_highlight_rust_string() { function test_highlight_rust_comment (line 706) | fn test_highlight_rust_comment() { function test_highlight_rust_full_line_comment (line 713) | fn test_highlight_rust_full_line_comment() { function test_highlight_python_keywords (line 719) | fn test_highlight_python_keywords() { function test_highlight_python_comment (line 726) | fn test_highlight_python_comment() { function test_highlight_js_keywords (line 732) | fn test_highlight_js_keywords() { function test_highlight_ts_alias (line 739) | fn test_highlight_ts_alias() { function test_highlight_go_keywords (line 746) | fn test_highlight_go_keywords() { function test_highlight_shell_keywords (line 752) | fn test_highlight_shell_keywords() { function test_highlight_shell_comment (line 759) | fn test_highlight_shell_comment() { function test_highlight_unknown_lang_falls_back_to_dim (line 765) | fn test_highlight_unknown_lang_falls_back_to_dim() { function test_highlight_empty_line (line 771) | fn test_highlight_empty_line() { function test_highlight_no_false_keyword_in_identifier (line 777) | fn test_highlight_no_false_keyword_in_identifier() { function test_highlight_string_with_escape (line 789) | fn test_highlight_string_with_escape() { function test_highlight_inline_comment_after_code (line 796) | fn test_highlight_inline_comment_after_code() { function test_highlight_number_float (line 803) | fn test_highlight_number_float() { function test_normalize_lang_aliases (line 809) | fn test_normalize_lang_aliases() { function test_highlight_renders_through_markdown (line 822) | fn test_highlight_renders_through_markdown() { function test_highlight_rust_types (line 834) | fn test_highlight_rust_types() { function test_highlight_rust_option_result (line 841) | fn test_highlight_rust_option_result() { function test_highlight_rust_primitive_types (line 849) | fn test_highlight_rust_primitive_types() { function test_highlight_rust_self_type (line 856) | fn test_highlight_rust_self_type() { function test_highlight_python_string (line 865) | fn test_highlight_python_string() { function test_highlight_python_single_quote_string (line 871) | fn test_highlight_python_single_quote_string() { function test_highlight_python_inline_comment (line 877) | fn test_highlight_python_inline_comment() { function test_highlight_python_class_def (line 885) | fn test_highlight_python_class_def() { function test_highlight_python_boolean_none (line 892) | fn test_highlight_python_boolean_none() { function test_highlight_python_import (line 900) | fn test_highlight_python_import() { function test_highlight_js_function_declaration (line 909) | fn test_highlight_js_function_declaration() { function test_highlight_js_string_template (line 915) | fn test_highlight_js_string_template() { function test_highlight_js_null_undefined (line 922) | fn test_highlight_js_null_undefined() { function test_highlight_js_comment (line 929) | fn test_highlight_js_comment() { function test_highlight_tsx_recognized (line 935) | fn test_highlight_tsx_recognized() { function test_highlight_shell_for_loop (line 943) | fn test_highlight_shell_for_loop() { function test_highlight_shell_string (line 951) | fn test_highlight_shell_string() { function test_highlight_shell_export (line 958) | fn test_highlight_shell_export() { function test_highlight_zsh_recognized (line 964) | fn test_highlight_zsh_recognized() { function test_highlight_c_keywords (line 972) | fn test_highlight_c_keywords() { function test_highlight_cpp_keywords (line 979) | fn test_highlight_cpp_keywords() { function test_highlight_c_comment (line 986) | fn test_highlight_c_comment() { function test_highlight_c_string (line 992) | fn test_highlight_c_string() { function test_highlight_c_types (line 998) | fn test_highlight_c_types() { function test_highlight_hpp_recognized (line 1004) | fn test_highlight_hpp_recognized() { function test_highlight_go_types (line 1012) | fn test_highlight_go_types() { function test_highlight_go_string_type (line 1020) | fn test_highlight_go_string_type() { function test_highlight_json_key_value (line 1030) | fn test_highlight_json_key_value() { function test_highlight_json_number (line 1037) | fn test_highlight_json_number() { function test_highlight_json_boolean (line 1044) | fn test_highlight_json_boolean() { function test_highlight_json_null (line 1050) | fn test_highlight_json_null() { function test_highlight_json_braces (line 1056) | fn test_highlight_json_braces() { function test_highlight_jsonc_recognized (line 1063) | fn test_highlight_jsonc_recognized() { function test_highlight_yaml_key_value (line 1071) | fn test_highlight_yaml_key_value() { function test_highlight_yaml_string_value (line 1077) | fn test_highlight_yaml_string_value() { function test_highlight_yaml_boolean (line 1084) | fn test_highlight_yaml_boolean() { function test_highlight_yaml_number (line 1090) | fn test_highlight_yaml_number() { function test_highlight_yaml_comment (line 1096) | fn test_highlight_yaml_comment() { function test_highlight_yaml_document_separator (line 1102) | fn test_highlight_yaml_document_separator() { function test_highlight_yml_alias (line 1108) | fn test_highlight_yml_alias() { function test_highlight_toml_section (line 1116) | fn test_highlight_toml_section() { function test_highlight_toml_key_string (line 1122) | fn test_highlight_toml_key_string() { function test_highlight_toml_key_number (line 1129) | fn test_highlight_toml_key_number() { function test_highlight_toml_boolean (line 1136) | fn test_highlight_toml_boolean() { function test_highlight_toml_comment (line 1142) | fn test_highlight_toml_comment() { function test_highlight_toml_array_section (line 1148) | fn test_highlight_toml_array_section() { function test_normalize_lang_c_family (line 1156) | fn test_normalize_lang_c_family() { function test_normalize_lang_data_formats (line 1166) | fn test_normalize_lang_data_formats() { function test_highlight_json_through_markdown (line 1177) | fn test_highlight_json_through_markdown() { function test_highlight_yaml_through_markdown (line 1185) | fn test_highlight_yaml_through_markdown() { function test_highlight_toml_through_markdown (line 1192) | fn test_highlight_toml_through_markdown() { function test_highlight_c_through_markdown (line 1200) | fn test_highlight_c_through_markdown() { FILE: src/format/markdown.rs type MarkdownRenderer (line 12) | pub struct MarkdownRenderer { method new (line 26) | pub fn new() -> Self { method render_delta (line 66) | pub fn render_delta(&mut self, delta: &str) -> String { method render_code_inline (line 131) | fn render_code_inline(&self, text: &str) -> String { method render_delta_buffered (line 142) | fn render_delta_buffered(&mut self, delta: &str) -> String { method needs_line_buffering (line 222) | fn needs_line_buffering(&self) -> bool { method try_resolve_block_prefix (line 306) | fn try_resolve_block_prefix(&mut self) -> String { method try_confirm_unordered_list (line 369) | fn try_confirm_unordered_list<'a>(&self, trimmed: &'a str) -> Option<&... method try_confirm_ordered_list (line 400) | fn try_confirm_ordered_list<'a>(&self, trimmed: &'a str) -> Option<(&'... method flush_on_whitespace (line 426) | pub fn flush_on_whitespace(&mut self) -> String { method flush (line 464) | pub fn flush(&mut self) -> String { method render_line (line 485) | fn render_line(&mut self, line: &str) -> String { method is_horizontal_rule (line 557) | fn is_horizontal_rule(trimmed: &str) -> bool { method strip_unordered_list_marker (line 573) | fn strip_unordered_list_marker(trimmed: &str) -> Option<&str> { method strip_ordered_list_marker (line 586) | fn strip_ordered_list_marker(trimmed: &str) -> Option<(&str, &str)> { method leading_whitespace (line 598) | fn leading_whitespace(line: &str) -> &str { method render_inline (line 604) | fn render_inline(&self, line: &str) -> String { method find_triple_star (line 664) | fn find_triple_star(chars: &[char], from: usize) -> Option { method find_double_star (line 677) | fn find_double_star(chars: &[char], from: usize) -> Option { method find_single_star (line 691) | fn find_single_star(chars: &[char], from: usize) -> Option { method find_backtick (line 710) | fn find_backtick(chars: &[char], from: usize) -> Option { method default (line 716) | fn default() -> Self { function render_full (line 729) | fn render_full(input: &str) -> String { function test_md_code_block_detection (line 737) | fn test_md_code_block_detection() { function test_md_code_block_with_language (line 748) | fn test_md_code_block_with_language() { function test_md_inline_code (line 763) | fn test_md_inline_code() { function test_md_bold_text (line 769) | fn test_md_bold_text() { function test_md_header_rendering (line 775) | fn test_md_header_rendering() { function test_md_header_h2 (line 781) | fn test_md_header_h2() { function test_md_partial_delta_fence (line 787) | fn test_md_partial_delta_fence() { function test_md_empty_delta (line 807) | fn test_md_empty_delta() { function test_md_multiple_code_blocks (line 816) | fn test_md_multiple_code_blocks() { function test_md_inline_code_inside_bold (line 828) | fn test_md_inline_code_inside_bold() { function test_md_unmatched_backtick (line 836) | fn test_md_unmatched_backtick() { function test_md_unmatched_bold (line 844) | fn test_md_unmatched_bold() { function test_md_flush_partial_line (line 852) | fn test_md_flush_partial_line() { function test_md_flush_with_inline_formatting (line 866) | fn test_md_flush_with_inline_formatting() { function test_md_default_trait (line 876) | fn test_md_default_trait() { function test_md_streaming_mid_line_immediate_output (line 888) | fn test_md_streaming_mid_line_immediate_output() { function test_md_streaming_newline_resets_to_line_start (line 915) | fn test_md_streaming_newline_resets_to_line_start() { function test_md_streaming_code_fence_detected_at_line_start (line 931) | fn test_md_streaming_code_fence_detected_at_line_start() { function test_md_streaming_header_detected_at_line_start (line 949) | fn test_md_streaming_header_detected_at_line_start() { function test_md_streaming_bold_mid_line (line 957) | fn test_md_streaming_bold_mid_line() { function test_md_streaming_inline_code_mid_line (line 971) | fn test_md_streaming_inline_code_mid_line() { function test_md_streaming_word_by_word_paragraph (line 985) | fn test_md_streaming_word_by_word_paragraph() { function test_md_streaming_line_start_buffer_short_text (line 1016) | fn test_md_streaming_line_start_buffer_short_text() { function test_md_streaming_line_start_resolves_normal (line 1030) | fn test_md_streaming_line_start_resolves_normal() { function test_md_streaming_existing_tests_still_pass (line 1042) | fn test_md_streaming_existing_tests_still_pass() { function test_md_streaming_in_code_block_immediate (line 1051) | fn test_md_streaming_in_code_block_immediate() { function test_md_code_block_mid_line_emitted_immediately (line 1071) | fn test_md_code_block_mid_line_emitted_immediately() { function test_md_code_block_mid_line_with_newline (line 1096) | fn test_md_code_block_mid_line_with_newline() { function test_md_code_block_fence_detection_still_works (line 1116) | fn test_md_code_block_fence_detection_still_works() { function test_md_code_block_mid_line_multiple_tokens (line 1134) | fn test_md_code_block_mid_line_multiple_tokens() { function test_md_streaming_single_token_produces_output (line 1160) | fn test_md_streaming_single_token_produces_output() { function test_md_streaming_single_char_non_special_at_line_start (line 1209) | fn test_md_streaming_single_char_non_special_at_line_start() { function test_md_streaming_space_prefixed_token_at_line_start (line 1221) | fn test_md_streaming_space_prefixed_token_at_line_start() { function test_md_streaming_list_item_content_not_buffered (line 1234) | fn test_md_streaming_list_item_content_not_buffered() { function test_md_streaming_blockquote_content_not_buffered (line 1263) | fn test_md_streaming_blockquote_content_not_buffered() { function test_md_streaming_header_content_still_buffers (line 1282) | fn test_md_streaming_header_content_still_buffers() { function test_md_streaming_code_fence_opener_still_buffers (line 1291) | fn test_md_streaming_code_fence_opener_still_buffers() { function test_md_streaming_inline_formatting_on_partial_lines (line 1307) | fn test_md_streaming_inline_formatting_on_partial_lines() { function test_md_streaming_list_renders_correctly_on_newline (line 1321) | fn test_md_streaming_list_renders_correctly_on_newline() { function test_md_streaming_ordered_list_content_not_buffered (line 1338) | fn test_md_streaming_ordered_list_content_not_buffered() { function test_md_streaming_no_regression_full_render (line 1351) | fn test_md_streaming_no_regression_full_render() { function test_md_flush_on_whitespace_at_line_start (line 1373) | fn test_md_flush_on_whitespace_at_line_start() { function test_md_flush_on_whitespace_with_word_boundary (line 1387) | fn test_md_flush_on_whitespace_with_word_boundary() { function test_md_flush_on_whitespace_no_trailing_space (line 1406) | fn test_md_flush_on_whitespace_no_trailing_space() { function test_md_flush_on_whitespace_only_whitespace (line 1418) | fn test_md_flush_on_whitespace_only_whitespace() { function test_md_flush_on_whitespace_not_at_line_start (line 1427) | fn test_md_flush_on_whitespace_not_at_line_start() { function test_md_flush_on_whitespace_in_code_block (line 1436) | fn test_md_flush_on_whitespace_in_code_block() { function test_md_streaming_whitespace_flush_integration (line 1446) | fn test_md_streaming_whitespace_flush_integration() { function test_md_streaming_digit_with_space_stays_buffered (line 1467) | fn test_md_streaming_digit_with_space_stays_buffered() { function test_md_flush_on_whitespace_each_token_produces_output (line 1496) | fn test_md_flush_on_whitespace_each_token_produces_output() { function test_md_flush_on_whitespace_preserves_fence_detection (line 1522) | fn test_md_flush_on_whitespace_preserves_fence_detection() { function test_md_flush_on_whitespace_preserves_header_detection (line 1540) | fn test_md_flush_on_whitespace_preserves_header_detection() { function test_md_plain_text_unchanged (line 1562) | fn test_md_plain_text_unchanged() { function test_md_multiple_inline_codes_one_line (line 1568) | fn test_md_multiple_inline_codes_one_line() { function test_md_code_block_preserves_content (line 1575) | fn test_md_code_block_preserves_content() { function test_md_italic_text (line 1585) | fn test_md_italic_text() { function test_md_bold_still_works (line 1594) | fn test_md_bold_still_works() { function test_md_bold_italic_text (line 1604) | fn test_md_bold_italic_text() { function test_md_mixed_inline_formatting (line 1613) | fn test_md_mixed_inline_formatting() { function test_md_unclosed_italic_no_format (line 1630) | fn test_md_unclosed_italic_no_format() { function test_md_unordered_list_dash (line 1641) | fn test_md_unordered_list_dash() { function test_md_unordered_list_star (line 1651) | fn test_md_unordered_list_star() { function test_md_unordered_list_plus (line 1661) | fn test_md_unordered_list_plus() { function test_md_unordered_list_with_inline_formatting (line 1671) | fn test_md_unordered_list_with_inline_formatting() { function test_md_ordered_list (line 1681) | fn test_md_ordered_list() { function test_md_ordered_list_larger_number (line 1691) | fn test_md_ordered_list_larger_number() { function test_md_horizontal_rule_dashes (line 1701) | fn test_md_horizontal_rule_dashes() { function test_md_horizontal_rule_stars (line 1714) | fn test_md_horizontal_rule_stars() { function test_md_horizontal_rule_underscores (line 1723) | fn test_md_horizontal_rule_underscores() { function test_md_horizontal_rule_long (line 1732) | fn test_md_horizontal_rule_long() { function test_md_blockquote (line 1741) | fn test_md_blockquote() { function test_md_blockquote_with_inline_formatting (line 1754) | fn test_md_blockquote_with_inline_formatting() { function test_md_indented_list_item (line 1762) | fn test_md_indented_list_item() { function test_md_not_a_list_in_code_block (line 1772) | fn test_md_not_a_list_in_code_block() { function test_md_code_block_indented_line_resolves_immediately (line 1784) | fn test_md_code_block_indented_line_resolves_immediately() { function test_md_code_block_space_only_token_buffers (line 1807) | fn test_md_code_block_space_only_token_buffers() { function test_md_render_delta_every_call_produces_or_buffers_minimally (line 1829) | fn test_md_render_delta_every_call_produces_or_buffers_minimally() { function test_md_flush_produces_output_for_buffered_content (line 1850) | fn test_md_flush_produces_output_for_buffered_content() { function test_md_code_block_backtick_start_buffers_correctly (line 1866) | fn test_md_code_block_backtick_start_buffers_correctly() { function test_streaming_digit_nonlist_flushes_early (line 1910) | fn test_streaming_digit_nonlist_flushes_early() { function test_streaming_dash_nonlist_flushes_early (line 1929) | fn test_streaming_dash_nonlist_flushes_early() { function test_streaming_numbered_list_still_buffers (line 1947) | fn test_streaming_numbered_list_still_buffers() { function test_streaming_dash_list_still_buffers (line 1965) | fn test_streaming_dash_list_still_buffers() { function test_streaming_dash_hr_still_buffers (line 1982) | fn test_streaming_dash_hr_still_buffers() { function test_streaming_mid_line_always_immediate (line 2004) | fn test_streaming_mid_line_always_immediate() { function test_streaming_fence_still_buffers (line 2021) | fn test_streaming_fence_still_buffers() { function test_streaming_plain_text_immediate (line 2048) | fn test_streaming_plain_text_immediate() { function test_streaming_digit_paren_still_buffers (line 2059) | fn test_streaming_digit_paren_still_buffers() { function test_md_render_delta_latency_budget_mid_line (line 2070) | fn test_md_render_delta_latency_budget_mid_line() { function test_streaming_contract_plain_text_no_buffering (line 2089) | fn test_streaming_contract_plain_text_no_buffering() { function test_streaming_contract_code_block_passthrough (line 2130) | fn test_streaming_contract_code_block_passthrough() { function test_streaming_contract_heading_detection (line 2168) | fn test_streaming_contract_heading_detection() { function test_streaming_contract_blockquote_detection (line 2198) | fn test_streaming_contract_blockquote_detection() { function test_streaming_contract_inline_formatting_mid_line (line 2236) | fn test_streaming_contract_inline_formatting_mid_line() { function test_streaming_contract_empty_delta (line 2268) | fn test_streaming_contract_empty_delta() { function test_streaming_contract_newline_resets_line_start (line 2302) | fn test_streaming_contract_newline_resets_line_start() { function test_streaming_contract_consecutive_code_blocks (line 2324) | fn test_streaming_contract_consecutive_code_blocks() { function test_streaming_contract_flush_final (line 2388) | fn test_streaming_contract_flush_final() { function test_streaming_contract_nested_formatting_in_list (line 2431) | fn test_streaming_contract_nested_formatting_in_list() { function test_streaming_contract_digit_word_flushes (line 2468) | fn test_streaming_contract_digit_word_flushes() { function test_streaming_contract_dash_word_flushes (line 2507) | fn test_streaming_contract_dash_word_flushes() { function test_streaming_contract_numbered_list_buffers (line 2542) | fn test_streaming_contract_numbered_list_buffers() { function test_streaming_contract_multi_digit_numbered_list_buffers (line 2585) | fn test_streaming_contract_multi_digit_numbered_list_buffers() { function test_streaming_contract_digit_dot_non_space_flushes (line 2626) | fn test_streaming_contract_digit_dot_non_space_flushes() { function test_streaming_contract_unordered_list_buffers (line 2655) | fn test_streaming_contract_unordered_list_buffers() { function test_streaming_contract_code_fence_buffers (line 2692) | fn test_streaming_contract_code_fence_buffers() { function test_streaming_contract_mid_line_immediate (line 2731) | fn test_streaming_contract_mid_line_immediate() { function test_streaming_contract_plain_text_immediate_flush (line 2757) | fn test_streaming_contract_plain_text_immediate_flush() { function test_streaming_contract_heading_buffers_then_resolves (line 2783) | fn test_streaming_contract_heading_buffers_then_resolves() { function test_color_struct_display_consistency (line 2814) | fn test_color_struct_display_consistency() { function test_streaming_multi_digit_nonlist_flushes (line 2824) | fn test_streaming_multi_digit_nonlist_flushes() { function test_empty_string_render (line 2842) | fn test_empty_string_render() { function test_horizontal_rule_edge_cases (line 2854) | fn test_horizontal_rule_edge_cases() { FILE: src/format/mod.rs function enable_quiet (line 20) | pub fn enable_quiet() { function is_quiet (line 25) | pub fn is_quiet() -> bool { function disable_bell (line 35) | pub fn disable_bell() { function bell_enabled (line 40) | pub fn bell_enabled() -> bool { function maybe_ring_bell (line 47) | pub fn maybe_ring_bell(elapsed: Duration) { function disable_color (line 55) | pub fn disable_color() { function color_enabled (line 61) | fn color_enabled() -> bool { function stderr_is_terminal (line 73) | pub fn stderr_is_terminal() -> bool { type Color (line 79) | pub struct Color(pub &'static str); method fmt (line 82) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function safe_truncate (line 124) | pub fn safe_truncate(s: &str, max_bytes: usize) -> &str { function truncate_with_ellipsis (line 135) | pub fn truncate_with_ellipsis(s: &str, max: usize) -> String { function decode_html_entities (line 147) | pub fn decode_html_entities(s: &str) -> String { function terminal_width (line 208) | fn terminal_width() -> usize { function turn_boundary (line 219) | pub fn turn_boundary(turn_number: usize) -> String { function section_header (line 233) | pub fn section_header(label: &str) -> String { function section_divider (line 249) | pub fn section_divider() -> String { function format_tool_summary (line 263) | pub fn format_tool_summary(tool_name: &str, args: &serde_json::Value) ->... function format_usage_line (line 359) | pub fn format_usage_line( function print_usage (line 403) | pub fn print_usage( function context_usage_color (line 416) | pub fn context_usage_color(pct: u32) -> &'static Color { function context_usage_label (line 429) | pub fn context_usage_label(used_tokens: u64, max_tokens: u64) -> String { function print_context_usage (line 443) | pub fn print_context_usage(used_tokens: u64, max_tokens: u64) { function context_budget_warning (line 468) | pub fn context_budget_warning(used: u64, max: u64) -> Option { function reset_context_budget_warning (line 512) | pub fn reset_context_budget_warning() { function truncate (line 517) | pub fn truncate(s: &str, max: usize) -> &str { function test_truncate_short_string (line 529) | fn test_truncate_short_string() { function test_truncate_exact_length (line 534) | fn test_truncate_exact_length() { function test_truncate_long_string (line 539) | fn test_truncate_long_string() { function test_truncate_unicode (line 544) | fn test_truncate_unicode() { function test_truncate_empty (line 549) | fn test_truncate_empty() { function context_usage_label_tiny_usage_shows_less_than_one_percent (line 557) | fn context_usage_label_tiny_usage_shows_less_than_one_percent() { function context_usage_label_zero_usage_is_zero_percent (line 563) | fn context_usage_label_zero_usage_is_zero_percent() { function context_usage_label_normal_usage_unchanged (line 569) | fn context_usage_label_normal_usage_unchanged() { function context_usage_label_full_usage (line 575) | fn context_usage_label_full_usage() { function context_usage_label_zero_max_safe (line 581) | fn context_usage_label_zero_max_safe() { function test_safe_truncate_empty_string (line 588) | fn test_safe_truncate_empty_string() { function test_safe_truncate_ascii_shorter_than_max (line 593) | fn test_safe_truncate_ascii_shorter_than_max() { function test_safe_truncate_ascii_longer_than_max (line 598) | fn test_safe_truncate_ascii_longer_than_max() { function test_safe_truncate_multibyte_no_panic (line 603) | fn test_safe_truncate_multibyte_no_panic() { function test_safe_truncate_all_multibyte (line 615) | fn test_safe_truncate_all_multibyte() { function test_safe_truncate_zero_max (line 627) | fn test_safe_truncate_zero_max() { function test_safe_truncate_exact_boundary (line 633) | fn test_safe_truncate_exact_boundary() { function test_truncate_adds_ellipsis (line 644) | fn test_truncate_adds_ellipsis() { function test_format_tool_summary_bash (line 651) | fn test_format_tool_summary_bash() { function test_format_tool_summary_bash_long_command (line 657) | fn test_format_tool_summary_bash_long_command() { function test_format_tool_summary_read_file (line 667) | fn test_format_tool_summary_read_file() { function test_format_tool_summary_write_file (line 673) | fn test_format_tool_summary_write_file() { function test_format_tool_summary_edit_file (line 679) | fn test_format_tool_summary_edit_file() { function test_format_tool_summary_list_files (line 685) | fn test_format_tool_summary_list_files() { function test_format_tool_summary_list_files_no_path (line 691) | fn test_format_tool_summary_list_files_no_path() { function test_format_tool_summary_search (line 697) | fn test_format_tool_summary_search() { function test_format_tool_summary_unknown_tool (line 703) | fn test_format_tool_summary_unknown_tool() { function test_color_struct_display_outputs_ansi (line 709) | fn test_color_struct_display_outputs_ansi() { function test_format_tool_summary_write_file_with_content (line 721) | fn test_format_tool_summary_write_file_with_content() { function test_format_tool_summary_write_file_single_line (line 728) | fn test_format_tool_summary_write_file_single_line() { function test_format_tool_summary_write_file_no_content (line 735) | fn test_format_tool_summary_write_file_no_content() { function test_format_tool_summary_read_file_with_offset_and_limit (line 744) | fn test_format_tool_summary_read_file_with_offset_and_limit() { function test_format_tool_summary_read_file_with_offset_only (line 751) | fn test_format_tool_summary_read_file_with_offset_only() { function test_format_tool_summary_read_file_with_limit_only (line 758) | fn test_format_tool_summary_read_file_with_limit_only() { function test_format_tool_summary_read_file_no_extras (line 765) | fn test_format_tool_summary_read_file_no_extras() { function test_format_tool_summary_edit_file_with_text (line 772) | fn test_format_tool_summary_edit_file_with_text() { function test_format_tool_summary_edit_file_no_text (line 783) | fn test_format_tool_summary_edit_file_no_text() { function test_format_tool_summary_edit_file_same_lines (line 790) | fn test_format_tool_summary_edit_file_same_lines() { function test_format_tool_summary_search_with_path (line 801) | fn test_format_tool_summary_search_with_path() { function test_format_tool_summary_search_with_include (line 808) | fn test_format_tool_summary_search_with_include() { function test_format_tool_summary_search_with_path_and_include (line 815) | fn test_format_tool_summary_search_with_path_and_include() { function test_format_tool_summary_search_pattern_only (line 822) | fn test_format_tool_summary_search_pattern_only() { function test_format_tool_summary_list_files_with_pattern (line 829) | fn test_format_tool_summary_list_files_with_pattern() { function test_format_tool_summary_list_files_pattern_no_path (line 836) | fn test_format_tool_summary_list_files_pattern_no_path() { function test_format_tool_summary_bash_multiline_shows_first_line (line 843) | fn test_format_tool_summary_bash_multiline_shows_first_line() { function test_decode_html_entities_named (line 859) | fn test_decode_html_entities_named() { function test_decode_html_entities_numeric_decimal (line 876) | fn test_decode_html_entities_numeric_decimal() { function test_decode_html_entities_numeric_hex (line 884) | fn test_decode_html_entities_numeric_hex() { function test_decode_html_entities_mixed (line 892) | fn test_decode_html_entities_mixed() { function test_decode_html_entities_no_entities (line 900) | fn test_decode_html_entities_no_entities() { function test_decode_html_entities_invalid_numeric (line 905) | fn test_decode_html_entities_invalid_numeric() { function test_decode_html_entities_incomplete (line 912) | fn test_decode_html_entities_incomplete() { function test_section_header_contains_label_and_line_chars (line 920) | fn test_section_header_contains_label_and_line_chars() { function test_section_header_empty_label_produces_divider (line 933) | fn test_section_header_empty_label_produces_divider() { function test_section_divider_nonempty_with_line_chars (line 941) | fn test_section_divider_nonempty_with_line_chars() { function test_section_header_no_color (line 951) | fn test_section_header_no_color() { function test_section_divider_no_color (line 960) | fn test_section_divider_no_color() { function test_terminal_width_default (line 966) | fn test_terminal_width_default() { function test_section_header_with_various_labels (line 974) | fn test_section_header_with_various_labels() { function test_turn_boundary_contains_number (line 992) | fn test_turn_boundary_contains_number() { function test_turn_boundary_different_numbers (line 1000) | fn test_turn_boundary_different_numbers() { function test_turn_boundary_has_fill_characters (line 1011) | fn test_turn_boundary_has_fill_characters() { function test_bell_enabled_default (line 1019) | fn test_bell_enabled_default() { function test_maybe_ring_bell_short_duration_no_bell (line 1027) | fn test_maybe_ring_bell_short_duration_no_bell() { function test_maybe_ring_bell_long_duration_no_panic (line 1038) | fn test_maybe_ring_bell_long_duration_no_panic() { function test_format_usage_compact (line 1048) | fn test_format_usage_compact() { function test_format_usage_verbose (line 1075) | fn test_format_usage_verbose() { function test_format_usage_zero_tokens_returns_none (line 1100) | fn test_format_usage_zero_tokens_returns_none() { function test_format_usage_verbose_with_cache (line 1119) | fn test_format_usage_verbose_with_cache() { function test_format_usage_compact_includes_cost (line 1135) | fn test_format_usage_compact_includes_cost() { function test_format_usage_compact_unknown_model_no_cost (line 1152) | fn test_format_usage_compact_unknown_model_no_cost() { function test_context_usage_color_green_at_zero (line 1177) | fn test_context_usage_color_green_at_zero() { function test_context_usage_color_green_at_50 (line 1183) | fn test_context_usage_color_green_at_50() { function test_context_usage_color_yellow_at_51 (line 1189) | fn test_context_usage_color_yellow_at_51() { function test_context_usage_color_yellow_at_80 (line 1195) | fn test_context_usage_color_yellow_at_80() { function test_context_usage_color_red_at_81 (line 1201) | fn test_context_usage_color_red_at_81() { function test_context_usage_color_red_at_100 (line 1207) | fn test_context_usage_color_red_at_100() { function test_context_budget_warning_below_60_returns_none (line 1215) | fn test_context_budget_warning_below_60_returns_none() { function test_context_budget_warning_60_threshold (line 1224) | fn test_context_budget_warning_60_threshold() { function test_context_budget_warning_80_threshold (line 1234) | fn test_context_budget_warning_80_threshold() { function test_context_budget_warning_90_threshold (line 1246) | fn test_context_budget_warning_90_threshold() { function test_context_budget_warning_95_threshold (line 1257) | fn test_context_budget_warning_95_threshold() { function test_context_budget_warning_same_threshold_no_repeat (line 1267) | fn test_context_budget_warning_same_threshold_no_repeat() { function test_context_budget_warning_escalates (line 1278) | fn test_context_budget_warning_escalates() { function test_context_budget_warning_reset_rearms (line 1289) | fn test_context_budget_warning_reset_rearms() { function test_context_budget_warning_zero_max_returns_none (line 1300) | fn test_context_budget_warning_zero_max_returns_none() { function test_stderr_is_terminal_returns_bool (line 1306) | fn test_stderr_is_terminal_returns_bool() { function test_is_quiet_returns_bool (line 1316) | fn test_is_quiet_returns_bool() { function test_enable_quiet_is_callable (line 1325) | fn test_enable_quiet_is_callable() { FILE: src/format/output.rs constant TOOL_OUTPUT_MAX_CHARS (line 14) | pub const TOOL_OUTPUT_MAX_CHARS: usize = 30_000; constant TOOL_OUTPUT_MAX_CHARS_PIPED (line 19) | pub const TOOL_OUTPUT_MAX_CHARS_PIPED: usize = 15_000; constant TRUNCATION_HEAD_LINES (line 22) | const TRUNCATION_HEAD_LINES: usize = 100; constant TRUNCATION_TAIL_LINES (line 25) | const TRUNCATION_TAIL_LINES: usize = 50; constant COLLAPSE_MIN_LINES (line 28) | const COLLAPSE_MIN_LINES: usize = 4; constant CATEGORY_PREFIX_MAX (line 31) | const CATEGORY_PREFIX_MAX: usize = 20; function compress_tool_output (line 43) | pub fn compress_tool_output(output: &str) -> String { function strip_ansi_codes (line 69) | fn strip_ansi_codes(s: &str) -> String { function is_progress_bar_line (line 104) | fn is_progress_bar_line(line: &str) -> bool { function is_compiling_line (line 123) | fn is_compiling_line(line: &str) -> bool { function is_downloading_line (line 129) | fn is_downloading_line(line: &str) -> bool { function filter_noisy_patterns (line 145) | fn filter_noisy_patterns(s: &str) -> String { function line_category (line 265) | fn line_category(line: &str) -> &str { function collapse_repetitive_lines (line 289) | fn collapse_repetitive_lines(s: &str) -> String { constant TEST_FILTER_MIN_PASS_LINES (line 328) | const TEST_FILTER_MIN_PASS_LINES: usize = 5; function filter_test_output (line 342) | pub fn filter_test_output(output: &str) -> String { type TestLineKind (line 426) | enum TestLineKind { function classify_test_line (line 440) | fn classify_test_line(line: &str) -> TestLineKind { function truncate_tool_output (line 532) | pub fn truncate_tool_output(output: &str, max_chars: usize) -> String { function format_tool_batch_summary (line 579) | pub fn format_tool_batch_summary( function indent_tool_output (line 603) | pub fn indent_tool_output(output: &str) -> String { constant ADD_MAX_LINES (line 615) | pub const ADD_MAX_LINES: usize = 500; function smart_truncate_for_context (line 621) | pub fn smart_truncate_for_context(content: &str, max_lines: usize) -> (S... function test_truncate_tool_output_under_threshold_unchanged (line 659) | fn test_truncate_tool_output_under_threshold_unchanged() { function test_truncate_tool_output_empty_string (line 666) | fn test_truncate_tool_output_empty_string() { function test_truncate_tool_output_exactly_at_threshold (line 672) | fn test_truncate_tool_output_exactly_at_threshold() { function test_truncate_tool_output_over_threshold_has_marker (line 685) | fn test_truncate_tool_output_over_threshold_has_marker() { function test_truncate_tool_output_preserves_head_and_tail_count (line 707) | fn test_truncate_tool_output_preserves_head_and_tail_count() { function test_truncate_tool_output_few_long_lines_not_truncated (line 740) | fn test_truncate_tool_output_few_long_lines_not_truncated() { function test_truncate_tool_output_single_truncated_line_in_marker (line 758) | fn test_truncate_tool_output_single_truncated_line_in_marker() { function test_truncate_tool_output_default_threshold_constant (line 772) | fn test_truncate_tool_output_default_threshold_constant() { function test_tool_output_max_chars_piped_smaller (line 778) | fn test_tool_output_max_chars_piped_smaller() { function test_tool_output_max_chars_piped_value (line 784) | fn test_tool_output_max_chars_piped_value() { function test_truncate_tool_output_with_custom_limit (line 790) | fn test_truncate_tool_output_with_custom_limit() { function test_truncate_tool_output_respects_limit_parameter (line 808) | fn test_truncate_tool_output_respects_limit_parameter() { function test_tool_batch_summary_single_tool_returns_empty (line 830) | fn test_tool_batch_summary_single_tool_returns_empty() { function test_tool_batch_summary_zero_tools_returns_empty (line 839) | fn test_tool_batch_summary_zero_tools_returns_empty() { function test_tool_batch_summary_all_succeed (line 845) | fn test_tool_batch_summary_all_succeed() { function test_tool_batch_summary_with_failures (line 859) | fn test_tool_batch_summary_with_failures() { function test_tool_batch_summary_two_tools_plural (line 870) | fn test_tool_batch_summary_two_tools_plural() { function test_indent_tool_output_empty (line 879) | fn test_indent_tool_output_empty() { function test_indent_tool_output_single_line (line 884) | fn test_indent_tool_output_single_line() { function test_indent_tool_output_multiline (line 891) | fn test_indent_tool_output_multiline() { function test_noisy_compiling_lines_collapse (line 906) | fn test_noisy_compiling_lines_collapse() { function test_noisy_downloading_lines_collapse (line 933) | fn test_noisy_downloading_lines_collapse() { function test_noisy_short_compiling_run_kept (line 946) | fn test_noisy_short_compiling_run_kept() { function test_noisy_lock_waiting_removed (line 958) | fn test_noisy_lock_waiting_removed() { function test_noisy_progress_bar_removed (line 966) | fn test_noisy_progress_bar_removed() { function test_noisy_progress_bar_thin_chars_removed (line 974) | fn test_noisy_progress_bar_thin_chars_removed() { function test_noisy_npm_warn_filtered (line 982) | fn test_noisy_npm_warn_filtered() { function test_noisy_pip_already_satisfied_removed (line 1010) | fn test_noisy_pip_already_satisfied_removed() { function test_noisy_git_hash_abbreviated (line 1022) | fn test_noisy_git_hash_abbreviated() { function test_noisy_git_author_date_consolidated (line 1037) | fn test_noisy_git_author_date_consolidated() { function test_noisy_empty_lines_collapsed_to_two (line 1051) | fn test_noisy_empty_lines_collapsed_to_two() { function test_noisy_two_empty_lines_kept (line 1069) | fn test_noisy_two_empty_lines_kept() { function test_noisy_passthrough_normal_lines (line 1077) | fn test_noisy_passthrough_normal_lines() { function test_noisy_downloaded_summary_kept (line 1084) | fn test_noisy_downloaded_summary_kept() { function test_noisy_integration_with_compress (line 1094) | fn test_noisy_integration_with_compress() { function test_compress_strips_ansi_codes (line 1117) | fn test_compress_strips_ansi_codes() { function test_compress_strips_various_ansi_sequences (line 1125) | fn test_compress_strips_various_ansi_sequences() { function test_compress_collapses_repetitive_lines (line 1135) | fn test_compress_collapses_repetitive_lines() { function test_compress_preserves_non_repetitive_output (line 1164) | fn test_compress_preserves_non_repetitive_output() { function test_compress_short_output_unchanged (line 1171) | fn test_compress_short_output_unchanged() { function test_compress_mixed_repetitive_blocks (line 1188) | fn test_compress_mixed_repetitive_blocks() { function test_truncate_uses_compression (line 1209) | fn test_truncate_uses_compression() { function test_compress_exact_threshold_four_lines (line 1218) | fn test_compress_exact_threshold_four_lines() { function test_compress_empty_input (line 1232) | fn test_compress_empty_input() { function test_compress_pip_install_pattern (line 1237) | fn test_compress_pip_install_pattern() { function test_strip_ansi_preserves_multibyte_utf8 (line 1250) | fn test_strip_ansi_preserves_multibyte_utf8() { function test_strip_ansi_preserves_emoji (line 1258) | fn test_strip_ansi_preserves_emoji() { function test_strip_ansi_preserves_accented_chars (line 1266) | fn test_strip_ansi_preserves_accented_chars() { function test_compress_multibyte_content (line 1274) | fn test_compress_multibyte_content() { function test_line_category_multibyte_prefix (line 1282) | fn test_line_category_multibyte_prefix() { function test_line_category_multibyte_short_word (line 1292) | fn test_line_category_multibyte_short_word() { function test_collapse_repetitive_multibyte_lines (line 1300) | fn test_collapse_repetitive_multibyte_lines() { function test_filter_cargo_test_all_passing (line 1316) | fn test_filter_cargo_test_all_passing() { function test_filter_cargo_test_with_failures (line 1342) | fn test_filter_cargo_test_with_failures() { function test_filter_cargo_test_failure_details_preserved (line 1390) | fn test_filter_cargo_test_failure_details_preserved() { function test_filter_pytest_output (line 1426) | fn test_filter_pytest_output() { function test_filter_jest_output (line 1466) | fn test_filter_jest_output() { function test_filter_go_test_output (line 1494) | fn test_filter_go_test_output() { function test_filter_non_test_output_unchanged (line 1520) | fn test_filter_non_test_output_unchanged() { function test_filter_mixed_content (line 1530) | fn test_filter_mixed_content() { function test_compress_tool_output_integrates_test_filter (line 1565) | fn test_compress_tool_output_integrates_test_filter() { function test_smart_truncate_under_limit (line 1584) | fn test_smart_truncate_under_limit() { function test_smart_truncate_at_limit (line 1596) | fn test_smart_truncate_at_limit() { function test_smart_truncate_over_limit (line 1608) | fn test_smart_truncate_over_limit() { function test_smart_truncate_omission_counts (line 1630) | fn test_smart_truncate_omission_counts() { function test_smart_truncate_empty_content (line 1643) | fn test_smart_truncate_empty_content() { function test_smart_truncate_one_over_limit (line 1651) | fn test_smart_truncate_one_over_limit() { function test_smart_truncate_preserves_head_and_tail_content (line 1664) | fn test_smart_truncate_preserves_head_and_tail_content() { FILE: src/format/tools.rs constant SPINNER_FRAMES (line 9) | pub const SPINNER_FRAMES: &[char] = &['â ‹', 'â ™', 'â ¹', 'â ¸', 'â ¼', 'â ´', 'â ¦',... function spinner_frame (line 12) | pub fn spinner_frame(tick: usize) -> char { type Spinner (line 17) | pub struct Spinner { method start (line 27) | pub fn start() -> Self { method stop (line 77) | pub fn stop(self) { method drop (line 91) | fn drop(&mut self) { constant TOOL_LABEL_MAX_CHARS (line 107) | const TOOL_LABEL_MAX_CHARS: usize = 40; function format_tool_progress (line 117) | pub fn format_tool_progress( function format_duration_live (line 148) | pub fn format_duration_live(d: Duration) -> String { function format_partial_tail (line 176) | pub fn format_partial_tail(output: &str, max_lines: usize) -> String { function count_result_lines (line 204) | pub fn count_result_lines(result: &ToolResult) -> usize { function extract_result_text (line 216) | pub fn extract_result_text(result: &ToolResult) -> String { type ToolProgressTimer (line 232) | pub struct ToolProgressTimer { method start (line 244) | pub fn start(tool_name: String) -> Self { method set_line_count (line 307) | pub fn set_line_count(&self, count: usize) { method set_label (line 314) | pub fn set_label(&self, label: String) { method stop (line 321) | pub fn stop(self) { method drop (line 331) | fn drop(&mut self) { type ThinkBlockFilter (line 350) | pub struct ThinkBlockFilter { method new (line 356) | pub fn new() -> Self { method filter (line 364) | pub fn filter(&mut self, delta: &str) -> String { method flush (line 422) | pub fn flush(&mut self) -> String { function test_spinner_frames_not_empty (line 438) | fn test_spinner_frames_not_empty() { function test_spinner_frames_are_braille (line 443) | fn test_spinner_frames_are_braille() { function test_spinner_frame_cycling (line 455) | fn test_spinner_frame_cycling() { function test_spinner_frame_wraps_around (line 463) | fn test_spinner_frame_wraps_around() { function test_spinner_frame_large_index (line 472) | fn test_spinner_frame_large_index() { function test_spinner_frames_all_unique (line 479) | fn test_spinner_frames_all_unique() { function test_format_duration_live_seconds (line 490) | fn test_format_duration_live_seconds() { function test_format_duration_live_minutes (line 497) | fn test_format_duration_live_minutes() { function test_format_duration_live_hours (line 505) | fn test_format_duration_live_hours() { function test_format_tool_progress_no_lines (line 512) | fn test_format_tool_progress_no_lines() { function test_format_tool_progress_with_lines (line 525) | fn test_format_tool_progress_with_lines() { function test_format_tool_progress_single_line (line 536) | fn test_format_tool_progress_single_line() { function test_format_tool_progress_zero_lines_hidden (line 546) | fn test_format_tool_progress_zero_lines_hidden() { function test_format_tool_progress_with_label (line 552) | fn test_format_tool_progress_with_label() { function test_format_tool_progress_label_truncation (line 573) | fn test_format_tool_progress_label_truncation() { function test_format_tool_progress_empty_label_ignored (line 589) | fn test_format_tool_progress_empty_label_ignored() { function test_format_partial_tail_empty (line 596) | fn test_format_partial_tail_empty() { function test_format_partial_tail_zero_lines (line 601) | fn test_format_partial_tail_zero_lines() { function test_format_partial_tail_fewer_lines_than_max (line 606) | fn test_format_partial_tail_fewer_lines_than_max() { function test_format_partial_tail_more_lines_than_max (line 617) | fn test_format_partial_tail_more_lines_than_max() { function test_format_partial_tail_uses_pipe_indent (line 631) | fn test_format_partial_tail_uses_pipe_indent() { function test_format_partial_tail_truncation_header_with_six_lines (line 640) | fn test_format_partial_tail_truncation_header_with_six_lines() { function test_format_partial_tail_no_header_when_all_fit (line 660) | fn test_format_partial_tail_no_header_when_all_fit() { function test_format_partial_tail_exact_match_no_header (line 671) | fn test_format_partial_tail_exact_match_no_header() { function test_count_result_lines (line 680) | fn test_count_result_lines() { function test_count_result_lines_empty (line 691) | fn test_count_result_lines_empty() { function test_extract_result_text (line 700) | fn test_extract_result_text() { function test_extract_result_text_empty (line 716) | fn test_extract_result_text_empty() { function test_think_filter_simple_block (line 732) | fn test_think_filter_simple_block() { function test_think_filter_no_block (line 739) | fn test_think_filter_no_block() { function test_think_filter_streaming_split (line 746) | fn test_think_filter_streaming_split() { function test_think_filter_nested_or_repeated (line 755) | fn test_think_filter_nested_or_repeated() { function test_think_filter_partial_at_end (line 762) | fn test_think_filter_partial_at_end() { function test_think_filter_flush_inside_block (line 772) | fn test_think_filter_flush_inside_block() { function test_think_filter_empty_input (line 782) | fn test_think_filter_empty_input() { function test_think_filter_block_at_start (line 791) | fn test_think_filter_block_at_start() { function test_think_filter_block_at_end (line 798) | fn test_think_filter_block_at_end() { function test_think_filter_split_closing_tag (line 805) | fn test_think_filter_split_closing_tag() { function test_think_filter_char_by_char (line 815) | fn test_think_filter_char_by_char() { function test_spinner_start_stop_no_panic (line 828) | async fn test_spinner_start_stop_no_panic() { function test_spinner_drop_no_panic (line 837) | async fn test_spinner_drop_no_panic() { function test_tool_progress_timer_start_stop_no_panic (line 844) | async fn test_tool_progress_timer_start_stop_no_panic() { function test_tool_progress_timer_drop_no_panic (line 854) | async fn test_tool_progress_timer_drop_no_panic() { FILE: src/git.rs constant DESTRUCTIVE_GIT_COMMANDS (line 9) | const DESTRUCTIVE_GIT_COMMANDS: &[&str] = &[ function destructive_guard (line 31) | fn destructive_guard<'a>(args: &'a [&'a str]) -> Option<&'a str> { function run_git (line 56) | pub fn run_git(args: &[&str]) -> Result { function git_branch (line 75) | pub fn git_branch() -> Option { function get_staged_diff (line 81) | pub fn get_staged_diff() -> Option { function run_git_commit (line 86) | pub fn run_git_commit(message: &str) -> (bool, String) { constant CO_AUTHORED_TRAILER (line 102) | const CO_AUTHORED_TRAILER: &str = "Co-authored-by: yoyo String { function run_git_commit_with_trailer (line 114) | pub fn run_git_commit_with_trailer(message: &str) -> (bool, String) { function generate_commit_message (line 121) | pub fn generate_commit_message(diff: &str) -> String { function colorize_diff (line 192) | pub fn colorize_diff(diff: &str) -> String { function format_stash_list (line 223) | pub fn format_stash_list(raw: &str) -> String { type GitSubcommand (line 253) | pub enum GitSubcommand { function parse_git_args (line 279) | pub fn parse_git_args(arg: &str) -> GitSubcommand { function run_git_subcommand (line 342) | pub fn run_git_subcommand(subcmd: &GitSubcommand) { function detect_base_branch (line 517) | pub fn detect_base_branch() -> String { function get_branch_diff (line 529) | pub fn get_branch_diff(base: &str) -> Option { function get_branch_commits (line 536) | pub fn get_branch_commits(base: &str) -> Option { function build_pr_description_prompt (line 548) | pub fn build_pr_description_prompt(branch: &str, base: &str, commits: &s... function parse_pr_description (line 591) | pub fn parse_pr_description(response: &str) -> Option<(String, String)> { function test_run_git_valid_args (line 614) | fn test_run_git_valid_args() { function test_run_git_invalid_args_returns_err (line 626) | fn test_run_git_invalid_args_returns_err() { function test_run_git_trims_output (line 637) | fn test_run_git_trims_output() { function test_get_staged_diff_runs (line 644) | fn test_get_staged_diff_runs() { function test_generate_commit_message_basic (line 655) | fn test_generate_commit_message_basic() { function test_generate_commit_message_docs (line 675) | fn test_generate_commit_message_docs() { function test_generate_commit_message_multiple_files (line 692) | fn test_generate_commit_message_multiple_files() { function test_generate_commit_message_deletions_only (line 724) | fn test_generate_commit_message_deletions_only() { function test_git_subcommand_help (line 743) | fn test_git_subcommand_help() { function test_git_subcommand_status (line 751) | fn test_git_subcommand_status() { function test_git_subcommand_log (line 758) | fn test_git_subcommand_log() { function test_git_subcommand_add (line 768) | fn test_git_subcommand_add() { function test_git_subcommand_stash (line 784) | fn test_git_subcommand_stash() { function test_git_subcommand_stash_pop (line 790) | fn test_git_subcommand_stash_pop() { function test_git_subcommand_stash_list (line 797) | fn test_git_subcommand_stash_list() { function test_git_subcommand_stash_show (line 804) | fn test_git_subcommand_stash_show() { function test_git_subcommand_stash_drop (line 822) | fn test_git_subcommand_stash_drop() { function test_git_subcommand_stash_push (line 840) | fn test_git_subcommand_stash_push() { function test_format_stash_list_empty (line 847) | fn test_format_stash_list_empty() { function test_format_stash_list_single_entry (line 856) | fn test_format_stash_list_single_entry() { function test_format_stash_list_multiple_entries (line 872) | fn test_format_stash_list_multiple_entries() { function test_format_stash_list_uses_ansi_colors (line 896) | fn test_format_stash_list_uses_ansi_colors() { function test_git_subcommand_diff (line 917) | fn test_git_subcommand_diff() { function test_git_subcommand_branch (line 942) | fn test_git_subcommand_branch() { function test_git_branch_returns_something_in_repo (line 958) | fn test_git_branch_returns_something_in_repo() { function test_detect_base_branch_returns_valid_name (line 971) | fn test_detect_base_branch_returns_valid_name() { function test_get_branch_diff_runs (line 980) | fn test_get_branch_diff_runs() { function test_get_branch_commits_runs (line 990) | fn test_get_branch_commits_runs() { function test_build_pr_description_prompt_contains_info (line 1000) | fn test_build_pr_description_prompt_contains_info() { function test_build_pr_description_prompt_truncates_large_diff (line 1021) | fn test_build_pr_description_prompt_truncates_large_diff() { function test_parse_pr_description_valid (line 1037) | fn test_parse_pr_description_valid() { function test_parse_pr_description_with_extra_whitespace (line 1048) | fn test_parse_pr_description_with_extra_whitespace() { function test_parse_pr_description_missing_title (line 1059) | fn test_parse_pr_description_missing_title() { function test_parse_pr_description_missing_separator (line 1066) | fn test_parse_pr_description_missing_separator() { function test_parse_pr_description_empty_title (line 1073) | fn test_parse_pr_description_empty_title() { function colorize_diff_green_for_additions (line 1082) | fn colorize_diff_green_for_additions() { function colorize_diff_red_for_deletions (line 1092) | fn colorize_diff_red_for_deletions() { function colorize_diff_cyan_for_hunk_headers (line 1102) | fn colorize_diff_cyan_for_hunk_headers() { function colorize_diff_bold_for_file_headers (line 1112) | fn colorize_diff_bold_for_file_headers() { function colorize_diff_context_lines_unchanged (line 1130) | fn colorize_diff_context_lines_unchanged() { function colorize_diff_empty_input (line 1149) | fn colorize_diff_empty_input() { function co_authored_trailer_normal_message (line 1157) | fn co_authored_trailer_normal_message() { function co_authored_trailer_empty_message (line 1166) | fn co_authored_trailer_empty_message() { function co_authored_trailer_already_present (line 1175) | fn co_authored_trailer_already_present() { function co_authored_trailer_multiline_message (line 1182) | fn co_authored_trailer_multiline_message() { function destructive_guard_allows_safe_commands (line 1203) | fn destructive_guard_allows_safe_commands() { function destructive_guard_blocks_known_bad_commands_in_project_root (line 1222) | fn destructive_guard_blocks_known_bad_commands_in_project_root() { function destructive_guard_allows_destructive_in_temp_dir (line 1237) | fn destructive_guard_allows_destructive_in_temp_dir() { function destructive_guard_empty_args (line 1251) | fn destructive_guard_empty_args() { function destructive_guard_list_covers_original_incident (line 1256) | fn destructive_guard_list_covers_original_incident() { function run_git_safe_command_passes_guard (line 1273) | fn run_git_safe_command_passes_guard() { function run_git_panics_on_destructive_from_project_root (line 1281) | fn run_git_panics_on_destructive_from_project_root() { FILE: src/help.rs function help_command_completions (line 13) | pub fn help_command_completions(partial_lower: &str) -> Vec { function command_help (line 37) | pub fn command_help(cmd: &str) -> Option<&'static str> { function cli_help_text (line 940) | pub fn cli_help_text() -> String { function help_text (line 1464) | pub fn help_text() -> String { function append_custom_section (line 1624) | fn append_custom_section(out: &mut String, custom_cmds: &[(String, Strin... function handle_help (line 1635) | pub fn handle_help() { function handle_help_command (line 1641) | pub fn handle_help_command(input: &str) -> bool { function command_short_description (line 1669) | pub fn command_short_description(cmd: &str) -> Option<&'static str> { function test_help_text_contains_all_commands (line 1760) | fn test_help_text_contains_all_commands() { function test_help_text_has_category_headers (line 1821) | fn test_help_text_has_category_headers() { function test_help_text_session_commands_under_session_header (line 1839) | fn test_help_text_session_commands_under_session_header() { function test_help_text_git_commands_under_git_header (line 1878) | fn test_help_text_git_commands_under_git_header() { function test_help_text_project_commands_under_project_header (line 1894) | fn test_help_text_project_commands_under_project_header() { function test_help_text_ai_commands_under_ai_header (line 1911) | fn test_help_text_ai_commands_under_ai_header() { function test_help_text_input_section (line 1936) | fn test_help_text_input_section() { function test_command_help_add_returns_some (line 1952) | fn test_command_help_add_returns_some() { function test_command_help_nonexistent_returns_none (line 1963) | fn test_command_help_nonexistent_returns_none() { function test_command_help_exhaustive_for_known_commands (line 1975) | fn test_command_help_exhaustive_for_known_commands() { function test_command_help_strips_leading_slash (line 1991) | fn test_command_help_strips_leading_slash() { function test_help_still_in_known_commands (line 1999) | fn test_help_still_in_known_commands() { function test_arg_completions_help_returns_command_names (line 2007) | fn test_arg_completions_help_returns_command_names() { function test_arg_completions_help_filters_by_prefix (line 2024) | fn test_arg_completions_help_filters_by_prefix() { function test_diff_help_mentions_staged (line 2041) | fn test_diff_help_mentions_staged() { function test_command_short_description_coverage (line 2058) | fn test_command_short_description_coverage() { function test_command_short_description_unknown_returns_none (line 2070) | fn test_command_short_description_unknown_returns_none() { function test_append_custom_section_shows_commands (line 2076) | fn test_append_custom_section_shows_commands() { function test_append_custom_section_empty_when_no_commands (line 2101) | fn test_append_custom_section_empty_when_no_commands() { function test_help_completions_include_custom_commands (line 2112) | fn test_help_completions_include_custom_commands() { function cli_help_text_contains_key_flags (line 2128) | fn cli_help_text_contains_key_flags() { function cli_help_text_matches_cli_help_text_fn (line 2154) | fn cli_help_text_matches_cli_help_text_fn() { FILE: src/hooks.rs type Hook (line 17) | pub trait Hook: Send + Sync { method name (line 19) | fn name(&self) -> &str; method pre_execute (line 22) | fn pre_execute( method post_execute (line 31) | fn post_execute( method name (line 120) | fn name(&self) -> &str { method post_execute (line 127) | fn post_execute( method name (line 216) | fn name(&self) -> &str { method pre_execute (line 220) | fn pre_execute( method post_execute (line 242) | fn post_execute( method name (line 447) | fn name(&self) -> &str { method pre_execute (line 450) | fn pre_execute( method name (line 474) | fn name(&self) -> &str { method pre_execute (line 477) | fn pre_execute( method name (line 500) | fn name(&self) -> &str { method post_execute (line 503) | fn post_execute( method name (line 527) | fn name(&self) -> &str { method post_execute (line 530) | fn post_execute( method name (line 563) | fn name(&self) -> &str { method pre_execute (line 566) | fn pre_execute( type HookRegistry (line 46) | pub struct HookRegistry { method new (line 57) | pub fn new() -> Self { method register (line 61) | pub fn register(&mut self, hook: Box) { method run_pre_hooks (line 72) | pub fn run_pre_hooks( method run_post_hooks (line 88) | pub fn run_post_hooks( method len (line 102) | pub fn len(&self) -> usize { method is_empty (line 107) | pub fn is_empty(&self) -> bool { method default (line 51) | fn default() -> Self { type AuditHook (line 117) | pub struct AuditHook; type HookPhase (line 146) | pub enum HookPhase { type ShellHook (line 164) | pub struct ShellHook { method matches_tool (line 173) | fn matches_tool(&self, tool_name: &str) -> bool { method run_command (line 179) | fn run_command(&self, env_vars: &[(&str, &str)]) -> Result { function parse_hooks_from_config (line 278) | pub fn parse_hooks_from_config(config: &HashMap) -> Vec<... type HookedTool (line 321) | struct HookedTool { method name (line 328) | fn name(&self) -> &str { method label (line 332) | fn label(&self) -> &str { method description (line 336) | fn description(&self) -> &str { method parameters_schema (line 340) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 344) | async fn execute( function maybe_hook (line 397) | pub fn maybe_hook(tool: Box, hooks: &Arc) -... function test_hook_registry_new_is_empty (line 416) | fn test_hook_registry_new_is_empty() { function test_hook_registry_default_is_empty (line 423) | fn test_hook_registry_default_is_empty() { function test_pre_hooks_with_no_hooks_returns_none (line 429) | fn test_pre_hooks_with_no_hooks_returns_none() { function test_post_hooks_with_no_hooks_passes_through (line 437) | fn test_post_hooks_with_no_hooks_passes_through() { type BlockingHook (line 445) | struct BlockingHook; function test_blocking_pre_hook_returns_err (line 460) | fn test_blocking_pre_hook_returns_err() { type CachingHook (line 470) | struct CachingHook { function test_short_circuit_pre_hook_returns_cached_result (line 487) | fn test_short_circuit_pre_hook_returns_cached_result() { type UppercaseHook (line 498) | struct UppercaseHook; function test_post_hook_can_modify_output (line 514) | fn test_post_hook_can_modify_output() { type TagHook (line 523) | struct TagHook { function test_hook_ordering_post_hooks_chain_first_to_last (line 541) | fn test_hook_ordering_post_hooks_chain_first_to_last() { type CountingHook (line 559) | struct CountingHook { function test_hook_ordering_pre_hooks_run_first_to_last (line 577) | fn test_hook_ordering_pre_hooks_run_first_to_last() { function test_short_circuit_pre_hook_stops_later_hooks (line 608) | fn test_short_circuit_pre_hook_stops_later_hooks() { function test_audit_hook_implements_trait (line 625) | fn test_audit_hook_implements_trait() { function test_hook_registry_register_increases_len (line 641) | fn test_hook_registry_register_increases_len() { function test_parse_hooks_from_config_empty (line 654) | fn test_parse_hooks_from_config_empty() { function test_parse_hooks_from_config_pre_bash (line 661) | fn test_parse_hooks_from_config_pre_bash() { function test_parse_hooks_from_config_post_wildcard (line 676) | fn test_parse_hooks_from_config_post_wildcard() { function test_parse_hooks_from_config_multiple (line 688) | fn test_parse_hooks_from_config_multiple() { function test_parse_hooks_from_config_ignores_invalid (line 707) | fn test_parse_hooks_from_config_ignores_invalid() { function test_shell_hook_pre_matching (line 720) | fn test_shell_hook_pre_matching() { function test_shell_hook_pre_blocking (line 741) | fn test_shell_hook_pre_blocking() { function test_shell_hook_post_passthrough (line 757) | fn test_shell_hook_post_passthrough() { function test_shell_hook_wildcard_matches_all (line 772) | fn test_shell_hook_wildcard_matches_all() { function test_shell_hook_post_non_matching_passes_through (line 788) | fn test_shell_hook_post_non_matching_passes_through() { function test_shell_hook_pre_phase_skips_post_tool (line 803) | fn test_shell_hook_pre_phase_skips_post_tool() { function test_shell_hook_env_vars_available (line 819) | fn test_shell_hook_env_vars_available() { function test_maybe_hook_skips_wrap_when_empty (line 837) | fn test_maybe_hook_skips_wrap_when_empty() { function test_build_tools_with_audit_preserves_tool_count (line 847) | fn test_build_tools_with_audit_preserves_tool_count() { function test_build_tools_with_audit_preserves_tool_names (line 862) | fn test_build_tools_with_audit_preserves_tool_names() { FILE: src/main.rs function yoyo_user_agent (line 95) | fn yoyo_user_agent() -> String { constant BUILTIN_TOOL_NAMES (line 107) | pub(crate) const BUILTIN_TOOL_NAMES: &[&str] = &[ function detect_mcp_collisions (line 123) | pub(crate) fn detect_mcp_collisions(mcp_tools: &[String], builtins: &[&s... function fetch_mcp_tool_names (line 139) | async fn fetch_mcp_tool_names( function connect_external_servers (line 164) | async fn connect_external_servers( function insert_client_headers (line 315) | fn insert_client_headers(config: &mut ModelConfig) { function create_model_config (line 331) | pub fn create_model_config(provider: &str, model: &str, base_url: Option... type AgentConfig (line 456) | pub struct AgentConfig { method configure_agent (line 486) | fn configure_agent(&self, mut agent: Agent, model_context_window: u32)... method build_agent (line 567) | pub fn build_agent(&self) -> Agent { method build_side_agent (line 601) | pub fn build_side_agent(&self) -> Agent { method try_switch_to_fallback (line 642) | pub fn try_switch_to_fallback(&mut self) -> bool { type FallbackRetry (line 670) | enum FallbackRetry<'a> { function try_fallback_prompt (line 686) | async fn try_fallback_prompt( function build_json_output (line 744) | fn build_json_output( function run_single_prompt (line 768) | async fn run_single_prompt( function looks_like_slash_command (line 920) | fn looks_like_slash_command(input: &str) -> bool { function run_piped_mode (line 924) | async fn run_piped_mode( function apply_cli_flags (line 1012) | fn apply_cli_flags(args: &[String]) { function apply_config_flags (line 1035) | fn apply_config_flags(config: &Config) -> bool { function run_setup_wizard_if_needed (line 1054) | fn run_setup_wizard_if_needed(is_interactive: bool, agent_config: &mut A... function apply_bedrock_credentials (line 1084) | fn apply_bedrock_credentials(agent_config: &mut AgentConfig) { function restore_session (line 1098) | fn restore_session(agent: &mut Agent) { function main (line 1115) | async fn main() { function looks_like_slash_command_detects_leading_slash (line 1233) | fn looks_like_slash_command_detects_leading_slash() { function looks_like_slash_command_handles_leading_whitespace (line 1240) | fn looks_like_slash_command_handles_leading_whitespace() { function looks_like_slash_command_rejects_mid_string_slash (line 1248) | fn looks_like_slash_command_rejects_mid_string_slash() { function looks_like_slash_command_rejects_non_slash_input (line 1256) | fn looks_like_slash_command_rejects_non_slash_input() { function test_always_approve_flag_starts_false (line 1264) | fn test_always_approve_flag_starts_false() { function test_checkpoint_triggered_flag_starts_false (line 1271) | fn test_checkpoint_triggered_flag_starts_false() { function test_always_approve_flag_persists_across_clones (line 1277) | fn test_always_approve_flag_persists_across_clones() { function test_always_approve_response_matching (line 1293) | fn test_always_approve_response_matching() { function test_always_approve_only_on_a_or_always (line 1318) | fn test_always_approve_only_on_a_or_always() { function test_always_approve_flag_used_in_confirm_simulation (line 1343) | fn test_always_approve_flag_used_in_confirm_simulation() { function test_agent_config_struct_fields (line 1378) | fn test_agent_config_struct_fields() { function test_agent_config_build_agent_anthropic (line 1416) | fn test_agent_config_build_agent_anthropic() { function test_agent_config_build_agent_openai (line 1447) | fn test_agent_config_build_agent_openai() { function test_agent_config_build_agent_google (line 1478) | fn test_agent_config_build_agent_google() { function test_agent_config_build_agent_with_base_url (line 1508) | fn test_agent_config_build_agent_with_base_url() { function test_agent_config_rebuild_produces_fresh_agent (line 1538) | fn test_agent_config_rebuild_produces_fresh_agent() { function test_agent_config_mutable_model_switch (line 1570) | fn test_agent_config_mutable_model_switch() { function test_agent_config_mutable_thinking_switch (line 1601) | fn test_agent_config_mutable_thinking_switch() { function test_yoyo_user_agent_format (line 1636) | fn test_yoyo_user_agent_format() { function test_client_headers_anthropic (line 1651) | fn test_client_headers_anthropic() { function test_client_headers_openai (line 1669) | fn test_client_headers_openai() { function test_client_headers_openrouter (line 1683) | fn test_client_headers_openrouter() { function test_client_headers_google (line 1703) | fn test_client_headers_google() { function test_create_model_config_zai_defaults (line 1713) | fn test_create_model_config_zai_defaults() { function test_create_model_config_zai_custom_base_url (line 1726) | fn test_create_model_config_zai_custom_base_url() { function test_agent_config_build_agent_zai (line 1734) | fn test_agent_config_build_agent_zai() { function test_create_model_config_minimax_defaults (line 1762) | fn test_create_model_config_minimax_defaults() { function test_create_model_config_minimax_custom_base_url (line 1782) | fn test_create_model_config_minimax_custom_base_url() { function test_create_model_config_unknown_provider_falls_through (line 1793) | fn test_create_model_config_unknown_provider_falls_through() { function test_create_model_config_unknown_provider_with_base_url (line 1801) | fn test_create_model_config_unknown_provider_with_base_url() { function test_agent_config_build_agent_minimax (line 1813) | fn test_agent_config_build_agent_minimax() { function test_bedrock_model_config (line 1841) | fn test_bedrock_model_config() { function test_bedrock_model_config_custom_url (line 1854) | fn test_bedrock_model_config_custom_url() { function test_build_agent_bedrock (line 1867) | fn test_build_agent_bedrock() { function test_client_headers_on_anthropic_build_agent (line 1896) | fn test_client_headers_on_anthropic_build_agent() { function test_agent_config (line 1933) | fn test_agent_config(provider: &str, model: &str) -> AgentConfig { function test_configure_agent_applies_all_settings (line 1959) | fn test_configure_agent_applies_all_settings() { function test_build_agent_all_providers_build_cleanly (line 1973) | fn test_build_agent_all_providers_build_cleanly() { function test_build_agent_anthropic_with_base_url_uses_openai_compat (line 1994) | fn test_build_agent_anthropic_with_base_url_uses_openai_compat() { function test_configure_agent_sets_context_config (line 2013) | fn test_configure_agent_sets_context_config() { function test_execution_limits_always_set (line 2045) | fn test_execution_limits_always_set() { function test_fallback_switch_success (line 2109) | fn test_fallback_switch_success() { function test_fallback_switch_already_on_fallback (line 2123) | fn test_fallback_switch_already_on_fallback() { function test_fallback_switch_no_fallback_configured (line 2137) | fn test_fallback_switch_no_fallback_configured() { function test_fallback_switch_derives_default_model (line 2147) | fn test_fallback_switch_derives_default_model() { function test_fallback_switch_uses_explicit_model (line 2161) | fn test_fallback_switch_uses_explicit_model() { function test_fallback_switch_resolves_api_key (line 2176) | fn test_fallback_switch_resolves_api_key() { function test_fallback_switch_keeps_api_key_when_env_missing (line 2198) | fn test_fallback_switch_keeps_api_key_when_env_missing() { function test_fallback_switch_idempotent (line 2218) | fn test_fallback_switch_idempotent() { function test_fallback_prompt_no_api_error_passthrough (line 2237) | fn test_fallback_prompt_no_api_error_passthrough() { function test_fallback_prompt_api_error_no_fallback_configured (line 2260) | fn test_fallback_prompt_api_error_no_fallback_configured() { function test_fallback_prompt_api_error_with_fallback_switches (line 2278) | fn test_fallback_prompt_api_error_with_fallback_switches() { function test_build_json_output_valid_json_with_expected_keys (line 2301) | fn test_build_json_output_valid_json_with_expected_keys() { function test_build_json_output_error_mode (line 2332) | fn test_build_json_output_error_mode() { function mcp_builtin_collision_detection (line 2358) | fn mcp_builtin_collision_detection() { function mcp_collision_detection_no_collisions (line 2368) | fn mcp_collision_detection_no_collisions() { function mcp_collision_detection_multiple_collisions_preserves_order (line 2376) | fn mcp_collision_detection_multiple_collisions_preserves_order() { function mcp_collision_detection_against_real_builtins (line 2391) | fn mcp_collision_detection_against_real_builtins() { function mcp_collision_detection_empty_inputs (line 2412) | fn mcp_collision_detection_empty_inputs() { function bedrock_credentials_noop_for_non_bedrock (line 2419) | fn bedrock_credentials_noop_for_non_bedrock() { function bedrock_credentials_noop_when_already_combined (line 2427) | fn bedrock_credentials_noop_when_already_combined() { function bedrock_credentials_combines_access_and_secret (line 2436) | fn bedrock_credentials_combines_access_and_secret() { function bedrock_credentials_includes_session_token (line 2453) | fn bedrock_credentials_includes_session_token() { FILE: src/memory.rs type MemoryEntry (line 12) | pub struct MemoryEntry { type ProjectMemory (line 19) | pub struct ProjectMemory { constant YOYO_DIR (line 24) | const YOYO_DIR: &str = ".yoyo"; constant MEMORY_FILE (line 27) | const MEMORY_FILE: &str = "memory.json"; function memory_file_path (line 30) | pub fn memory_file_path() -> PathBuf { function load_memories (line 36) | pub fn load_memories() -> ProjectMemory { function load_memories_from (line 41) | pub fn load_memories_from(path: &Path) -> ProjectMemory { function save_memories (line 50) | pub fn save_memories(memory: &ProjectMemory) -> Result<(), String> { function save_memories_to (line 55) | pub fn save_memories_to(memory: &ProjectMemory, path: &Path) -> Result<(... function add_memory (line 67) | pub fn add_memory(memory: &mut ProjectMemory, note: &str) { function remove_memory (line 77) | pub fn remove_memory(memory: &mut ProjectMemory, index: usize) -> Option... function search_memories (line 88) | pub fn search_memories<'a>( function format_memories_for_prompt (line 103) | pub fn format_memories_for_prompt(memory: &ProjectMemory) -> Option String { function temp_memory_path (line 140) | fn temp_memory_path(name: &str) -> PathBuf { function cleanup (line 146) | fn cleanup(path: &Path) { function test_memory_entry_serialize_deserialize (line 153) | fn test_memory_entry_serialize_deserialize() { function test_project_memory_serialize_deserialize (line 164) | fn test_project_memory_serialize_deserialize() { function test_add_memory (line 185) | fn test_add_memory() { function test_remove_memory_valid_index (line 200) | fn test_remove_memory_valid_index() { function test_remove_memory_invalid_index (line 227) | fn test_remove_memory_invalid_index() { function test_remove_memory_empty (line 241) | fn test_remove_memory_empty() { function test_save_and_load_memories (line 248) | fn test_save_and_load_memories() { function test_load_memories_nonexistent_file (line 275) | fn test_load_memories_nonexistent_file() { function test_load_memories_invalid_json (line 282) | fn test_load_memories_invalid_json() { function test_save_creates_directory (line 297) | fn test_save_creates_directory() { function test_format_memories_for_prompt_empty (line 321) | fn test_format_memories_for_prompt_empty() { function test_format_memories_for_prompt_with_entries (line 327) | fn test_format_memories_for_prompt_with_entries() { function test_memory_file_path (line 349) | fn test_memory_file_path() { function test_full_crud_workflow (line 356) | fn test_full_crud_workflow() { function test_search_memories_basic (line 393) | fn test_search_memories_basic() { function test_search_memories_case_insensitive (line 418) | fn test_search_memories_case_insensitive() { function test_search_memories_no_match (line 442) | fn test_search_memories_no_match() { function test_search_memories_empty_query (line 455) | fn test_search_memories_empty_query() { function test_search_memories_multiple_matches (line 474) | fn test_search_memories_multiple_matches() { FILE: src/prompt.rs function rw_read_or_recover (line 14) | fn rw_read_or_recover(lock: &RwLock) -> std::sync::RwLockReadGuard... function rw_write_or_recover (line 19) | fn rw_write_or_recover(lock: &RwLock) -> std::sync::RwLockWriteGua... function set_watch_command (line 30) | pub fn set_watch_command(cmd: &str) { function get_watch_command (line 36) | pub fn get_watch_command() -> Option { function clear_watch_command (line 42) | pub fn clear_watch_command() { constant WATCH_OUTPUT_MAX (line 48) | const WATCH_OUTPUT_MAX: usize = 5000; constant MAX_WATCH_FIX_ATTEMPTS (line 51) | pub const MAX_WATCH_FIX_ATTEMPTS: usize = 3; function build_watch_fix_prompt (line 54) | pub fn build_watch_fix_prompt(watch_cmd: &str, output: &str) -> String { function run_watch_command (line 74) | pub fn run_watch_command(cmd: &str) -> (bool, String) { function run_watch_after_prompt (line 160) | pub async fn run_watch_after_prompt( type PromptOutcome (line 234) | pub struct PromptOutcome { function build_retry_prompt (line 254) | pub fn build_retry_prompt(input: &str, last_error: &Option) -> S... constant MAX_RETRIES (line 273) | const MAX_RETRIES: u32 = 5; constant MAX_AUTO_RETRIES (line 278) | pub const MAX_AUTO_RETRIES: u32 = 2; function build_auto_retry_prompt (line 283) | pub fn build_auto_retry_prompt(original_input: &str, tool_error: &str, a... constant OVERFLOW_PHRASES (line 299) | const OVERFLOW_PHRASES: &[&str] = &[ function is_overflow_error (line 322) | pub fn is_overflow_error(msg: &str) -> bool { function build_overflow_retry_prompt (line 332) | pub fn build_overflow_retry_prompt(original_input: &str) -> String { function retry_delay (line 348) | pub fn retry_delay(attempt: u32) -> Duration { function is_retriable_error (line 369) | pub fn is_retriable_error(error_msg: &str) -> bool { function diagnose_api_error (line 439) | pub fn diagnose_api_error(error: &str, model: &str) -> Option { function infer_provider_from_model (line 553) | fn infer_provider_from_model(model: &str) -> String { function tool_result_preview (line 579) | fn tool_result_preview(result: &ToolResult, max_chars: usize) -> String { function write_output_file (line 599) | pub fn write_output_file(path: &Option, text: &str) { function message_text (line 609) | fn message_text(msg: &AgentMessage) -> String { function highlight_matches (line 649) | pub fn highlight_matches(text: &str, query: &str) -> String { function search_messages (line 673) | pub fn search_messages(messages: &[AgentMessage], query: &str) -> Vec<(u... function summarize_message (line 709) | pub fn summarize_message(msg: &AgentMessage) -> (&str, String) { type PromptResult (line 762) | enum PromptResult { function run_prompt_once (line 777) | async fn run_prompt_once( function run_prompt_once_with_messages (line 789) | async fn run_prompt_once_with_messages( function handle_prompt_events (line 801) | async fn handle_prompt_events( function run_prompt (line 1263) | pub async fn run_prompt( function run_prompt_with_changes (line 1276) | pub async fn run_prompt_with_changes( function run_prompt_auto_retry (line 1447) | pub async fn run_prompt_auto_retry( function run_prompt_with_content (line 1482) | pub async fn run_prompt_with_content( function run_prompt_auto_retry_with_content (line 1503) | pub async fn run_prompt_auto_retry_with_content( function run_prompt_with_content_and_changes (line 1543) | pub async fn run_prompt_with_content_and_changes( function test_retry_delay_exponential_backoff_ranges (line 1660) | fn test_retry_delay_exponential_backoff_ranges() { function test_retry_delay_capped_at_60s (line 1684) | fn test_retry_delay_capped_at_60s() { function agent_messages_empty_until_finish_is_called (line 1702) | async fn agent_messages_empty_until_finish_is_called() { function test_retry_delay_zero_attempt_floor (line 1737) | fn test_retry_delay_zero_attempt_floor() { function test_is_retriable_rate_limit (line 1749) | fn test_is_retriable_rate_limit() { function test_is_retriable_server_errors (line 1757) | fn test_is_retriable_server_errors() { function test_is_retriable_network_errors (line 1767) | fn test_is_retriable_network_errors() { function test_is_not_retriable_auth_errors (line 1775) | fn test_is_not_retriable_auth_errors() { function test_is_not_retriable_client_errors (line 1785) | fn test_is_not_retriable_client_errors() { function test_is_not_retriable_unknown_error (line 1792) | fn test_is_not_retriable_unknown_error() { function test_is_retriable_stream_errors (line 1799) | fn test_is_retriable_stream_errors() { function test_stream_ended_not_retriable (line 1813) | fn test_stream_ended_not_retriable() { function test_diagnose_stream_ended (line 1824) | fn test_diagnose_stream_ended() { function test_diagnose_stream_closed (line 1835) | fn test_diagnose_stream_closed() { function test_diagnose_unexpected_eof (line 1842) | fn test_diagnose_unexpected_eof() { function test_diagnose_broken_pipe (line 1849) | fn test_diagnose_broken_pipe() { function test_diagnose_incomplete (line 1856) | fn test_diagnose_incomplete() { function test_summarize_message_user (line 1863) | fn test_summarize_message_user() { function test_summarize_message_tool_result (line 1871) | fn test_summarize_message_tool_result() { function test_summarize_message_tool_result_error (line 1888) | fn test_summarize_message_tool_result_error() { function test_write_output_file_none (line 1904) | fn test_write_output_file_none() { function test_write_output_file_some (line 1910) | fn test_write_output_file_some() { function test_tool_result_preview_empty (line 1922) | fn test_tool_result_preview_empty() { function test_tool_result_preview_text (line 1931) | fn test_tool_result_preview_text() { function test_tool_result_preview_truncated (line 1942) | fn test_tool_result_preview_truncated() { function test_tool_result_preview_multiline (line 1955) | fn test_tool_result_preview_multiline() { function test_search_messages_basic_match (line 1966) | fn test_search_messages_basic_match() { function test_search_messages_case_insensitive (line 1979) | fn test_search_messages_case_insensitive() { function test_search_messages_no_match (line 1988) | fn test_search_messages_no_match() { function test_search_messages_empty_messages (line 1995) | fn test_search_messages_empty_messages() { function test_search_messages_multiple_matches (line 2002) | fn test_search_messages_multiple_matches() { function test_search_messages_tool_result (line 2015) | fn test_search_messages_tool_result() { function test_message_text_user (line 2031) | fn test_message_text_user() { function test_message_text_tool_result (line 2038) | fn test_message_text_tool_result() { function test_highlight_matches_basic (line 2056) | fn test_highlight_matches_basic() { function test_highlight_matches_case_insensitive (line 2063) | fn test_highlight_matches_case_insensitive() { function test_highlight_matches_multiple_occurrences (line 2069) | fn test_highlight_matches_multiple_occurrences() { function test_highlight_matches_no_match (line 2078) | fn test_highlight_matches_no_match() { function test_highlight_matches_empty_query (line 2084) | fn test_highlight_matches_empty_query() { function test_highlight_matches_empty_text (line 2090) | fn test_highlight_matches_empty_text() { function test_highlight_matches_preserves_original_case (line 2096) | fn test_highlight_matches_preserves_original_case() { function test_highlight_matches_entire_string (line 2103) | fn test_highlight_matches_entire_string() { function test_search_messages_results_are_highlighted (line 2109) | fn test_search_messages_results_are_highlighted() { function test_max_auto_retries_constant (line 2118) | fn test_max_auto_retries_constant() { function test_is_overflow_error_anthropic (line 2125) | fn test_is_overflow_error_anthropic() { function test_is_overflow_error_openai (line 2132) | fn test_is_overflow_error_openai() { function test_is_overflow_error_google (line 2139) | fn test_is_overflow_error_google() { function test_is_overflow_error_generic_too_many_tokens (line 2146) | fn test_is_overflow_error_generic_too_many_tokens() { function test_is_overflow_error_context_length_exceeded (line 2151) | fn test_is_overflow_error_context_length_exceeded() { function test_is_overflow_error_max_token_exceeded (line 2157) | fn test_is_overflow_error_max_token_exceeded() { function test_is_overflow_error_case_insensitive (line 2165) | fn test_is_overflow_error_case_insensitive() { function test_is_overflow_error_bedrock (line 2172) | fn test_is_overflow_error_bedrock() { function test_is_overflow_error_groq (line 2177) | fn test_is_overflow_error_groq() { function test_is_overflow_error_xai (line 2184) | fn test_is_overflow_error_xai() { function test_is_not_overflow_error (line 2191) | fn test_is_not_overflow_error() { function test_build_overflow_retry_prompt (line 2201) | fn test_build_overflow_retry_prompt() { function test_image_content_block_construction (line 2208) | fn test_image_content_block_construction() { function test_user_message_with_image_content (line 2241) | fn test_user_message_with_image_content() { function test_deferred_bash_timer_set_lifecycle (line 2274) | fn test_deferred_bash_timer_set_lifecycle() { function test_deferred_bash_timer_denied_command_cleanup (line 2319) | fn test_deferred_bash_timer_denied_command_cleanup() { function test_non_bash_tools_not_deferred (line 2343) | fn test_non_bash_tools_not_deferred() { function test_prompt_outcome_has_api_error_field (line 2353) | fn test_prompt_outcome_has_api_error_field() { function test_build_watch_fix_prompt (line 2375) | fn test_build_watch_fix_prompt() { function test_max_watch_fix_attempts_constant (line 2393) | fn test_max_watch_fix_attempts_constant() { function test_build_watch_fix_prompt_truncates_long_output (line 2402) | fn test_build_watch_fix_prompt_truncates_long_output() { function test_run_watch_command_success (line 2422) | fn test_run_watch_command_success() { function test_run_watch_command_failure (line 2429) | fn test_run_watch_command_failure() { function test_run_watch_command_captures_all_output (line 2435) | fn test_run_watch_command_captures_all_output() { function test_run_watch_command_captures_stderr (line 2446) | fn test_run_watch_command_captures_stderr() { function test_run_watch_command_combines_stdout_stderr (line 2456) | fn test_run_watch_command_combines_stdout_stderr() { function test_run_watch_command_invalid_command (line 2464) | fn test_run_watch_command_invalid_command() { function test_watch_command_none_by_default (line 2474) | fn test_watch_command_none_by_default() { function test_watch_command_roundtrip (line 2484) | fn test_watch_command_roundtrip() { function test_run_watch_after_prompt_no_watch_returns_true (line 2494) | fn test_run_watch_after_prompt_no_watch_returns_true() { function test_run_watch_command_pass_with_set_watch (line 2509) | fn test_run_watch_command_pass_with_set_watch() { function test_run_watch_command_fail_with_set_watch (line 2523) | fn test_run_watch_command_fail_with_set_watch() { FILE: src/prompt_budget.rs function days_from_epoch (line 24) | fn days_from_epoch(days: u64) -> (u64, u64, u64) { function enable_audit_log (line 40) | pub fn enable_audit_log() { function is_audit_enabled (line 45) | pub fn is_audit_enabled() -> bool { function audit_log_tool_call (line 52) | pub fn audit_log_tool_call( function write_audit_entry (line 64) | fn write_audit_entry( function truncate_audit_args (line 118) | pub fn truncate_audit_args(args: &serde_json::Value) -> serde_json::Value { function truncate_audit_value (line 131) | fn truncate_audit_value(v: &serde_json::Value) -> serde_json::Value { function read_audit_log (line 145) | pub fn read_audit_log(n: usize) -> Vec { constant DEFAULT_SESSION_BUDGET_SECS (line 176) | const DEFAULT_SESSION_BUDGET_SECS: u64 = 2700; function configured_session_budget (line 193) | fn configured_session_budget() -> Option { function parse_session_budget (line 201) | fn parse_session_budget(raw: Option) -> Option { function session_budget_remaining (line 217) | pub fn session_budget_remaining() -> Option { function session_budget_exhausted (line 233) | pub fn session_budget_exhausted(grace_secs: u64) -> bool { function test_truncate_audit_args_short_values (line 247) | fn test_truncate_audit_args_short_values() { function test_truncate_audit_args_long_values (line 257) | fn test_truncate_audit_args_long_values() { function test_truncate_audit_args_non_string (line 274) | fn test_truncate_audit_args_non_string() { function test_truncate_audit_args_nested_object (line 281) | fn test_truncate_audit_args_nested_object() { function test_audit_enabled_default_false (line 293) | fn test_audit_enabled_default_false() { function test_read_audit_log_missing_file (line 302) | fn test_read_audit_log_missing_file() { function test_truncate_audit_args_exactly_200 (line 312) | fn test_truncate_audit_args_exactly_200() { function test_truncate_audit_args_201 (line 324) | fn test_truncate_audit_args_201() { function test_days_from_epoch_unix_epoch (line 338) | fn test_days_from_epoch_unix_epoch() { function test_days_from_epoch_known_date (line 345) | fn test_days_from_epoch_known_date() { function test_days_from_epoch_leap_year (line 352) | fn test_days_from_epoch_leap_year() { function test_days_from_epoch_y2k (line 359) | fn test_days_from_epoch_y2k() { function test_parse_session_budget_unset (line 373) | fn test_parse_session_budget_unset() { function test_parse_session_budget_empty (line 378) | fn test_parse_session_budget_empty() { function test_parse_session_budget_valid (line 383) | fn test_parse_session_budget_valid() { function test_parse_session_budget_garbage_falls_back_to_default (line 390) | fn test_parse_session_budget_garbage_falls_back_to_default() { function test_parse_session_budget_default_is_45_min (line 404) | fn test_parse_session_budget_default_is_45_min() { function test_session_budget_remaining_unset_returns_none (line 410) | fn test_session_budget_remaining_unset_returns_none() { function test_session_budget_remaining_decreases_over_time (line 422) | fn test_session_budget_remaining_decreases_over_time() { function test_session_budget_remaining_returns_zero_after_expiry (line 439) | fn test_session_budget_remaining_returns_zero_after_expiry() { function test_session_budget_exhausted_unset_returns_false (line 457) | fn test_session_budget_exhausted_unset_returns_false() { function test_session_budget_exhausted_with_headroom_returns_false (line 469) | fn test_session_budget_exhausted_with_headroom_returns_false() { function test_session_budget_exhausted_after_expiry_returns_true (line 486) | fn test_session_budget_exhausted_after_expiry_returns_true() { function test_aaa_session_budget_set_path_live_end_to_end (line 542) | fn test_aaa_session_budget_set_path_live_end_to_end() { FILE: src/providers.rs constant KNOWN_PROVIDERS (line 4) | pub const KNOWN_PROVIDERS: &[&str] = &[ function provider_api_key_env (line 22) | pub fn provider_api_key_env(provider: &str) -> Option<&'static str> { function known_models_for_provider (line 42) | pub fn known_models_for_provider(provider: &str) -> &'static [&'static s... function default_model_for_provider (line 94) | pub fn default_model_for_provider(provider: &str) -> String { function test_known_providers_has_at_least_10 (line 117) | fn test_known_providers_has_at_least_10() { function test_every_provider_has_default_model (line 126) | fn test_every_provider_has_default_model() { function test_every_non_custom_provider_has_known_models (line 138) | fn test_every_non_custom_provider_has_known_models() { function test_minimax_provider_api_key_env (line 154) | fn test_minimax_provider_api_key_env() { function test_minimax_default_model (line 159) | fn test_minimax_default_model() { function test_minimax_known_models (line 164) | fn test_minimax_known_models() { function test_bedrock_in_known_providers (line 172) | fn test_bedrock_in_known_providers() { function test_bedrock_provider_api_key_env (line 180) | fn test_bedrock_provider_api_key_env() { function test_bedrock_default_model (line 185) | fn test_bedrock_default_model() { function test_bedrock_known_models (line 193) | fn test_bedrock_known_models() { function test_minimax_in_known_providers (line 201) | fn test_minimax_in_known_providers() { FILE: src/repl.rs type YoyoHelper (line 23) | pub struct YoyoHelper; type Candidate (line 26) | type Candidate = Pair; method complete (line 28) | fn complete( function complete_file_path (line 114) | pub fn complete_file_path(partial: &str) -> Vec { type Hint (line 176) | type Hint = String; method hint (line 178) | fn hint(&self, line: &str, pos: usize, _ctx: &rustyline::Context<'_>) ->... method highlight_hint (line 240) | fn highlight_hint<'h>(&self, hint: &'h str) -> std::borrow::Cow<'h, str> { function needs_continuation (line 251) | pub fn needs_continuation(line: &str) -> bool { function collect_multiline_rl (line 257) | pub fn collect_multiline_rl( function run_repl (line 301) | pub async fn run_repl( function build_add_content_blocks (line 763) | pub fn build_add_content_blocks(results: &[commands::AddResult]) -> Vec<... function extract_image_label (line 817) | fn extract_image_label(summary: &str, fallback_mime: &str) -> String { function parse_side_question (line 852) | fn parse_side_question(input: &str) -> Option { function handle_side (line 862) | pub(crate) async fn handle_side(input: &str, agent_config: &AgentConfig) { function parse_quick_question (line 950) | fn parse_quick_question(input: &str) -> Option { function handle_quick (line 964) | pub(crate) async fn handle_quick(input: &str, agent_config: &AgentConfig) { constant DEFAULT_EXTENDED_TURNS (line 1053) | const DEFAULT_EXTENDED_TURNS: usize = 20; function parse_extended_args (line 1061) | fn parse_extended_args(input: &str) -> (String, usize, Option) { function build_extended_system_prompt (line 1108) | fn build_extended_system_prompt(task: &str, max_turns: usize) -> String { function handle_extended (line 1123) | pub(crate) async fn handle_extended( function has_replacement (line 1226) | fn has_replacement(candidates: &[Pair], replacement: &str) -> bool { function test_prompt_has_octopus (line 1231) | fn test_prompt_has_octopus() { function test_needs_continuation_backslash (line 1247) | fn test_needs_continuation_backslash() { function test_needs_continuation_code_fence (line 1255) | fn test_needs_continuation_code_fence() { function test_yoyo_helper_completes_slash_commands (line 1263) | fn test_yoyo_helper_completes_slash_commands() { function test_file_path_completion_current_dir (line 1312) | fn test_file_path_completion_current_dir() { function test_file_path_completion_with_directory_prefix (line 1325) | fn test_file_path_completion_with_directory_prefix() { function test_file_path_completion_no_completions_for_empty (line 1338) | fn test_file_path_completion_no_completions_for_empty() { function test_file_path_completion_after_text (line 1350) | fn test_file_path_completion_after_text() { function test_file_path_completion_directories_have_slash (line 1364) | fn test_file_path_completion_directories_have_slash() { function test_file_path_slash_commands_still_work (line 1377) | fn test_file_path_slash_commands_still_work() { function test_arg_completion_think_levels (line 1391) | fn test_arg_completion_think_levels() { function test_arg_completion_git_subcommands (line 1412) | fn test_arg_completion_git_subcommands() { function test_arg_completion_pr_subcommands (line 1433) | fn test_arg_completion_pr_subcommands() { function test_arg_completion_provider_names (line 1447) | fn test_arg_completion_provider_names() { function test_arg_completion_falls_through_to_file_path (line 1470) | fn test_arg_completion_falls_through_to_file_path() { function test_arg_completion_no_nested_spaces (line 1484) | fn test_arg_completion_no_nested_spaces() { function test_slash_completion_pairs_include_descriptions (line 1505) | fn test_slash_completion_pairs_include_descriptions() { function test_slash_completion_display_is_padded (line 1530) | fn test_slash_completion_display_is_padded() { function test_subcommand_pairs_have_matching_display_and_replacement (line 1549) | fn test_subcommand_pairs_have_matching_display_and_replacement() { function add_content_blocks_image_only_has_intro_and_label (line 1567) | fn add_content_blocks_image_only_has_intro_and_label() { function add_content_blocks_text_only_no_intro (line 1615) | fn add_content_blocks_text_only_no_intro() { function add_content_blocks_mixed_text_and_image (line 1633) | fn add_content_blocks_mixed_text_and_image() { function add_content_blocks_multiple_images_each_has_label (line 1681) | fn add_content_blocks_multiple_images_each_has_label() { function add_content_blocks_empty_input (line 1718) | fn add_content_blocks_empty_input() { function extract_image_label_parses_ansi_summary (line 1724) | fn extract_image_label_parses_ansi_summary() { function extract_image_label_fallback (line 1733) | fn extract_image_label_fallback() { function test_hinter_shows_command_completion (line 1739) | fn test_hinter_shows_command_completion() { function test_hinter_shows_description_for_complete_command (line 1750) | fn test_hinter_shows_description_for_complete_command() { function test_hinter_no_hint_when_typing_argument (line 1765) | fn test_hinter_no_hint_when_typing_argument() { function test_hinter_shows_arg_hint_after_command_space (line 1775) | fn test_hinter_shows_arg_hint_after_command_space() { function test_hinter_shows_arg_hint_for_help (line 1790) | fn test_hinter_shows_arg_hint_for_help() { function test_hinter_no_arg_hint_for_no_arg_command (line 1800) | fn test_hinter_no_arg_hint_for_no_arg_command() { function test_hinter_no_hint_for_non_slash (line 1810) | fn test_hinter_no_hint_for_non_slash() { function test_hinter_no_hint_for_bare_slash (line 1819) | fn test_hinter_no_hint_for_bare_slash() { function test_hinter_no_hint_when_cursor_not_at_end (line 1828) | fn test_hinter_no_hint_when_cursor_not_at_end() { function test_parse_extended_args_basic_prompt (line 1840) | fn test_parse_extended_args_basic_prompt() { function test_parse_extended_args_with_turns (line 1848) | fn test_parse_extended_args_with_turns() { function test_parse_extended_args_turns_at_start (line 1856) | fn test_parse_extended_args_turns_at_start() { function test_parse_extended_args_turns_in_middle (line 1864) | fn test_parse_extended_args_turns_in_middle() { function test_parse_extended_args_no_prompt (line 1873) | fn test_parse_extended_args_no_prompt() { function test_parse_extended_args_turns_minimum_one (line 1881) | fn test_parse_extended_args_turns_minimum_one() { function test_parse_extended_args_invalid_turns_kept_as_prompt (line 1889) | fn test_parse_extended_args_invalid_turns_kept_as_prompt() { function test_parse_extended_args_turns_without_value (line 1897) | fn test_parse_extended_args_turns_without_value() { function test_parse_extended_budget (line 1905) | fn test_parse_extended_budget() { function test_parse_extended_turns_and_budget (line 1913) | fn test_parse_extended_turns_and_budget() { function test_parse_extended_no_budget (line 1922) | fn test_parse_extended_no_budget() { function test_parse_extended_budget_zero_ignored (line 1930) | fn test_parse_extended_budget_zero_ignored() { function test_parse_extended_budget_invalid_kept_as_prompt (line 1938) | fn test_parse_extended_budget_invalid_kept_as_prompt() { function test_parse_extended_budget_without_value (line 1945) | fn test_parse_extended_budget_without_value() { function test_build_extended_system_prompt_contains_task (line 1952) | fn test_build_extended_system_prompt_contains_task() { function test_parse_side_question_basic (line 1963) | fn test_parse_side_question_basic() { function test_parse_side_question_empty (line 1969) | fn test_parse_side_question_empty() { function test_parse_side_question_preserves_whitespace_in_question (line 1975) | fn test_parse_side_question_preserves_whitespace_in_question() { function test_parse_side_question_multiword (line 1981) | fn test_parse_side_question_multiword() { function test_parse_quick_question_basic (line 1987) | fn test_parse_quick_question_basic() { function test_parse_quick_question_empty (line 1993) | fn test_parse_quick_question_empty() { function test_parse_quick_question_preserves_content (line 1999) | fn test_parse_quick_question_preserves_content() { function test_parse_quick_question_multiword (line 2005) | fn test_parse_quick_question_multiword() { FILE: src/safety.rs function analyze_bash_command (line 16) | pub fn analyze_bash_command(command: &str) -> Option { function is_at_word_boundary (line 69) | fn is_at_word_boundary(s: &str, pos: usize) -> bool { function check_rm_destruction (line 78) | fn check_rm_destruction(cmd: &str) -> Option { function check_git_force (line 122) | fn check_git_force(cmd: &str) -> Option { function check_permission_changes (line 147) | fn check_permission_changes(cmd: &str) -> Option { function check_file_overwrites (line 171) | fn check_file_overwrites(cmd: &str) -> Option { function check_system_commands (line 203) | fn check_system_commands(cmd_lower: &str) -> Option { function check_database_destruction (line 233) | fn check_database_destruction(cmd_lower: &str) -> Option { function check_pipe_from_internet (line 260) | fn check_pipe_from_internet(cmd_lower: &str) -> Option { function check_process_killing (line 290) | fn check_process_killing(cmd: &str) -> Option { function check_disk_operations (line 320) | fn check_disk_operations(cmd_lower: &str) -> Option { function test_analyze_rm_rf_root (line 360) | fn test_analyze_rm_rf_root() { function test_analyze_rm_rf_home (line 367) | fn test_analyze_rm_rf_home() { function test_analyze_git_force_push (line 374) | fn test_analyze_git_force_push() { function test_analyze_git_reset_hard (line 381) | fn test_analyze_git_reset_hard() { function test_analyze_chmod_recursive (line 387) | fn test_analyze_chmod_recursive() { function test_analyze_curl_pipe_bash (line 394) | fn test_analyze_curl_pipe_bash() { function test_analyze_drop_table (line 402) | fn test_analyze_drop_table() { function test_analyze_safe_commands (line 410) | fn test_analyze_safe_commands() { function test_analyze_git_push_normal (line 422) | fn test_analyze_git_push_normal() { function test_analyze_kill_init (line 429) | fn test_analyze_kill_init() { function test_analyze_pipe_not_from_curl (line 435) | fn test_analyze_pipe_not_from_curl() { function test_analyze_dd_if (line 442) | fn test_analyze_dd_if() { function test_analyze_shutdown (line 448) | fn test_analyze_shutdown() { function test_analyze_system_commands_word_boundary (line 457) | fn test_analyze_system_commands_word_boundary() { function test_analyze_file_overwrites (line 465) | fn test_analyze_file_overwrites() { function test_analyze_killall (line 472) | fn test_analyze_killall() { function test_analyze_fdisk_parted (line 478) | fn test_analyze_fdisk_parted() { function test_analyze_git_clean (line 484) | fn test_analyze_git_clean() { function test_analyze_rm_safe_usage (line 490) | fn test_analyze_rm_safe_usage() { function test_analyze_returns_descriptive_reason (line 500) | fn test_analyze_returns_descriptive_reason() { FILE: src/session.rs function lock_or_recover (line 11) | fn lock_or_recover(mutex: &Mutex) -> std::sync::MutexGuard<'_, T> { type SessionChanges (line 18) | pub struct SessionChanges { method new (line 47) | pub fn new() -> Self { method record (line 54) | pub fn record(&self, path: &str, kind: ChangeKind) { method snapshot (line 68) | pub fn snapshot(&self) -> Vec { method clear (line 73) | pub fn clear(&self) { method len (line 81) | pub fn len(&self) -> usize { method is_empty (line 86) | pub fn is_empty(&self) -> bool { type FileChange (line 24) | pub struct FileChange { type ChangeKind (line 31) | pub enum ChangeKind { method fmt (line 37) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type TurnSnapshot (line 97) | pub struct TurnSnapshot { method new (line 106) | pub fn new() -> Self { method snapshot_file (line 115) | pub fn snapshot_file(&mut self, path: &str) { method record_created (line 127) | pub fn record_created(&mut self, path: &str) { method is_empty (line 134) | pub fn is_empty(&self) -> bool { method restore (line 143) | pub fn restore(&self) -> Vec { method file_count (line 171) | pub fn file_count(&self) -> usize { type TurnHistory (line 181) | pub struct TurnHistory { method new (line 187) | pub fn new() -> Self { method push (line 193) | pub fn push(&mut self, snapshot: TurnSnapshot) { method len (line 200) | pub fn len(&self) -> usize { method is_empty (line 205) | pub fn is_empty(&self) -> bool { method undo_last (line 211) | pub fn undo_last(&mut self, n: usize) -> Vec { method clear (line 223) | pub fn clear(&mut self) { method pop (line 231) | pub fn pop(&mut self) -> Option { function format_changes (line 237) | pub fn format_changes(changes: &SessionChanges) -> String { function test_session_changes_new_is_empty (line 265) | fn test_session_changes_new_is_empty() { function test_session_changes_record_write (line 273) | fn test_session_changes_record_write() { function test_session_changes_record_edit (line 284) | fn test_session_changes_record_edit() { function test_session_changes_deduplicates_same_path (line 294) | fn test_session_changes_deduplicates_same_path() { function test_session_changes_multiple_files (line 305) | fn test_session_changes_multiple_files() { function test_session_changes_clear (line 318) | fn test_session_changes_clear() { function test_session_changes_clone_is_independent (line 329) | fn test_session_changes_clone_is_independent() { function test_change_kind_display (line 339) | fn test_change_kind_display() { function test_format_changes_empty (line 345) | fn test_format_changes_empty() { function test_format_changes_single_write (line 352) | fn test_format_changes_single_write() { function test_format_changes_multiple_files (line 363) | fn test_format_changes_multiple_files() { function test_session_changes_shared_across_content_prompts (line 377) | fn test_session_changes_shared_across_content_prompts() { function test_turn_snapshot_new_is_empty (line 407) | fn test_turn_snapshot_new_is_empty() { function test_turn_snapshot_save_and_restore (line 414) | fn test_turn_snapshot_save_and_restore() { function test_turn_snapshot_created_files_deleted (line 439) | fn test_turn_snapshot_created_files_deleted() { function test_turn_snapshot_no_duplicate_snapshots (line 463) | fn test_turn_snapshot_no_duplicate_snapshots() { function test_turn_snapshot_nonexistent_file (line 480) | fn test_turn_snapshot_nonexistent_file() { function test_turn_snapshot_created_not_duplicated (line 488) | fn test_turn_snapshot_created_not_duplicated() { function test_turn_snapshot_created_ignores_existing (line 496) | fn test_turn_snapshot_created_ignores_existing() { function test_turn_history_new_is_empty (line 512) | fn test_turn_history_new_is_empty() { function test_turn_history_push_pop (line 519) | fn test_turn_history_push_pop() { function test_turn_history_skips_empty_snapshots (line 538) | fn test_turn_history_skips_empty_snapshots() { function test_turn_history_undo_last_n (line 545) | fn test_turn_history_undo_last_n() { function test_turn_history_undo_more_than_available (line 584) | fn test_turn_history_undo_more_than_available() { function test_turn_history_clear (line 604) | fn test_turn_history_clear() { FILE: src/setup.rs constant WIZARD_PROVIDERS (line 13) | pub const WIZARD_PROVIDERS: &[(&str, &str)] = &[ type WizardResult (line 34) | pub struct WizardResult { function generate_config_contents (line 42) | pub fn generate_config_contents(provider: &str, model: &str, base_url: O... function save_config_to_file (line 59) | pub fn save_config_to_file( function save_config_to_user_file (line 74) | pub fn save_config_to_user_file( function parse_provider_choice (line 95) | pub fn parse_provider_choice(input: &str) -> Option<&'static str> { type SaveLocation (line 114) | pub enum SaveLocation { function parse_save_choice (line 126) | pub fn parse_save_choice(input: &str) -> SaveLocation { function user_config_display_path (line 137) | pub fn user_config_display_path() -> String { function run_wizard_interactive (line 147) | pub fn run_wizard_interactive( function run_setup_wizard (line 492) | pub fn run_setup_wizard() -> Option { function needs_setup (line 501) | pub fn needs_setup(provider: &str) -> bool { function test_parse_provider_choice_by_number (line 550) | fn test_parse_provider_choice_by_number() { function test_parse_provider_choice_by_name (line 567) | fn test_parse_provider_choice_by_name() { function test_parse_provider_choice_invalid (line 583) | fn test_parse_provider_choice_invalid() { function test_parse_provider_choice_whitespace (line 591) | fn test_parse_provider_choice_whitespace() { function test_generate_config_contents (line 597) | fn test_generate_config_contents() { function test_generate_config_openai (line 606) | fn test_generate_config_openai() { function test_generate_config_custom_with_base_url (line 613) | fn test_generate_config_custom_with_base_url() { function test_wizard_providers_are_known (line 622) | fn test_wizard_providers_are_known() { function test_wizard_anthropic_with_key (line 632) | fn test_wizard_anthropic_with_key() { function test_wizard_ollama_skips_api_key (line 654) | fn test_wizard_ollama_skips_api_key() { function test_wizard_custom_model (line 672) | fn test_wizard_custom_model() { function test_wizard_provider_by_name (line 687) | fn test_wizard_provider_by_name() { function test_wizard_default_provider_on_enter (line 701) | fn test_wizard_default_provider_on_enter() { function test_wizard_no_key_no_env_returns_none (line 715) | fn test_wizard_no_key_no_env_returns_none() { function test_save_config_to_file (line 739) | fn test_save_config_to_file() { function test_wizard_result_fields (line 756) | fn test_wizard_result_fields() { function test_wizard_cerebras_flow (line 770) | fn test_wizard_cerebras_flow() { function test_wizard_minimax_flow (line 789) | fn test_wizard_minimax_flow() { function test_wizard_custom_provider_flow (line 808) | fn test_wizard_custom_provider_flow() { function test_wizard_custom_provider_no_base_url_returns_none (line 827) | fn test_wizard_custom_provider_no_base_url_returns_none() { function test_parse_save_choice_defaults_to_project (line 841) | fn test_parse_save_choice_defaults_to_project() { function test_parse_save_choice_user (line 850) | fn test_parse_save_choice_user() { function test_parse_save_choice_skip (line 859) | fn test_parse_save_choice_skip() { function test_parse_save_choice_unknown_defaults_to_project (line 869) | fn test_parse_save_choice_unknown_defaults_to_project() { function test_save_config_to_user_file (line 875) | fn test_save_config_to_user_file() { function test_save_config_to_user_file_creates_parent_dirs (line 912) | fn test_save_config_to_user_file_creates_parent_dirs() { function test_wizard_step4_shows_three_choices (line 941) | fn test_wizard_step4_shows_three_choices() { function test_wizard_save_to_user_level (line 967) | fn test_wizard_save_to_user_level() { function test_user_config_display_path (line 1008) | fn test_user_config_display_path() { function test_bedrock_in_wizard_providers (line 1018) | fn test_bedrock_in_wizard_providers() { function test_generate_config_bedrock (line 1027) | fn test_generate_config_bedrock() { function test_wizard_bedrock_with_credentials (line 1052) | fn test_wizard_bedrock_with_credentials() { function test_wizard_bedrock_custom_region (line 1075) | fn test_wizard_bedrock_custom_region() { FILE: src/tools.rs function disable_rtk (line 50) | pub fn disable_rtk() { function is_rtk_disabled (line 55) | pub fn is_rtk_disabled() -> bool { function detect_rtk (line 60) | pub fn detect_rtk() -> bool { constant RTK_SUPPORTED_COMMANDS (line 73) | const RTK_SUPPORTED_COMMANDS: &[&str] = &[ function is_simple_command (line 119) | fn is_simple_command(command: &str) -> bool { function maybe_prefix_rtk (line 146) | pub fn maybe_prefix_rtk(command: &str) -> String { type GuardedTool (line 185) | struct GuardedTool { method name (line 192) | fn name(&self) -> &str { method label (line 196) | fn label(&self) -> &str { method description (line 200) | fn description(&self) -> &str { method parameters_schema (line 204) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 208) | async fn execute( type TruncatingTool (line 226) | struct TruncatingTool { function truncate_result (line 232) | pub(crate) fn truncate_result( method name (line 252) | fn name(&self) -> &str { method label (line 256) | fn label(&self) -> &str { method description (line 260) | fn description(&self) -> &str { method parameters_schema (line 264) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 268) | async fn execute( function with_truncation (line 279) | fn with_truncation(tool: Box, max_chars: usize) -> Box &str { method label (line 314) | fn label(&self) -> &str { method description (line 318) | fn description(&self) -> &str { method parameters_schema (line 322) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 326) | async fn execute( function maybe_guard_arc (line 343) | fn maybe_guard_arc( type ConfirmTool (line 360) | struct ConfirmTool { function describe_file_operation (line 368) | pub fn describe_file_operation(tool_name: &str, params: &serde_json::Val... function confirm_file_operation (line 427) | pub fn confirm_file_operation( method name (line 482) | fn name(&self) -> &str { method label (line 486) | fn label(&self) -> &str { method description (line 490) | fn description(&self) -> &str { method parameters_schema (line 494) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 498) | async fn execute( function maybe_confirm (line 520) | fn maybe_confirm( type StreamingBashTool (line 546) | pub struct StreamingBashTool { method with_confirm (line 584) | pub fn with_confirm(mut self, f: impl Fn(&str) -> bool + Send + Sync +... method default (line 564) | fn default() -> Self { function emit_update (line 591) | fn emit_update(ctx: &yoagent::types::ToolContext, output: &str) { method name (line 604) | fn name(&self) -> &str { method label (line 608) | fn label(&self) -> &str { method description (line 612) | fn description(&self) -> &str { method parameters_schema (line 616) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 633) | async fn execute( type RenameSymbolTool (line 842) | pub(crate) struct RenameSymbolTool; method name (line 846) | fn name(&self) -> &str { method label (line 850) | fn label(&self) -> &str { method description (line 854) | fn description(&self) -> &str { method parameters_schema (line 860) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 881) | async fn execute( type AskUserTool (line 926) | pub struct AskUserTool; method name (line 930) | fn name(&self) -> &str { method label (line 934) | fn label(&self) -> &str { method description (line 938) | fn description(&self) -> &str { method parameters_schema (line 944) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 957) | async fn execute( type TodoTool (line 1010) | pub struct TodoTool; method name (line 1014) | fn name(&self) -> &str { method label (line 1018) | fn label(&self) -> &str { method description (line 1022) | fn description(&self) -> &str { method parameters_schema (line 1028) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1050) | async fn execute( function build_tools (line 1130) | pub fn build_tools( function build_sub_agent_tool (line 1279) | pub(crate) fn build_sub_agent_tool(config: &AgentConfig) -> SubAgentTool { function test_agent_config (line 1331) | fn test_agent_config(provider: &str, model: &str) -> AgentConfig { function test_build_tools_returns_eight_tools (line 1357) | fn test_build_tools_returns_eight_tools() { function test_build_sub_agent_tool_returns_correct_name (line 1368) | fn test_build_sub_agent_tool_returns_correct_name() { function test_build_sub_agent_tool_has_task_parameter (line 1375) | fn test_build_sub_agent_tool_has_task_parameter() { function test_build_sub_agent_tool_all_providers (line 1390) | fn test_build_sub_agent_tool_all_providers() { function test_build_sub_agent_tool_inherits_dir_restrictions (line 1403) | fn test_build_sub_agent_tool_inherits_dir_restrictions() { function test_build_sub_agent_tool_no_restrictions_still_works (line 1416) | fn test_build_sub_agent_tool_no_restrictions_still_works() { function test_build_tools_count_unchanged_with_sub_agent (line 1425) | fn test_build_tools_count_unchanged_with_sub_agent() { function test_describe_write_file_operation (line 1440) | fn test_describe_write_file_operation() { function test_describe_write_file_empty_content (line 1452) | fn test_describe_write_file_empty_content() { function test_describe_write_file_missing_content (line 1467) | fn test_describe_write_file_missing_content() { function test_describe_write_file_normal_content (line 1482) | fn test_describe_write_file_normal_content() { function test_describe_edit_file_operation (line 1499) | fn test_describe_edit_file_operation() { function test_describe_edit_file_missing_params (line 1512) | fn test_describe_edit_file_missing_params() { function test_describe_unknown_tool (line 1523) | fn test_describe_unknown_tool() { function test_confirm_file_operation_auto_approved_flag (line 1530) | fn test_confirm_file_operation_auto_approved_flag() { function test_confirm_file_operation_with_allow_pattern (line 1542) | fn test_confirm_file_operation_with_allow_pattern() { function test_confirm_file_operation_with_deny_pattern (line 1555) | fn test_confirm_file_operation_with_deny_pattern() { function test_confirm_file_operation_deny_overrides_allow (line 1568) | fn test_confirm_file_operation_deny_overrides_allow() { function test_confirm_file_operation_allow_src_pattern (line 1581) | fn test_confirm_file_operation_allow_src_pattern() { function test_build_tools_auto_approve_skips_confirmation (line 1601) | fn test_build_tools_auto_approve_skips_confirmation() { function test_build_tools_no_approve_includes_confirmation (line 1614) | fn test_build_tools_no_approve_includes_confirmation() { function test_always_approved_shared_between_bash_and_file_tools (line 1632) | fn test_always_approved_shared_between_bash_and_file_tools() { function test_tool_context (line 1660) | fn test_tool_context( function test_streaming_bash_deny_patterns (line 1681) | async fn test_streaming_bash_deny_patterns() { function test_streaming_bash_deny_pattern_fork_bomb (line 1695) | async fn test_streaming_bash_deny_pattern_fork_bomb() { function test_streaming_bash_confirm_rejection (line 1708) | async fn test_streaming_bash_confirm_rejection() { function test_streaming_bash_confirm_approval (line 1721) | async fn test_streaming_bash_confirm_approval() { function test_streaming_bash_basic_execution (line 1738) | async fn test_streaming_bash_basic_execution() { function test_streaming_bash_captures_exit_code (line 1755) | async fn test_streaming_bash_captures_exit_code() { function test_streaming_bash_timeout (line 1765) | async fn test_streaming_bash_timeout() { function test_streaming_bash_output_truncation (line 1781) | async fn test_streaming_bash_output_truncation() { function test_streaming_bash_emits_updates (line 1805) | async fn test_streaming_bash_emits_updates() { function test_streaming_bash_missing_command_param (line 1840) | async fn test_streaming_bash_missing_command_param() { function test_streaming_bash_captures_stderr (line 1850) | async fn test_streaming_bash_captures_stderr() { function test_rename_symbol_tool_name (line 1866) | fn test_rename_symbol_tool_name() { function test_rename_symbol_tool_label (line 1872) | fn test_rename_symbol_tool_label() { function test_rename_symbol_tool_schema (line 1878) | fn test_rename_symbol_tool_schema() { function test_rename_result_struct (line 1902) | fn test_rename_result_struct() { function test_rename_symbol_tool_in_build_tools (line 1914) | fn test_rename_symbol_tool_in_build_tools() { function test_describe_rename_symbol_operation (line 1926) | fn test_describe_rename_symbol_operation() { function test_describe_rename_symbol_no_path (line 1939) | fn test_describe_rename_symbol_no_path() { function test_truncate_result_with_custom_limit (line 1952) | fn test_truncate_result_with_custom_limit() { function test_truncate_result_preserves_under_limit (line 1978) | fn test_truncate_result_preserves_under_limit() { function test_build_tools_with_piped_limit (line 1996) | fn test_build_tools_with_piped_limit() { function test_ask_user_tool_schema (line 2012) | fn test_ask_user_tool_schema() { function test_ask_user_tool_not_in_non_terminal_mode (line 2025) | fn test_ask_user_tool_not_in_non_terminal_mode() { function test_todo_tool_schema (line 2042) | fn test_todo_tool_schema() { function test_todo_tool_list_empty (line 2054) | async fn test_todo_tool_list_empty() { function test_todo_tool_add_and_list (line 2071) | async fn test_todo_tool_add_and_list() { function test_todo_tool_done (line 2097) | async fn test_todo_tool_done() { function test_todo_tool_invalid_action (line 2120) | async fn test_todo_tool_invalid_action() { function test_todo_tool_missing_description (line 2130) | async fn test_todo_tool_missing_description() { function test_todo_tool_in_build_tools (line 2140) | fn test_todo_tool_in_build_tools() { function test_streaming_bash_custom_timeout (line 2152) | async fn test_streaming_bash_custom_timeout() { function test_streaming_bash_custom_timeout_default (line 2166) | async fn test_streaming_bash_custom_timeout_default() { function test_streaming_bash_custom_timeout_clamped (line 2180) | async fn test_streaming_bash_custom_timeout_clamped() { function test_detect_rtk_returns_bool (line 2210) | fn test_detect_rtk_returns_bool() { function test_maybe_prefix_rtk_when_disabled (line 2217) | fn test_maybe_prefix_rtk_when_disabled() { function test_maybe_prefix_rtk_no_double_prefix (line 2227) | fn test_maybe_prefix_rtk_no_double_prefix() { function test_maybe_prefix_rtk_complex_commands_not_prefixed (line 2236) | fn test_maybe_prefix_rtk_complex_commands_not_prefixed() { function test_is_simple_command_positive (line 2250) | fn test_is_simple_command_positive() { function test_is_simple_command_quoted_metacharacters (line 2259) | fn test_is_simple_command_quoted_metacharacters() { function test_maybe_prefix_rtk_unsupported_commands (line 2267) | fn test_maybe_prefix_rtk_unsupported_commands() { function test_rtk_supported_commands_includes_expected (line 2280) | fn test_rtk_supported_commands_includes_expected() { function test_maybe_prefix_rtk_with_env_var_prefix (line 2293) | fn test_maybe_prefix_rtk_with_env_var_prefix() { FILE: src/update.rs function version_is_newer (line 3) | pub fn version_is_newer(current: &str, latest: &str) -> bool { function check_for_update (line 30) | pub fn check_for_update(current_version: &str) -> Option { function test_version_is_newer_basic (line 68) | fn test_version_is_newer_basic() { function test_version_is_newer_same (line 73) | fn test_version_is_newer_same() { function test_version_is_newer_older (line 78) | fn test_version_is_newer_older() { function test_version_is_newer_numeric_comparison (line 83) | fn test_version_is_newer_numeric_comparison() { function test_version_is_newer_major_dominates (line 89) | fn test_version_is_newer_major_dominates() { function test_version_is_newer_different_lengths (line 94) | fn test_version_is_newer_different_lengths() { function test_check_for_update_graceful_failure (line 100) | fn test_check_for_update_graceful_failure() { FILE: tests/integration.rs function yoyo_cmd (line 13) | fn yoyo_cmd() -> Command { function help_flag_prints_usage_and_exits_zero (line 39) | fn help_flag_prints_usage_and_exits_zero() { function help_short_flag_prints_usage_and_exits_zero (line 63) | fn help_short_flag_prints_usage_and_exits_zero() { function version_flag_prints_version_and_exits_zero (line 81) | fn version_flag_prints_version_and_exits_zero() { function version_short_flag_prints_version_and_exits_zero (line 102) | fn version_short_flag_prints_version_and_exits_zero() { function empty_stdin_piped_mode_prints_error_and_exits_one (line 120) | fn empty_stdin_piped_mode_prints_error_and_exits_one() { function piped_slash_command_warns_and_exits_two (line 140) | fn piped_slash_command_warns_and_exits_two() { function piped_slash_command_with_leading_whitespace_still_warns (line 180) | fn piped_slash_command_with_leading_whitespace_still_warns() { function unknown_flag_produces_warning_on_stderr (line 215) | fn unknown_flag_produces_warning_on_stderr() { function no_color_flag_suppresses_ansi_in_help (line 237) | fn no_color_flag_suppresses_ansi_in_help() { function no_color_env_suppresses_ansi_in_help (line 255) | fn no_color_env_suppresses_ansi_in_help() { function missing_api_key_shows_helpful_error (line 274) | fn missing_api_key_shows_helpful_error() { function missing_api_key_for_openai_shows_provider_specific_hint (line 299) | fn missing_api_key_for_openai_shows_provider_specific_hint() { function ollama_provider_does_not_require_api_key (line 319) | fn ollama_provider_does_not_require_api_key() { function flag_requiring_value_without_value_shows_error (line 340) | fn flag_requiring_value_without_value_shows_error() { function provider_flag_without_value_shows_error (line 361) | fn provider_flag_without_value_shows_error() { function help_output_lists_all_documented_cli_flags (line 383) | fn help_output_lists_all_documented_cli_flags() { function help_output_lists_all_documented_repl_commands (line 428) | fn help_output_lists_all_documented_repl_commands() { function no_color_flag_suppresses_ansi_in_version (line 456) | fn no_color_flag_suppresses_ansi_in_version() { function no_color_flag_suppresses_ansi_in_error_output (line 481) | fn no_color_flag_suppresses_ansi_in_error_output() { function multiple_unknown_flags_each_produce_warnings (line 501) | fn multiple_unknown_flags_each_produce_warnings() { function system_file_with_nonexistent_file_shows_useful_error (line 541) | fn system_file_with_nonexistent_file_shows_useful_error() { function system_flag_with_text_does_not_error (line 570) | fn system_flag_with_text_does_not_error() { function thinking_flag_without_value_shows_error (line 591) | fn thinking_flag_without_value_shows_error() { function verbose_flag_accepted_with_help (line 614) | fn verbose_flag_accepted_with_help() { function verbose_short_flag_accepted_with_help (line 632) | fn verbose_short_flag_accepted_with_help() { function allow_flag_accepted_with_help (line 652) | fn allow_flag_accepted_with_help() { function deny_flag_accepted_with_help (line 674) | fn deny_flag_accepted_with_help() { function allow_and_deny_combined_with_other_flags (line 696) | fn allow_and_deny_combined_with_other_flags() { function model_flag_without_value_exits_nonzero (line 722) | fn model_flag_without_value_exits_nonzero() { function unknown_flag_does_not_panic (line 749) | fn unknown_flag_does_not_panic() { function piped_input_with_bad_api_key_shows_auth_error_gracefully (line 774) | fn piped_input_with_bad_api_key_shows_auth_error_gracefully() { function invalid_provider_warns_and_exits_nonzero (line 820) | fn invalid_provider_warns_and_exits_nonzero() { function invalid_max_tokens_value_warns_gracefully (line 846) | fn invalid_max_tokens_value_warns_gracefully() { function invalid_temperature_value_warns_gracefully (line 871) | fn invalid_temperature_value_warns_gracefully() { function missing_api_key_error_is_human_readable (line 895) | fn missing_api_key_error_is_human_readable() { function model_and_provider_flags_work_together (line 924) | fn model_and_provider_flags_work_together() { function all_boolean_flags_combine_without_conflict (line 948) | fn all_boolean_flags_combine_without_conflict() { function multiple_value_flags_combine_without_conflict (line 971) | fn multiple_value_flags_combine_without_conflict() { function help_flag_exits_with_code_zero (line 1005) | fn help_flag_exits_with_code_zero() { function version_flag_exits_with_code_zero (line 1017) | fn version_flag_exits_with_code_zero() { function missing_flag_value_exits_with_nonzero_code (line 1029) | fn missing_flag_value_exits_with_nonzero_code() { function empty_piped_stdin_exits_with_nonzero_code (line 1045) | fn empty_piped_stdin_exits_with_nonzero_code() { function version_output_matches_semver_pattern (line 1062) | fn version_output_matches_semver_pattern() { function help_output_covers_all_value_flags (line 1106) | fn help_output_covers_all_value_flags() { function very_long_model_name_does_not_crash (line 1162) | fn very_long_model_name_does_not_crash() { function unicode_in_system_prompt_does_not_crash (line 1187) | fn unicode_in_system_prompt_does_not_crash() { function empty_string_model_value_does_not_crash (line 1209) | fn empty_string_model_value_does_not_crash() { function empty_string_provider_value_does_not_crash (line 1233) | fn empty_string_provider_value_does_not_crash() { function unicode_flag_value_does_not_crash (line 1255) | fn unicode_flag_value_does_not_crash() { function special_characters_in_system_prompt_do_not_crash (line 1279) | fn special_characters_in_system_prompt_do_not_crash() { function multiple_providers_missing_keys_all_show_provider_specific_hints (line 1301) | fn multiple_providers_missing_keys_all_show_provider_specific_hints() { function help_flag_completes_in_under_100ms (line 1342) | fn help_flag_completes_in_under_100ms() { function version_flag_completes_in_under_100ms (line 1360) | fn version_flag_completes_in_under_100ms() { function missing_flag_value_error_appears_quickly (line 1378) | fn missing_flag_value_error_appears_quickly() { function missing_api_key_error_appears_quickly (line 1400) | fn missing_api_key_error_appears_quickly() { function invalid_flag_error_on_stderr_not_just_stdout (line 1421) | fn invalid_flag_error_on_stderr_not_just_stdout() { function empty_piped_stdin_exits_quickly (line 1446) | fn empty_piped_stdin_exits_quickly() { function unknown_flag_warning_on_stderr (line 1468) | fn unknown_flag_warning_on_stderr() { function invalid_provider_error_mentions_known_providers (line 1493) | fn invalid_provider_error_mentions_known_providers() { function empty_model_string_without_help_proceeds_gracefully (line 1523) | fn empty_model_string_without_help_proceeds_gracefully() { function yes_flag_with_prompt_accepted_without_error (line 1550) | fn yes_flag_with_prompt_accepted_without_error() { function piped_stdin_with_help_flag_shows_help (line 1580) | fn piped_stdin_with_help_flag_shows_help() { function allow_deny_yes_prompt_all_combine_cleanly (line 1619) | fn allow_deny_yes_prompt_all_combine_cleanly() { function error_output_completes_in_under_100ms (line 1651) | fn error_output_completes_in_under_100ms() { function help_output_is_consistent_between_piped_and_non_piped (line 1673) | fn help_output_is_consistent_between_piped_and_non_piped() { function allow_dir_flag_accepted_with_help (line 1699) | fn allow_dir_flag_accepted_with_help() { function deny_dir_flag_accepted_with_help (line 1720) | fn deny_dir_flag_accepted_with_help() { function allow_dir_and_deny_dir_combined_with_help (line 1741) | fn allow_dir_and_deny_dir_combined_with_help() { function help_output_lists_dir_restriction_flags (line 1766) | fn help_output_lists_dir_restriction_flags() { function deny_dir_flag_without_value_shows_error (line 1791) | fn deny_dir_flag_without_value_shows_error() { function plan_appears_in_help_output (line 1812) | fn plan_appears_in_help_output() { function image_flag_with_nonexistent_file_shows_error (line 1828) | fn image_flag_with_nonexistent_file_shows_error() { function image_flag_without_prompt_shows_warning (line 1853) | fn image_flag_without_prompt_shows_warning() { function image_flag_without_value_shows_error (line 1870) | fn image_flag_without_value_shows_error() { function image_flag_with_non_image_file_shows_error (line 1889) | fn image_flag_with_non_image_file_shows_error() { function help_text_mentions_known_commands (line 1918) | fn help_text_mentions_known_commands() { function version_output_matches_cargo_toml_version (line 1944) | fn version_output_matches_cargo_toml_version() { function startup_time_is_under_500ms (line 1972) | fn startup_time_is_under_500ms() { function wizard_does_not_trigger_in_piped_mode (line 1992) | fn wizard_does_not_trigger_in_piped_mode() { function wizard_does_not_trigger_when_api_key_env_set (line 2018) | fn wizard_does_not_trigger_when_api_key_env_set() { function wizard_does_not_trigger_when_config_file_exists (line 2041) | fn wizard_does_not_trigger_when_config_file_exists() { function wizard_does_not_trigger_with_prompt_flag (line 2075) | fn wizard_does_not_trigger_with_prompt_flag() { function wizard_does_not_trigger_for_ollama_provider (line 2102) | fn wizard_does_not_trigger_for_ollama_provider() { function no_bell_flag_accepted (line 2128) | fn no_bell_flag_accepted() { function map_command_mentioned_in_help (line 2149) | fn map_command_mentioned_in_help() { function mcp_bogus_command_does_not_panic (line 2167) | fn mcp_bogus_command_does_not_panic() { function skills_directory_loads_via_yoagent_skillset (line 2196) | fn skills_directory_loads_via_yoagent_skillset() {