SYMBOL INDEX (11880 symbols across 442 files) FILE: benches/safety_check.rs function bench_sanitizer (line 4) | fn bench_sanitizer(c: &mut Criterion) { function bench_validator (line 30) | fn bench_validator(c: &mut Criterion) { function bench_leak_detector (line 67) | fn bench_leak_detector(c: &mut Criterion) { FILE: benches/safety_pipeline.rs function bench_safety_layer_pipeline (line 5) | fn bench_safety_layer_pipeline(c: &mut Criterion) { function bench_validate_tool_params (line 58) | fn bench_validate_tool_params(c: &mut Criterion) { FILE: build.rs function main (line 16) | fn main() { function embed_registry_catalog (line 119) | fn embed_registry_catalog(root: &Path) { function collect_json_files (line 184) | fn collect_json_files(dir: &Path, out: &mut Vec) { FILE: channels-src/discord/src/lib.rs type DiscordInteraction (line 39) | struct DiscordInteraction { type DiscordMember (line 74) | struct DiscordMember { type DiscordUser (line 81) | struct DiscordUser { type DiscordCommandData (line 88) | struct DiscordCommandData { type DiscordCommandOption (line 96) | struct DiscordCommandOption { type DiscordMessage (line 102) | struct DiscordMessage { type DiscordChannelMessage (line 112) | struct DiscordChannelMessage { type DiscordChannelAuthor (line 124) | struct DiscordChannelAuthor { type DiscordRuntimeConfig (line 133) | struct DiscordRuntimeConfig { function default_poll_interval_ms (line 152) | fn default_poll_interval_ms() -> u32 { function default_require_signature_verification (line 156) | fn default_require_signature_verification() -> bool { function default_dm_policy (line 160) | fn default_dm_policy() -> String { function default_runtime_config (line 164) | fn default_runtime_config() -> DiscordRuntimeConfig { constant OWNER_ID_PATH (line 178) | const OWNER_ID_PATH: &str = "state/owner_id"; constant DM_POLICY_PATH (line 180) | const DM_POLICY_PATH: &str = "state/dm_policy"; constant ALLOW_FROM_PATH (line 182) | const ALLOW_FROM_PATH: &str = "state/allow_from"; constant CHANNEL_NAME (line 184) | const CHANNEL_NAME: &str = "discord"; type DiscordMessageMetadata (line 188) | struct DiscordMessageMetadata { type DiscordChannel (line 212) | struct DiscordChannel; method on_start (line 215) | fn on_start(config_json: String) -> Result { method on_http_request (line 285) | fn on_http_request(req: IncomingHttpRequest) -> OutgoingHttpResponse { method on_poll (line 397) | fn on_poll() { method on_respond (line 401) | fn on_respond(response: AgentResponse) -> Result<(), String> { method on_status (line 470) | fn on_status(_update: StatusUpdate) {} method on_broadcast (line 472) | fn on_broadcast(_user_id: String, _response: AgentResponse) -> Result<()... method on_shutdown (line 476) | fn on_shutdown() { function map_discord_response (line 484) | fn map_discord_response( function load_runtime_config (line 504) | fn load_runtime_config() -> DiscordRuntimeConfig { function poll_for_mentions (line 510) | fn poll_for_mentions() { function get_or_fetch_bot_id (line 532) | fn get_or_fetch_bot_id() -> Option { function poll_channel_mentions (line 559) | fn poll_channel_mentions(channel_id: &str, bot_id: &str) { function fetch_latest_message_id (line 660) | fn fetch_latest_message_id(channel_id: &str) -> Option { function fetch_messages_after_cursor (line 688) | fn fetch_messages_after_cursor( function compare_message_ids (line 785) | fn compare_message_ids(a: &str, b: &str) -> Ordering { function dedup_ids_path (line 792) | fn dedup_ids_path(channel_id: &str) -> String { function load_recent_processed_ids (line 796) | fn load_recent_processed_ids(channel_id: &str) -> Vec { function save_recent_processed_ids (line 803) | fn save_recent_processed_ids(channel_id: &str, ids: &[String]) -> Result... function remember_processed_id (line 810) | fn remember_processed_id(ids: &mut Vec, message_id: &str) { function is_new_message (line 822) | fn is_new_message(last_seen: Option<&str>, current: &str) -> bool { function message_mentions_bot (line 836) | fn message_mentions_bot(msg: &DiscordChannelMessage, bot_id: &str) -> bo... function strip_bot_mention (line 842) | fn strip_bot_mention(content: &str, bot_id: &str) -> String { function discord_auth_headers_json (line 850) | fn discord_auth_headers_json(include_content_type: bool) -> String { function verify_discord_request_signature (line 865) | fn verify_discord_request_signature( function header_case_insensitive (line 910) | fn header_case_insensitive<'a>( function handle_slash_command (line 920) | fn handle_slash_command(interaction: &DiscordInteraction) -> bool { function handle_message_component (line 1018) | fn handle_message_component(interaction: &DiscordInteraction, message: &... type PairingReplyCtx (line 1074) | struct PairingReplyCtx { function check_sender_permission (line 1081) | fn check_sender_permission( function send_pairing_reply (line 1162) | fn send_pairing_reply(ctx: &PairingReplyCtx, code: &str) -> Result<(), S... function json_response (line 1197) | fn json_response(status: u16, value: serde_json::Value) -> OutgoingHttpR... function truncate_message (line 1210) | fn truncate_message(content: &str) -> String { function test_truncate_message (line 1233) | fn test_truncate_message() { function test_metadata_serialization (line 1259) | fn test_metadata_serialization() { function test_is_new_message (line 1275) | fn test_is_new_message() { function test_strip_bot_mention (line 1285) | fn test_strip_bot_mention() { function test_message_mentions_bot (line 1296) | fn test_message_mentions_bot() { function test_message_mentions_bot_via_mentions_array (line 1315) | fn test_message_mentions_bot_via_mentions_array() { function test_compare_message_ids_numeric_and_lexical_fallback (line 1337) | fn test_compare_message_ids_numeric_and_lexical_fallback() { function test_remember_processed_id_dedup_and_cap (line 1345) | fn test_remember_processed_id_dedup_and_cap() { function test_header_case_insensitive (line 1360) | fn test_header_case_insensitive() { function test_discord_auth_headers_json_shape (line 1371) | fn test_discord_auth_headers_json_shape() { function test_verify_discord_request_signature_valid (line 1393) | fn test_verify_discord_request_signature_valid() { function test_verify_discord_request_signature_tampered_body (line 1419) | fn test_verify_discord_request_signature_tampered_body() { function test_verify_discord_request_signature_wrong_public_key (line 1445) | fn test_verify_discord_request_signature_wrong_public_key() { function test_verify_discord_request_signature_missing_headers (line 1471) | fn test_verify_discord_request_signature_missing_headers() { function test_verify_discord_request_signature_invalid_signature_hex (line 1481) | fn test_verify_discord_request_signature_invalid_signature_hex() { function test_verify_discord_request_signature_invalid_public_key_hex (line 1496) | fn test_verify_discord_request_signature_invalid_public_key_hex() { function test_verify_discord_request_signature_invalid_lengths (line 1511) | fn test_verify_discord_request_signature_invalid_lengths() { function test_verify_discord_request_signature_case_insensitive_headers (line 1531) | fn test_verify_discord_request_signature_case_insensitive_headers() { function test_verify_discord_request_signature_empty_public_key (line 1557) | fn test_verify_discord_request_signature_empty_public_key() { function test_parse_slash_command_interaction (line 1568) | fn test_parse_slash_command_interaction() { FILE: channels-src/feishu/src/lib.rs constant OWNER_ID_PATH (line 45) | const OWNER_ID_PATH: &str = "owner_id"; constant DM_POLICY_PATH (line 46) | const DM_POLICY_PATH: &str = "dm_policy"; constant ALLOW_FROM_PATH (line 47) | const ALLOW_FROM_PATH: &str = "allow_from"; constant API_BASE_PATH (line 48) | const API_BASE_PATH: &str = "api_base"; constant APP_ID_PATH (line 49) | const APP_ID_PATH: &str = "app_id"; constant APP_SECRET_PATH (line 50) | const APP_SECRET_PATH: &str = "app_secret"; constant TOKEN_PATH (line 51) | const TOKEN_PATH: &str = "tenant_access_token"; constant TOKEN_EXPIRY_PATH (line 52) | const TOKEN_EXPIRY_PATH: &str = "token_expiry"; type FeishuEvent (line 61) | struct FeishuEvent { type FeishuEventHeader (line 85) | struct FeishuEventHeader { type MessageReceiveEvent (line 107) | struct MessageReceiveEvent { type FeishuSender (line 114) | struct FeishuSender { type FeishuSenderId (line 124) | struct FeishuSenderId { type FeishuMessage (line 135) | struct FeishuMessage { type FeishuMention (line 167) | struct FeishuMention { type FeishuMentionId (line 177) | struct FeishuMentionId { type TextContent (line 188) | struct TextContent { type FeishuMessageMetadata (line 194) | struct FeishuMessageMetadata { type FeishuApiResponse (line 202) | struct FeishuApiResponse { type TenantAccessTokenResponse (line 215) | struct TenantAccessTokenResponse { type SendMessageBody (line 226) | struct SendMessageBody { type ReplyMessageBody (line 234) | struct ReplyMessageBody { type FeishuConfig (line 245) | struct FeishuConfig { function default_api_base (line 269) | fn default_api_base() -> String { type FeishuChannel (line 277) | struct FeishuChannel; method on_start (line 282) | fn on_start(config_json: String) -> Result { method on_http_request (line 356) | fn on_http_request(req: IncomingHttpRequest) -> OutgoingHttpResponse { method on_poll (line 409) | fn on_poll() { method on_respond (line 413) | fn on_respond(response: AgentResponse) -> Result<(), String> { method on_broadcast (line 420) | fn on_broadcast(user_id: String, response: AgentResponse) -> Result<(), ... method on_status (line 424) | fn on_status(_update: StatusUpdate) { method on_shutdown (line 429) | fn on_shutdown() { function handle_message_event (line 439) | fn handle_message_event(event_data: &serde_json::Value) { function extract_text_content (line 570) | fn extract_text_content(message: &FeishuMessage) -> String { function send_reply (line 597) | fn send_reply(message_id: &str, content: &str) -> Result<(), String> { function send_message (line 653) | fn send_message(receive_id: &str, receive_id_type: &str, content: &str) ... function get_valid_token (line 716) | fn get_valid_token(api_base: &str) -> Result { function obtain_tenant_token (line 740) | fn obtain_tenant_token(api_base: &str) -> Result { function json_response (line 828) | fn json_response(status: u16, body: serde_json::Value) -> OutgoingHttpRe... function parse_flat_token_response (line 845) | fn parse_flat_token_response() { function parse_token_response_rejects_missing_token (line 860) | fn parse_token_response_rejects_missing_token() { function parse_token_response_rejects_missing_expire (line 867) | fn parse_token_response_rejects_missing_expire() { function parse_token_response_defaults_code_and_msg (line 874) | fn parse_token_response_defaults_code_and_msg() { function parse_token_error_response (line 884) | fn parse_token_error_response() { FILE: channels-src/slack/src/lib.rs type SlackEventWrapper (line 36) | struct SlackEventWrapper { type SlackEvent (line 56) | struct SlackEvent { type SlackFile (line 89) | struct SlackFile { type SlackMessageMetadata (line 104) | struct SlackMessageMetadata { type SlackPostMessageResponse (line 120) | struct SlackPostMessageResponse { constant OWNER_ID_PATH (line 127) | const OWNER_ID_PATH: &str = "state/owner_id"; constant DM_POLICY_PATH (line 129) | const DM_POLICY_PATH: &str = "state/dm_policy"; constant ALLOW_FROM_PATH (line 131) | const ALLOW_FROM_PATH: &str = "state/allow_from"; constant CHANNEL_NAME (line 133) | const CHANNEL_NAME: &str = "slack"; type SlackConfig (line 137) | struct SlackConfig { function default_signing_secret_name (line 153) | fn default_signing_secret_name() -> String { type SlackChannel (line 157) | struct SlackChannel; method on_start (line 160) | fn on_start(config_json: String) -> Result { method on_http_request (line 196) | fn on_http_request(req: IncomingHttpRequest) -> OutgoingHttpResponse { method on_poll (line 251) | fn on_poll() { method on_respond (line 255) | fn on_respond(response: AgentResponse) -> Result<(), String> { method on_status (line 326) | fn on_status(_update: StatusUpdate) {} method on_broadcast (line 328) | fn on_broadcast(_user_id: String, _response: AgentResponse) -> Result<()... method on_shutdown (line 332) | fn on_shutdown() { function extract_slack_attachments (line 338) | fn extract_slack_attachments(files: &Option>) -> Vec Result, String> { constant MAX_DOWNLOAD_SIZE_BYTES (line 389) | const MAX_DOWNLOAD_SIZE_BYTES: u64 = 20 * 1024 * 1024; function download_and_store_slack_files (line 391) | fn download_and_store_slack_files(attachments: &[InboundAttachment]) { function handle_slack_event (line 456) | fn handle_slack_event(event: SlackEvent, team_id: Option, _event... function emit_message (line 526) | fn emit_message( function check_sender_permission (line 570) | fn check_sender_permission(user_id: &str, channel_id: &str, is_dm: bool)... function send_pairing_reply (line 649) | fn send_pairing_reply(channel_id: &str, code: &str) -> Result<(), String> { function strip_bot_mention (line 685) | fn strip_bot_mention(text: &str) -> String { function json_response (line 697) | fn json_response(status: u16, value: serde_json::Value) -> OutgoingHttpR... function test_extract_slack_attachments_with_files (line 722) | fn test_extract_slack_attachments_with_files() { function test_extract_slack_attachments_none (line 758) | fn test_extract_slack_attachments_none() { function test_extract_slack_attachments_empty (line 764) | fn test_extract_slack_attachments_empty() { function test_extract_slack_attachments_missing_mime (line 770) | fn test_extract_slack_attachments_missing_mime() { function test_parse_slack_event_with_files (line 785) | fn test_parse_slack_event_with_files() { function test_parse_slack_event_without_files (line 811) | fn test_parse_slack_event_without_files() { function test_max_download_size_constant (line 825) | fn test_max_download_size_constant() { FILE: channels-src/telegram/src/lib.rs type TelegramUpdate (line 45) | struct TelegramUpdate { type TelegramMessage (line 62) | struct TelegramMessage { type PhotoSize (line 115) | struct PhotoSize { type TelegramDocument (line 125) | struct TelegramDocument { type TelegramAudio (line 135) | struct TelegramAudio { type TelegramVideo (line 146) | struct TelegramVideo { type TelegramVoice (line 157) | struct TelegramVoice { type TelegramSticker (line 167) | struct TelegramSticker { type TelegramUser (line 178) | struct TelegramUser { type TelegramChat (line 198) | struct TelegramChat { type MessageEntity (line 216) | struct MessageEntity { type TelegramFile (line 234) | struct TelegramFile { type TelegramApiResponse (line 245) | struct TelegramApiResponse { type SentMessage (line 258) | struct SentMessage { constant POLLING_STATE_PATH (line 263) | const POLLING_STATE_PATH: &str = "state/last_update_id"; constant OWNER_ID_PATH (line 266) | const OWNER_ID_PATH: &str = "state/owner_id"; constant DM_POLICY_PATH (line 269) | const DM_POLICY_PATH: &str = "state/dm_policy"; constant ALLOW_FROM_PATH (line 272) | const ALLOW_FROM_PATH: &str = "state/allow_from"; constant CHANNEL_NAME (line 275) | const CHANNEL_NAME: &str = "telegram"; constant BOT_USERNAME_PATH (line 278) | const BOT_USERNAME_PATH: &str = "state/bot_username"; constant RESPOND_TO_ALL_GROUP_PATH (line 281) | const RESPOND_TO_ALL_GROUP_PATH: &str = "state/respond_to_all_group_mess... type TelegramMessageMetadata (line 289) | struct TelegramMessageMetadata { type TelegramConfig (line 313) | struct TelegramConfig { type TelegramChannel (line 354) | struct TelegramChannel; type TelegramStatusAction (line 357) | enum TelegramStatusAction { constant TELEGRAM_STATUS_MAX_CHARS (line 362) | const TELEGRAM_STATUS_MAX_CHARS: usize = 600; constant TELEGRAM_MAX_MESSAGE_LEN (line 364) | const TELEGRAM_MAX_MESSAGE_LEN: usize = 4096; function truncate_status_message (line 366) | fn truncate_status_message(input: &str, max_chars: usize) -> String { function split_message (line 384) | fn split_message(text: &str) -> Vec { function status_message_for_user (line 443) | fn status_message_for_user(update: &StatusUpdate) -> Option { function get_updates_url (line 452) | fn get_updates_url(offset: i64, timeout_secs: u32) -> String { function classify_status_update (line 459) | fn classify_status_update(update: &StatusUpdate) -> Option Result { method on_http_request (line 602) | fn on_http_request(req: IncomingHttpRequest) -> OutgoingHttpResponse { method on_poll (line 646) | fn on_poll() { method on_respond (line 759) | fn on_respond(response: AgentResponse) -> Result<(), String> { method on_broadcast (line 771) | fn on_broadcast(user_id: String, response: AgentResponse) -> Result<(), ... method on_status (line 779) | fn on_status(update: StatusUpdate) { method on_shutdown (line 870) | fn on_shutdown() { type SendError (line 883) | enum SendError { method fmt (line 891) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function normalize_thread_id (line 903) | fn normalize_thread_id(thread_id: Option) -> Option { function send_message (line 912) | fn send_message( function percent_encode (line 996) | fn percent_encode(s: &str) -> String { constant MAX_DOWNLOAD_SIZE_BYTES (line 1013) | const MAX_DOWNLOAD_SIZE_BYTES: u64 = 20 * 1024 * 1024; function download_telegram_file (line 1015) | fn download_telegram_file(file_id: &str) -> Result, String> { constant MAX_PHOTO_SIZE (line 1097) | const MAX_PHOTO_SIZE: usize = 10 * 1024 * 1024; function write_multipart_field (line 1100) | fn write_multipart_field(body: &mut Vec, boundary: &str, name: &str,... function write_multipart_file (line 1110) | fn write_multipart_file( function send_photo (line 1144) | fn send_photo( function send_document (line 1228) | fn send_document( constant PHOTO_MIME_TYPES (line 1293) | const PHOTO_MIME_TYPES: &[&str] = &["image/jpeg", "image/png", "image/gi... function send_response (line 1298) | fn send_response( function send_attachment (line 1375) | fn send_attachment( function delete_webhook (line 1410) | fn delete_webhook() -> Result<(), String> { function register_webhook (line 1456) | fn register_webhook(tunnel_url: &str, webhook_secret: Option<&str>) -> R... function send_pairing_reply (line 1551) | fn send_pairing_reply(chat_id: i64, code: &str) -> Result<(), String> { function handle_update (line 1571) | fn handle_update(update: TelegramUpdate) { function extras_json (line 1584) | fn extras_json(duration_secs: Option) -> String { function make_inbound_attachment (line 1592) | fn make_inbound_attachment( function extract_attachments (line 1614) | fn extract_attachments(message: &TelegramMessage) -> Vec bool { function download_and_store_documents (line 1817) | fn download_and_store_documents(attachments: &mut [InboundAttachment]) { function handle_message (line 1856) | fn handle_message(message: TelegramMessage) { function clean_message_text (line 2056) | fn clean_message_text(text: &str, bot_username: Option<&str>) -> String { function content_to_emit_for_agent (line 2107) | fn content_to_emit_for_agent(content: &str, bot_username: Option<&str>) ... function json_response (line 2131) | fn json_response(status: u16, value: serde_json::Value) -> OutgoingHttpR... function test_split_message_short (line 2154) | fn test_split_message_short() { function test_split_message_paragraph_boundary (line 2161) | fn test_split_message_paragraph_boundary() { function test_split_message_word_boundary (line 2172) | fn test_split_message_word_boundary() { function test_split_message_each_chunk_fits (line 2188) | fn test_split_message_each_chunk_fits() { function test_split_message_sentence_boundary (line 2201) | fn test_split_message_sentence_boundary() { function test_split_message_hard_cut_no_spaces (line 2220) | fn test_split_message_hard_cut_no_spaces() { function test_split_message_multibyte_chars (line 2234) | fn test_split_message_multibyte_chars() { function test_clean_message_text (line 2250) | fn test_clean_message_text() { function test_clean_message_text_bare_commands (line 2270) | fn test_clean_message_text_bare_commands() { function test_content_to_emit_logic (line 2291) | fn test_content_to_emit_logic() { function test_config_with_owner_id (line 2405) | fn test_config_with_owner_id() { function test_config_without_owner_id (line 2412) | fn test_config_without_owner_id() { function test_config_with_null_owner_id (line 2419) | fn test_config_with_null_owner_id() { function test_config_full (line 2426) | fn test_config_full() { function test_parse_update (line 2439) | fn test_parse_update() { function test_parse_message_with_caption (line 2471) | fn test_parse_message_with_caption() { function test_get_updates_url_includes_offset_and_timeout (line 2484) | fn test_get_updates_url_includes_offset_and_timeout() { function test_classify_status_update_thinking (line 2492) | fn test_classify_status_update_thinking() { function test_classify_status_update_approval_needed (line 2506) | fn test_classify_status_update_approval_needed() { function test_classify_status_update_done_ignored (line 2522) | fn test_classify_status_update_done_ignored() { function test_classify_status_update_auth_required (line 2533) | fn test_classify_status_update_auth_required() { function test_classify_status_update_tool_started_ignored (line 2549) | fn test_classify_status_update_tool_started_ignored() { function test_classify_status_update_tool_completed_ignored (line 2560) | fn test_classify_status_update_tool_completed_ignored() { function test_classify_status_update_job_started_notify (line 2571) | fn test_classify_status_update_job_started_notify() { function test_classify_status_update_auth_completed_notify (line 2587) | fn test_classify_status_update_auth_completed_notify() { function test_classify_status_update_tool_result_ignored (line 2603) | fn test_classify_status_update_tool_result_ignored() { function test_classify_status_update_awaiting_approval_ignored (line 2614) | fn test_classify_status_update_awaiting_approval_ignored() { function test_classify_status_update_interrupted_ignored (line 2625) | fn test_classify_status_update_interrupted_ignored() { function test_classify_status_update_status_done_ignored_case_insensitive (line 2636) | fn test_classify_status_update_status_done_ignored_case_insensitive() { function test_classify_status_update_status_interrupted_ignored (line 2647) | fn test_classify_status_update_status_interrupted_ignored() { function test_classify_status_update_status_rejected_ignored (line 2658) | fn test_classify_status_update_status_rejected_ignored() { function test_classify_status_update_status_notify (line 2669) | fn test_classify_status_update_status_notify() { function test_status_message_for_user_ignores_blank (line 2685) | fn test_status_message_for_user_ignores_blank() { function test_truncate_status_message_appends_ellipsis (line 2696) | fn test_truncate_status_message_appends_ellipsis() { function test_status_message_for_user_truncates_long_input (line 2703) | fn test_status_message_for_user_truncates_long_input() { function test_extract_attachments_photo (line 2718) | fn test_extract_attachments_photo() { function test_extract_attachments_document (line 2744) | fn test_extract_attachments_document() { function test_extract_attachments_voice (line 2769) | fn test_extract_attachments_voice() { function test_extract_attachments_video (line 2796) | fn test_extract_attachments_video() { function test_extract_attachments_audio (line 2820) | fn test_extract_attachments_audio() { function test_extract_attachments_sticker (line 2843) | fn test_extract_attachments_sticker() { function test_extract_attachments_text_only_empty (line 2864) | fn test_extract_attachments_text_only_empty() { function test_extract_attachments_multiple_types (line 2878) | fn test_extract_attachments_multiple_types() { function test_parse_update_with_photo_fallback_content (line 2901) | fn test_parse_update_with_photo_fallback_content() { function test_is_downloadable_document (line 2925) | fn test_is_downloadable_document() { function test_max_download_size_constant (line 2968) | fn test_max_download_size_constant() { FILE: channels-src/whatsapp/src/lib.rs type WebhookPayload (line 44) | struct WebhookPayload { type WebhookEntry (line 54) | struct WebhookEntry { type WebhookChange (line 64) | struct WebhookChange { type WebhookValue (line 74) | struct WebhookValue { type BusinessMetadata (line 96) | struct BusinessMetadata { type Contact (line 106) | struct Contact { type ContactProfile (line 116) | struct ContactProfile { type WhatsAppMessage (line 123) | struct WhatsAppMessage { type WhatsAppMedia (line 158) | struct WhatsAppMedia { type WhatsAppDocument (line 169) | struct WhatsAppDocument { type TextContent (line 182) | struct TextContent { type MessageContext (line 189) | struct MessageContext { type MessageStatus (line 199) | struct MessageStatus { type WhatsAppApiResponse (line 215) | struct WhatsAppApiResponse { type SentMessage (line 225) | struct SentMessage { type ApiError (line 232) | struct ApiError { type WhatsAppMessageMetadata (line 251) | struct WhatsAppMessageMetadata { constant OWNER_ID_PATH (line 266) | const OWNER_ID_PATH: &str = "state/owner_id"; constant DM_POLICY_PATH (line 268) | const DM_POLICY_PATH: &str = "state/dm_policy"; constant ALLOW_FROM_PATH (line 270) | const ALLOW_FROM_PATH: &str = "state/allow_from"; constant CHANNEL_NAME (line 272) | const CHANNEL_NAME: &str = "whatsapp"; type WhatsAppConfig (line 276) | struct WhatsAppConfig { function default_api_version (line 295) | fn default_api_version() -> String { function default_reply_to_message (line 299) | fn default_reply_to_message() -> bool { type WhatsAppChannel (line 307) | struct WhatsAppChannel; method on_start (line 310) | fn on_start(config_json: String) -> Result { method on_http_request (line 371) | fn on_http_request(req: IncomingHttpRequest) -> OutgoingHttpResponse { method on_poll (line 401) | fn on_poll() { method on_respond (line 406) | fn on_respond(response: AgentResponse) -> Result<(), String> { method on_status (line 513) | fn on_status(_update: StatusUpdate) {} method on_broadcast (line 515) | fn on_broadcast(_user_id: String, _response: AgentResponse) -> Result<()... method on_shutdown (line 519) | fn on_shutdown() { function handle_verification (line 539) | fn handle_verification(req: &IncomingHttpRequest) -> OutgoingHttpResponse { function handle_incoming_message (line 587) | fn handle_incoming_message(req: &IncomingHttpRequest) -> OutgoingHttpRes... function extract_whatsapp_attachments (line 662) | fn extract_whatsapp_attachments(message: &WhatsAppMessage) -> Vec OutgoingHttpR... function test_parse_webhook_payload (line 972) | fn test_parse_webhook_payload() { function test_parse_status_update (line 1019) | fn test_parse_status_update() { function test_metadata_roundtrip (line 1053) | fn test_metadata_roundtrip() { function test_extract_whatsapp_image_attachment (line 1071) | fn test_extract_whatsapp_image_attachment() { function test_extract_whatsapp_document_attachment (line 1100) | fn test_extract_whatsapp_document_attachment() { function test_extract_whatsapp_audio_video_attachments (line 1130) | fn test_extract_whatsapp_audio_video_attachments() { function test_extract_whatsapp_text_only_no_attachments (line 1159) | fn test_extract_whatsapp_text_only_no_attachments() { function test_parse_whatsapp_image_message (line 1180) | fn test_parse_whatsapp_image_message() { FILE: crates/ironclaw_safety/src/credential_detect.rs function params_contain_manual_credentials (line 10) | pub fn params_contain_manual_credentials(params: &serde_json::Value) -> ... constant AUTH_HEADER_EXACT (line 17) | const AUTH_HEADER_EXACT: &[&str] = &[ constant AUTH_HEADER_SUBSTRINGS (line 34) | const AUTH_HEADER_SUBSTRINGS: &[&str] = &["auth", "token", "secret", "cr... constant AUTH_VALUE_PREFIXES (line 37) | const AUTH_VALUE_PREFIXES: &[&str] = &[ constant AUTH_QUERY_EXACT (line 48) | const AUTH_QUERY_EXACT: &[&str] = &[ constant AUTH_QUERY_SUBSTRINGS (line 69) | const AUTH_QUERY_SUBSTRINGS: &[&str] = &["token", "secret", "auth", "pas... function header_name_is_credential (line 71) | fn header_name_is_credential(name: &str) -> bool { function header_value_is_credential (line 81) | fn header_value_is_credential(value: &str) -> bool { function headers_contain_credentials (line 86) | fn headers_contain_credentials(params: &serde_json::Value) -> bool { function query_param_is_credential (line 106) | fn query_param_is_credential(name: &str) -> bool { function url_contains_credential_params (line 116) | fn url_contains_credential_params(params: &serde_json::Value) -> bool { function url_contains_userinfo (line 133) | fn url_contains_userinfo(params: &serde_json::Value) -> bool { function test_authorization_header_detected (line 155) | fn test_authorization_header_detected() { function test_all_exact_header_names (line 165) | fn test_all_exact_header_names() { function test_header_name_case_insensitive (line 181) | fn test_header_name_case_insensitive() { function test_header_substring_auth (line 193) | fn test_header_substring_auth() { function test_header_substring_token (line 203) | fn test_header_substring_token() { function test_bearer_value_detected (line 215) | fn test_bearer_value_detected() { function test_basic_value_detected (line 225) | fn test_basic_value_detected() { function test_array_format_header_name (line 237) | fn test_array_format_header_name() { function test_array_format_header_value_prefix (line 247) | fn test_array_format_header_value_prefix() { function test_url_api_key_param (line 259) | fn test_url_api_key_param() { function test_url_access_token_param (line 268) | fn test_url_access_token_param() { function test_url_query_substring_match (line 277) | fn test_url_query_substring_match() { function test_url_query_case_insensitive (line 286) | fn test_url_query_case_insensitive() { function test_idempotency_key_not_detected (line 297) | fn test_idempotency_key_not_detected() { function test_content_type_not_detected (line 307) | fn test_content_type_not_detected() { function test_no_headers_no_query (line 317) | fn test_no_headers_no_query() { function test_safe_query_params (line 326) | fn test_safe_query_params() { function test_empty_headers (line 335) | fn test_empty_headers() { function test_invalid_url_returns_false (line 345) | fn test_invalid_url_returns_false() { function test_url_userinfo_with_password_detected (line 356) | fn test_url_userinfo_with_password_detected() { function test_url_userinfo_username_only_detected (line 365) | fn test_url_userinfo_username_only_detected() { function test_url_without_userinfo_not_detected_by_userinfo_check (line 374) | fn test_url_without_userinfo_not_detected_by_userinfo_check() { function header_name_with_zwsp_not_detected (line 391) | fn header_name_with_zwsp_not_detected() { function bearer_prefix_with_zwsp_bypass (line 407) | fn bearer_prefix_with_zwsp_bypass() { function rtl_override_in_url_query_param (line 425) | fn rtl_override_in_url_query_param() { function zwnj_in_header_name (line 443) | fn zwnj_in_header_name() { function emoji_in_url_path_does_not_panic (line 460) | fn emoji_in_url_path_does_not_panic() { function unicode_case_folding_turkish_i (line 470) | fn unicode_case_folding_turkish_i() { function multibyte_userinfo_in_url (line 489) | fn multibyte_userinfo_in_url() { function control_chars_in_header_name_still_detects (line 504) | fn control_chars_in_header_name_still_detects() { function control_chars_in_header_value_breaks_prefix (line 523) | fn control_chars_in_header_value_breaks_prefix() { function bom_prefix_in_url (line 541) | fn bom_prefix_in_url() { function null_byte_in_query_value (line 556) | fn null_byte_in_query_value() { function idn_unicode_hostname_with_credential_params (line 569) | fn idn_unicode_hostname_with_credential_params() { function non_ascii_header_names_substring_detection (line 583) | fn non_ascii_header_names_substring_detection() { FILE: crates/ironclaw_safety/src/leak_detector.rs type LeakAction (line 48) | pub enum LeakAction { method fmt (line 58) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type LeakSeverity (line 69) | pub enum LeakSeverity { method fmt (line 77) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type LeakPattern (line 89) | pub struct LeakPattern { type LeakMatch (line 98) | pub struct LeakMatch { type LeakScanResult (line 110) | pub struct LeakScanResult { method is_clean (line 121) | pub fn is_clean(&self) -> bool { method max_severity (line 126) | pub fn max_severity(&self) -> Option { type LeakDetector (line 132) | pub struct LeakDetector { method new (line 141) | pub fn new() -> Self { method with_patterns (line 146) | pub fn with_patterns(patterns: Vec) -> Self { method scan (line 175) | pub fn scan(&self, content: &str) -> LeakScanResult { method scan_and_clean (line 257) | pub fn scan_and_clean(&self, content: &str) -> Result usize { method default (line 341) | fn default() -> Self { type LeakDetectionError (line 348) | pub enum LeakDetectionError { function mask_secret (line 356) | fn mask_secret(secret: &str) -> String { function apply_redactions (line 369) | fn apply_redactions(content: &str, ranges: &[Range]) -> String { function extract_literal_prefix (line 393) | fn extract_literal_prefix(pattern: &str) -> Option { function default_patterns (line 415) | fn default_patterns() -> Vec { function test_detect_openai_key (line 539) | fn test_detect_openai_key() { function test_detect_github_token (line 555) | fn test_detect_github_token() { function test_detect_aws_key (line 570) | fn test_detect_aws_key() { function test_detect_pem_key (line 585) | fn test_detect_pem_key() { function test_clean_content (line 600) | fn test_clean_content() { function test_redact_bearer_token (line 610) | fn test_redact_bearer_token() { function test_scan_and_clean_blocks (line 624) | fn test_scan_and_clean_blocks() { function test_scan_and_clean_passes_clean (line 633) | fn test_scan_and_clean_passes_clean() { function test_mask_secret (line 643) | fn test_mask_secret() { function test_multiple_matches (line 651) | fn test_multiple_matches() { function test_severity_ordering (line 660) | fn test_severity_ordering() { function test_scan_http_request_clean (line 667) | fn test_scan_http_request_clean() { function test_scan_http_request_blocks_secret_in_url (line 679) | fn test_scan_http_request_blocks_secret_in_url() { function test_scan_http_request_blocks_secret_in_header (line 692) | fn test_scan_http_request_blocks_secret_in_header() { function test_scan_http_request_blocks_secret_in_body (line 708) | fn test_scan_http_request_blocks_secret_in_body() { function test_scan_http_request_blocks_secret_in_binary_body (line 718) | fn test_scan_http_request_blocks_secret_in_binary_body() { function test_detect_anthropic_key (line 733) | fn test_detect_anthropic_key() { function test_detect_near_ai_session_token (line 743) | fn test_detect_near_ai_session_token() { function test_detect_stripe_key (line 752) | fn test_detect_stripe_key() { function test_detect_ssh_private_key (line 761) | fn test_detect_ssh_private_key() { function test_detect_slack_token (line 769) | fn test_detect_slack_token() { function test_secret_at_different_positions (line 777) | fn test_secret_at_different_positions() { function test_multiple_different_secret_types (line 795) | fn test_multiple_different_secret_types() { function test_mask_secret_short_value (line 810) | fn test_mask_secret_short_value() { function test_clean_text_not_flagged (line 821) | fn test_clean_text_not_flagged() { function openai_key_pattern_100kb_near_miss (line 846) | fn openai_key_pattern_100kb_near_miss() { function high_entropy_hex_pattern_100kb_near_miss (line 865) | fn high_entropy_hex_pattern_100kb_near_miss() { function bearer_token_pattern_100kb_near_miss (line 883) | fn bearer_token_pattern_100kb_near_miss() { function authorization_header_pattern_100kb_near_miss (line 901) | fn authorization_header_pattern_100kb_near_miss() { function anthropic_key_pattern_100kb_near_miss (line 919) | fn anthropic_key_pattern_100kb_near_miss() { function aws_access_key_pattern_100kb_near_miss (line 937) | fn aws_access_key_pattern_100kb_near_miss() { function github_token_pattern_100kb_near_miss (line 955) | fn github_token_pattern_100kb_near_miss() { function github_fine_grained_pat_100kb_near_miss (line 973) | fn github_fine_grained_pat_100kb_near_miss() { function stripe_key_pattern_100kb_near_miss (line 991) | fn stripe_key_pattern_100kb_near_miss() { function nearai_session_pattern_100kb_near_miss (line 1009) | fn nearai_session_pattern_100kb_near_miss() { function pem_private_key_pattern_100kb_near_miss (line 1027) | fn pem_private_key_pattern_100kb_near_miss() { function ssh_private_key_pattern_100kb_near_miss (line 1045) | fn ssh_private_key_pattern_100kb_near_miss() { function google_api_key_pattern_100kb_near_miss (line 1063) | fn google_api_key_pattern_100kb_near_miss() { function slack_token_pattern_100kb_near_miss (line 1081) | fn slack_token_pattern_100kb_near_miss() { function twilio_api_key_pattern_100kb_near_miss (line 1099) | fn twilio_api_key_pattern_100kb_near_miss() { function sendgrid_api_key_pattern_100kb_near_miss (line 1117) | fn sendgrid_api_key_pattern_100kb_near_miss() { function all_patterns_100kb_clean_text (line 1135) | fn all_patterns_100kb_clean_text() { function zwsp_inside_api_key_does_not_match (line 1154) | fn zwsp_inside_api_key_does_not_match() { function rtl_override_prefix_on_aws_key (line 1168) | fn rtl_override_prefix_on_aws_key() { function zwj_inside_stripe_key (line 1182) | fn zwj_inside_stripe_key() { function zwnj_inside_github_token (line 1195) | fn zwnj_inside_github_token() { function emoji_adjacent_to_secret (line 1208) | fn emoji_adjacent_to_secret() { function multibyte_chars_surrounding_pem_key (line 1219) | fn multibyte_chars_surrounding_pem_key() { function mask_secret_with_multibyte_chars (line 1230) | fn mask_secret_with_multibyte_chars() { function mask_secret_with_emoji (line 1240) | fn mask_secret_with_emoji() { function control_chars_around_github_token (line 1250) | fn control_chars_around_github_token() { function bom_prefix_does_not_hide_secrets (line 1269) | fn bom_prefix_does_not_hide_secrets() { function null_bytes_in_secret_context (line 1280) | fn null_bytes_in_secret_context() { function secret_split_by_control_char_does_not_match (line 1293) | fn secret_split_by_control_char_does_not_match() { function scan_http_request_percent_encoded_credentials (line 1307) | fn scan_http_request_percent_encoded_credentials() { FILE: crates/ironclaw_safety/src/lib.rs type SafetyConfig (line 27) | pub struct SafetyConfig { type SafetyLayer (line 33) | pub struct SafetyLayer { method new (line 43) | pub fn new(config: &SafetyConfig) -> Self { method sanitize_tool_output (line 54) | pub fn sanitize_tool_output(&self, tool_name: &str, output: &str) -> S... method validate_input (line 138) | pub fn validate_input(&self, input: &str) -> ValidationResult { method scan_inbound_for_secrets (line 147) | pub fn scan_inbound_for_secrets(&self, input: &str) -> Option { method check_policy (line 159) | pub fn check_policy(&self, content: &str) -> Vec<&PolicyRule> { method wrap_for_llm (line 167) | pub fn wrap_for_llm(&self, tool_name: &str, content: &str, sanitized: ... method sanitizer (line 177) | pub fn sanitizer(&self) -> &Sanitizer { method validator (line 182) | pub fn validator(&self) -> &Validator { method policy (line 187) | pub fn policy(&self) -> &Policy { function wrap_external_content (line 198) | pub fn wrap_external_content(source: &str, content: &str) -> String { function escape_xml_attr (line 214) | fn escape_xml_attr(s: &str) -> String { function test_wrap_for_llm (line 233) | fn test_wrap_for_llm() { function test_sanitize_action_forces_sanitization_when_injection_check_disabled (line 247) | fn test_sanitize_action_forces_sanitization_when_injection_check_disable... function test_wrap_external_content_includes_source_and_delimiters (line 263) | fn test_wrap_external_content_includes_source_and_delimiters() { function test_wrap_external_content_warns_about_injection (line 276) | fn test_wrap_external_content_warns_about_injection() { function safety_with_max_len (line 288) | fn safety_with_max_len(max_output_length: usize) -> SafetyLayer { function truncate_in_middle_of_4byte_emoji (line 298) | fn truncate_in_middle_of_4byte_emoji() { function truncate_in_middle_of_3byte_cjk (line 318) | fn truncate_in_middle_of_3byte_cjk() { function truncate_in_middle_of_2byte_char (line 334) | fn truncate_in_middle_of_2byte_char() { function single_4byte_char_with_max_len_1 (line 350) | fn single_4byte_char_with_max_len_1() { function exact_boundary_does_not_corrupt (line 367) | fn exact_boundary_does_not_corrupt() { FILE: crates/ironclaw_safety/src/policy.rs type Severity (line 9) | pub enum Severity { method value (line 18) | fn value(&self) -> u8 { method cmp (line 29) | fn cmp(&self, other: &Self) -> Ordering { method partial_cmp (line 35) | fn partial_cmp(&self, other: &Self) -> Option { type PolicyRule (line 42) | pub struct PolicyRule { method new (line 59) | pub fn new( method matches (line 76) | pub fn matches(&self, content: &str) -> bool { type PolicyAction (line 83) | pub enum PolicyAction { type Policy (line 95) | pub struct Policy { method new (line 101) | pub fn new() -> Self { method add_rule (line 106) | pub fn add_rule(&mut self, rule: PolicyRule) { method check (line 111) | pub fn check(&self, content: &str) -> Vec<&PolicyRule> { method is_blocked (line 119) | pub fn is_blocked(&self, content: &str) -> bool { method rules (line 126) | pub fn rules(&self) -> &[PolicyRule] { method default (line 132) | fn default() -> Self { function test_default_policy_blocks_system_files (line 232) | fn test_default_policy_blocks_system_files() { function test_default_policy_blocks_shell_injection (line 239) | fn test_default_policy_blocks_shell_injection() { function test_normal_content_passes (line 247) | fn test_normal_content_passes() { function test_sql_pattern_warns (line 254) | fn test_sql_pattern_warns() { function test_backticked_code_is_not_blocked (line 262) | fn test_backticked_code_is_not_blocked() { function test_severity_ordering (line 273) | fn test_severity_ordering() { function test_new_returns_error_on_invalid_regex (line 280) | fn test_new_returns_error_on_invalid_regex() { function test_new_returns_ok_on_valid_regex (line 292) | fn test_new_returns_ok_on_valid_regex() { function excessive_urls_pattern_100kb_near_miss (line 312) | fn excessive_urls_pattern_100kb_near_miss() { function obfuscated_string_pattern_100kb_near_miss (line 339) | fn obfuscated_string_pattern_100kb_near_miss() { function shell_injection_pattern_100kb_near_miss (line 363) | fn shell_injection_pattern_100kb_near_miss() { function sql_pattern_100kb_near_miss (line 380) | fn sql_pattern_100kb_near_miss() { function crypto_key_pattern_100kb_near_miss (line 397) | fn crypto_key_pattern_100kb_near_miss() { function system_file_access_pattern_100kb_near_miss (line 415) | fn system_file_access_pattern_100kb_near_miss() { function encoded_exploit_pattern_100kb_near_miss (line 433) | fn encoded_exploit_pattern_100kb_near_miss() { function rtl_override_does_not_hide_system_files (line 453) | fn rtl_override_does_not_hide_system_files() { function zero_width_space_in_sql_pattern (line 463) | fn zero_width_space_in_sql_pattern() { function zwnj_in_shell_injection_pattern (line 477) | fn zwnj_in_shell_injection_pattern() { function emoji_in_path_does_not_panic (line 491) | fn emoji_in_path_does_not_panic() { function multibyte_chars_in_long_string (line 498) | fn multibyte_chars_in_long_string() { function control_chars_around_blocked_content (line 512) | fn control_chars_around_blocked_content() { function bom_prefix_does_not_hide_sql_injection (line 525) | fn bom_prefix_does_not_hide_sql_injection() { FILE: crates/ironclaw_safety/src/sanitizer.rs type SanitizedOutput (line 12) | pub struct SanitizedOutput { type InjectionWarning (line 23) | pub struct InjectionWarning { type Sanitizer (line 35) | pub struct Sanitizer { method new (line 59) | pub fn new() -> Self { method sanitize (line 201) | pub fn sanitize(&self, content: &str) -> SanitizedOutput { method detect (line 248) | pub fn detect(&self, content: &str) -> Vec { method escape_content (line 253) | fn escape_content(&self, content: &str) -> String { type PatternInfo (line 44) | struct PatternInfo { type RegexPattern (line 50) | struct RegexPattern { method default (line 288) | fn default() -> Self { function test_detect_ignore_previous (line 298) | fn test_detect_ignore_previous() { function test_detect_system_injection (line 311) | fn test_detect_system_injection() { function test_detect_special_tokens (line 319) | fn test_detect_special_tokens() { function test_clean_content_no_warnings (line 327) | fn test_clean_content_no_warnings() { function test_escape_null_bytes (line 335) | fn test_escape_null_bytes() { function test_case_insensitive_detection (line 346) | fn test_case_insensitive_detection() { function test_multiple_injection_patterns_in_one_input (line 364) | fn test_multiple_injection_patterns_in_one_input() { function test_role_markers_escaped (line 378) | fn test_role_markers_escaped() { function test_special_token_variants (line 388) | fn test_special_token_variants() { function test_clean_content_stays_unmodified (line 402) | fn test_clean_content_stays_unmodified() { function test_regex_eval_injection (line 426) | fn test_regex_eval_injection() { function regex_base64_pattern_100kb_near_miss (line 443) | fn regex_base64_pattern_100kb_near_miss() { function regex_eval_pattern_100kb_near_miss (line 463) | fn regex_eval_pattern_100kb_near_miss() { function regex_exec_pattern_100kb_near_miss (line 480) | fn regex_exec_pattern_100kb_near_miss() { function regex_null_byte_pattern_100kb_near_miss (line 497) | fn regex_null_byte_pattern_100kb_near_miss() { function aho_corasick_100kb_no_match (line 515) | fn aho_corasick_100kb_no_match() { function zero_width_chars_in_injection_pattern (line 534) | fn zero_width_chars_in_injection_pattern() { function zwj_between_pattern_chars (line 552) | fn zwj_between_pattern_chars() { function zwnj_between_pattern_chars (line 565) | fn zwnj_between_pattern_chars() { function rtl_override_in_input (line 578) | fn rtl_override_in_input() { function combining_diacriticals_in_role_markers (line 595) | fn combining_diacriticals_in_role_markers() { function emoji_sequences_dont_panic (line 609) | fn emoji_sequences_dont_panic() { function multibyte_utf8_throughout_input (line 621) | fn multibyte_utf8_throughout_input() { function entirely_combining_characters_no_panic (line 633) | fn entirely_combining_characters_no_panic() { function injection_pattern_location_byte_accurate_with_emoji (line 643) | fn injection_pattern_location_byte_accurate_with_emoji() { function null_byte_triggers_critical_severity (line 664) | fn null_byte_triggers_critical_severity() { function non_null_control_chars_not_critical (line 679) | fn non_null_control_chars_not_critical() { function bom_prefix_does_not_hide_injection (line 700) | fn bom_prefix_does_not_hide_injection() { function mixed_control_chars_and_injection (line 715) | fn mixed_control_chars_and_injection() { FILE: crates/ironclaw_safety/src/validator.rs type ValidationResult (line 7) | pub struct ValidationResult { method ok (line 18) | pub fn ok() -> Self { method error (line 27) | pub fn error(error: ValidationError) -> Self { method with_warning (line 36) | pub fn with_warning(mut self, warning: impl Into) -> Self { method merge (line 42) | pub fn merge(mut self, other: Self) -> Self { method default (line 51) | fn default() -> Self { type ValidationError (line 58) | pub struct ValidationError { type ValidationErrorCode (line 69) | pub enum ValidationErrorCode { type Validator (line 80) | pub struct Validator { method new (line 91) | pub fn new() -> Self { method with_max_length (line 100) | pub fn with_max_length(mut self, max: usize) -> Self { method with_min_length (line 106) | pub fn with_min_length(mut self, min: usize) -> Self { method forbid_pattern (line 112) | pub fn forbid_pattern(mut self, pattern: impl Into) -> Self { method validate (line 119) | pub fn validate(&self, input: &str) -> ValidationResult { method validate_non_empty_input (line 132) | fn validate_non_empty_input(&self, input: &str, field: &str) -> Valida... method validate_tool_params (line 197) | pub fn validate_tool_params(&self, params: &serde_json::Value) -> Vali... method default (line 249) | fn default() -> Self { function has_excessive_repetition (line 255) | fn has_excessive_repetition(s: &str) -> bool { function test_valid_input (line 282) | fn test_valid_input() { function test_empty_input (line 290) | fn test_empty_input() { function test_too_long_input (line 303) | fn test_too_long_input() { function test_forbidden_pattern (line 316) | fn test_forbidden_pattern() { function test_excessive_repetition_warning (line 329) | fn test_excessive_repetition_warning() { function test_tool_params_allow_empty_strings (line 339) | fn test_tool_params_allow_empty_strings() { function test_tool_params_still_block_null_bytes (line 354) | fn test_tool_params_still_block_null_bytes() { function test_tool_params_still_block_forbidden_patterns (line 370) | fn test_tool_params_still_block_forbidden_patterns() { function test_tool_params_still_warn_on_repetition (line 386) | fn test_tool_params_still_warn_on_repetition() { function test_tool_params_still_warn_on_whitespace_ratio (line 401) | fn test_tool_params_still_warn_on_whitespace_ratio() { function test_tool_params_error_field_contains_json_path (line 417) | fn test_tool_params_error_field_contains_json_path() { function test_tool_params_depth_limit_prevents_stack_overflow (line 435) | fn test_tool_params_depth_limit_prevents_stack_overflow() { function test_tool_params_within_depth_limit_still_validated (line 456) | fn test_tool_params_within_depth_limit_still_validated() { function validate_100kb_input_within_threshold (line 481) | fn validate_100kb_input_within_threshold() { function excessive_repetition_100kb (line 497) | fn excessive_repetition_100kb() { function tool_params_deeply_nested_100kb (line 516) | fn tool_params_deeply_nested_100kb() { function zwsp_not_counted_as_whitespace (line 541) | fn zwsp_not_counted_as_whitespace() { function zwnj_not_counted_as_whitespace (line 555) | fn zwnj_not_counted_as_whitespace() { function zwnj_in_forbidden_pattern (line 568) | fn zwnj_in_forbidden_pattern() { function zwj_not_counted_as_whitespace (line 582) | fn zwj_not_counted_as_whitespace() { function actual_whitespace_padding_attack (line 595) | fn actual_whitespace_padding_attack() { function combining_diacriticals_in_repetition (line 608) | fn combining_diacriticals_in_repetition() { function base_char_plus_50_distinct_combining_diacriticals (line 617) | fn base_char_plus_50_distinct_combining_diacriticals() { function multibyte_chars_at_max_length_boundary (line 635) | fn multibyte_chars_at_max_length_boundary() { function four_byte_emoji_at_max_length_boundary (line 672) | fn four_byte_emoji_at_max_length_boundary() { function single_codepoint_emoji_repetition (line 702) | fn single_codepoint_emoji_repetition() { function multibyte_input_whitespace_ratio_uses_len_not_chars (line 712) | fn multibyte_input_whitespace_ratio_uses_len_not_chars() { function rtl_override_in_forbidden_pattern (line 730) | fn rtl_override_in_forbidden_pattern() { function control_chars_in_input_no_panic (line 745) | fn control_chars_in_input_no_panic() { function bom_with_forbidden_pattern (line 758) | fn bom_with_forbidden_pattern() { function control_chars_in_repetition_check (line 769) | fn control_chars_in_repetition_check() { FILE: migrations/V10__wasm_versioning.sql type wasm_channels (line 5) | CREATE TABLE IF NOT EXISTS wasm_channels ( FILE: migrations/V11__conversation_unique_indexes.sql type uq_conv_routine (line 6) | CREATE UNIQUE INDEX IF NOT EXISTS uq_conv_routine type uq_conv_heartbeat (line 11) | CREATE UNIQUE INDEX IF NOT EXISTS uq_conv_heartbeat FILE: migrations/V1__initial.sql type conversations (line 10) | CREATE TABLE conversations ( type idx_conversations_channel (line 20) | CREATE INDEX idx_conversations_channel ON conversations(channel) type idx_conversations_user (line 21) | CREATE INDEX idx_conversations_user ON conversations(user_id) type idx_conversations_last_activity (line 22) | CREATE INDEX idx_conversations_last_activity ON conversations(last_activ... type conversation_messages (line 24) | CREATE TABLE conversation_messages ( type idx_conversation_messages_conversation (line 32) | CREATE INDEX idx_conversation_messages_conversation ON conversation_mess... type agent_jobs (line 36) | CREATE TABLE agent_jobs ( type idx_agent_jobs_status (line 62) | CREATE INDEX idx_agent_jobs_status ON agent_jobs(status) type idx_agent_jobs_marketplace (line 63) | CREATE INDEX idx_agent_jobs_marketplace ON agent_jobs(marketplace_job_id) type idx_agent_jobs_conversation (line 64) | CREATE INDEX idx_agent_jobs_conversation ON agent_jobs(conversation_id) type idx_agent_jobs_stuck (line 65) | CREATE INDEX idx_agent_jobs_stuck ON agent_jobs(stuck_since) WHERE stuck... type job_actions (line 67) | CREATE TABLE job_actions ( type idx_job_actions_job_id (line 84) | CREATE INDEX idx_job_actions_job_id ON job_actions(job_id) type idx_job_actions_tool (line 85) | CREATE INDEX idx_job_actions_tool ON job_actions(tool_name) type dynamic_tools (line 89) | CREATE TABLE dynamic_tools ( type idx_dynamic_tools_status (line 105) | CREATE INDEX idx_dynamic_tools_status ON dynamic_tools(status) type idx_dynamic_tools_name (line 106) | CREATE INDEX idx_dynamic_tools_name ON dynamic_tools(name) type llm_calls (line 110) | CREATE TABLE llm_calls ( type idx_llm_calls_job (line 123) | CREATE INDEX idx_llm_calls_job ON llm_calls(job_id) type idx_llm_calls_conversation (line 124) | CREATE INDEX idx_llm_calls_conversation ON llm_calls(conversation_id) type idx_llm_calls_provider (line 125) | CREATE INDEX idx_llm_calls_provider ON llm_calls(provider) type estimation_snapshots (line 129) | CREATE TABLE estimation_snapshots ( type idx_estimation_category (line 143) | CREATE INDEX idx_estimation_category ON estimation_snapshots(category) type idx_estimation_job (line 144) | CREATE INDEX idx_estimation_job ON estimation_snapshots(job_id) type repair_attempts (line 148) | CREATE TABLE repair_attempts ( type idx_repair_attempts_target (line 159) | CREATE INDEX idx_repair_attempts_target ON repair_attempts(target_type, ... type idx_repair_attempts_created (line 160) | CREATE INDEX idx_repair_attempts_created ON repair_attempts(created_at) type memory_documents (line 167) | CREATE TABLE memory_documents ( type idx_memory_documents_user (line 183) | CREATE INDEX idx_memory_documents_user ON memory_documents(user_id) type idx_memory_documents_path (line 184) | CREATE INDEX idx_memory_documents_path ON memory_documents(user_id, path) type idx_memory_documents_path_prefix (line 185) | CREATE INDEX idx_memory_documents_path_prefix ON memory_documents(user_i... type idx_memory_documents_updated (line 186) | CREATE INDEX idx_memory_documents_updated ON memory_documents(updated_at... type memory_chunks (line 191) | CREATE TABLE memory_chunks ( type idx_memory_chunks_tsv (line 207) | CREATE INDEX idx_memory_chunks_tsv ON memory_chunks USING GIN(content_tsv) type idx_memory_chunks_embedding (line 208) | CREATE INDEX idx_memory_chunks_embedding ON memory_chunks type idx_memory_chunks_document (line 211) | CREATE INDEX idx_memory_chunks_document ON memory_chunks(document_id) type heartbeat_state (line 215) | CREATE TABLE heartbeat_state ( type idx_heartbeat_user (line 228) | CREATE INDEX idx_heartbeat_user ON heartbeat_state(user_id) type idx_heartbeat_next_run (line 229) | CREATE INDEX idx_heartbeat_next_run ON heartbeat_state(next_run) WHERE e... function update_updated_at_column (line 233) | CREATE OR REPLACE FUNCTION update_updated_at_column() function list_workspace_files (line 247) | CREATE OR REPLACE FUNCTION list_workspace_files( type memory_documents_summary (line 328) | CREATE VIEW memory_documents_summary AS type chunks_pending_embedding (line 341) | CREATE VIEW chunks_pending_embedding AS FILE: migrations/V2__wasm_secure_api.sql type secrets (line 8) | CREATE TABLE secrets ( type idx_secrets_user (line 30) | CREATE INDEX idx_secrets_user ON secrets(user_id) type idx_secrets_provider (line 31) | CREATE INDEX idx_secrets_provider ON secrets(provider) WHERE provider IS... type idx_secrets_expires (line 32) | CREATE INDEX idx_secrets_expires ON secrets(expires_at) WHERE expires_at... type wasm_tools (line 43) | CREATE TABLE wasm_tools ( type idx_wasm_tools_user (line 69) | CREATE INDEX idx_wasm_tools_user ON wasm_tools(user_id) type idx_wasm_tools_name (line 70) | CREATE INDEX idx_wasm_tools_name ON wasm_tools(user_id, name) type idx_wasm_tools_status (line 71) | CREATE INDEX idx_wasm_tools_status ON wasm_tools(status) type idx_wasm_tools_trust (line 72) | CREATE INDEX idx_wasm_tools_trust ON wasm_tools(trust_level) type tool_capabilities (line 83) | CREATE TABLE tool_capabilities ( type idx_tool_capabilities_tool (line 119) | CREATE INDEX idx_tool_capabilities_tool ON tool_capabilities(wasm_tool_id) type leak_detection_patterns (line 130) | CREATE TABLE leak_detection_patterns ( type idx_leak_patterns_enabled (line 148) | CREATE INDEX idx_leak_patterns_enabled ON leak_detection_patterns(enable... type tool_rate_limit_state (line 209) | CREATE TABLE tool_rate_limit_state ( type idx_rate_limit_tool (line 223) | CREATE INDEX idx_rate_limit_tool ON tool_rate_limit_state(wasm_tool_id) type idx_rate_limit_user (line 224) | CREATE INDEX idx_rate_limit_user ON tool_rate_limit_state(user_id) type secret_usage_log (line 229) | CREATE TABLE secret_usage_log ( type idx_secret_usage_secret (line 246) | CREATE INDEX idx_secret_usage_secret ON secret_usage_log(secret_id) type idx_secret_usage_tool (line 247) | CREATE INDEX idx_secret_usage_tool ON secret_usage_log(wasm_tool_id) type idx_secret_usage_user (line 248) | CREATE INDEX idx_secret_usage_user ON secret_usage_log(user_id) type idx_secret_usage_created (line 249) | CREATE INDEX idx_secret_usage_created ON secret_usage_log(created_at DESC) type leak_detection_events (line 258) | CREATE TABLE leak_detection_events ( type idx_leak_events_pattern (line 274) | CREATE INDEX idx_leak_events_pattern ON leak_detection_events(pattern_id) type idx_leak_events_tool (line 275) | CREATE INDEX idx_leak_events_tool ON leak_detection_events(wasm_tool_id) type idx_leak_events_user (line 276) | CREATE INDEX idx_leak_events_user ON leak_detection_events(user_id) type idx_leak_events_created (line 277) | CREATE INDEX idx_leak_events_created ON leak_detection_events(created_at... type wasm_tools_with_capabilities (line 282) | CREATE VIEW wasm_tools_with_capabilities AS type active_leak_patterns (line 303) | CREATE VIEW active_leak_patterns AS type recent_leak_events (line 309) | CREATE VIEW recent_leak_events AS FILE: migrations/V3__tool_failures.sql type tool_failures (line 4) | CREATE TABLE IF NOT EXISTS tool_failures ( type idx_tool_failures_name (line 18) | CREATE INDEX idx_tool_failures_name ON tool_failures(tool_name) type idx_tool_failures_count (line 19) | CREATE INDEX idx_tool_failures_count ON tool_failures(error_count DESC) type idx_tool_failures_unrepaired (line 20) | CREATE INDEX idx_tool_failures_unrepaired ON tool_failures(tool_name) WH... FILE: migrations/V4__sandbox_columns.sql type idx_agent_jobs_source (line 8) | CREATE INDEX IF NOT EXISTS idx_agent_jobs_source ON agent_jobs(source) type idx_agent_jobs_user (line 9) | CREATE INDEX IF NOT EXISTS idx_agent_jobs_user ON agent_jobs(user_id) type idx_agent_jobs_created (line 10) | CREATE INDEX IF NOT EXISTS idx_agent_jobs_created ON agent_jobs(created_... FILE: migrations/V5__claude_code.sql type claude_code_events (line 6) | CREATE TABLE IF NOT EXISTS claude_code_events ( type idx_cc_events_job (line 14) | CREATE INDEX IF NOT EXISTS idx_cc_events_job ON claude_code_events(job_i... FILE: migrations/V6__routines.sql type routines (line 7) | CREATE TABLE routines ( type idx_routines_next_fire (line 48) | CREATE INDEX idx_routines_next_fire type idx_routines_event_triggers (line 53) | CREATE INDEX idx_routines_event_triggers type routine_runs (line 58) | CREATE TABLE routine_runs ( type idx_routine_runs_routine (line 72) | CREATE INDEX idx_routine_runs_routine ON routine_runs (routine_id) type idx_routine_runs_status (line 73) | CREATE INDEX idx_routine_runs_status ON routine_runs (status) WHERE stat... FILE: migrations/V8__settings.sql type settings (line 8) | CREATE TABLE IF NOT EXISTS settings ( type idx_settings_user (line 16) | CREATE INDEX IF NOT EXISTS idx_settings_user ON settings (user_id) FILE: migrations/V9__flexible_embedding_dimension.sql type memory_documents_summary (line 21) | CREATE VIEW memory_documents_summary AS type chunks_pending_embedding (line 34) | CREATE VIEW chunks_pending_embedding AS FILE: scripts/check_no_panics.py class LexerState (line 33) | class LexerState: function run_git (line 42) | def run_git(*args: str) -> str: function sanitize_line (line 52) | def sanitize_line(line: str, state: LexerState) -> str: function is_test_item (line 138) | def is_test_item(line: str, pending_test_attr: bool) -> tuple[bool, bool]: function line_test_contexts (line 148) | def line_test_contexts(lines: list[str]) -> list[bool]: function changed_rust_files (line 188) | def changed_rust_files(base: str, head: str) -> list[pathlib.Path]: function added_lines_for_file (line 197) | def added_lines_for_file(base: str, head: str, path: pathlib.Path) -> se... function collect_violations (line 222) | def collect_violations(base: str, head: str) -> list[tuple[str, int, str]]: function main (line 250) | def main() -> int: class CheckNoPanicsTests (line 278) | class CheckNoPanicsTests(unittest.TestCase): method test_cfg_test_module_marks_inner_lines (line 279) | def test_cfg_test_module_marks_inner_lines(self) -> None: method test_test_function_marks_body_only (line 297) | def test_test_function_marks_body_only(self) -> None: method test_proc_macro_test_attrs_mark_body_only (line 317) | def test_proc_macro_test_attrs_mark_body_only(self) -> None: method test_named_tests_module_marks_context (line 345) | def test_named_tests_module_marks_context(self) -> None: FILE: src/agent/agent_loop.rs constant BOOTSTRAP_GREETING (line 40) | const BOOTSTRAP_GREETING: &str = include_str!("../workspace/seeds/GREETI... function truncate_for_preview (line 43) | pub(crate) fn truncate_for_preview(output: &str, max_chars: usize) -> St... function resolve_routine_notification_user (line 66) | fn resolve_routine_notification_user(metadata: &serde_json::Value) -> Op... function trimmed_option (line 73) | fn trimmed_option(value: Option<&str>) -> Option { function resolve_owner_scope_notification_user (line 80) | fn resolve_owner_scope_notification_user( function resolve_channel_notification_user (line 87) | async fn resolve_channel_notification_user( function resolve_routine_notification_target (line 109) | async fn resolve_routine_notification_target( function chat_tool_execution_metadata (line 124) | pub(crate) fn chat_tool_execution_metadata(message: &IncomingMessage) ->... function should_fallback_routine_notification (line 135) | fn should_fallback_routine_notification(error: &ChannelError) -> bool { type AgentDeps (line 142) | pub struct AgentDeps { type Agent (line 175) | pub struct Agent { method owner_id (line 194) | pub(super) fn owner_id(&self) -> &str { method new (line 211) | pub fn new( method set_routine_engine_slot (line 264) | pub fn set_routine_engine_slot( method routine_engine (line 271) | async fn routine_engine(&self) -> Option Arc { method store (line 282) | pub(super) fn store(&self) -> Option<&Arc> { method llm (line 286) | pub(super) fn llm(&self) -> &Arc { method cheap_llm (line 291) | pub(super) fn cheap_llm(&self) -> &Arc { method safety (line 295) | pub(super) fn safety(&self) -> &Arc { method tools (line 299) | pub(super) fn tools(&self) -> &Arc { method workspace (line 303) | pub(super) fn workspace(&self) -> Option<&Arc> { method hooks (line 307) | pub(super) fn hooks(&self) -> &Arc { method cost_guard (line 311) | pub(super) fn cost_guard(&self) -> &Arc Option<&Arc Option<&Arc Result<(), Error> { method store_extracted_documents (line 873) | async fn store_extracted_documents(&self, message: &IncomingMessage) { method handle_message (line 939) | async fn handle_message(&self, message: &IncomingMessage) -> Result Self { type LoopDelegate (line 76) | pub trait LoopDelegate: Send + Sync { method check_signals (line 79) | async fn check_signals(&self) -> LoopSignal; method before_llm_call (line 84) | async fn before_llm_call( method call_llm (line 93) | async fn call_llm( method handle_text_response (line 102) | async fn handle_text_response( method execute_tool_calls (line 110) | async fn execute_tool_calls( method on_tool_intent_nudge (line 119) | async fn on_tool_intent_nudge(&self, _text: &str, _reason_ctx: &mut Re... method after_iteration (line 122) | async fn after_iteration(&self, _iteration: usize) {} method check_signals (line 323) | async fn check_signals(&self) -> LoopSignal { method before_llm_call (line 328) | async fn before_llm_call( method call_llm (line 344) | async fn call_llm( method handle_text_response (line 357) | async fn handle_text_response( method execute_tool_calls (line 365) | async fn execute_tool_calls( method on_tool_intent_nudge (line 379) | async fn on_tool_intent_nudge(&self, _text: &str, _reason_ctx: &mut Re... method after_iteration (line 383) | async fn after_iteration(&self, iteration: usize) { function run_agentic_loop (line 129) | pub async fn run_agentic_loop( function truncate_for_preview (line 238) | pub fn truncate_for_preview(s: &str, max: usize) -> String { function stub_reasoning (line 256) | fn stub_reasoning() -> Reasoning { function zero_usage (line 260) | fn zero_usage() -> TokenUsage { function text_output (line 269) | fn text_output(text: &str) -> RespondOutput { function tool_calls_output (line 276) | fn tool_calls_output(calls: Vec) -> RespondOutput { type MockDelegate (line 287) | struct MockDelegate { method new (line 298) | fn new(responses: Vec) -> Self { method with_signal (line 310) | fn with_signal(mut self, signal: LoopSignal) -> Self { method with_early_exit (line 315) | fn with_early_exit(mut self, iteration: usize, outcome: LoopOutcome) -... function test_text_response_returns_immediately (line 391) | async fn test_text_response_returns_immediately() { function test_tool_call_then_text_response (line 411) | async fn test_tool_call_then_text_response() { function test_stop_signal_exits_immediately (line 440) | async fn test_stop_signal_exits_immediately() { function test_inject_message_adds_user_message (line 456) | async fn test_inject_message_adds_user_message() { function test_max_iterations_reached (line 477) | async fn test_max_iterations_reached() { function test_tool_intent_nudge_fires_and_caps (line 540) | async fn test_tool_intent_nudge_fires_and_caps() { function test_before_llm_call_early_exit (line 580) | async fn test_before_llm_call_early_exit() { function test_truncate_short_string_unchanged (line 596) | fn test_truncate_short_string_unchanged() { function test_truncate_long_string_adds_ellipsis (line 601) | fn test_truncate_long_string_adds_ellipsis() { function test_truncate_multibyte_safe (line 607) | fn test_truncate_multibyte_safe() { FILE: src/agent/attachments.rs type AugmentResult (line 9) | pub struct AugmentResult { function augment_with_attachments (line 22) | pub fn augment_with_attachments( function escape_xml_attr (line 57) | fn escape_xml_attr(s: &str) -> String { function escape_xml_text (line 65) | fn escape_xml_text(s: &str) -> String { function format_attachment (line 71) | fn format_attachment(index: usize, att: &IncomingAttachment) -> String { function format_size (line 141) | fn format_size(bytes: u64) -> String { function make_attachment (line 155) | fn make_attachment(kind: AttachmentKind) -> IncomingAttachment { function empty_attachments_returns_none (line 171) | fn empty_attachments_returns_none() { function audio_with_transcript (line 176) | fn audio_with_transcript() { function audio_without_transcript (line 193) | fn audio_without_transcript() { function image_without_data_no_visual (line 204) | fn image_without_data_no_visual() { function image_with_data_produces_content_part (line 224) | fn image_with_data_produces_content_part() { function document_with_extracted_text (line 246) | fn document_with_extracted_text() { function document_without_extracted_text (line 258) | fn document_without_extracted_text() { function multiple_attachments_with_mixed_images (line 275) | fn multiple_attachments_with_mixed_images() { function original_content_preserved (line 299) | fn original_content_preserved() { FILE: src/agent/commands.rs function format_count (line 20) | fn format_count(n: u64, suffix: &str) -> String { method handle_job_or_command (line 32) | pub(super) async fn handle_job_or_command( method handle_create_job (line 84) | async fn handle_create_job( method handle_check_status (line 114) | async fn handle_check_status( method handle_cancel_job (line 199) | async fn handle_cancel_job(&self, user_id: &str, job_id: &str) -> Result... method handle_list_jobs (line 222) | async fn handle_list_jobs( method handle_help_job (line 273) | async fn handle_help_job(&self, user_id: &str, job_id: &str) -> Result Result Result { method handle_skills_search (line 732) | async fn handle_skills_search(&self, query: &str) -> Result) -> Self { method compact (line 45) | pub async fn compact( method compact_with_summary (line 80) | async fn compact_with_summary( method compact_truncate (line 132) | fn compact_truncate(&self, thread: &mut Thread, keep_recent: usize) ->... method compact_to_workspace (line 145) | async fn compact_to_workspace( method generate_summary (line 187) | async fn generate_summary(&self, messages: &[ChatMessage]) -> Result Self { function format_turns_for_storage (line 293) | fn format_turns_for_storage(turns: &[crate::agent::session::Turn]) -> St... function test_format_turns (line 321) | fn test_format_turns() { function test_compaction_partial_empty (line 335) | fn test_compaction_partial_empty() { function make_compactor (line 347) | fn make_compactor(llm: Arc) -> ContextCompactor { function make_thread (line 353) | fn make_thread(n: usize) -> Thread { function make_unmigrated_workspace (line 363) | async fn make_unmigrated_workspace() -> crate::workspace::Workspace { function test_compact_truncate_keeps_last_n (line 380) | async fn test_compact_truncate_keeps_last_n() { function test_compact_truncate_with_fewer_turns_than_limit (line 424) | async fn test_compact_truncate_with_fewer_turns_than_limit() { function test_compact_truncate_empty_turns (line 457) | async fn test_compact_truncate_empty_turns() { function test_compact_with_summary_produces_summary_turn (line 483) | async fn test_compact_with_summary_produces_summary_turn() { function test_compact_with_summary_llm_failure (line 525) | async fn test_compact_with_summary_llm_failure() { function test_compact_with_summary_fewer_turns_than_keep (line 552) | async fn test_compact_with_summary_fewer_turns_than_keep() { function test_compact_with_summary_preserves_turns_when_workspace_write_fails (line 575) | async fn test_compact_with_summary_preserves_turns_when_workspace_write_... function test_compact_to_workspace_without_workspace_falls_back (line 615) | async fn test_compact_to_workspace_without_workspace_falls_back() { function test_compact_to_workspace_fewer_turns_noop (line 640) | async fn test_compact_to_workspace_fewer_turns_noop() { function test_compact_to_workspace_preserves_turns_when_workspace_write_fails (line 660) | async fn test_compact_to_workspace_preserves_turns_when_workspace_write_... function test_format_turns_for_storage_with_tool_calls (line 700) | fn test_format_turns_for_storage_with_tool_calls() { function test_format_turns_for_storage_incomplete_turn (line 721) | fn test_format_turns_for_storage_incomplete_turn() { function test_format_turns_for_storage_empty (line 738) | fn test_format_turns_for_storage_empty() { function test_tokens_decrease_after_compaction (line 748) | async fn test_tokens_decrease_after_compaction() { function test_compact_truncate_keep_zero (line 775) | async fn test_compact_truncate_keep_zero() { function test_compact_with_summary_keep_zero (line 799) | async fn test_compact_with_summary_keep_zero() { function test_messages_coherent_after_compaction (line 826) | async fn test_messages_coherent_after_compaction() { function test_sequential_compactions (line 865) | async fn test_sequential_compactions() { FILE: src/agent/context_monitor.rs constant DEFAULT_CONTEXT_LIMIT (line 9) | const DEFAULT_CONTEXT_LIMIT: usize = 100_000; constant COMPACTION_THRESHOLD (line 12) | const COMPACTION_THRESHOLD: f64 = 0.8; constant TOKENS_PER_WORD (line 15) | const TOKENS_PER_WORD: f64 = 1.3; type CompactionStrategy (line 19) | pub enum CompactionStrategy { method default (line 35) | fn default() -> Self { type ContextMonitor (line 41) | pub struct ContextMonitor { method new (line 50) | pub fn new() -> Self { method with_limit (line 58) | pub fn with_limit(mut self, limit: usize) -> Self { method with_threshold (line 64) | pub fn with_threshold(mut self, ratio: f64) -> Self { method estimate_tokens (line 70) | pub fn estimate_tokens(&self, messages: &[ChatMessage]) -> usize { method needs_compaction (line 75) | pub fn needs_compaction(&self, messages: &[ChatMessage]) -> bool { method usage_percent (line 82) | pub fn usage_percent(&self, messages: &[ChatMessage]) -> f64 { method suggest_compaction (line 88) | pub fn suggest_compaction(&self, messages: &[ChatMessage]) -> Option usize { method threshold (line 114) | pub fn threshold(&self) -> usize { method default (line 120) | fn default() -> Self { function estimate_message_tokens (line 126) | fn estimate_message_tokens(message: &ChatMessage) -> usize { function estimate_text_tokens (line 137) | pub fn estimate_text_tokens(text: &str) -> usize { type ContextBreakdown (line 144) | pub struct ContextBreakdown { method analyze (line 161) | pub fn analyze(messages: &[ChatMessage]) -> Self { function test_token_estimation (line 192) | fn test_token_estimation() { function test_needs_compaction (line 201) | fn test_needs_compaction() { function test_suggest_compaction (line 215) | fn test_suggest_compaction() { function test_context_breakdown (line 223) | fn test_context_breakdown() { FILE: src/agent/cost_guard.rs type CostGuardConfig (line 19) | pub struct CostGuardConfig { type CostLimitExceeded (line 28) | pub enum CostLimitExceeded { method fmt (line 36) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type ModelTokens (line 58) | pub struct ModelTokens { type CostGuard (line 67) | pub struct CostGuard { method new (line 90) | pub fn new(config: CostGuardConfig) -> Self { method check_allowed (line 107) | pub async fn check_allowed(&self) -> Result<(), CostLimitExceeded> { method record_llm_call (line 165) | pub async fn record_llm_call( method daily_spend (line 252) | pub async fn daily_spend(&self) -> Decimal { method actions_this_hour (line 263) | pub async fn actions_this_hour(&self) -> u64 { method model_usage (line 275) | pub async fn model_usage(&self) -> HashMap { type DailyCost (line 83) | struct DailyCost { function to_cents (line 281) | fn to_cents(usd: Decimal) -> u64 { function test_unlimited_allows_everything (line 291) | async fn test_unlimited_allows_everything() { function test_daily_budget_enforcement (line 314) | async fn test_daily_budget_enforcement() { function test_hourly_rate_enforcement (line 351) | async fn test_hourly_rate_enforcement() { function test_daily_spend_tracking (line 378) | async fn test_daily_spend_tracking() { function test_actions_this_hour (line 391) | async fn test_actions_this_hour() { function test_to_cents (line 407) | fn test_to_cents() { function test_cost_limit_display (line 414) | fn test_cost_limit_display() { function test_model_usage_per_model_tracking (line 431) | async fn test_model_usage_per_model_tracking() { function test_cache_discount_reduces_cost (line 477) | async fn test_cache_discount_reduces_cost() { function test_cache_write_surcharge_increases_cost (line 529) | async fn test_cache_write_surcharge_increases_cost() { function test_cache_write_surcharge_long_ttl (line 582) | async fn test_cache_write_surcharge_long_ttl() { function test_checked_sub_no_panic_on_fresh_guard (line 632) | async fn test_checked_sub_no_panic_on_fresh_guard() { function test_instant_checked_sub_returns_none_for_overflow (line 654) | fn test_instant_checked_sub_returns_none_for_overflow() { FILE: src/agent/dispatcher.rs type AgenticLoopResult (line 26) | pub(super) enum AgenticLoopResult { method run_agentic_loop (line 42) | pub(super) async fn run_agentic_loop( method execute_chat_tool (line 220) | pub(super) async fn execute_chat_tool( type ChatDelegate (line 236) | struct ChatDelegate<'a> { method check_signals (line 252) | async fn check_signals(&self) -> LoopSignal { method before_llm_call (line 262) | async fn before_llm_call( method call_llm (line 328) | async fn call_llm( method handle_text_response (line 405) | async fn handle_text_response( method execute_tool_calls (line 417) | async fn execute_tool_calls( function execute_chat_tool_standalone (line 913) | pub(super) async fn execute_chat_tool_standalone( type ParsedAuthData (line 924) | pub(super) struct ParsedAuthData { function parse_auth_result (line 930) | pub(super) fn parse_auth_result(result: &Result) -> Parse... function check_auth_required (line 953) | pub(super) fn check_auth_required( function compact_messages_for_retry (line 980) | fn compact_messages_for_retry(messages: &[ChatMessage]) -> Vec String { function extract_suggestions (line 1064) | pub(crate) fn extract_suggestions(text: &str) -> (String, Vec) { type StaticLlmProvider (line 1132) | struct StaticLlmProvider; method model_name (line 1136) | fn model_name(&self) -> &str { method cost_per_token (line 1140) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 1144) | async fn complete( method complete_with_tools (line 1158) | async fn complete_with_tools( function make_test_agent (line 1175) | fn make_test_agent() -> Agent { function test_make_test_agent_succeeds (line 1230) | fn test_make_test_agent_succeeds() { function test_auto_approved_tool_is_respected (line 1236) | fn test_auto_approved_tool_is_respected() { function test_shell_destructive_command_requires_explicit_approval (line 1248) | fn test_shell_destructive_command_requires_explicit_approval() { function test_always_approval_requirement_bypasses_session_auto_approve (line 1277) | fn test_always_approval_requirement_bypasses_session_auto_approve() { function test_always_approval_requirement_vs_unless_auto_approved (line 1308) | fn test_always_approval_requirement_vs_unless_auto_approved() { function test_allow_always_matches_approval_requirement (line 1370) | fn test_allow_always_matches_approval_requirement() { function test_pending_approval_serialization_backcompat_without_deferred_calls (line 1396) | fn test_pending_approval_serialization_backcompat_without_deferred_calls... function test_pending_approval_serialization_roundtrip_with_deferred_calls (line 1418) | fn test_pending_approval_serialization_roundtrip_with_deferred_calls() { function test_detect_auth_awaiting_positive (line 1453) | fn test_detect_auth_awaiting_positive() { function test_detect_auth_awaiting_not_awaiting (line 1471) | fn test_detect_auth_awaiting_not_awaiting() { function test_detect_auth_awaiting_wrong_tool (line 1484) | fn test_detect_auth_awaiting_wrong_tool() { function test_detect_auth_awaiting_error_result (line 1495) | fn test_detect_auth_awaiting_error_result() { function test_detect_auth_awaiting_default_instructions (line 1502) | fn test_detect_auth_awaiting_default_instructions() { function test_detect_auth_awaiting_tool_activate (line 1515) | fn test_detect_auth_awaiting_tool_activate() { function test_detect_auth_awaiting_tool_activate_not_awaiting (line 1533) | fn test_detect_auth_awaiting_tool_activate_not_awaiting() { function test_execute_chat_tool_standalone_success (line 1545) | async fn test_execute_chat_tool_standalone_success() { function test_execute_chat_tool_standalone_not_found (line 1577) | async fn test_execute_chat_tool_standalone_not_found() { function test_compact_keeps_system_and_last_user_exchange (line 1608) | fn test_compact_keeps_system_and_last_user_exchange() { function test_compact_preserves_multiple_system_messages (line 1642) | fn test_compact_preserves_multiple_system_messages() { function test_compact_single_user_message_keeps_everything (line 1664) | fn test_compact_single_user_message_keeps_everything() { function test_compact_no_user_messages_keeps_non_system (line 1680) | fn test_compact_no_user_messages_keeps_non_system() { function test_compact_drops_old_history_but_keeps_current_turn_tools (line 1695) | fn test_compact_drops_old_history_but_keeps_current_turn_tools() { function test_compact_no_duplicate_system_after_last_user (line 1739) | fn test_compact_no_duplicate_system_after_last_user() { function test_context_length_recovery_via_compaction_and_retry (line 1779) | async fn test_context_length_recovery_via_compaction_and_retry() { type AlwaysToolCallProvider (line 1833) | struct AlwaysToolCallProvider; method model_name (line 1837) | fn model_name(&self) -> &str { method cost_per_token (line 1841) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 1845) | async fn complete( method complete_with_tools (line 1859) | async fn complete_with_tools( function force_text_prevents_infinite_tool_call_loop (line 1893) | async fn force_text_prevents_infinite_tool_call_loop() { function iteration_bounds_guarantee_termination (line 1931) | fn iteration_bounds_guarantee_termination() { type FailingToolCallProvider (line 1987) | struct FailingToolCallProvider; method model_name (line 1991) | fn model_name(&self) -> &str { method cost_per_token (line 1995) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 1999) | async fn complete( method complete_with_tools (line 2013) | async fn complete_with_tools( function make_test_agent_with_llm (line 2047) | fn make_test_agent_with_llm(llm: Arc, max_tool_iteratio... function test_dispatcher_terminates_with_all_tool_calls_failing (line 2106) | async fn test_dispatcher_terminates_with_all_tool_calls_failing() { function test_dispatcher_terminates_with_max_iterations (line 2152) | async fn test_dispatcher_terminates_with_max_iterations() { function test_strip_internal_tool_call_text_removes_markers (line 2264) | fn test_strip_internal_tool_call_text_removes_markers() { function test_strip_internal_tool_call_text_removes_returned_markers (line 2271) | fn test_strip_internal_tool_call_text_removes_returned_markers() { function test_strip_internal_tool_call_text_all_markers_yields_fallback (line 2278) | fn test_strip_internal_tool_call_text_all_markers_yields_fallback() { function test_strip_internal_tool_call_text_preserves_normal_text (line 2285) | fn test_strip_internal_tool_call_text_preserves_normal_text() { function test_extract_suggestions_basic (line 2292) | fn test_extract_suggestions_basic() { function test_extract_suggestions_no_tag (line 2300) | fn test_extract_suggestions_no_tag() { function test_extract_suggestions_malformed_json (line 2308) | fn test_extract_suggestions_malformed_json() { function test_extract_suggestions_inside_code_fence (line 2316) | fn test_extract_suggestions_inside_code_fence() { function test_extract_suggestions_after_code_fence (line 2325) | fn test_extract_suggestions_after_code_fence() { function test_extract_suggestions_filters_long (line 2333) | fn test_extract_suggestions_filters_long() { function test_tool_error_format_includes_tool_name (line 2341) | fn test_tool_error_format_includes_tool_name() { function test_image_sentinel_empty_data_url_should_be_skipped (line 2362) | fn test_image_sentinel_empty_data_url_should_be_skipped() { function test_image_sentinel_present_data_url_is_valid (line 2385) | fn test_image_sentinel_present_data_url_is_valid() { function test_relay_non_dm_auto_deny_decision (line 2407) | fn test_relay_non_dm_auto_deny_decision() { function test_relay_auto_deny_message_format (line 2439) | fn test_relay_auto_deny_message_format() { FILE: src/agent/heartbeat.rs type HeartbeatConfig (line 41) | pub struct HeartbeatConfig { method with_interval (line 80) | pub fn with_interval(mut self, interval: Duration) -> Self { method disabled (line 86) | pub fn disabled(mut self) -> Self { method is_quiet_hours (line 92) | pub fn is_quiet_hours(&self) -> bool { method with_notify (line 112) | pub fn with_notify(mut self, user_id: impl Into, channel: impl... method with_fire_at (line 119) | pub fn with_fire_at(mut self, time: chrono::NaiveTime, tz: Option Tz { method default (line 63) | fn default() -> Self { type HeartbeatResult (line 136) | pub enum HeartbeatResult { function duration_until_next_fire (line 151) | fn duration_until_next_fire(fire_at: chrono::NaiveTime, tz: Tz) -> Durat... type HeartbeatRunner (line 175) | pub struct HeartbeatRunner { method new (line 187) | pub fn new( method with_response_channel (line 205) | pub fn with_response_channel(mut self, tx: mpsc::Sender) -> Self { method run (line 219) | pub async fn run(&mut self) { method check_heartbeat (line 312) | pub async fn check_heartbeat(&self) -> HeartbeatResult { method send_notification (line 399) | async fn send_notification(&self, message: &str) { function is_effectively_empty (line 458) | fn is_effectively_empty(content: &str) -> bool { function strip_html_comments (line 473) | fn strip_html_comments(content: &str) -> String { function spawn_heartbeat (line 490) | pub fn spawn_heartbeat( function test_heartbeat_config_defaults (line 516) | fn test_heartbeat_config_defaults() { function test_heartbeat_config_builders (line 524) | fn test_heartbeat_config_builders() { function test_strip_html_comments_no_comments (line 540) | fn test_strip_html_comments_no_comments() { function test_strip_html_comments_single (line 545) | fn test_strip_html_comments_single() { function test_strip_html_comments_multiple (line 553) | fn test_strip_html_comments_multiple() { function test_strip_html_comments_multiline (line 559) | fn test_strip_html_comments_multiline() { function test_strip_html_comments_unclosed (line 565) | fn test_strip_html_comments_unclosed() { function test_effectively_empty_empty_string (line 573) | fn test_effectively_empty_empty_string() { function test_effectively_empty_whitespace (line 578) | fn test_effectively_empty_whitespace() { function test_effectively_empty_headers_only (line 583) | fn test_effectively_empty_headers_only() { function test_effectively_empty_html_comments_only (line 588) | fn test_effectively_empty_html_comments_only() { function test_effectively_empty_empty_checkboxes (line 593) | fn test_effectively_empty_empty_checkboxes() { function test_effectively_empty_bare_list_markers (line 598) | fn test_effectively_empty_bare_list_markers() { function test_effectively_empty_seeded_template (line 603) | fn test_effectively_empty_seeded_template() { function test_effectively_empty_real_checklist (line 619) | fn test_effectively_empty_real_checklist() { function test_effectively_empty_mixed_real_and_headers (line 629) | fn test_effectively_empty_mixed_real_and_headers() { function test_effectively_empty_comment_plus_real_content (line 635) | fn test_effectively_empty_comment_plus_real_content() { function test_quiet_hours_inside (line 643) | fn test_quiet_hours_inside() { function test_quiet_hours_outside (line 662) | fn test_quiet_hours_outside() { function test_quiet_hours_wraparound_excludes_now (line 681) | fn test_quiet_hours_wraparound_excludes_now() { function test_quiet_hours_none_configured (line 700) | fn test_quiet_hours_none_configured() { function test_quiet_hours_same_start_end (line 706) | fn test_quiet_hours_same_start_end() { function test_spawn_heartbeat_accepts_store_param (line 718) | fn test_spawn_heartbeat_accepts_store_param() { function test_default_config_has_no_fire_at (line 737) | fn test_default_config_has_no_fire_at() { function test_with_fire_at_builder (line 745) | fn test_with_fire_at_builder() { function test_duration_until_next_fire_is_bounded (line 754) | fn test_duration_until_next_fire_is_bounded() { function test_duration_until_next_fire_dst_timezone_no_panic (line 767) | fn test_duration_until_next_fire_dst_timezone_no_panic() { function test_resolved_tz_defaults_to_utc (line 780) | fn test_resolved_tz_defaults_to_utc() { function test_resolved_tz_parses_iana (line 786) | fn test_resolved_tz_parses_iana() { FILE: src/agent/job_monitor.rs type JobMonitorRoute (line 29) | pub struct JobMonitorRoute { function spawn_job_monitor (line 45) | pub fn spawn_job_monitor( function spawn_job_monitor_with_context (line 57) | pub fn spawn_job_monitor_with_context( function spawn_completion_watcher (line 163) | pub fn spawn_completion_watcher( function test_route (line 220) | fn test_route() -> JobMonitorRoute { function test_monitor_forwards_assistant_messages (line 229) | async fn test_monitor_forwards_assistant_messages() { function test_monitor_ignores_other_jobs (line 261) | async fn test_monitor_ignores_other_jobs() { function test_monitor_exits_on_job_result (line 291) | async fn test_monitor_exits_on_job_result() { function test_monitor_skips_tool_events (line 326) | async fn test_monitor_skips_tool_events() { function test_external_metadata_cannot_spoof_internal_flag (line 371) | fn test_external_metadata_cannot_spoof_internal_flag() { function test_into_internal_sets_flag (line 385) | fn test_into_internal_sets_flag() { function test_monitor_transitions_context_on_completion (line 396) | async fn test_monitor_transitions_context_on_completion() { function test_monitor_transitions_context_on_failure (line 444) | async fn test_monitor_transitions_context_on_failure() { function test_completion_watcher_transitions_on_result (line 492) | async fn test_completion_watcher_transitions_on_result() { FILE: src/agent/router.rs type MessageIntent (line 11) | pub enum MessageIntent { type Router (line 37) | pub struct Router { method new (line 44) | pub fn new() -> Self { method with_prefix (line 51) | pub fn with_prefix(mut self, prefix: impl Into) -> Self { method is_command (line 57) | pub fn is_command(&self, message: &IncomingMessage) -> bool { method route_command (line 65) | pub fn route_command(&self, message: &IncomingMessage) -> Option MessageIntent { method default (line 129) | fn default() -> Self { function test_command_routing (line 139) | fn test_command_routing() { function test_is_command (line 149) | fn test_is_command() { function test_non_command_returns_none (line 160) | fn test_non_command_returns_none() { function test_command_create_job (line 172) | fn test_command_create_job() { function test_command_list_jobs (line 187) | fn test_command_list_jobs() { FILE: src/agent/routine.rs type Routine (line 33) | pub struct Routine { type Trigger (line 58) | pub enum Trigger { method type_tag (line 88) | pub fn type_tag(&self) -> &'static str { method from_db (line 98) | pub fn from_db(trigger_type: &str, config: serde_json::Value) -> Resul... method to_config_json (line 182) | pub fn to_config_json(&self) -> serde_json::Value { type RoutineAction (line 209) | pub enum RoutineAction { method type_tag (line 264) | pub fn type_tag(&self) -> &'static str { method from_db (line 272) | pub fn from_db(action_type: &str, config: serde_json::Value) -> Result... method to_config_json (line 349) | pub fn to_config_json(&self) -> serde_json::Value { function default_max_tokens (line 241) | fn default_max_tokens() -> u32 { function default_max_iterations (line 245) | fn default_max_iterations() -> u32 { function default_max_tool_rounds (line 249) | fn default_max_tool_rounds() -> u32 { constant MAX_TOOL_ROUNDS_LIMIT (line 254) | pub(crate) const MAX_TOOL_ROUNDS_LIMIT: u32 = 20; function clamp_max_tool_rounds (line 258) | fn clamp_max_tool_rounds(value: u64) -> u32 { type RoutineGuardrails (line 379) | pub struct RoutineGuardrails { method default (line 389) | fn default() -> Self { type NotifyConfig (line 400) | pub struct NotifyConfig { method default (line 414) | fn default() -> Self { type RunStatus (line 428) | pub enum RunStatus { method fmt (line 436) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type Err (line 447) | type Err = RoutineError; method from_str (line 448) | fn from_str(s: &str) -> Result { type RoutineRun (line 463) | pub struct RoutineRun { function json_value_as_filter_string (line 481) | pub fn json_value_as_filter_string(v: &serde_json::Value) -> Option u64 { function normalize_cron_expression (line 505) | pub fn normalize_cron_expression(schedule: &str) -> String { function next_cron_fire (line 520) | pub fn next_cron_fire( function describe_cron (line 542) | pub fn describe_cron(schedule: &str, timezone: Option<&str>) -> String { function test_trigger_roundtrip (line 710) | fn test_trigger_roundtrip() { function test_event_trigger_roundtrip (line 721) | fn test_event_trigger_roundtrip() { function test_system_event_trigger_roundtrip (line 733) | fn test_system_event_trigger_roundtrip() { function test_action_lightweight_roundtrip (line 751) | fn test_action_lightweight_roundtrip() { function test_action_full_job_roundtrip (line 768) | fn test_action_full_job_roundtrip() { function test_action_full_job_ignores_legacy_permission_fields (line 784) | fn test_action_full_job_ignores_legacy_permission_fields() { function test_run_status_display_parse (line 818) | fn test_run_status_display_parse() { function test_content_hash_deterministic (line 832) | fn test_content_hash_deterministic() { function test_next_cron_fire_valid (line 842) | fn test_next_cron_fire_valid() { function test_next_cron_fire_invalid (line 849) | fn test_next_cron_fire_invalid() { function test_trigger_cron_timezone_roundtrip (line 855) | fn test_trigger_cron_timezone_roundtrip() { function test_trigger_cron_no_timezone_backward_compat (line 868) | fn test_trigger_cron_no_timezone_backward_compat() { function test_trigger_cron_invalid_timezone_coerced_to_none (line 875) | fn test_trigger_cron_invalid_timezone_coerced_to_none() { function test_next_cron_fire_with_timezone (line 885) | fn test_next_cron_fire_with_timezone() { function test_describe_cron_common_patterns (line 897) | fn test_describe_cron_common_patterns() { function test_describe_cron_edge_cases (line 921) | fn test_describe_cron_edge_cases() { function test_guardrails_default (line 931) | fn test_guardrails_default() { function test_trigger_type_tag (line 939) | fn test_trigger_type_tag() { function test_normalize_cron_5_field (line 969) | fn test_normalize_cron_5_field() { function test_normalize_cron_6_field (line 979) | fn test_normalize_cron_6_field() { function test_normalize_cron_7_field_passthrough (line 988) | fn test_normalize_cron_7_field_passthrough() { function test_next_cron_fire_5_field_accepted (line 997) | fn test_next_cron_fire_5_field_accepted() { function test_next_cron_fire_5_field_with_timezone (line 1008) | fn test_next_cron_fire_5_field_with_timezone() { function test_action_lightweight_backward_compat_no_use_tools (line 1018) | fn test_action_lightweight_backward_compat_no_use_tools() { function test_max_tool_rounds_clamped_to_upper_bound (line 1034) | fn test_max_tool_rounds_clamped_to_upper_bound() { function test_max_tool_rounds_clamped_to_lower_bound (line 1055) | fn test_max_tool_rounds_clamped_to_lower_bound() { function test_max_tool_rounds_normal_value_passes_through (line 1073) | fn test_max_tool_rounds_normal_value_passes_through() { FILE: src/agent/routine_engine.rs type EventMatcher (line 43) | enum EventMatcher { type SandboxReadiness (line 50) | pub enum SandboxReadiness { type RoutineEngine (line 60) | pub struct RoutineEngine { method new (line 89) | pub fn new( method running_count_for_test (line 120) | pub fn running_count_for_test(&self) -> &Arc { method refresh_event_cache (line 125) | pub async fn refresh_event_cache(&self) { method check_event_triggers (line 173) | pub async fn check_event_triggers(&self, user_id: &str, channel: &str,... method emit_system_event (line 259) | pub async fn emit_system_event( method batch_concurrent_counts (line 371) | async fn batch_concurrent_counts(&self, routine_ids: &[Uuid]) -> Optio... method check_cron_triggers (line 386) | pub async fn check_cron_triggers(&self) { method sync_dispatched_runs (line 428) | pub async fn sync_dispatched_runs(&self) { method complete_dispatched_run (line 519) | async fn complete_dispatched_run(&self, run: &RoutineRun, status: RunS... method fire_manual (line 647) | pub async fn fire_manual( method spawn_fire (line 724) | fn spawn_fire(&self, routine: Routine, trigger_type: &str, trigger_det... method check_cooldown (line 764) | fn check_cooldown(&self, routine: &Routine) -> bool { method check_concurrent (line 776) | async fn check_concurrent(&self, routine: &Routine) -> bool { type FullJobWatcher (line 795) | struct FullJobWatcher { constant POLL_INTERVAL (line 803) | const POLL_INTERVAL: Duration = Duration::from_secs(5); constant MAX_POLLS (line 805) | const MAX_POLLS: u32 = (24 * 60 * 60) / Self::POLL_INTERVAL.as_secs() ... method new (line 807) | fn new(store: Arc, job_id: Uuid, routine_name: String) -... method wait_for_completion (line 816) | async fn wait_for_completion(&self) -> (RunStatus, Option) { method map_job_state (line 867) | fn map_job_state(state: &crate::context::JobState) -> RunStatus { type EngineContext (line 877) | struct EngineContext { function execute_routine (line 892) | async fn execute_routine(ctx: EngineContext, routine: Routine, run: Rout... function sanitize_routine_name (line 1031) | fn sanitize_routine_name(name: &str) -> String { type FullJobExecutionConfig (line 1051) | struct FullJobExecutionConfig<'a> { function execute_full_job (line 1057) | async fn execute_full_job( function execute_lightweight (line 1141) | async fn execute_lightweight( function build_lightweight_prompt (line 1223) | fn build_lightweight_prompt( function execute_lightweight_no_tools (line 1283) | async fn execute_lightweight_no_tools( function handle_text_response (line 1322) | fn handle_text_response( function execute_lightweight_with_tools (line 1360) | async fn execute_lightweight_with_tools( constant MAX_TOOL_LOOP_MESSAGES (line 1514) | const MAX_TOOL_LOOP_MESSAGES: usize = 32; function snapshot_messages_for_tool_iteration (line 1516) | fn snapshot_messages_for_tool_iteration(messages: &[ChatMessage]) -> Vec... function execute_routine_tool (line 1539) | async fn execute_routine_tool( function send_notification (line 1624) | async fn send_notification( function spawn_cron_ticker (line 1676) | pub fn spawn_cron_ticker( function truncate (line 1703) | fn truncate(s: &str, max: usize) -> String { function sanitize_summary (line 1720) | fn sanitize_summary(s: &str) -> String { function strip_html_tags (line 1748) | fn strip_html_tags(s: &str) -> String { function test_notification_gating (line 1768) | fn test_notification_gating() { function test_run_status_icons (line 1783) | fn test_run_status_icons() { function test_routine_config_lightweight_tools_enabled_default (line 1796) | fn test_routine_config_lightweight_tools_enabled_default() { function test_routine_config_lightweight_max_iterations_default (line 1805) | fn test_routine_config_lightweight_max_iterations_default() { function test_routine_config_can_hold_uncapped_max_iterations (line 1814) | fn test_routine_config_can_hold_uncapped_max_iterations() { function test_sanitize_routine_name_replaces_special_chars (line 1829) | fn test_sanitize_routine_name_replaces_special_chars() { function test_sanitize_routine_name_preserves_alphanumeric_dash_underscore (line 1849) | fn test_sanitize_routine_name_preserves_alphanumeric_dash_underscore() { function test_build_lightweight_prompt_explains_delivery_and_disabled_tools (line 1858) | fn test_build_lightweight_prompt_explains_delivery_and_disabled_tools() { function test_build_lightweight_prompt_skips_delivery_block_when_attention_notifications_disabled (line 1894) | fn test_build_lightweight_prompt_skips_delivery_block_when_attention_not... function test_routine_sentinel_detection_exact_match (line 1913) | fn test_routine_sentinel_detection_exact_match() { function test_approval_requirement_pattern_matching (line 1938) | fn test_approval_requirement_pattern_matching() { function test_routine_tool_denylist_blocks_self_management_tools (line 1963) | fn test_routine_tool_denylist_blocks_self_management_tools() { function test_routine_tool_denylist_allows_safe_tools (line 1981) | fn test_routine_tool_denylist_allows_safe_tools() { function test_empty_response_handling (line 1993) | fn test_empty_response_handling() { function test_truncate_adds_ellipsis_when_over_limit (line 2008) | fn test_truncate_adds_ellipsis_when_over_limit() { function test_snapshot_messages_keeps_system_and_recent_tail (line 2015) | fn test_snapshot_messages_keeps_system_and_recent_tail() { function test_snapshot_messages_unchanged_when_within_limit (line 2030) | fn test_snapshot_messages_unchanged_when_within_limit() { function test_running_status_does_not_notify (line 2044) | fn test_running_status_does_not_notify() { function test_full_job_dispatch_returns_running_status (line 2061) | fn test_full_job_dispatch_returns_running_status() { function test_sandbox_readiness_disabled_by_config_error (line 2066) | fn test_sandbox_readiness_disabled_by_config_error() { function test_sandbox_readiness_docker_unavailable_error (line 2083) | fn test_sandbox_readiness_docker_unavailable_error() { function test_full_job_watcher_state_mapping (line 2101) | fn test_full_job_watcher_state_mapping() { function test_job_state_to_run_status_mapping (line 2127) | fn test_job_state_to_run_status_mapping() { function test_sanitize_summary_strips_control_chars (line 2182) | fn test_sanitize_summary_strips_control_chars() { function test_sanitize_summary_strips_html (line 2202) | fn test_sanitize_summary_strips_html() { function test_sanitize_summary_multibyte_truncation (line 2217) | fn test_sanitize_summary_multibyte_truncation() { FILE: src/agent/scheduler.rs type WorkerMessage (line 29) | pub enum WorkerMessage { type ScheduledJob (line 42) | pub struct ScheduledJob { type ScheduledSubtask (line 48) | struct ScheduledSubtask { type SchedulerDeps (line 53) | pub struct SchedulerDeps { type Scheduler (line 61) | pub struct Scheduler { method new (line 82) | pub fn new( method set_sse_sender (line 106) | pub fn set_sse_sender(&mut self, tx: tokio::sync::broadcast::Sender Approval... method schedule (line 246) | pub async fn schedule(&self, job_id: Uuid) -> Result<(), JobError> { method schedule_with_context (line 251) | async fn schedule_with_context( method spawn_subtask (line 351) | pub async fn spawn_subtask( method spawn_batch (line 459) | pub async fn spawn_batch( method execute_tool_task (line 512) | async fn execute_tool_task( method stop (line 574) | pub async fn stop(&self, job_id: Uuid) -> Result<(), JobError> { method send_message (line 631) | pub async fn send_message(&self, job_id: Uuid, content: String) -> Res... method is_running (line 649) | pub async fn is_running(&self, job_id: Uuid) -> bool { method running_count (line 654) | pub async fn running_count(&self) -> usize { method subtask_count (line 659) | pub async fn subtask_count(&self) -> usize { method running_jobs (line 664) | pub async fn running_jobs(&self) -> Vec { method cleanup_finished (line 669) | pub async fn cleanup_finished(&self) { method stop_all (line 706) | pub async fn stop_all(&self) { method tools (line 721) | pub fn tools(&self) -> &Arc { method context_manager (line 726) | pub fn context_manager(&self) -> &Arc { type StubLlm (line 744) | struct StubLlm; method model_name (line 748) | fn model_name(&self) -> &str { method cost_per_token (line 751) | fn cost_per_token(&self) -> (rust_decimal::Decimal, rust_decimal::Decima... method complete (line 754) | async fn complete(&self, _req: CompletionRequest) -> Result Scheduler { function test_dispatch_job_caps_user_max_tokens (line 817) | async fn test_dispatch_job_caps_user_max_tokens() { function test_dispatch_job_unlimited_config_preserves_user_tokens (line 830) | async fn test_dispatch_job_unlimited_config_preserves_user_tokens() { function test_dispatch_job_no_user_tokens_uses_config (line 846) | async fn test_dispatch_job_no_user_tokens_uses_config() { function test_dispatch_job_atomic_metadata_and_tokens (line 861) | async fn test_dispatch_job_atomic_metadata_and_tokens() { function test_dispatch_job_no_metadata_no_user_tokens_edge_case (line 882) | async fn test_dispatch_job_no_metadata_no_user_tokens_edge_case() { function test_scheduler_creation (line 900) | fn test_scheduler_creation() { function test_spawn_batch_empty (line 905) | async fn test_spawn_batch_empty() { type SoftApprovalTool (line 911) | struct SoftApprovalTool; method name (line 915) | fn name(&self) -> &str { method description (line 918) | fn description(&self) -> &str { method parameters_schema (line 921) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 924) | async fn execute( method requires_approval (line 934) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 937) | fn requires_sanitization(&self) -> bool { type HardApprovalTool (line 943) | struct HardApprovalTool; method name (line 947) | fn name(&self) -> &str { method description (line 950) | fn description(&self) -> &str { method parameters_schema (line 953) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 956) | async fn execute( method requires_approval (line 966) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 969) | fn requires_sanitization(&self) -> bool { function setup_tools_and_job (line 974) | async fn setup_tools_and_job() -> ( function test_execute_tool_task_blocks_without_context (line 1000) | async fn test_execute_tool_task_blocks_without_context() { function test_execute_tool_task_autonomous_unblocks_soft (line 1037) | async fn test_execute_tool_task_autonomous_unblocks_soft() { function test_execute_tool_task_autonomous_with_permissions (line 1076) | async fn test_execute_tool_task_autonomous_with_permissions() { type NormalizedApprovalTool (line 1113) | struct NormalizedApprovalTool; method name (line 1117) | fn name(&self) -> &str { method description (line 1120) | fn description(&self) -> &str { method parameters_schema (line 1123) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1131) | async fn execute( method requires_approval (line 1141) | fn requires_approval(&self, params: &serde_json::Value) -> ApprovalRequi... method requires_sanitization (line 1148) | fn requires_sanitization(&self) -> bool { function test_execute_tool_task_normalizes_params_before_approval (line 1154) | async fn test_execute_tool_task_normalizes_params_before_approval() { FILE: src/agent/self_repair.rs type StuckJob (line 17) | pub struct StuckJob { type BrokenTool (line 27) | pub struct BrokenTool { type RepairResult (line 39) | pub enum RepairResult { type SelfRepair (line 52) | pub trait SelfRepair: Send + Sync { method detect_stuck_jobs (line 54) | async fn detect_stuck_jobs(&self) -> Vec; method repair_stuck_job (line 57) | async fn repair_stuck_job(&self, job: &StuckJob) -> Result Vec; method repair_broken_tool (line 63) | async fn repair_broken_tool(&self, tool: &BrokenTool) -> Result Vec { method repair_stuck_job (line 201) | async fn repair_stuck_job(&self, job: &StuckJob) -> Result Vec { method repair_broken_tool (line 266) | async fn repair_broken_tool(&self, tool: &BrokenTool) -> Result) -> Self { method with_builder (line 101) | pub fn with_builder( type RepairTask (line 373) | pub struct RepairTask { method new (line 380) | pub fn new(repair: Arc, check_interval: Duration) -> S... method run (line 388) | pub async fn run(&self) { function test_repair_result_variants (line 435) | fn test_repair_result_variants() { function detect_no_stuck_jobs_when_all_healthy (line 450) | async fn detect_no_stuck_jobs_when_all_healthy() { function detect_stuck_job_finds_stuck_state (line 462) | async fn detect_stuck_job_finds_stuck_state() { function repair_stuck_job_succeeds_within_limit (line 486) | async fn repair_stuck_job_succeeds_within_limit() { function repair_stuck_job_returns_manual_when_limit_exceeded (line 523) | async fn repair_stuck_job_returns_manual_when_limit_exceeded() { function detect_and_repair_in_progress_job_via_threshold (line 546) | async fn detect_and_repair_in_progress_job_via_threshold() { function detect_broken_tools_returns_empty_without_store (line 589) | async fn detect_broken_tools_returns_empty_without_store() { function repair_broken_tool_returns_manual_without_builder (line 599) | async fn repair_broken_tool_returns_manual_without_builder() { function detect_stuck_jobs_filters_by_threshold (line 622) | async fn detect_stuck_jobs_filters_by_threshold() { function detect_stuck_jobs_includes_when_over_threshold (line 649) | async fn detect_stuck_jobs_includes_when_over_threshold() { function stuck_duration_measured_from_stuck_transition_not_started_at (line 676) | async fn stuck_duration_measured_from_stuck_transition_not_started_at() { type MockBuilder (line 714) | struct MockBuilder { method new (line 719) | fn new() -> Self { method builds (line 725) | fn builds(&self) -> u32 { method analyze (line 732) | async fn analyze( method build (line 748) | async fn build( method repair (line 771) | async fn repair( function e2e_stuck_job_repair_and_tool_rebuild (line 784) | async fn e2e_stuck_job_repair_and_tool_rebuild() { FILE: src/agent/session.rs type Session (line 24) | pub struct Session { method new (line 46) | pub fn new(user_id: impl Into) -> Self { method is_tool_auto_approved (line 61) | pub fn is_tool_auto_approved(&self, tool_name: &str) -> bool { method auto_approve_tool (line 66) | pub fn auto_approve_tool(&mut self, tool_name: impl Into) { method create_thread (line 71) | pub fn create_thread(&mut self) -> &mut Thread { method active_thread (line 80) | pub fn active_thread(&self) -> Option<&Thread> { method active_thread_mut (line 85) | pub fn active_thread_mut(&mut self) -> Option<&mut Thread> { method get_or_create_thread (line 90) | pub fn get_or_create_thread(&mut self) -> &mut Thread { method switch_thread (line 110) | pub fn switch_thread(&mut self, thread_id: Uuid) -> bool { type ThreadState (line 123) | pub enum ThreadState { constant AUTH_MODE_TTL_SECS (line 141) | const AUTH_MODE_TTL_SECS: i64 = 300; constant AUTH_MODE_TTL (line 142) | const AUTH_MODE_TTL: TimeDelta = TimeDelta::seconds(AUTH_MODE_TTL_SECS); type PendingAuth (line 149) | pub struct PendingAuth { method is_expired (line 159) | pub fn is_expired(&self) -> bool { type PendingApproval (line 166) | pub struct PendingApproval { function default_true (line 198) | fn default_true() -> bool { type Thread (line 204) | pub struct Thread { method new (line 229) | pub fn new(session_id: Uuid) -> Self { method with_id (line 245) | pub fn with_id(id: Uuid, session_id: Uuid) -> Self { method turn_number (line 261) | pub fn turn_number(&self) -> usize { method last_turn (line 266) | pub fn last_turn(&self) -> Option<&Turn> { method last_turn_mut (line 271) | pub fn last_turn_mut(&mut self) -> Option<&mut Turn> { method start_turn (line 276) | pub fn start_turn(&mut self, user_input: impl Into) -> &mut Tu... method complete_turn (line 287) | pub fn complete_turn(&mut self, response: impl Into) { method fail_turn (line 296) | pub fn fail_turn(&mut self, error: impl Into) { method await_approval (line 305) | pub fn await_approval(&mut self, pending: PendingApproval) { method take_pending_approval (line 312) | pub fn take_pending_approval(&mut self) -> Option { method clear_pending_approval (line 317) | pub fn clear_pending_approval(&mut self) { method enter_auth_mode (line 325) | pub fn enter_auth_mode(&mut self, extension_name: String) { method take_pending_auth (line 334) | pub fn take_pending_auth(&mut self) -> Option { method interrupt (line 339) | pub fn interrupt(&mut self) { method resume (line 348) | pub fn resume(&mut self) { method messages (line 362) | pub fn messages(&self) -> Vec { method truncate_turns (line 417) | pub fn truncate_turns(&mut self, keep: usize) { method restore_from_messages (line 436) | pub fn restore_from_messages(&mut self, messages: Vec) { type TurnState (line 508) | pub enum TurnState { type Turn (line 521) | pub struct Turn { method new (line 547) | pub fn new(turn_number: usize, user_input: impl Into) -> Self { method complete (line 562) | pub fn complete(&mut self, response: impl Into) { method fail (line 571) | pub fn fail(&mut self, error: impl Into) { method interrupt (line 579) | pub fn interrupt(&mut self) { method record_tool_call (line 586) | pub fn record_tool_call(&mut self, name: impl Into, params: se... method record_tool_result (line 596) | pub fn record_tool_result(&mut self, result: serde_json::Value) { method record_tool_error (line 603) | pub fn record_tool_error(&mut self, error: impl Into) { type TurnToolCall (line 612) | pub struct TurnToolCall { function test_session_creation (line 628) | fn test_session_creation() { function test_thread_turns (line 637) | fn test_thread_turns() { function test_thread_messages (line 650) | fn test_thread_messages() { function test_turn_tool_calls (line 663) | fn test_turn_tool_calls() { function test_restore_from_messages (line 673) | fn test_restore_from_messages() { function test_restore_from_messages_incomplete_turn (line 699) | fn test_restore_from_messages_incomplete_turn() { function test_enter_auth_mode (line 717) | fn test_enter_auth_mode() { function test_take_pending_auth (line 731) | fn test_take_pending_auth() { function test_pending_auth_serialization (line 746) | fn test_pending_auth_serialization() { function test_pending_auth_expiry (line 763) | fn test_pending_auth_expiry() { function test_pending_auth_default_none (line 775) | fn test_pending_auth_default_none() { function test_thread_with_id (line 788) | fn test_thread_with_id() { function test_thread_with_id_restore_messages (line 800) | fn test_thread_with_id_restore_messages() { function test_restore_from_messages_empty (line 821) | fn test_restore_from_messages_empty() { function test_restore_from_messages_only_assistant_messages (line 837) | fn test_restore_from_messages_only_assistant_messages() { function test_restore_from_messages_multiple_user_messages_in_a_row (line 854) | fn test_restore_from_messages_multiple_user_messages_in_a_row() { function test_thread_switch (line 879) | fn test_thread_switch() { function test_get_or_create_thread_idempotent (line 900) | fn test_get_or_create_thread_idempotent() { function test_truncate_turns (line 912) | fn test_truncate_turns() { function test_truncate_turns_noop_when_fewer (line 936) | fn test_truncate_turns_noop_when_fewer() { function test_thread_interrupt_and_resume (line 948) | fn test_thread_interrupt_and_resume() { function test_resume_only_from_interrupted (line 966) | fn test_resume_only_from_interrupted() { function test_turn_fail (line 982) | fn test_turn_fail() { function test_messages_with_incomplete_last_turn (line 998) | fn test_messages_with_incomplete_last_turn() { function test_thread_serialization_round_trip (line 1014) | fn test_thread_serialization_round_trip() { function test_session_serialization_round_trip (line 1031) | fn test_session_serialization_round_trip() { function test_auto_approved_tools (line 1046) | fn test_auto_approved_tools() { function test_turn_tool_call_error (line 1059) | fn test_turn_tool_call_error() { function test_turn_number_increments (line 1070) | fn test_turn_number_increments() { function test_complete_turn_on_empty_thread (line 1085) | fn test_complete_turn_on_empty_thread() { function test_fail_turn_on_empty_thread (line 1095) | fn test_fail_turn_on_empty_thread() { function test_pending_approval_flow (line 1105) | fn test_pending_approval_flow() { function test_clear_pending_approval (line 1132) | fn test_clear_pending_approval() { function test_active_thread_accessors (line 1156) | fn test_active_thread_accessors() { function test_messages_includes_tool_calls (line 1178) | fn test_messages_includes_tool_calls() { function test_messages_multiple_tool_calls_per_turn (line 1210) | fn test_messages_multiple_tool_calls_per_turn() { function test_restore_from_messages_with_tool_calls (line 1237) | fn test_restore_from_messages_with_tool_calls() { function test_restore_from_messages_with_tool_error (line 1268) | fn test_restore_from_messages_with_tool_error() { function test_messages_round_trip_with_tools (line 1296) | fn test_messages_round_trip_with_tools() { function test_restore_multi_stage_tool_calls (line 1333) | fn test_restore_multi_stage_tool_calls() { function test_messages_truncates_large_tool_results (line 1374) | fn test_messages_truncates_large_tool_results() { FILE: src/agent/session_manager.rs constant SESSION_COUNT_WARNING_THRESHOLD (line 17) | const SESSION_COUNT_WARNING_THRESHOLD: usize = 1000; type ThreadKey (line 21) | struct ThreadKey { type SessionManager (line 28) | pub struct SessionManager { method new (line 37) | pub fn new() -> Self { method with_hooks (line 47) | pub fn with_hooks(mut self, hooks: Arc) -> Self { method get_or_create_session (line 53) | pub async fn get_or_create_session(&self, user_id: &str) -> Arc Arc Self { function test_get_or_create_session (line 357) | async fn test_get_or_create_session() { function test_resolve_thread (line 371) | async fn test_resolve_thread() { function test_undo_manager (line 387) | async fn test_undo_manager() { function test_prune_stale_sessions (line 398) | async fn test_prune_stale_sessions() { function test_prune_no_stale_sessions (line 424) | async fn test_prune_no_stale_sessions() { function test_register_thread (line 436) | async fn test_register_thread() { function test_resolve_thread_with_explicit_external_id (line 468) | async fn test_resolve_thread_with_explicit_external_id() { function test_resolve_thread_none_vs_some_external_id (line 489) | async fn test_resolve_thread_none_vs_some_external_id() { function test_resolve_thread_different_users_isolated (line 499) | async fn test_resolve_thread_different_users_isolated() { function test_resolve_thread_different_channels_isolated (line 514) | async fn test_resolve_thread_different_channels_isolated() { function test_resolve_thread_stale_mapping_creates_new_thread (line 529) | async fn test_resolve_thread_stale_mapping_creates_new_thread() { function test_register_thread_preserves_uuid_on_resolve (line 555) | async fn test_register_thread_preserves_uuid_on_resolve() { function test_register_thread_idempotent (line 588) | async fn test_register_thread_idempotent() { function test_register_thread_creates_undo_manager (line 617) | async fn test_register_thread_creates_undo_manager() { function test_register_thread_stores_session (line 641) | async fn test_register_thread_stores_session() { function test_multiple_threads_per_user (line 672) | async fn test_multiple_threads_per_user() { function test_prune_cleans_thread_map_and_undo_managers (line 698) | async fn test_prune_cleans_thread_map_and_undo_managers() { function test_resolve_thread_active_thread_set (line 736) | async fn test_resolve_thread_active_thread_set() { function test_register_then_resolve_different_channel_creates_new (line 749) | async fn test_register_then_resolve_different_channel_creates_new() { function test_register_then_resolve_same_uuid_on_second_channel_reuses_thread (line 776) | async fn test_register_then_resolve_same_uuid_on_second_channel_reuses_t... function concurrent_get_or_create_same_user_returns_same_session (line 805) | async fn concurrent_get_or_create_same_user_returns_same_session() { function concurrent_resolve_thread_distinct_users_no_cross_talk (line 827) | async fn concurrent_resolve_thread_distinct_users_no_cross_talk() { function concurrent_resolve_thread_same_user_different_channels (line 859) | async fn concurrent_resolve_thread_same_user_different_channels() { function concurrent_get_undo_manager_same_thread_returns_same_arc (line 890) | async fn concurrent_get_undo_manager_same_thread_returns_same_arc() { function test_resolve_thread_finds_existing_session_thread_by_uuid (line 913) | async fn test_resolve_thread_finds_existing_session_thread_by_uuid() { FILE: src/agent/submission.rs type SubmissionParser (line 10) | pub struct SubmissionParser; method parse (line 14) | pub fn parse(content: &str) -> Submission { type Submission (line 199) | pub enum Submission { method user_input (line 290) | pub fn user_input(content: impl Into) -> Self { method approval (line 298) | pub fn approval(request_id: Uuid, approved: bool) -> Self { method always_approve (line 308) | pub fn always_approve(request_id: Uuid) -> Self { method interrupt (line 318) | pub fn interrupt() -> Self { method compact (line 324) | pub fn compact() -> Self { method undo (line 330) | pub fn undo() -> Self { method redo (line 336) | pub fn redo() -> Self { method starts_turn (line 342) | pub fn starts_turn(&self) -> bool { method is_control (line 347) | pub fn is_control(&self) -> bool { type SubmissionResult (line 368) | pub enum SubmissionResult { method response (line 407) | pub fn response(content: impl Into) -> Self { method ok (line 415) | pub fn ok() -> Self { method ok_with_message (line 420) | pub fn ok_with_message(message: impl Into) -> Self { method error (line 427) | pub fn error(message: impl Into) -> Self { method pending (line 435) | pub fn pending(message: impl Into) -> Self { function test_submission_types (line 447) | fn test_submission_types() { function test_parser_user_input (line 458) | fn test_parser_user_input() { function test_parser_undo (line 466) | fn test_parser_undo() { function test_parser_redo (line 475) | fn test_parser_redo() { function test_parser_interrupt (line 481) | fn test_parser_interrupt() { function test_parser_compact (line 490) | fn test_parser_compact() { function test_parser_clear (line 496) | fn test_parser_clear() { function test_parser_new_thread (line 502) | fn test_parser_new_thread() { function test_parser_switch_thread (line 511) | fn test_parser_switch_thread() { function test_parser_resume (line 518) | fn test_parser_resume() { function test_parser_heartbeat (line 527) | fn test_parser_heartbeat() { function test_parser_summarize (line 533) | fn test_parser_summarize() { function test_parser_suggest (line 542) | fn test_parser_suggest() { function test_parser_invalid_commands_become_user_input (line 548) | fn test_parser_invalid_commands_become_user_input() { function test_parser_approval_response_aliases (line 559) | fn test_parser_approval_response_aliases() { function test_parser_json_exec_approval (line 610) | fn test_parser_json_exec_approval() { function test_parser_json_exec_approval_always (line 627) | fn test_parser_json_exec_approval_always() { function test_parser_json_exec_approval_deny (line 644) | fn test_parser_json_exec_approval_deny() { function test_parser_json_non_approval_stays_user_input (line 661) | fn test_parser_json_non_approval_stays_user_input() { function test_parser_json_roundtrip_matches_approval_handler (line 669) | fn test_parser_json_roundtrip_matches_approval_handler() { function test_parser_system_command_help (line 691) | fn test_parser_system_command_help() { function test_parser_system_command_model (line 709) | fn test_parser_system_command_model() { function test_parser_system_command_version (line 730) | fn test_parser_system_command_version() { function test_parser_system_command_tools (line 738) | fn test_parser_system_command_tools() { function test_parser_system_command_ping (line 746) | fn test_parser_system_command_ping() { function test_parser_system_command_debug (line 754) | fn test_parser_system_command_debug() { function test_parser_system_command_is_control (line 762) | fn test_parser_system_command_is_control() { function test_parser_system_command_skills (line 769) | fn test_parser_system_command_skills() { function test_parser_system_command_skills_search (line 783) | fn test_parser_system_command_skills_search() { function test_parser_job_status (line 799) | fn test_parser_job_status() { function test_parser_job_list (line 822) | fn test_parser_job_list() { function test_parser_job_cancel (line 832) | fn test_parser_job_cancel() { function test_job_commands_are_control (line 842) | fn test_job_commands_are_control() { function test_parser_quit (line 849) | fn test_parser_quit() { FILE: src/agent/task.rs type TaskOutput (line 18) | pub struct TaskOutput { method new (line 27) | pub fn new(result: serde_json::Value, duration: Duration) -> Self { method text (line 33) | pub fn text(text: impl Into, duration: Duration) -> Self { method empty (line 42) | pub fn empty(duration: Duration) -> Self { type TaskContext (line 52) | pub struct TaskContext { method new (line 63) | pub fn new(task_id: Uuid) -> Self { method with_parent (line 72) | pub fn with_parent(mut self, parent_id: Uuid) -> Self { method with_metadata (line 78) | pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self { type TaskHandler (line 86) | pub trait TaskHandler: Send + Sync { method run (line 88) | async fn run(&self, ctx: TaskContext) -> Result; method description (line 91) | fn description(&self) -> &str { type Task (line 98) | pub enum Task { method job (line 126) | pub fn job(title: impl Into, description: impl Into) -... method job_with_id (line 136) | pub fn job_with_id(id: Uuid, title: impl Into, description: im... method tool_exec (line 145) | pub fn tool_exec( method background (line 159) | pub fn background(handler: std::sync::Arc) -> Self { method background_with_id (line 168) | pub fn background_with_id(id: Uuid, handler: std::sync::Arc Option { method parent_id (line 183) | pub fn parent_id(&self) -> Option { method description (line 192) | pub fn description(&self) -> String { method fmt (line 202) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type TaskStatus (line 236) | pub enum TaskStatus { function test_task_output (line 254) | fn test_task_output() { function test_task_context (line 261) | fn test_task_context() { function test_task_job (line 268) | fn test_task_job() { function test_task_tool_exec (line 276) | fn test_task_tool_exec() { FILE: src/agent/thread_ops.rs constant FORGED_THREAD_ID_ERROR (line 26) | const FORGED_THREAD_ID_ERROR: &str = "Invalid or unauthorized thread ID."; function requires_preexisting_uuid_thread (line 28) | fn requires_preexisting_uuid_thread(channel: &str) -> bool { method maybe_hydrate_thread (line 44) | pub(super) async fn maybe_hydrate_thread( method process_user_input (line 175) | pub(super) async fn process_user_input( method ensure_writable_conversation (line 544) | async fn ensure_writable_conversation( method persist_user_message (line 580) | pub(super) async fn persist_user_message( method persist_assistant_response (line 612) | pub(super) async fn persist_assistant_response( method persist_tool_calls (line 644) | pub(super) async fn persist_tool_calls( method process_undo (line 712) | pub(super) async fn process_undo( method process_redo (line 750) | pub(super) async fn process_redo( method process_interrupt (line 782) | pub(super) async fn process_interrupt( method process_compact (line 802) | pub(super) async fn process_compact( method process_clear (line 841) | pub(super) async fn process_clear( method process_approval (line 862) | pub(super) async fn process_approval( method handle_auth_intercept (line 1495) | async fn handle_auth_intercept( method process_auth_token (line 1539) | pub(super) async fn process_auth_token( method process_new_thread (line 1652) | pub(super) async fn process_new_thread( method process_switch_thread (line 1669) | pub(super) async fn process_switch_thread( method process_resume (line 1690) | pub(super) async fn process_resume( function rebuild_chat_messages_from_db (line 1722) | fn rebuild_chat_messages_from_db( function test_rebuild_chat_messages_user_assistant_only (line 1799) | fn test_rebuild_chat_messages_user_assistant_only() { function test_rebuild_chat_messages_with_enriched_tool_calls (line 1811) | fn test_rebuild_chat_messages_with_enriched_tool_calls() { function test_rebuild_chat_messages_legacy_tool_calls_skipped (line 1864) | fn test_rebuild_chat_messages_legacy_tool_calls_skipped() { function test_rebuild_chat_messages_empty (line 1883) | fn test_rebuild_chat_messages_empty() { function test_rebuild_chat_messages_malformed_tool_calls_json (line 1889) | fn test_rebuild_chat_messages_malformed_tool_calls_json() { function test_rebuild_chat_messages_multi_turn_with_tools (line 1901) | fn test_rebuild_chat_messages_multi_turn_with_tools() { function make_db_msg (line 1934) | fn make_db_msg(role: &str, content: &str) -> crate::history::Conversatio... function test_awaiting_approval_rejection_includes_tool_context (line 1944) | async fn test_awaiting_approval_rejection_includes_tool_context() { function extract_approval_message (line 2016) | fn extract_approval_message( FILE: src/agent/undo.rs constant DEFAULT_MAX_CHECKPOINTS (line 14) | const DEFAULT_MAX_CHECKPOINTS: usize = 20; type Checkpoint (line 18) | pub struct Checkpoint { method new (line 31) | pub fn new( type UndoManager (line 50) | pub struct UndoManager { method new (line 61) | pub fn new() -> Self { method with_max_checkpoints (line 71) | pub fn with_max_checkpoints(mut self, max: usize) -> Self { method push_undo (line 77) | fn push_undo(&mut self, checkpoint: Checkpoint) { method checkpoint (line 87) | pub fn checkpoint( method undo (line 108) | pub fn undo( method pop_undo (line 131) | pub fn pop_undo(&mut self) -> Option { method redo (line 142) | pub fn redo( method can_undo (line 163) | pub fn can_undo(&self) -> bool { method can_redo (line 168) | pub fn can_redo(&self) -> bool { method undo_count (line 173) | pub fn undo_count(&self) -> usize { method redo_count (line 178) | pub fn redo_count(&self) -> usize { method get_checkpoint (line 184) | pub fn get_checkpoint(&self, id: Uuid) -> Option<&Checkpoint> { method list_checkpoints (line 193) | pub fn list_checkpoints(&self) -> Vec<&Checkpoint> { method clear (line 198) | pub fn clear(&mut self) { method restore (line 206) | pub fn restore(&mut self, checkpoint_id: Uuid) -> Option { method default (line 224) | fn default() -> Self { function test_checkpoint_creation (line 234) | fn test_checkpoint_creation() { function test_undo_redo (line 244) | fn test_undo_redo() { function test_max_checkpoints (line 267) | fn test_max_checkpoints() { function test_restore_to_checkpoint (line 278) | fn test_restore_to_checkpoint() { function test_repeated_undo_advances_through_stack (line 292) | fn test_repeated_undo_advances_through_stack() { function test_undo_redo_cycle_preserves_state (line 320) | fn test_undo_redo_cycle_preserves_state() { function test_undo_redo_stack_sizes_consistent (line 351) | fn test_undo_redo_stack_sizes_consistent() { FILE: src/app.rs type AppComponents (line 32) | pub struct AppComponents { type AppBuilderFlags (line 64) | pub struct AppBuilderFlags { type AppBuilder (line 69) | pub struct AppBuilder { method new (line 93) | pub fn new( method with_database (line 114) | pub fn with_database(&mut self, db: Arc) { method with_llm (line 119) | pub fn with_llm(&mut self, llm: Arc) { method init_database (line 127) | pub async fn init_database(&mut self) -> Result<(), anyhow::Error> { method init_secrets (line 185) | pub async fn init_secrets(&mut self) -> Result<(), anyhow::Error> { method init_llm (line 259) | pub async fn init_llm( method init_tools (line 275) | pub async fn init_tools( method init_extensions (line 391) | pub async fn init_extensions( method build_all (line 690) | pub async fn build_all(mut self) -> Result &str { method hook_points (line 872) | fn hook_points(&self) -> &[HookPoint] { method execute (line 876) | async fn execute( function agent_session_manager_runs_session_start_hooks (line 897) | async fn agent_session_manager_runs_session_start_hooks() { FILE: src/boot_screen.rs type BootInfo (line 8) | pub struct BootInfo { function print_boot_screen (line 35) | pub fn print_boot_screen(info: &BootInfo) { function test_print_boot_screen_full (line 163) | fn test_print_boot_screen_full() { function test_print_boot_screen_minimal (line 196) | fn test_print_boot_screen_minimal() { function test_print_boot_screen_no_features (line 225) | fn test_print_boot_screen_no_features() { FILE: src/bootstrap.rs constant IRONCLAW_BASE_DIR_ENV (line 12) | const IRONCLAW_BASE_DIR_ENV: &str = "IRONCLAW_BASE_DIR"; function compute_ironclaw_base_dir (line 22) | pub fn compute_ironclaw_base_dir() -> PathBuf { function default_base_dir (line 45) | fn default_base_dir() -> PathBuf { function ironclaw_base_dir (line 72) | pub fn ironclaw_base_dir() -> PathBuf { function ironclaw_env_path (line 77) | pub fn ironclaw_env_path() -> PathBuf { function load_ironclaw_env (line 97) | pub fn load_ironclaw_env() { function migrate_bootstrap_json_to_env (line 136) | fn migrate_bootstrap_json_to_env(env_path: &std::path::Path) { function save_bootstrap_env (line 186) | pub fn save_bootstrap_env(vars: &[(&str, &str)]) -> std::io::Result<()> { function save_bootstrap_env_to (line 194) | pub fn save_bootstrap_env_to(path: &std::path::Path, vars: &[(&str, &str... function upsert_bootstrap_vars (line 215) | pub fn upsert_bootstrap_vars(vars: &[(&str, &str)]) -> std::io::Result<(... function upsert_bootstrap_vars_to (line 220) | pub fn upsert_bootstrap_vars_to( function upsert_bootstrap_var (line 268) | pub fn upsert_bootstrap_var(key: &str, value: &str) -> std::io::Result<(... function upsert_bootstrap_var_to (line 273) | pub fn upsert_bootstrap_var_to( function restrict_file_permissions (line 318) | fn restrict_file_permissions(_path: &std::path::Path) -> std::io::Result... function save_database_url (line 332) | pub fn save_database_url(url: &str) -> std::io::Result<()> { function migrate_disk_to_db (line 343) | pub async fn migrate_disk_to_db( function rename_to_migrated (line 461) | fn rename_to_migrated(path: &std::path::Path) { type MigrationError (line 471) | pub enum MigrationError { function pid_lock_path (line 481) | pub fn pid_lock_path() -> PathBuf { type PidLock (line 493) | pub struct PidLock { method acquire (line 515) | pub fn acquire() -> Result { method acquire_at (line 520) | fn acquire_at(path: PathBuf) -> Result { type PidLockError (line 501) | pub enum PidLockError { method drop (line 562) | fn drop(&mut self) { function test_save_and_load_database_url (line 580) | fn test_save_and_load_database_url() { function test_save_database_url_with_hash_in_password (line 606) | fn test_save_database_url_with_hash_in_password() { function test_save_database_url_creates_parent_dirs (line 625) | fn test_save_database_url_creates_parent_dirs() { function test_save_bootstrap_env_escapes_quotes (line 643) | fn test_save_bootstrap_env_escapes_quotes() { function test_ironclaw_env_path (line 671) | fn test_ironclaw_env_path() { function test_migrate_bootstrap_json_to_env (line 677) | fn test_migrate_bootstrap_json_to_env() { function test_migrate_bootstrap_json_no_database_url (line 715) | fn test_migrate_bootstrap_json_no_database_url() { function test_migrate_bootstrap_json_missing (line 739) | fn test_migrate_bootstrap_json_missing() { function test_save_bootstrap_env_multiple_vars (line 751) | fn test_save_bootstrap_env_multiple_vars() { function test_save_bootstrap_env_overwrites_previous (line 789) | fn test_save_bootstrap_env_overwrites_previous() { function test_onboard_completed_round_trips_through_env (line 810) | fn test_onboard_completed_round_trips_through_env() { function test_libsql_autodetect_sets_backend_when_db_exists (line 838) | fn test_libsql_autodetect_sets_backend_when_db_exists() { function bootstrap_env_round_trips_llm_backend (line 876) | fn bootstrap_env_round_trips_llm_backend() { function test_libsql_autodetect_does_not_override_explicit_backend (line 909) | fn test_libsql_autodetect_does_not_override_explicit_backend() { function bootstrap_env_special_chars_in_url (line 937) | fn bootstrap_env_special_chars_in_url() { function upsert_bootstrap_var_preserves_existing (line 957) | fn upsert_bootstrap_var_preserves_existing() { function bootstrap_env_all_wizard_vars_round_trip (line 1001) | fn bootstrap_env_all_wizard_vars_round_trip() { function test_ironclaw_base_dir_default (line 1034) | fn test_ironclaw_base_dir_default() { function test_ironclaw_base_dir_env_override (line 1054) | fn test_ironclaw_base_dir_env_override() { function test_compute_base_dir_env_path_join (line 1076) | fn test_compute_base_dir_env_path_join() { function test_ironclaw_base_dir_empty_env (line 1099) | fn test_ironclaw_base_dir_empty_env() { function test_ironclaw_base_dir_special_chars (line 1121) | fn test_ironclaw_base_dir_special_chars() { function test_pid_lock_acquire_and_drop (line 1147) | fn test_pid_lock_acquire_and_drop() { function test_pid_lock_rejects_second_acquire (line 1165) | fn test_pid_lock_rejects_second_acquire() { function test_pid_lock_reclaims_after_drop (line 1184) | fn test_pid_lock_reclaims_after_drop() { function test_pid_lock_reclaims_stale_file_without_flock (line 1198) | fn test_pid_lock_reclaims_stale_file_without_flock() { function test_pid_lock_handles_corrupt_pid_file (line 1213) | fn test_pid_lock_handles_corrupt_pid_file() { function test_pid_lock_creates_parent_dirs (line 1226) | fn test_pid_lock_creates_parent_dirs() { function test_pid_lock_child_helper_holds_lock (line 1236) | fn test_pid_lock_child_helper_holds_lock() { function test_pid_lock_rejects_lock_held_by_other_process (line 1254) | fn test_pid_lock_rejects_lock_held_by_other_process() { function upsert_bootstrap_vars_preserves_unknown_keys (line 1303) | fn upsert_bootstrap_vars_preserves_unknown_keys() { function upsert_bootstrap_vars_creates_file_if_missing (line 1384) | fn upsert_bootstrap_vars_creates_file_if_missing() { FILE: src/channels/channel.rs type AttachmentKind (line 15) | pub enum AttachmentKind { method from_mime_type (line 26) | pub fn from_mime_type(mime: &str) -> Self { type IncomingAttachment (line 40) | pub struct IncomingAttachment { type IncomingMessage (line 65) | pub struct IncomingMessage { method new (line 104) | pub fn new( method with_thread (line 129) | pub fn with_thread(mut self, thread_id: impl Into) -> Self { method with_owner_id (line 137) | pub fn with_owner_id(mut self, owner_id: impl Into) -> Self { method with_sender_id (line 143) | pub fn with_sender_id(mut self, sender_id: impl Into) -> Self { method with_conversation_scope (line 149) | pub fn with_conversation_scope(mut self, scope_id: impl Into) ... method with_metadata (line 155) | pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self { method with_user_name (line 161) | pub fn with_user_name(mut self, name: impl Into) -> Self { method with_timezone (line 167) | pub fn with_timezone(mut self, tz: impl Into) -> Self { method with_attachments (line 173) | pub fn with_attachments(mut self, attachments: Vec... method into_internal (line 179) | pub(crate) fn into_internal(mut self) -> Self { method conversation_scope (line 185) | pub fn conversation_scope(&self) -> Option<&str> { method routing_target (line 192) | pub fn routing_target(&self) -> Option { function routing_target_from_metadata (line 204) | pub fn routing_target_from_metadata(metadata: &serde_json::Value) -> Opt... type MessageStream (line 229) | pub type MessageStream = Pin + Se... type OutgoingResponse (line 233) | pub struct OutgoingResponse { method text (line 246) | pub fn text(content: impl Into) -> Self { method in_thread (line 256) | pub fn in_thread(mut self, thread_id: impl Into) -> Self { method with_attachments (line 262) | pub fn with_attachments(mut self, paths: Vec) -> Self { type StatusUpdate (line 270) | pub enum StatusUpdate { method tool_completed (line 348) | pub fn tool_completed( type Channel (line 375) | pub trait Channel: Send + Sync { method name (line 377) | fn name(&self) -> &str; method start (line 383) | async fn start(&self) -> Result; method respond (line 389) | async fn respond( method send_status (line 401) | async fn send_status( method broadcast (line 415) | async fn broadcast( method health_check (line 424) | async fn health_check(&self) -> Result<(), ChannelError>; method conversation_context (line 432) | fn conversation_context(&self, _metadata: &serde_json::Value) -> HashM... method shutdown (line 437) | async fn shutdown(&self) -> Result<(), ChannelError> { type ChannelSecretUpdater (line 448) | pub trait ChannelSecretUpdater: Send + Sync { method update_secret (line 457) | async fn update_secret(&self, new_secret: Option); type SecretTool (line 466) | struct SecretTool; method name (line 470) | fn name(&self) -> &str { method description (line 473) | fn description(&self) -> &str { method parameters_schema (line 476) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 479) | async fn execute( method sensitive_params (line 486) | fn sensitive_params(&self) -> &[&str] { function tool_completed_redacts_sensitive_params_on_failure (line 492) | fn tool_completed_redacts_sensitive_params_on_failure() { function tool_completed_no_params_on_success (line 543) | fn tool_completed_no_params_on_success() { function tool_completed_no_tool_passes_params_unredacted (line 565) | fn tool_completed_no_tool_passes_params_unredacted() { function test_incoming_message_with_timezone (line 589) | fn test_incoming_message_with_timezone() { FILE: src/channels/http.rs type HmacSha256 (line 30) | type HmacSha256 = Hmac; type HttpChannel (line 33) | pub struct HttpChannel { method new (line 83) | pub fn new(config: HttpConfig) -> Self { method routes (line 110) | pub fn routes(&self) -> Router { method addr (line 119) | pub fn addr(&self) -> (&str, u16) { method shared_state (line 124) | pub fn shared_state(&self) -> Arc { method update_secret (line 129) | pub async fn update_secret(&self, new_secret: Option) { type HttpChannelState (line 38) | pub struct HttpChannelState { method update_secret (line 63) | pub async fn update_secret(&self, new_secret: Option) { type RateLimitState (line 55) | struct RateLimitState { constant MAX_BODY_BYTES (line 70) | const MAX_BODY_BYTES: usize = 15 * 1024 * 1024; constant MAX_PENDING_RESPONSES (line 73) | const MAX_PENDING_RESPONSES: usize = 100; constant MAX_REQUESTS_PER_MINUTE (line 76) | const MAX_REQUESTS_PER_MINUTE: u32 = 60; constant MAX_CONTENT_BYTES (line 79) | const MAX_CONTENT_BYTES: usize = 32 * 1024; type WebhookRequest (line 135) | struct WebhookRequest { type AttachmentData (line 157) | struct AttachmentData { constant MAX_ATTACHMENT_BYTES (line 172) | const MAX_ATTACHMENT_BYTES: usize = 5 * 1024 * 1024; constant MAX_TOTAL_ATTACHMENT_BYTES (line 174) | const MAX_TOTAL_ATTACHMENT_BYTES: usize = 10 * 1024 * 1024; constant MAX_ATTACHMENTS (line 176) | const MAX_ATTACHMENTS: usize = 5; type WebhookResponse (line 179) | struct WebhookResponse { type HealthResponse (line 189) | struct HealthResponse { function health_handler (line 194) | async fn health_handler() -> impl IntoResponse { function verify_hmac_signature (line 205) | fn verify_hmac_signature(secret: &str, body: &[u8], signature_header: &s... function webhook_handler (line 226) | async fn webhook_handler( function process_authenticated_request (line 403) | async fn process_authenticated_request( function process_message (line 565) | async fn process_message( method name (line 647) | fn name(&self) -> &str { method start (line 651) | async fn start(&self) -> Result { method respond (line 671) | async fn respond( method health_check (line 683) | async fn health_check(&self) -> Result<(), ChannelError> { method shutdown (line 693) | async fn shutdown(&self) -> Result<(), ChannelError> { method update_secret (line 703) | async fn update_secret(&self, new_secret: Option) { function test_channel (line 719) | fn test_channel(secret: Option<&str>) -> HttpChannel { function compute_signature (line 728) | fn compute_signature(secret: &str, body: &[u8]) -> String { function test_http_channel_requires_secret (line 737) | async fn test_http_channel_requires_secret() { function webhook_hmac_signature_returns_ok (line 744) | async fn webhook_hmac_signature_returns_ok() { function webhook_wrong_hmac_signature_returns_unauthorized (line 768) | async fn webhook_wrong_hmac_signature_returns_unauthorized() { function webhook_malformed_signature_returns_unauthorized (line 791) | async fn webhook_malformed_signature_returns_unauthorized() { function webhook_deprecated_body_secret_still_works (line 812) | async fn webhook_deprecated_body_secret_still_works() { function webhook_wrong_body_secret_returns_unauthorized (line 833) | async fn webhook_wrong_body_secret_returns_unauthorized() { function webhook_blank_user_id_falls_back_to_owner_scope (line 854) | async fn webhook_blank_user_id_falls_back_to_owner_scope() { function webhook_user_id_is_trimmed_before_becoming_sender_id (line 886) | async fn webhook_user_id_is_trimmed_before_becoming_sender_id() { function shutdown_completes_while_process_message_blocked (line 924) | async fn shutdown_completes_while_process_message_blocked() { function webhook_missing_all_auth_returns_unauthorized (line 979) | async fn webhook_missing_all_auth_returns_unauthorized() { function webhook_hmac_takes_precedence_over_body_secret (line 999) | async fn webhook_hmac_takes_precedence_over_body_secret() { function webhook_invalid_json_returns_bad_request (line 1025) | async fn webhook_invalid_json_returns_bad_request() { function webhook_rejects_non_json_content_type (line 1047) | async fn webhook_rejects_non_json_content_type() { function webhook_invalid_signature_header_encoding_returns_unauthorized (line 1072) | async fn webhook_invalid_signature_header_encoding_returns_unauthorized() { function test_update_secret_hot_swap (line 1097) | async fn test_update_secret_hot_swap() { function webhook_rejects_requests_after_secret_is_cleared (line 1163) | async fn webhook_rejects_requests_after_secret_is_cleared() { function test_concurrent_requests_during_secret_update (line 1189) | async fn test_concurrent_requests_during_secret_update() { function verify_hmac_signature_valid (line 1275) | fn verify_hmac_signature_valid() { function verify_hmac_signature_invalid_digest (line 1283) | fn verify_hmac_signature_invalid_digest() { function verify_hmac_signature_missing_prefix (line 1294) | fn verify_hmac_signature_missing_prefix() { function verify_hmac_signature_invalid_hex (line 1301) | fn verify_hmac_signature_invalid_hex() { function webhook_rejects_when_secret_cleared_at_runtime (line 1311) | async fn webhook_rejects_when_secret_cleared_at_runtime() { FILE: src/channels/manager.rs type ChannelManager (line 16) | pub struct ChannelManager { method new (line 25) | pub fn new() -> Self { method inject_sender (line 38) | pub fn inject_sender(&self) -> mpsc::Sender { method add (line 43) | pub async fn add(&self, channel: Box) { method hot_add (line 57) | pub async fn hot_add(&self, channel: Box) -> Result<(), C... method start_all (line 99) | pub async fn start_all(&self) -> Result { method respond (line 136) | pub async fn respond( method send_status (line 156) | pub async fn send_status( method broadcast (line 174) | pub async fn broadcast( method broadcast_all (line 194) | pub async fn broadcast_all( method health_check_all (line 211) | pub async fn health_check_all(&self) -> HashMap Result<(), ChannelError> { method channel_names (line 234) | pub async fn channel_names(&self) -> Vec { method get_channel (line 239) | pub async fn get_channel(&self, name: &str) -> Option> { method remove (line 244) | pub async fn remove(&self, name: &str) -> Option> { method default (line 250) | fn default() -> Self { function test_add_and_start_all (line 263) | async fn test_add_and_start_all() { function test_respond_routes_to_correct_channel (line 284) | async fn test_respond_routes_to_correct_channel() { function test_respond_unknown_channel_errors (line 305) | async fn test_respond_unknown_channel_errors() { function test_health_check_all (line 313) | async fn test_health_check_all() { function test_start_all_no_channels_errors (line 328) | async fn test_start_all_no_channels_errors() { function test_injection_channel_merges (line 335) | async fn test_injection_channel_merges() { function test_hot_add_replaces_existing_channel (line 358) | async fn test_hot_add_replaces_existing_channel() { FILE: src/channels/relay/channel.rs constant DEFAULT_RELAY_NAME (line 18) | pub const DEFAULT_RELAY_NAME: &str = "slack-relay"; type RelayProvider (line 22) | pub enum RelayProvider { method as_str (line 28) | pub fn as_str(&self) -> &'static str { method channel_name (line 35) | pub fn channel_name(&self) -> &'static str { type RelayChannel (line 43) | pub struct RelayChannel { method new (line 56) | pub fn new( method new_with_provider (line 74) | pub fn new_with_provider( method event_sender (line 93) | pub fn event_sender(&self) -> mpsc::Sender { method build_send_body (line 98) | fn build_send_body( method proxy_send (line 119) | async fn proxy_send( method name (line 133) | fn name(&self) -> &str { method start (line 137) | async fn start(&self) -> Result { method respond (line 220) | async fn respond( method send_status (line 257) | async fn send_status( method broadcast (line 371) | async fn broadcast( method health_check (line 396) | async fn health_check(&self) -> Result<(), ChannelError> { method conversation_context (line 406) | fn conversation_context(&self, metadata: &serde_json::Value) -> HashMap<... method shutdown (line 423) | async fn shutdown(&self) -> Result<(), ChannelError> { function test_client (line 434) | fn test_client() -> RelayClient { function make_channel (line 443) | fn make_channel() -> RelayChannel { function relay_channel_name (line 449) | fn relay_channel_name() { function conversation_context_extracts_metadata (line 455) | fn conversation_context_extracts_metadata() { function metadata_shape_includes_event_type_and_sender_name (line 470) | fn metadata_shape_includes_event_type_and_sender_name() { function build_send_body_slack (line 491) | fn build_send_body_slack() { function start_processes_events (line 501) | async fn start_processes_events() { function start_skips_non_message_events (line 536) | async fn start_skips_non_message_events() { function test_send_status_non_approval_is_noop (line 587) | async fn test_send_status_non_approval_is_noop() { function test_send_status_approval_non_dm_skips (line 602) | async fn test_send_status_approval_non_dm_skips() { function test_send_status_approval_dm_missing_channel_id_errors (line 626) | async fn test_send_status_approval_dm_missing_channel_id_errors() { function test_send_status_approval_dm_without_sender_id_is_ok (line 653) | async fn test_send_status_approval_dm_without_sender_id_is_ok() { FILE: src/channels/relay/client.rs constant MESSAGE (line 11) | pub const MESSAGE: &str = "message"; constant DIRECT_MESSAGE (line 12) | pub const DIRECT_MESSAGE: &str = "direct_message"; constant MENTION (line 13) | pub const MENTION: &str = "mention"; type ChannelEvent (line 20) | pub struct ChannelEvent { method team_id (line 57) | pub fn team_id(&self) -> &str { method text (line 62) | pub fn text(&self) -> &str { method display_name (line 67) | pub fn display_name(&self) -> &str { method is_message (line 72) | pub fn is_message(&self) -> bool { type Connection (line 82) | pub struct Connection { type RelayClient (line 91) | pub struct RelayClient { method new (line 99) | pub fn new( method initiate_oauth (line 124) | pub async fn initiate_oauth(&self, state_nonce: Option<&str>) -> Resul... method create_approval (line 174) | pub async fn create_approval( method proxy_provider (line 220) | pub async fn proxy_provider( method get_signing_secret (line 257) | pub async fn get_signing_secret(&self, team_id: &str) -> Result Result; function verify_relay_signature (line 9) | pub fn verify_relay_signature( function verify_signature (line 18) | fn verify_signature(secret: &[u8], timestamp: &str, body: &[u8], signatu... function make_signature (line 34) | fn make_signature(secret: &[u8], timestamp: &str, body: &[u8]) -> String { function verify_valid_signature (line 43) | fn verify_valid_signature() { function verify_wrong_secret_fails (line 52) | fn verify_wrong_secret_fails() { function verify_tampered_body_fails (line 60) | fn verify_tampered_body_fails() { FILE: src/channels/repl.rs constant CLI_TOOL_RESULT_MAX (line 46) | const CLI_TOOL_RESULT_MAX: usize = 200; constant CLI_STATUS_MAX (line 49) | const CLI_STATUS_MAX: usize = 200; constant SLASH_COMMANDS (line 52) | const SLASH_COMMANDS: &[&str] = &[ type ReplHelper (line 79) | struct ReplHelper; type Candidate (line 82) | type Candidate = String; method complete (line 84) | fn complete( type Hint (line 106) | type Hint = String; method hint (line 108) | fn hint(&self, line: &str, pos: usize, _ctx: &rustyline::Context<'_>) ->... method highlight_hint (line 121) | fn highlight_hint<'h>(&self, hint: &'h str) -> Cow<'h, str> { type EscInterruptHandler (line 129) | struct EscInterruptHandler { method handle (line 134) | fn handle( function make_skin (line 147) | fn make_skin() -> MadSkin { function format_json_params (line 162) | fn format_json_params(params: &serde_json::Value, indent: &str) -> String { type ReplChannel (line 202) | pub struct ReplChannel { method new (line 217) | pub fn new() -> Self { method with_user_id (line 222) | pub fn with_user_id(user_id: impl Into) -> Self { method with_message (line 233) | pub fn with_message(message: String) -> Self { method with_message_for_user (line 238) | pub fn with_message_for_user(user_id: impl Into, message: Stri... method suppress_banner (line 249) | pub fn suppress_banner(&self) { method is_debug (line 253) | fn is_debug(&self) -> bool { method default (line 259) | fn default() -> Self { function print_help (line 264) | fn print_help() { function history_path (line 296) | fn history_path() -> std::path::PathBuf { method name (line 302) | fn name(&self) -> &str { method start (line 306) | async fn start(&self) -> Result { method respond (line 454) | async fn respond( method send_status (line 484) | async fn send_status( method broadcast (line 637) | async fn broadcast( method health_check (line 654) | async fn health_check(&self) -> Result<(), ChannelError> { method shutdown (line 658) | async fn shutdown(&self) -> Result<(), ChannelError> { function single_message_mode_sends_message_then_quit (line 670) | async fn single_message_mode_sends_message_then_quit() { FILE: src/channels/signal.rs constant GROUP_TARGET_PREFIX (line 26) | const GROUP_TARGET_PREFIX: &str = "group:"; constant SIGNAL_HEALTH_ENDPOINT (line 27) | const SIGNAL_HEALTH_ENDPOINT: &str = "/api/v1/check"; constant MAX_SSE_BUFFER_SIZE (line 29) | const MAX_SSE_BUFFER_SIZE: usize = 1024 * 1024; constant MAX_SSE_EVENT_SIZE (line 30) | const MAX_SSE_EVENT_SIZE: usize = 256 * 1024; constant MAX_HTTP_RESPONSE_SIZE (line 31) | const MAX_HTTP_RESPONSE_SIZE: usize = 10 * 1024 * 1024; constant MAX_REPLY_TARGETS (line 32) | const MAX_REPLY_TARGETS: usize = 10000; constant MAX_ERROR_LOG_BODY (line 33) | const MAX_ERROR_LOG_BODY: usize = 1024; constant REPLY_TARGETS_CAP (line 35) | const REPLY_TARGETS_CAP: NonZeroUsize = NonZeroUsize::new(MAX_REPLY_TARG... type RecipientTarget (line 39) | enum RecipientTarget { type SseEnvelope (line 47) | struct SseEnvelope { type Envelope (line 53) | struct Envelope { type DataMessage (line 71) | struct DataMessage { type GroupInfo (line 83) | struct GroupInfo { type SignalChannel (line 89) | pub struct SignalChannel { method new (line 102) | pub fn new(config: SignalConfig) -> Result { method from_parts (line 122) | fn from_parts( method is_debug (line 136) | fn is_debug(&self) -> bool { method toggle_debug (line 140) | fn toggle_debug(&self) -> bool { method sender (line 148) | fn sender(envelope: &Envelope) -> Option { method normalize_allow_entry (line 160) | fn normalize_allow_entry(entry: &str) -> &str { method is_sender_allowed (line 165) | fn is_sender_allowed(&self, sender: &str) -> bool { method is_sender_allowed_with_pairing (line 176) | fn is_sender_allowed_with_pairing(&self, sender: &str) -> bool { method handle_pairing_request (line 190) | fn handle_pairing_request(&self, sender: &str, source_name: Option<&st... method send_pairing_reply_async (line 236) | async fn send_pairing_reply_async( method effective_group_allow_from (line 293) | fn effective_group_allow_from(&self) -> &[String] { method is_group_allowed (line 306) | fn is_group_allowed(&self, group_id: &str) -> bool { method is_group_sender_allowed (line 317) | fn is_group_sender_allowed(&self, sender: &str) -> bool { method redact_url (line 332) | pub fn redact_url(url: &str) -> String { method is_e164 (line 344) | fn is_e164(recipient: &str) -> bool { method is_uuid (line 353) | fn is_uuid(s: &str) -> bool { method thread_id_from_identifier (line 361) | fn thread_id_from_identifier(identifier: &str) -> String { method parse_recipient_target (line 368) | fn parse_recipient_target(recipient: &str) -> RecipientTarget { method reply_target (line 381) | fn reply_target(data_msg: &DataMessage, sender: &str) -> String { method rpc_request (line 394) | async fn rpc_request( method build_rpc_params (line 504) | fn build_rpc_params( method validate_attachment_paths (line 559) | fn validate_attachment_paths(paths: &[String]) -> Result<(), ChannelEr... method send_with_attachments (line 579) | async fn send_with_attachments( method build_rpc_params_static (line 603) | fn build_rpc_params_static( method process_envelope (line 655) | fn process_envelope(&self, envelope: &Envelope) -> Option<(IncomingMes... method send_status_message (line 1115) | async fn send_status_message(&self, target: &str, message: &str) { method name (line 838) | fn name(&self) -> &str { method start (line 842) | async fn start(&self) -> Result { method respond (line 866) | async fn respond( method send_status (line 898) | async fn send_status( method broadcast (line 1058) | async fn broadcast( method health_check (line 1070) | async fn health_check(&self) -> Result<(), ChannelError> { method conversation_context (line 1091) | fn conversation_context( function sse_listener (line 1125) | async fn sse_listener( function make_config (line 1378) | fn make_config() -> SignalConfig { function make_config_with_allowed_group (line 1393) | fn make_config_with_allowed_group(group_id: &str) -> SignalConfig { function make_channel (line 1407) | fn make_channel() -> Result { function make_channel_with_allowed_group (line 1411) | fn make_channel_with_allowed_group(group_id: &str) -> Result, message: Option<&str>) -> ... function creates_with_correct_fields (line 1433) | fn creates_with_correct_fields() -> Result<(), ChannelError> { function strips_trailing_slash (line 1445) | fn strips_trailing_slash() -> Result<(), ChannelError> { function debug_mode_disabled_by_default (line 1454) | fn debug_mode_disabled_by_default() -> Result<(), ChannelError> { function debug_mode_toggle (line 1461) | fn debug_mode_toggle() -> Result<(), ChannelError> { function debug_mode_persists_across_toggles (line 1481) | fn debug_mode_persists_across_toggles() -> Result<(), ChannelError> { function wildcard_allows_anyone (line 1498) | fn wildcard_allows_anyone() -> Result<(), ChannelError> { function specific_sender_allowed (line 1507) | fn specific_sender_allowed() -> Result<(), ChannelError> { function unknown_sender_denied (line 1514) | fn unknown_sender_denied() -> Result<(), ChannelError> { function empty_allowlist_denies_all (line 1521) | fn empty_allowlist_denies_all() -> Result<(), ChannelError> { function uuid_prefix_in_allowlist (line 1530) | fn uuid_prefix_in_allowlist() -> Result<(), ChannelError> { function bare_uuid_in_allowlist (line 1542) | fn bare_uuid_in_allowlist() -> Result<(), ChannelError> { function group_allowlist_filtering (line 1552) | fn group_allowlist_filtering() -> Result<(), ChannelError> { function group_allowlist_wildcard (line 1563) | fn group_allowlist_wildcard() -> Result<(), ChannelError> { function group_allowlist_empty_denies_all (line 1572) | fn group_allowlist_empty_denies_all() -> Result<(), ChannelError> { function name_returns_signal (line 1581) | fn name_returns_signal() -> Result<(), ChannelError> { function process_envelope_dm_accepted_with_empty_allow_from_groups (line 1588) | fn process_envelope_dm_accepted_with_empty_allow_from_groups() -> Result... function process_envelope_group_denied_with_empty_allow_from_groups (line 1597) | fn process_envelope_group_denied_with_empty_allow_from_groups() -> Resul... function process_envelope_group_accepted_when_in_allow_from_groups (line 1624) | fn process_envelope_group_accepted_when_in_allow_from_groups() -> Result... function reply_target_dm (line 1667) | fn reply_target_dm() { function reply_target_group (line 1681) | fn reply_target_group() { function parse_recipient_target_e164_is_direct (line 1697) | fn parse_recipient_target_e164_is_direct() { function parse_recipient_target_prefixed_group_is_group (line 1705) | fn parse_recipient_target_prefixed_group_is_group() { function parse_recipient_target_uuid_is_direct (line 1713) | fn parse_recipient_target_uuid_is_direct() { function parse_recipient_target_non_e164_plus_is_group (line 1722) | fn parse_recipient_target_non_e164_plus_is_group() { function is_uuid_valid (line 1730) | fn is_uuid_valid() { function is_uuid_invalid (line 1740) | fn is_uuid_invalid() { function thread_id_from_identifier_is_deterministic (line 1748) | fn thread_id_from_identifier_is_deterministic() { function thread_id_from_identifier_is_valid_uuid (line 1755) | fn thread_id_from_identifier_is_valid_uuid() { function thread_id_from_identifier_different_inputs (line 1761) | fn thread_id_from_identifier_different_inputs() { function sender_prefers_source_number (line 1768) | fn sender_prefers_source_number() { function sender_falls_back_to_source (line 1782) | fn sender_falls_back_to_source() { function sender_none_when_both_missing (line 1799) | fn sender_none_when_both_missing() { function process_envelope_valid_dm (line 1813) | fn process_envelope_valid_dm() -> Result<(), ChannelError> { function process_envelope_denied_sender (line 1825) | fn process_envelope_denied_sender() -> Result<(), ChannelError> { function process_envelope_empty_message (line 1833) | fn process_envelope_empty_message() -> Result<(), ChannelError> { function process_envelope_no_data_message (line 1841) | fn process_envelope_no_data_message() -> Result<(), ChannelError> { function process_envelope_skips_stories (line 1849) | fn process_envelope_skips_stories() -> Result<(), ChannelError> { function process_envelope_skips_attachment_only (line 1861) | fn process_envelope_skips_attachment_only() -> Result<(), ChannelError> { function process_envelope_uuid_sender_dm (line 1885) | fn process_envelope_uuid_sender_dm() -> Result<(), ChannelError> { function process_envelope_uuid_sender_in_group (line 1918) | fn process_envelope_uuid_sender_in_group() -> Result<(), ChannelError> { function process_envelope_group_not_in_allow_from_groups (line 1955) | fn process_envelope_group_not_in_allow_from_groups() -> Result<(), Chann... function sse_envelope_deserializes (line 1982) | fn sse_envelope_deserializes() { function sse_envelope_deserializes_group (line 2004) | fn sse_envelope_deserializes_group() { function envelope_defaults (line 2026) | fn envelope_defaults() { function normalize_allow_entry_strips_uuid_prefix (line 2038) | fn normalize_allow_entry_strips_uuid_prefix() { function build_rpc_params_direct_with_message (line 2053) | fn build_rpc_params_direct_with_message() -> Result<(), ChannelError> { function build_rpc_params_direct_without_message (line 2066) | fn build_rpc_params_direct_without_message() -> Result<(), ChannelError> { function build_rpc_params_group_with_message (line 2078) | fn build_rpc_params_group_with_message() -> Result<(), ChannelError> { function build_rpc_params_group_without_message (line 2091) | fn build_rpc_params_group_without_message() -> Result<(), ChannelError> { function build_rpc_params_uuid_direct_target (line 2102) | fn build_rpc_params_uuid_direct_target() -> Result<(), ChannelError> { function build_rpc_params_with_attachments (line 2114) | fn build_rpc_params_with_attachments() -> Result<(), ChannelError> { function build_rpc_params_with_multiple_attachments (line 2129) | fn build_rpc_params_with_multiple_attachments() -> Result<(), ChannelErr... function build_rpc_params_with_attachments_no_message (line 2145) | fn build_rpc_params_with_attachments_no_message() -> Result<(), ChannelE... function build_rpc_params_group_with_attachments (line 2159) | fn build_rpc_params_group_with_attachments() -> Result<(), ChannelError> { function outgoing_response_with_attachments (line 2176) | fn outgoing_response_with_attachments() { function outgoing_response_text_empty_attachments (line 2188) | fn outgoing_response_text_empty_attachments() { function process_envelope_metadata_has_signal_fields (line 2197) | fn process_envelope_metadata_has_signal_fields() -> Result<(), ChannelEr... function process_envelope_metadata_group_target (line 2208) | fn process_envelope_metadata_group_target() -> Result<(), ChannelError> { function process_envelope_attachment_with_text_not_skipped (line 2240) | fn process_envelope_attachment_with_text_not_skipped() -> Result<(), Cha... function process_envelope_attachment_only_not_skipped_when_ignore_disabled (line 2273) | fn process_envelope_attachment_only_not_skipped_when_ignore_disabled() function process_envelope_source_name_sets_user_name (line 2311) | fn process_envelope_source_name_sets_user_name() -> Result<(), ChannelEr... function process_envelope_empty_source_name_not_set (line 2336) | fn process_envelope_empty_source_name_not_set() -> Result<(), ChannelErr... function process_envelope_no_source_name_not_set (line 2364) | fn process_envelope_no_source_name_not_set() -> Result<(), ChannelError> { function process_envelope_dm_sets_thread_id_to_uuid (line 2375) | fn process_envelope_dm_sets_thread_id_to_uuid() -> Result<(), ChannelErr... function process_envelope_group_sets_thread_id_to_uuid (line 2390) | fn process_envelope_group_sets_thread_id_to_uuid() -> Result<(), Channel... function process_envelope_uses_data_message_timestamp (line 2427) | fn process_envelope_uses_data_message_timestamp() -> Result<(), ChannelE... function process_envelope_falls_back_to_envelope_timestamp (line 2453) | fn process_envelope_falls_back_to_envelope_timestamp() -> Result<(), Cha... function process_envelope_generates_timestamp_when_missing (line 2478) | fn process_envelope_generates_timestamp_when_missing() -> Result<(), Cha... function sse_envelope_missing_envelope_field (line 2507) | fn sse_envelope_missing_envelope_field() { function sse_envelope_with_story_message (line 2514) | fn sse_envelope_with_story_message() { function sse_envelope_with_attachments (line 2531) | fn sse_envelope_with_attachments() { function is_e164_valid_numbers (line 2553) | fn is_e164_valid_numbers() { function is_e164_invalid_numbers (line 2560) | fn is_e164_invalid_numbers() { function multiple_allow_from (line 2572) | fn multiple_allow_from() -> Result<(), ChannelError> { function multiple_allow_from_groups (line 2588) | fn multiple_allow_from_groups() -> Result<(), ChannelError> { function uuid_prefix_normalization_in_allowlist (line 2599) | fn uuid_prefix_normalization_in_allowlist() -> Result<(), ChannelError> { function process_envelope_stories_not_skipped_when_disabled (line 2616) | fn process_envelope_stories_not_skipped_when_disabled() -> Result<(), Ch... function strips_multiple_trailing_slashes (line 2649) | fn strips_multiple_trailing_slashes() -> Result<(), ChannelError> { function preserves_url_without_trailing_slash (line 2658) | fn preserves_url_without_trailing_slash() -> Result<(), ChannelError> { function validate_attachment_paths_rejects_double_dot (line 2668) | fn validate_attachment_paths_rejects_double_dot() { function validate_attachment_paths_accepts_normal_paths (line 2677) | fn validate_attachment_paths_accepts_normal_paths() { function validate_attachment_paths_rejects_nested_traversal (line 2701) | fn validate_attachment_paths_rejects_nested_traversal() { function validate_attachment_paths_empty_ok (line 2708) | fn validate_attachment_paths_empty_ok() { function validate_attachment_paths_rejects_path_outside_sandbox (line 2715) | fn validate_attachment_paths_rejects_path_outside_sandbox() { function validate_attachment_paths_rejects_url_encoded_traversal (line 2724) | fn validate_attachment_paths_rejects_url_encoded_traversal() { function validate_attachment_paths_rejects_null_byte (line 2731) | fn validate_attachment_paths_rejects_null_byte() { function conversation_context_extracts_sender (line 2740) | fn conversation_context_extracts_sender() { function conversation_context_extracts_group (line 2754) | fn conversation_context_extracts_group() { function conversation_context_empty_for_unknown_channel (line 2766) | fn conversation_context_empty_for_unknown_channel() { FILE: src/channels/wasm/bundled.rs constant CARGO_MANIFEST_DIR (line 17) | const CARGO_MANIFEST_DIR: &str = env!("CARGO_MANIFEST_DIR"); constant KNOWN_CHANNELS (line 20) | const KNOWN_CHANNELS: &[(&str, &str)] = &[ function bundled_channel_names (line 29) | pub fn bundled_channel_names() -> Vec<&'static str> { function channels_src_dir (line 38) | fn channels_src_dir() -> PathBuf { function locate_channel_artifacts (line 52) | fn locate_channel_artifacts(name: &str) -> Result<(PathBuf, PathBuf), St... function install_bundled_channel (line 96) | pub async fn install_bundled_channel( function available_channel_names (line 130) | pub fn available_channel_names() -> Vec<&'static str> { function test_known_channels_includes_all_four (line 146) | fn test_known_channels_includes_all_four() { function test_channels_src_dir_default (line 155) | fn test_channels_src_dir_default() { function test_locate_unknown_channel_errors (line 161) | fn test_locate_unknown_channel_errors() { function test_install_refuses_overwrite_without_force (line 166) | async fn test_install_refuses_overwrite_without_force() { FILE: src/channels/wasm/capabilities.rs constant MIN_POLL_INTERVAL_MS (line 14) | pub const MIN_POLL_INTERVAL_MS: u32 = 30_000; constant DEFAULT_EMIT_RATE_PER_MINUTE (line 17) | pub const DEFAULT_EMIT_RATE_PER_MINUTE: u32 = 100; constant DEFAULT_EMIT_RATE_PER_HOUR (line 18) | pub const DEFAULT_EMIT_RATE_PER_HOUR: u32 = 5000; type ChannelCapabilities (line 24) | pub struct ChannelCapabilities { method for_channel (line 71) | pub fn for_channel(name: &str) -> Self { method with_path (line 79) | pub fn with_path(mut self, path: impl Into) -> Self { method with_polling (line 85) | pub fn with_polling(mut self, min_interval_ms: u32) -> Self { method with_emit_rate_limit (line 92) | pub fn with_emit_rate_limit(mut self, rate_limit: EmitRateLimitConfig)... method with_callback_timeout (line 98) | pub fn with_callback_timeout(mut self, timeout: Duration) -> Self { method with_tool_capabilities (line 104) | pub fn with_tool_capabilities(mut self, capabilities: ToolCapabilities... method is_path_allowed (line 110) | pub fn is_path_allowed(&self, path: &str) -> bool { method validate_poll_interval (line 117) | pub fn validate_poll_interval(&self, interval_ms: u32) -> Result String { method validate_workspace_path (line 139) | pub fn validate_workspace_path(&self, path: &str) -> Result Self { type HttpEndpointConfig (line 162) | pub struct HttpEndpointConfig { method post_webhook (line 175) | pub fn post_webhook(path: impl Into) -> Self { type PollConfig (line 186) | pub struct PollConfig { method default (line 195) | fn default() -> Self { type EmitRateLimitConfig (line 205) | pub struct EmitRateLimitConfig { method from (line 223) | fn from(config: RateLimitConfig) -> Self { method default (line 214) | fn default() -> Self { function test_default_capabilities (line 238) | fn test_default_capabilities() { function test_for_channel (line 246) | fn test_for_channel() { function test_path_allowed (line 252) | fn test_path_allowed() { function test_poll_interval_validation (line 263) | fn test_poll_interval_validation() { function test_workspace_path_validation (line 278) | fn test_workspace_path_validation() { function test_http_endpoint_config (line 303) | fn test_http_endpoint_config() { function test_emit_rate_limit_default (line 311) | fn test_emit_rate_limit_default() { FILE: src/channels/wasm/error.rs type WasmChannelError (line 7) | pub enum WasmChannelError { method from (line 89) | fn from(err: crate::tools::wasm::WasmError) -> Self { FILE: src/channels/wasm/host.rs constant MAX_EMITS_PER_EXECUTION (line 16) | const MAX_EMITS_PER_EXECUTION: usize = 100; constant MAX_MESSAGE_CONTENT_SIZE (line 19) | const MAX_MESSAGE_CONTENT_SIZE: usize = 64 * 1024; type Attachment (line 23) | pub struct Attachment { constant MAX_ATTACHMENT_TOTAL_SIZE (line 45) | const MAX_ATTACHMENT_TOTAL_SIZE: u64 = 20 * 1024 * 1024; constant MAX_ATTACHMENTS_PER_MESSAGE (line 48) | const MAX_ATTACHMENTS_PER_MESSAGE: usize = 10; constant ALLOWED_MIME_PREFIXES (line 51) | const ALLOWED_MIME_PREFIXES: &[&str] = &[ function truncate_utf8 (line 67) | fn truncate_utf8(s: &str, max_bytes: usize) -> &str { type EmittedMessage (line 73) | pub struct EmittedMessage { method new (line 98) | pub fn new(user_id: impl Into, content: impl Into) -> ... method with_user_name (line 114) | pub fn with_user_name(mut self, name: impl Into) -> Self { method with_thread_id (line 120) | pub fn with_thread_id(mut self, thread_id: impl Into) -> Self { method with_metadata (line 126) | pub fn with_metadata(mut self, metadata_json: impl Into) -> Se... method with_attachments (line 132) | pub fn with_attachments(mut self, attachments: Vec) -> Self { type PendingWorkspaceWrite (line 140) | pub struct PendingWorkspaceWrite { type ChannelHostState (line 152) | pub struct ChannelHostState { method fmt (line 186) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method new (line 200) | pub fn new(channel_name: impl Into, capabilities: ChannelCapab... method channel_name (line 218) | pub fn channel_name(&self) -> &str { method capabilities (line 223) | pub fn capabilities(&self) -> &ChannelCapabilities { method base (line 228) | pub fn base(&self) -> &HostState { method base_mut (line 233) | pub fn base_mut(&mut self) -> &mut HostState { method emit_message (line 242) | pub fn emit_message(&mut self, msg: EmittedMessage) -> Result<(), Wasm... method validate_attachments (line 290) | fn validate_attachments(&self, mut msg: EmittedMessage) -> EmittedMess... method take_emitted_messages (line 352) | pub fn take_emitted_messages(&mut self) -> Vec { method emitted_count (line 357) | pub fn emitted_count(&self) -> usize { method emits_dropped (line 362) | pub fn emits_dropped(&self) -> usize { method store_attachment_data (line 370) | pub fn store_attachment_data( method remove_attachment_data (line 413) | pub fn remove_attachment_data(&mut self, id: &str) -> Option> { method take_attachment_data (line 424) | pub fn take_attachment_data(&mut self) -> HashMap> { method workspace_write (line 432) | pub fn workspace_write(&mut self, path: &str, content: String) -> Resu... method take_pending_writes (line 451) | pub fn take_pending_writes(&mut self) -> Vec { method pending_writes_count (line 456) | pub fn pending_writes_count(&self) -> usize { method log (line 461) | pub fn log( method now_millis (line 470) | pub fn now_millis(&self) -> u64 { method workspace_read (line 475) | pub fn workspace_read( method secret_exists (line 485) | pub fn secret_exists(&self, name: &str) -> bool { method check_http_allowed (line 490) | pub fn check_http_allowed(&self, url: &str, method: &str) -> Result<()... method record_http_request (line 495) | pub fn record_http_request(&mut self) -> Result<(), String> { method take_logs (line 500) | pub fn take_logs(&mut self) -> Vec { type ChannelWorkspaceStore (line 514) | pub struct ChannelWorkspaceStore { method new (line 520) | pub fn new() -> Self { method commit_writes (line 527) | pub fn commit_writes(&self, writes: &[PendingWorkspaceWrite]) { method read (line 545) | fn read(&self, path: &str) -> Option { type ChannelEmitRateLimiter (line 553) | pub struct ChannelEmitRateLimiter { method new (line 593) | pub fn new(config: EmitRateLimitConfig) -> Self { method check_and_record (line 604) | pub fn check_and_record(&mut self) -> bool { method minute_count (line 622) | pub fn minute_count(&self) -> u32 { method hour_count (line 627) | pub fn hour_count(&self) -> u32 { type RateWindow (line 559) | struct RateWindow { method new (line 566) | fn new(duration_ms: u64) -> Self { method check_and_record (line 574) | fn check_and_record(&mut self, now_ms: u64, limit: u32) -> bool { function test_emit_message_basic (line 642) | fn test_emit_message_basic() { function test_emit_message_with_metadata (line 661) | fn test_emit_message_with_metadata() { function test_emit_per_execution_limit (line 679) | fn test_emit_per_execution_limit() { function test_emit_message_truncates_utf8_safely (line 698) | fn test_emit_message_truncates_utf8_safely() { function test_workspace_write_prefixing (line 717) | fn test_workspace_write_prefixing() { function test_workspace_write_path_traversal_blocked (line 731) | fn test_workspace_write_path_traversal_blocked() { function test_rate_limiter_basic (line 745) | fn test_rate_limiter_basic() { function test_channel_name (line 762) | fn test_channel_name() { function test_channel_workspace_store_commit_and_read (line 770) | fn test_channel_workspace_store_commit_and_read() { function test_workspace_write_then_read_round_trip (line 824) | fn test_workspace_write_then_read_round_trip() { function test_workspace_overwrite_across_callbacks (line 870) | fn test_workspace_overwrite_across_callbacks() { function test_emit_and_take_preserves_order_and_content (line 905) | fn test_emit_and_take_preserves_order_and_content() { function test_channels_have_isolated_namespaces (line 939) | fn test_channels_have_isolated_namespaces() { function make_attachment (line 989) | fn make_attachment(id: &str, mime: &str, size: Option) -> Attachment { function test_emit_message_with_attachments (line 1004) | fn test_emit_message_with_attachments() { function test_emit_message_no_attachments_backward_compat (line 1022) | fn test_emit_message_no_attachments_backward_compat() { function test_attachment_count_limit (line 1035) | fn test_attachment_count_limit() { function test_attachment_total_size_limit (line 1051) | fn test_attachment_total_size_limit() { function test_attachment_mime_type_filtering (line 1073) | fn test_attachment_mime_type_filtering() { function test_attachment_unknown_size_allowed (line 1100) | fn test_attachment_unknown_size_allowed() { FILE: src/channels/wasm/loader.rs type WasmChannelLoader (line 25) | pub struct WasmChannelLoader { method new (line 35) | pub fn new( method with_secrets_store (line 51) | pub fn with_secrets_store(mut self, store: Arc Result &str { method webhook_secret_header (line 293) | pub fn webhook_secret_header(&self) -> Option<&str> { method signature_key_secret_name (line 300) | pub fn signature_key_secret_name(&self) -> Option { method hmac_secret_name (line 307) | pub fn hmac_secret_name(&self) -> Option { method webhook_secret_name (line 314) | pub fn webhook_secret_name(&self) -> String { type LoadResults (line 324) | pub struct LoadResults { method all_succeeded (line 334) | pub fn all_succeeded(&self) -> bool { method success_count (line 339) | pub fn success_count(&self) -> usize { method error_count (line 344) | pub fn error_count(&self) -> usize { method take_channels (line 349) | pub fn take_channels(self) -> Vec { function discover_channels (line 358) | pub async fn discover_channels( type DiscoveredChannel (line 401) | pub struct DiscoveredChannel { function default_channels_dir (line 413) | pub fn default_channels_dir() -> PathBuf { function test_discover_channels_empty_dir (line 429) | async fn test_discover_channels_empty_dir() { function test_discover_channels_with_wasm (line 436) | async fn test_discover_channels_with_wasm() { function test_discover_channels_with_capabilities (line 450) | async fn test_discover_channels_with_capabilities() { function test_discover_channels_ignores_non_wasm (line 465) | async fn test_discover_channels_ignores_non_wasm() { function test_loaded_channel_signature_key_none_without_caps (line 479) | fn test_loaded_channel_signature_key_none_without_caps() { function test_loader_invalid_name (line 491) | async fn test_loader_invalid_name() { function load_from_dir_returns_empty_when_dir_missing (line 510) | async fn load_from_dir_returns_empty_when_dir_missing() { FILE: src/channels/wasm/router.rs type RegisteredEndpoint (line 24) | pub struct RegisteredEndpoint { type WasmChannelRouter (line 36) | pub struct WasmChannelRouter { method new (line 53) | pub fn new() -> Self { method register (line 72) | pub async fn register( method get_secret_header (line 110) | pub async fn get_secret_header(&self, channel_name: &str) -> String { method update_secret (line 123) | pub async fn update_secret(&self, channel_name: &str, secret: String) { method unregister (line 135) | pub async fn unregister(&self, channel_name: &str) { method get_channel_for_path (line 155) | pub async fn get_channel_for_path(&self, path: &str) -> Option bool { method list_channels (line 177) | pub async fn list_channels(&self) -> Vec { method list_paths (line 182) | pub async fn list_paths(&self) -> Vec { method register_signature_key (line 191) | pub async fn register_signature_key( method get_signature_key (line 212) | pub async fn get_signature_key(&self, channel_name: &str) -> Option Option Self { type RouterState (line 244) | pub struct RouterState { method new (line 250) | pub fn new(router: Arc) -> Self { method with_extension_manager (line 257) | pub fn with_extension_manager( type WasmWebhookRequest (line 269) | pub struct WasmWebhookRequest { type HealthResponse (line 278) | struct HealthResponse { function health_handler (line 285) | async fn health_handler(State(state): State) -> impl IntoRe... function webhook_handler (line 294) | async fn webhook_handler( function oauth_callback_handler (line 577) | async fn oauth_callback_handler( function create_wasm_channel_router (line 626) | pub fn create_wasm_channel_router( function create_test_channel (line 657) | fn create_test_channel(name: &str) -> Arc { function test_router_register_and_lookup (line 683) | async fn test_router_register_and_lookup() { function test_router_secret_validation (line 709) | async fn test_router_secret_validation() { function test_router_unregister (line 730) | async fn test_router_unregister() { function test_router_list_channels (line 764) | async fn test_router_list_channels() { function test_router_secret_header (line 780) | async fn test_router_secret_header() { function test_register_and_get_hmac_secret (line 811) | async fn test_register_and_get_hmac_secret() { function test_no_hmac_secret_returns_none (line 825) | async fn test_no_hmac_secret_returns_none() { function test_unregister_removes_hmac_secret (line 836) | async fn test_unregister_removes_hmac_secret() { function test_register_and_get_signature_key (line 863) | async fn test_register_and_get_signature_key() { function test_no_signature_key_returns_none (line 880) | async fn test_no_signature_key_returns_none() { function test_unregister_removes_signature_key (line 891) | async fn test_unregister_removes_signature_key() { function test_register_valid_signature_key_succeeds (line 923) | async fn test_register_valid_signature_key_succeeds() { function test_register_invalid_hex_key_fails (line 935) | async fn test_register_invalid_hex_key_fails() { function test_register_wrong_length_key_fails (line 947) | async fn test_register_wrong_length_key_fails() { function test_register_empty_key_fails (line 959) | async fn test_register_empty_key_fails() { function test_valid_key_is_retrievable (line 969) | async fn test_valid_key_is_retrievable() { function test_invalid_key_does_not_store (line 985) | async fn test_invalid_key_does_not_store() { function setup_discord_router (line 1011) | async fn setup_discord_router() -> (Arc, AxumRouter) { function test_signing_key (line 1029) | fn test_signing_key() -> SigningKey { function test_webhook_rejects_missing_sig_headers (line 1038) | async fn test_webhook_rejects_missing_sig_headers() { function test_webhook_rejects_invalid_signature (line 1066) | async fn test_webhook_rejects_invalid_signature() { function test_webhook_accepts_valid_signature (line 1094) | async fn test_webhook_accepts_valid_signature() { function test_webhook_skips_sig_for_no_key (line 1137) | async fn test_webhook_skips_sig_for_no_key() { function test_webhook_sig_check_uses_body (line 1158) | async fn test_webhook_sig_check_uses_body() { function test_webhook_sig_check_uses_timestamp (line 1197) | async fn test_webhook_sig_check_uses_timestamp() { function test_webhook_sig_plus_secret (line 1236) | async fn test_webhook_sig_plus_secret() { function setup_slack_router (line 1296) | async fn setup_slack_router() -> (Arc, AxumRouter) { function slack_signature (line 1314) | fn slack_signature(signing_secret: &str, timestamp: &str, body: &[u8]) -... function test_webhook_hmac_rejects_missing_sig_headers (line 1331) | async fn test_webhook_hmac_rejects_missing_sig_headers() { function test_webhook_hmac_rejects_invalid_signature (line 1355) | async fn test_webhook_hmac_rejects_invalid_signature() { function test_webhook_hmac_accepts_valid_signature (line 1380) | async fn test_webhook_hmac_accepts_valid_signature() { function test_webhook_hmac_skips_check_for_no_secret (line 1416) | async fn test_webhook_hmac_skips_check_for_no_secret() { function test_webhook_hmac_uses_correct_body (line 1437) | async fn test_webhook_hmac_uses_correct_body() { function test_webhook_hmac_uses_correct_timestamp (line 1471) | async fn test_webhook_hmac_uses_correct_timestamp() { FILE: src/channels/wasm/runtime.rs type WasmChannelRuntimeConfig (line 19) | pub struct WasmChannelRuntimeConfig { method for_testing (line 54) | pub fn for_testing() -> Self { method default (line 35) | fn default() -> Self { type PreparedChannelModule (line 74) | pub struct PreparedChannelModule { method component (line 87) | pub fn component(&self) -> Option<&wasmtime::component::Component> { method for_testing (line 95) | pub fn for_testing(name: impl Into, description: impl Into) -> std::fmt::Result { type WasmChannelRuntime (line 119) | pub struct WasmChannelRuntime { method new (line 130) | pub fn new(config: WasmChannelRuntimeConfig) -> Result &Engine { method config (line 186) | pub fn config(&self) -> &WasmChannelRuntimeConfig { method prepare (line 194) | pub async fn prepare( method get (line 249) | pub async fn get(&self, name: &str) -> Option Option Vec { method clear (line 264) | pub async fn clear(&self) { method fmt (line 270) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function test_runtime_config_default (line 283) | fn test_runtime_config_default() { function test_runtime_config_for_testing (line 292) | fn test_runtime_config_for_testing() { function test_runtime_creation (line 299) | fn test_runtime_creation() { function test_module_cache_operations (line 306) | async fn test_module_cache_operations() { FILE: src/channels/wasm/schema.rs type ChannelCapabilitiesFile (line 53) | pub struct ChannelCapabilitiesFile { method from_json (line 92) | pub fn from_json(json: &str) -> Result { method from_bytes (line 97) | pub fn from_bytes(bytes: &[u8]) -> Result { method validate (line 105) | pub fn validate(&self) { method to_capabilities (line 133) | pub fn to_capabilities(&self) -> ChannelCapabilities { method config_json (line 138) | pub fn config_json(&self) -> String { method webhook_secret_header (line 145) | pub fn webhook_secret_header(&self) -> Option<&str> { method signature_key_secret_name (line 157) | pub fn signature_key_secret_name(&self) -> Option<&str> { method hmac_secret_name (line 169) | pub fn hmac_secret_name(&self) -> Option<&str> { method webhook_secret_name (line 180) | pub fn webhook_secret_name(&self) -> String { function default_type (line 86) | fn default_type() -> String { type ChannelCapabilitiesSchema (line 192) | pub struct ChannelCapabilitiesSchema { method to_channel_capabilities (line 206) | pub fn to_channel_capabilities(&self, channel_name: &str) -> ChannelCa... type ChannelSpecificCapabilitiesSchema (line 243) | pub struct ChannelSpecificCapabilitiesSchema { type WebhookSchema (line 281) | pub struct WebhookSchema { type SetupSchema (line 311) | pub struct SetupSchema { type SecretSetupSchema (line 328) | pub struct SecretSetupSchema { type AutoGenerateSchema (line 350) | pub struct AutoGenerateSchema { function default_auto_generate_length (line 356) | fn default_auto_generate_length() -> usize { type EmitRateLimitSchema (line 362) | pub struct EmitRateLimitSchema { method to_emit_rate_limit (line 381) | fn to_emit_rate_limit(&self) -> EmitRateLimitConfig { method from (line 390) | fn from(schema: RateLimitSchema) -> Self { function default_messages_per_minute (line 372) | fn default_messages_per_minute() -> u32 { function default_messages_per_hour (line 376) | fn default_messages_per_hour() -> u32 { type ChannelConfig (line 400) | pub struct ChannelConfig { method default (line 414) | fn default() -> Self { type HttpEndpointConfigSchema (line 425) | pub struct HttpEndpointConfigSchema { type PollConfigSchema (line 440) | pub struct PollConfigSchema { function test_parse_minimal (line 454) | fn test_parse_minimal() { function test_parse_full_slack_example (line 464) | fn test_parse_full_slack_example() { function test_parse_with_polling (line 517) | fn test_parse_with_polling() { function test_min_poll_interval_enforced (line 537) | fn test_min_poll_interval_enforced() { function test_workspace_prefix_override (line 556) | fn test_workspace_prefix_override() { function test_emit_rate_limit (line 573) | fn test_emit_rate_limit() { function test_webhook_schema (line 594) | fn test_webhook_schema() { function test_webhook_secret_name_default (line 617) | fn test_webhook_secret_name_default() { function test_setup_schema (line 629) | fn test_setup_schema() { function test_validate_channel_short_prompt (line 668) | fn test_validate_channel_short_prompt() { function test_validate_channel_missing_setup_url (line 686) | fn test_validate_channel_missing_setup_url() { function test_validate_clean_channel (line 706) | fn test_validate_clean_channel() { function test_discord_capabilities_has_public_key_secret (line 727) | fn test_discord_capabilities_has_public_key_secret() { function test_webhook_schema_signature_key_secret_name (line 747) | fn test_webhook_schema_signature_key_secret_name() { function test_signature_key_secret_name_none_when_missing (line 765) | fn test_signature_key_secret_name_none_when_missing() { function test_discord_capabilities_signature_key (line 783) | fn test_discord_capabilities_signature_key() { function test_discord_capabilities_secrets_allowlist (line 794) | fn test_discord_capabilities_secrets_allowlist() { FILE: src/channels/wasm/setup.rs type WasmChannelSetup (line 21) | pub struct WasmChannelSetup { function setup_wasm_channels (line 32) | pub async fn setup_wasm_channels( function register_channel (line 112) | async fn register_channel( function inject_channel_credentials (line 294) | pub async fn inject_channel_credentials( function inject_channel_secrets_into_config (line 397) | async fn inject_channel_secrets_into_config( FILE: src/channels/wasm/signature.rs function verify_discord_signature (line 19) | pub fn verify_discord_signature( function verify_slack_signature (line 65) | pub fn verify_slack_signature( function verify_hmac_sha256_prefixed (line 113) | pub fn verify_hmac_sha256_prefixed( function sign_test_message (line 143) | fn sign_test_message(timestamp: &str, body: &[u8]) -> (String, String, S... constant TEST_TS (line 167) | const TEST_TS: i64 = 1234567890; function test_valid_signature_succeeds (line 170) | fn test_valid_signature_succeeds() { function test_invalid_signature_fails (line 182) | fn test_invalid_signature_fails() { function test_tampered_body_fails (line 199) | fn test_tampered_body_fails() { function test_tampered_timestamp_fails (line 212) | fn test_tampered_timestamp_fails() { function test_invalid_hex_signature_fails (line 224) | fn test_invalid_hex_signature_fails() { function test_invalid_hex_public_key_fails (line 236) | fn test_invalid_hex_public_key_fails() { function test_wrong_length_signature_fails (line 248) | fn test_wrong_length_signature_fails() { function test_wrong_length_public_key_fails (line 262) | fn test_wrong_length_public_key_fails() { function test_empty_body_valid_signature (line 276) | fn test_empty_body_valid_signature() { function test_discord_reference_vector (line 288) | fn test_discord_reference_vector() { function test_stale_timestamp_rejected (line 331) | fn test_stale_timestamp_rejected() { function test_future_timestamp_rejected (line 343) | fn test_future_timestamp_rejected() { function test_fresh_timestamp_accepted (line 355) | fn test_fresh_timestamp_accepted() { function test_non_numeric_timestamp_rejected (line 367) | fn test_non_numeric_timestamp_rejected() { function test_empty_timestamp_rejected (line 379) | fn test_empty_timestamp_rejected() { function test_boundary_5s_accepted (line 391) | fn test_boundary_5s_accepted() { function test_boundary_6s_rejected (line 403) | fn test_boundary_6s_rejected() { function test_negative_timestamp_rejected (line 415) | fn test_negative_timestamp_rejected() { function sign_slack_message (line 429) | fn sign_slack_message(signing_secret: &str, timestamp: &str, body: &[u8]... constant SLACK_TEST_TS (line 445) | const SLACK_TEST_TS: i64 = 1234567890; function test_slack_valid_signature_succeeds (line 448) | fn test_slack_valid_signature_succeeds() { function test_slack_tampered_body_fails (line 464) | fn test_slack_tampered_body_fails() { function test_slack_tampered_timestamp_fails (line 484) | fn test_slack_tampered_timestamp_fails() { function test_slack_tampered_signature_fails (line 503) | fn test_slack_tampered_signature_fails() { function test_hmac_sha256_prefixed_valid (line 530) | fn test_hmac_sha256_prefixed_valid() { function test_slack_stale_timestamp_rejected (line 548) | fn test_slack_stale_timestamp_rejected() { function test_slack_future_timestamp_rejected (line 568) | fn test_slack_future_timestamp_rejected() { function test_slack_boundary_300s_accepted (line 588) | fn test_slack_boundary_300s_accepted() { function test_slack_boundary_301s_rejected (line 608) | fn test_slack_boundary_301s_rejected() { function test_slack_non_numeric_timestamp_rejected (line 628) | fn test_slack_non_numeric_timestamp_rejected() { function test_slack_missing_v0_prefix_fails (line 639) | fn test_slack_missing_v0_prefix_fails() { function test_slack_wrong_signing_secret_fails (line 655) | fn test_slack_wrong_signing_secret_fails() { function test_slack_empty_body_valid (line 670) | fn test_slack_empty_body_valid() { function test_slack_negative_timestamp_rejected (line 683) | fn test_slack_negative_timestamp_rejected() { function test_slack_empty_timestamp_rejected (line 694) | fn test_slack_empty_timestamp_rejected() { FILE: src/channels/wasm/storage.rs type StoredWasmChannel (line 25) | pub struct StoredWasmChannel { type StoredWasmChannelWithBinary (line 40) | pub struct StoredWasmChannelWithBinary { type StoreChannelParams (line 47) | pub struct StoreChannelParams { type WasmChannelStoreError (line 59) | pub enum WasmChannelStoreError { type WasmChannelStore (line 75) | pub trait WasmChannelStore: Send + Sync { method store (line 77) | async fn store( method get (line 83) | async fn get( method get_with_binary (line 90) | async fn get_with_binary( method list (line 97) | async fn list(&self, user_id: &str) -> Result, ... method delete (line 100) | async fn delete(&self, user_id: &str, name: &str) -> Result Result, ... method delete (line 301) | async fn delete(&self, user_id: &str, name: &str) -> Result Result, ... method delete (line 559) | async fn delete(&self, user_id: &str, name: &str) -> Result Self { function pg_row_to_channel (line 321) | fn pg_row_to_channel( type LibSqlWasmChannelStore (line 345) | pub struct LibSqlWasmChannelStore { method new (line 351) | pub fn new(db: std::sync::Arc) -> Self { method connect (line 355) | async fn connect(&self) -> Result) -> libsql::Value { function libsql_channel_parse_ts (line 583) | fn libsql_channel_parse_ts(s: &str) -> Result, WasmChannel... function libsql_row_to_channel (line 603) | fn libsql_row_to_channel(row: &libsql::Row) -> Result) -> Setti... function list_settings (line 109) | async fn list_settings( function get_setting (line 142) | async fn get_setting(store: Option<&dyn crate::db::Database>, path: &str... function set_setting (line 157) | async fn set_setting( function reset_setting (line 185) | async fn reset_setting(store: Option<&dyn crate::db::Database>, path: &s... function init_toml (line 204) | async fn init_toml( function show_path (line 234) | fn show_path(has_db: bool) -> anyhow::Result<()> { function test_list_settings (line 266) | fn test_list_settings() { function test_get_set_reset (line 274) | fn test_get_set_reset() { function init_toml_creates_file (line 289) | async fn init_toml_creates_file() { function init_toml_refuses_overwrite_without_force (line 301) | async fn init_toml_refuses_overwrite_without_force() { function init_toml_force_overwrites (line 312) | async fn init_toml_force_overwrites() { FILE: src/cli/doctor.rs function run_doctor_command (line 13) | pub async fn run_doctor_command() -> anyhow::Result<()> { function check (line 172) | fn check(name: &str, result: CheckResult, passed: &mut u32, failed: &mut... type CheckResult (line 189) | enum CheckResult { function check_settings_file (line 197) | fn check_settings_file() -> CheckResult { function check_nearai_session (line 218) | async fn check_nearai_session(settings: &Settings) -> CheckResult { function check_llm_config (line 259) | fn check_llm_config(settings: &Settings) -> CheckResult { function check_database (line 278) | async fn check_database() -> CheckResult { function try_pg_connect (line 313) | async fn try_pg_connect() -> Result<(), String> { function try_pg_connect (line 337) | async fn try_pg_connect() -> Result<(), String> { function check_workspace_dir (line 343) | fn check_workspace_dir() -> CheckResult { function check_embeddings (line 359) | fn check_embeddings(settings: &Settings) -> CheckResult { function check_routines_config (line 402) | fn check_routines_config() -> CheckResult { function check_gateway_config (line 420) | fn check_gateway_config(settings: &Settings) -> CheckResult { function check_mcp_config (line 450) | async fn check_mcp_config() -> CheckResult { function check_skills (line 490) | async fn check_skills() -> CheckResult { function check_secrets (line 510) | fn check_secrets(settings: &Settings) -> CheckResult { function check_service_installed (line 532) | fn check_service_installed() -> CheckResult { function check_docker_daemon (line 559) | async fn check_docker_daemon() -> CheckResult { function check_binary (line 577) | fn check_binary(name: &str, args: &[&str]) -> CheckResult { function check_binary_finds_sh (line 610) | fn check_binary_finds_sh() { function check_binary_skips_nonexistent (line 618) | fn check_binary_skips_nonexistent() { function check_workspace_dir_does_not_panic (line 629) | fn check_workspace_dir_does_not_panic() { function check_nearai_session_does_not_panic (line 637) | async fn check_nearai_session_does_not_panic() { function check_nearai_session_skips_for_non_nearai_backend (line 646) | fn check_nearai_session_skips_for_non_nearai_backend() { function check_settings_file_handles_missing (line 686) | fn check_settings_file_handles_missing() { function check_llm_config_does_not_panic (line 695) | fn check_llm_config_does_not_panic() { function check_routines_config_does_not_panic (line 704) | fn check_routines_config_does_not_panic() { function check_gateway_config_does_not_panic (line 712) | fn check_gateway_config_does_not_panic() { function check_embeddings_does_not_panic (line 721) | fn check_embeddings_does_not_panic() { function check_secrets_none_returns_skip (line 730) | fn check_secrets_none_returns_skip() { function check_service_installed_does_not_panic (line 747) | fn check_service_installed_does_not_panic() { function check_docker_daemon_does_not_panic (line 755) | async fn check_docker_daemon_does_not_panic() { function check_mcp_config_does_not_panic (line 763) | async fn check_mcp_config_does_not_panic() { function check_skills_does_not_panic (line 771) | async fn check_skills_does_not_panic() { function check_llm_config_shows_nearai_model_for_nearai_backend (line 779) | fn check_llm_config_shows_nearai_model_for_nearai_backend() { function check_embeddings_disabled_by_default_returns_skip (line 806) | fn check_embeddings_disabled_by_default_returns_skip() { function check_routines_enabled_by_default (line 828) | fn check_routines_enabled_by_default() { function check_secrets_env_without_var_returns_fail (line 849) | fn check_secrets_env_without_var_returns_fail() { function format_result (line 872) | fn format_result(r: &CheckResult) -> String { FILE: src/cli/import.rs type ImportCommand (line 15) | pub enum ImportCommand { function run_import_command (line 39) | pub async fn run_import_command( function run_import_openclaw (line 55) | async fn run_import_openclaw( function run_import_command (line 157) | pub async fn run_import_command( FILE: src/cli/logs.rs type LogsCommand (line 19) | pub struct LogsCommand { type GatewayParams (line 60) | struct GatewayParams { function run_logs_command (line 66) | pub async fn run_logs_command(cmd: LogsCommand, config_path: Option<&Pat... function cmd_show (line 92) | fn cmd_show(cmd: &LogsCommand) -> anyhow::Result<()> { function tail_file (line 128) | fn tail_file(path: &Path, n: usize) -> anyhow::Result> { function cmd_follow (line 180) | async fn cmd_follow(cmd: &LogsCommand, params: &GatewayParams) -> anyhow... function cmd_get_level (line 250) | async fn cmd_get_level(cmd: &LogsCommand, params: &GatewayParams) -> any... function cmd_set_level (line 301) | async fn cmd_set_level( function resolve_gateway_params (line 371) | async fn resolve_gateway_params( function load_gateway_config (line 416) | async fn load_gateway_config( function print_log_entry (line 433) | fn print_log_entry(entry: &serde_json::Value, cmd: &LogsCommand) { function convert_to_local_time (line 462) | fn convert_to_local_time(ts: &str) -> String { function colorize_level (line 473) | fn colorize_level(level: &str) -> String { function test_colorize_level (line 489) | fn test_colorize_level() { function test_convert_to_local_time_valid (line 499) | fn test_convert_to_local_time_valid() { function test_convert_to_local_time_invalid (line 506) | fn test_convert_to_local_time_invalid() { function test_print_log_entry_json (line 512) | fn test_print_log_entry_json() { function test_tail_file_small (line 535) | fn test_tail_file_small() { function test_tail_file_fewer_lines_than_limit (line 545) | fn test_tail_file_fewer_lines_than_limit() { function test_tail_file_empty (line 555) | fn test_tail_file_empty() { function test_tail_file_large (line 565) | fn test_tail_file_large() { function test_tail_file_no_trailing_newline (line 579) | fn test_tail_file_no_trailing_newline() { FILE: src/cli/mcp.rs type McpAddArgs (line 23) | pub struct McpAddArgs { type McpCommand (line 76) | pub enum McpCommand { function parse_header (line 128) | fn parse_header(s: &str) -> Result<(String, String), String> { function parse_env_var (line 135) | fn parse_env_var(s: &str) -> Result<(String, String), String> { function run_mcp_command (line 143) | pub async fn run_mcp_command(cmd: McpCommand) -> anyhow::Result<()> { function add_server (line 159) | async fn add_server(args: McpAddArgs) -> anyhow::Result<()> { function remove_server (line 283) | async fn remove_server(name: String) -> anyhow::Result<()> { function list_servers (line 299) | async fn list_servers(verbose: bool) -> anyhow::Result<()> { function auth_server (line 404) | async fn auth_server(name: String, user_id: String) -> anyhow::Result<()> { function test_server (line 477) | async fn test_server(name: String, user_id: String) -> anyhow::Result<()> { function toggle_server (line 583) | async fn toggle_server(name: String, enable: bool, disable: bool) -> any... constant DEFAULT_USER_ID (line 610) | const DEFAULT_USER_ID: &str = "default"; function connect_db (line 613) | async fn connect_db() -> Option> { function load_servers (line 619) | async fn load_servers(db: Option<&dyn Database>) -> Result anyhow::Result any... function read (line 135) | async fn read(workspace: &Workspace, path: &str) -> anyhow::Result<()> { function write (line 148) | async fn write( function tree (line 175) | async fn tree(workspace: &Workspace, path: &str, max_depth: usize) -> an... function print_tree (line 182) | async fn print_tree( function status (line 219) | async fn status(workspace: &Workspace) -> anyhow::Result<()> { function truncate_content (line 255) | fn truncate_content(s: &str, max_len: usize) -> String { function score_indicator (line 263) | fn score_indicator(score: f32) -> &'static str { function test_score_indicator (line 282) | fn test_score_indicator() { function test_truncate_content (line 291) | fn test_truncate_content() { FILE: src/cli/mod.rs type Cli (line 67) | pub struct Cli { method should_run_agent (line 294) | pub fn should_run_agent(&self) -> bool { type Command (line 93) | pub enum Command { function init_secrets_store (line 303) | pub async fn init_secrets_store() function run_routines_cli (line 318) | pub async fn run_routines_cli( function run_memory_command (line 335) | pub async fn run_memory_command(mem_cmd: &MemoryCommand) -> anyhow::Resu... function test_version (line 363) | fn test_version() { function test_help_output (line 373) | fn test_help_output() { function test_help_output_without_import (line 381) | fn test_help_output_without_import() { function test_long_help_output (line 389) | fn test_long_help_output() { function test_long_help_output_without_import (line 397) | fn test_long_help_output_without_import() { FILE: src/cli/oauth_defaults.rs type OAuthCredentials (line 27) | pub struct OAuthCredentials { constant GOOGLE_CLIENT_ID (line 34) | const GOOGLE_CLIENT_ID: &str = match option_env!("IRONCLAW_GOOGLE_CLIENT... constant GOOGLE_CLIENT_SECRET (line 38) | const GOOGLE_CLIENT_SECRET: &str = match option_env!("IRONCLAW_GOOGLE_CL... function builtin_credentials (line 47) | pub fn builtin_credentials(secret_name: &str) -> Option { function builtin_client_id_override_env (line 58) | pub fn builtin_client_id_override_env(secret_name: &str) -> Option<&'sta... type OAuthTokenResponse (line 77) | pub struct OAuthTokenResponse { type OAuthUrlResult (line 84) | pub struct OAuthUrlResult { function build_oauth_url (line 98) | pub fn build_oauth_url( function exchange_oauth_code (line 169) | pub async fn exchange_oauth_code( function exchange_oauth_code_with_params (line 194) | pub async fn exchange_oauth_code_with_params( function exchange_oauth_code_with_resource (line 280) | pub async fn exchange_oauth_code_with_resource( function store_oauth_tokens (line 312) | pub async fn store_oauth_tokens( function validate_oauth_token (line 368) | pub async fn validate_oauth_token( type PendingOAuthFlow (line 421) | pub struct PendingOAuthFlow { method fmt (line 465) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type PendingOAuthRegistry (line 476) | pub type PendingOAuthRegistry = Arc PendingOAuthRegistry { function use_gateway_callback (line 489) | pub fn use_gateway_callback() -> bool { function exchange_proxy_url (line 502) | pub fn exchange_proxy_url() -> Option { constant OAUTH_FLOW_EXPIRY (line 509) | pub const OAUTH_FLOW_EXPIRY: Duration = Duration::from_secs(300); function sweep_expired_flows (line 515) | pub async fn sweep_expired_flows(registry: &PendingOAuthRegistry) { constant HOSTED_STATE_PREFIX (line 522) | const HOSTED_STATE_PREFIX: &str = "ic2"; constant HOSTED_STATE_CHECKSUM_BYTES (line 523) | const HOSTED_STATE_CHECKSUM_BYTES: usize = 12; type DecodedHostedOAuthState (line 526) | pub struct DecodedHostedOAuthState { type HostedOAuthStatePayload (line 533) | struct HostedOAuthStatePayload { function current_instance_name (line 540) | fn current_instance_name() -> Option { function hosted_state_checksum (line 546) | fn hosted_state_checksum(payload_bytes: &[u8]) -> String { function encode_hosted_oauth_state (line 555) | pub fn encode_hosted_oauth_state(flow_id: &str, instance_name: Option<&s... function decode_hosted_oauth_state (line 581) | pub fn decode_hosted_oauth_state(state: &str) -> Result String { function strip_instance_prefix (line 640) | pub fn strip_instance_prefix(state: &str) -> &str { type ProxyTokenExchangeRequest (line 647) | pub struct ProxyTokenExchangeRequest<'a> { function exchange_via_proxy (line 669) | pub async fn exchange_via_proxy( function test_is_loopback_host (line 760) | fn test_is_loopback_host() { function test_callback_host_default (line 773) | fn test_callback_host_default() { function test_callback_host_env_override (line 790) | fn test_callback_host_env_override() { function test_callback_url_default (line 817) | fn test_callback_url_default() { function test_callback_url_env_override (line 841) | fn test_callback_url_env_override() { function test_unknown_provider_returns_none (line 864) | fn test_unknown_provider_returns_none() { function test_google_returns_based_on_compile_env (line 869) | fn test_google_returns_based_on_compile_env() { function test_landing_html_success_contains_key_elements (line 878) | fn test_landing_html_success_contains_key_elements() { function test_landing_html_escapes_provider_name (line 888) | fn test_landing_html_escapes_provider_name() { function test_landing_html_error_contains_key_elements (line 895) | fn test_landing_html_error_contains_key_elements() { function test_build_oauth_url_basic (line 905) | fn test_build_oauth_url_basic() { function test_build_oauth_url_with_pkce (line 934) | fn test_build_oauth_url_with_pkce() { function test_build_oauth_url_with_extra_params (line 956) | fn test_build_oauth_url_with_extra_params() { function test_build_oauth_url_state_is_unique (line 979) | fn test_build_oauth_url_state_is_unique() { function test_use_gateway_callback_false_by_default (line 1006) | fn test_use_gateway_callback_false_by_default() { function test_use_gateway_callback_true_for_hosted (line 1022) | fn test_use_gateway_callback_true_for_hosted() { function test_use_gateway_callback_false_for_localhost (line 1043) | fn test_use_gateway_callback_false_for_localhost() { function test_use_gateway_callback_false_for_empty (line 1061) | fn test_use_gateway_callback_false_for_empty() { function test_build_platform_state_with_instance (line 1079) | fn test_build_platform_state_with_instance() { function test_build_platform_state_without_instance (line 1103) | fn test_build_platform_state_without_instance() { function test_build_platform_state_with_openclaw_instance (line 1130) | fn test_build_platform_state_with_openclaw_instance() { function test_strip_instance_prefix_with_colon (line 1159) | fn test_strip_instance_prefix_with_colon() { function test_strip_instance_prefix_without_colon (line 1167) | fn test_strip_instance_prefix_without_colon() { function test_decode_hosted_oauth_state_accepts_legacy_formats (line 1175) | fn test_decode_hosted_oauth_state_accepts_legacy_formats() { function test_decode_hosted_oauth_state_falls_back_for_non_envelope_ic2_prefix (line 1190) | fn test_decode_hosted_oauth_state_falls_back_for_non_envelope_ic2_prefix... function test_decode_hosted_oauth_state_rejects_tampered_checksum (line 1201) | fn test_decode_hosted_oauth_state_rejects_tampered_checksum() { function test_build_oauth_url_includes_resource_via_extra_params (line 1214) | fn test_build_oauth_url_includes_resource_via_extra_params() { FILE: src/cli/pairing.rs type PairingCommand (line 11) | pub enum PairingCommand { function run_pairing_command (line 36) | pub fn run_pairing_command(cmd: PairingCommand) -> Result<(), String> { function run_pairing_command_with_store (line 41) | pub fn run_pairing_command_with_store( function run_list (line 51) | fn run_list(store: &PairingStore, channel: &str, json: bool) -> Result<(... function run_approve (line 86) | fn run_approve(store: &PairingStore, channel: &str, code: &str) -> Resul... function test_store (line 108) | fn test_store() -> (PairingStore, TempDir) { function test_list_empty_returns_ok (line 115) | fn test_list_empty_returns_ok() { function test_list_json_empty_returns_ok (line 128) | fn test_list_json_empty_returns_ok() { function test_approve_invalid_code_returns_err (line 141) | fn test_approve_invalid_code_returns_err() { function test_approve_valid_code_returns_ok (line 158) | fn test_approve_valid_code_returns_ok() { function test_list_with_pending_returns_ok (line 174) | fn test_list_with_pending_returns_ok() { FILE: src/cli/registry.rs type RegistryCommand (line 10) | pub enum RegistryCommand { function run_registry_command (line 59) | pub async fn run_registry_command(cmd: RegistryCommand) -> anyhow::Resul... function cmd_list (line 89) | fn cmd_list( function cmd_info (line 153) | fn cmd_info(catalog: &RegistryCatalog, name: &str) -> anyhow::Result<()> { function cmd_install (line 238) | async fn cmd_install( FILE: src/cli/routines.rs type RoutinesCommand (line 19) | pub enum RoutinesCommand { function run_routines_command (line 135) | pub async fn run_routines_command( function list (line 199) | async fn list( function cli_notify_config (line 295) | fn cli_notify_config(notify_channel: Option) -> NotifyConfig { function create (line 306) | async fn create( function edit (line 378) | async fn edit( function set_enabled (line 459) | async fn set_enabled( function delete (line 501) | async fn delete( function history (line 539) | async fn history( function require_routine (line 618) | async fn require_routine( function validate_timezone_arg (line 628) | fn validate_timezone_arg(timezone: Option<&str>) -> anyhow::Result<()> { function format_relative (line 640) | fn format_relative(dt: DateTime) -> String { function truncate (line 676) | fn truncate(s: &str, max_chars: usize) -> String { function format_relative_future (line 690) | fn format_relative_future() { function format_relative_past (line 700) | fn format_relative_past() { function format_relative_days (line 710) | fn format_relative_days() { function truncate_short_string (line 717) | fn truncate_short_string() { function truncate_long_string (line 722) | fn truncate_long_string() { function truncate_multibyte_safe (line 728) | fn truncate_multibyte_safe() { function cli_notify_config_defaults_to_runtime_target_resolution (line 738) | fn cli_notify_config_defaults_to_runtime_target_resolution() { FILE: src/cli/service.rs type ServiceCommand (line 8) | pub enum ServiceCommand { method to_action (line 23) | pub fn to_action(&self) -> ServiceAction { function run_service_command (line 35) | pub fn run_service_command(cmd: &ServiceCommand) -> anyhow::Result<()> { FILE: src/cli/skills.rs type SkillsCommand (line 15) | pub enum SkillsCommand { function run_skills_command (line 49) | pub async fn run_skills_command( function discover_skills (line 70) | async fn discover_skills(config: &SkillsConfig) -> SkillRegistry { function format_source (line 78) | fn format_source(source: &SkillSource) -> &str { function cmd_list (line 87) | async fn cmd_list(config: &SkillsConfig, verbose: bool, json: bool) -> a... function cmd_search (line 168) | async fn cmd_search(query: &str, json: bool) -> anyhow::Result<()> { function cmd_info (line 250) | async fn cmd_info(config: &SkillsConfig, name: &str, json: bool) -> anyh... function truncate (line 331) | fn truncate(s: &str, max: usize) -> String { function truncate_short_string (line 345) | fn truncate_short_string() { function truncate_long_string (line 350) | fn truncate_long_string() { function truncate_multibyte_safe (line 355) | fn truncate_multibyte_safe() { function format_source_variants (line 363) | fn format_source_variants() { FILE: src/cli/status.rs function load_settings (line 16) | fn load_settings() -> Settings { function load_settings_from (line 21) | fn load_settings_from(json_path: &std::path::Path, toml_path: &std::path... function run_status_command (line 38) | pub async fn run_status_command() -> anyhow::Result<()> { function check_database (line 191) | async fn check_database() -> anyhow::Result<()> { function check_database (line 215) | async fn check_database() -> anyhow::Result<()> { function count_wasm_files (line 220) | fn count_wasm_files(dir: &std::path::Path) -> usize { function default_tools_dir (line 231) | fn default_tools_dir() -> PathBuf { function default_channels_dir (line 235) | fn default_channels_dir() -> PathBuf { function reads_toml_heartbeat_enabled (line 245) | fn reads_toml_heartbeat_enabled() { function defaults_without_config_files (line 264) | fn defaults_without_config_files() { function reads_json_heartbeat_enabled (line 275) | fn reads_json_heartbeat_enabled() { function toml_overlay_wins_over_json (line 293) | fn toml_overlay_wins_over_json() { function invalid_toml_falls_back_gracefully (line 316) | fn invalid_toml_falls_back_gracefully() { FILE: src/cli/tool.rs function default_tools_dir (line 17) | fn default_tools_dir() -> PathBuf { type ToolCommand (line 22) | pub enum ToolCommand { function run_tool_command (line 114) | pub async fn run_tool_command(cmd: ToolCommand) -> anyhow::Result<()> { function install_tool (line 134) | async fn install_tool( function extract_crate_name (line 272) | async fn extract_crate_name(cargo_toml: &Path) -> anyhow::Result { function list_tools (line 293) | async fn list_tools(dir: Option, verbose: bool) -> anyhow::Resu... function remove_tool (line 368) | async fn remove_tool(name: String, dir: Option) -> anyhow::Resu... function show_tool_info (line 391) | async fn show_tool_info(name_or_path: String, dir: Option) -> a... function format_size (line 438) | fn format_size(bytes: u64) -> String { function print_capabilities_summary (line 452) | fn print_capabilities_summary(caps: &CapabilitiesFile) { function print_capabilities_detail (line 480) | fn print_capabilities_detail(caps: &CapabilitiesFile) { function validate_tool_name (line 537) | fn validate_tool_name(name: &str) -> anyhow::Result<()> { function init_secrets_store (line 553) | async fn init_secrets_store() -> anyhow::Result, user_id: String) ... function combine_provider_scopes (line 675) | async fn combine_provider_scopes( function auth_tool_oauth (line 715) | async fn auth_tool_oauth( function auth_tool_manual (line 840) | async fn auth_tool_manual( function read_hidden_input (line 928) | fn read_hidden_input() -> anyhow::Result { function validate_token (line 971) | async fn validate_token( function save_token (line 985) | async fn save_token( function print_success (line 1008) | fn print_success(display_name: &str) { function setup_tool (line 1017) | async fn setup_tool(name: String, dir: Option, user_id: String)... function test_format_size (line 1132) | fn test_format_size() { function test_default_tools_dir (line 1141) | fn test_default_tools_dir() { FILE: src/config/agent.rs type AgentConfig (line 9) | pub struct AgentConfig { method for_testing (line 39) | pub fn for_testing() -> Self { method resolve (line 59) | pub(crate) fn resolve(settings: &Settings) -> Result { function test_default_timezone_rejects_invalid (line 124) | fn test_default_timezone_rejects_invalid() { function test_default_timezone_accepts_valid (line 133) | fn test_default_timezone_accepts_valid() { FILE: src/config/builder.rs type BuilderModeConfig (line 9) | pub struct BuilderModeConfig { method resolve (line 35) | pub(crate) fn resolve(settings: &crate::settings::Settings) -> Result<... method to_builder_config (line 49) | pub fn to_builder_config(&self) -> crate::tools::BuilderConfig { method default (line 23) | fn default() -> Self { function resolve_falls_back_to_settings (line 70) | fn resolve_falls_back_to_settings() { function env_overrides_settings (line 82) | fn env_overrides_settings() { FILE: src/config/channels.rs type ChannelsConfig (line 13) | pub struct ChannelsConfig { method resolve (line 94) | pub(crate) fn resolve(settings: &Settings, owner_id: &str) -> Result PathBuf { function cli_config_fields (line 239) | fn cli_config_fields() { function http_config_fields (line 248) | fn http_config_fields() { function http_config_with_secret (line 262) | fn http_config_with_secret() { function gateway_config_fields (line 274) | fn gateway_config_fields() { function gateway_config_no_auth_token (line 288) | fn gateway_config_no_auth_token() { function signal_config_fields_and_defaults (line 299) | fn signal_config_fields_and_defaults() { function signal_config_open_policies (line 323) | fn signal_config_open_policies() { function channels_config_fields (line 344) | fn channels_config_fields() { function channels_config_with_owner_ids (line 364) | fn channels_config_with_owner_ids() { function default_channels_dir_ends_with_channels (line 384) | fn default_channels_dir_ends_with_channels() { function resolve_uses_settings_channel_values_with_owner_scope_user_ids (line 393) | fn resolve_uses_settings_channel_values_with_owner_scope_user_ids() { FILE: src/config/database.rs type DatabaseBackend (line 11) | pub enum DatabaseBackend { method fmt (line 20) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type Err (line 29) | type Err = String; method from_str (line 31) | fn from_str(s: &str) -> Result { type SslMode (line 49) | pub enum SslMode { method fmt (line 60) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type Err (line 70) | type Err = String; method from_str (line 72) | fn from_str(s: &str) -> Result { method from_env (line 219) | pub fn from_env() -> Self { type DatabaseConfig (line 87) | pub struct DatabaseConfig { method resolve (line 107) | pub(crate) fn resolve() -> Result { method from_postgres_url (line 174) | pub fn from_postgres_url(url: &str, pool_size: usize) -> Self { method from_libsql_path (line 189) | pub fn from_libsql_path( method url (line 208) | pub fn url(&self) -> &str { function default_libsql_path (line 228) | pub fn default_libsql_path() -> PathBuf { function ssl_mode_default_is_prefer (line 237) | fn ssl_mode_default_is_prefer() { function ssl_mode_parse_roundtrip (line 242) | fn ssl_mode_parse_roundtrip() { function ssl_mode_parse_case_insensitive (line 251) | fn ssl_mode_parse_case_insensitive() { function ssl_mode_parse_invalid (line 258) | fn ssl_mode_parse_invalid() { FILE: src/config/embeddings.rs constant DEFAULT_EMBEDDING_CACHE_SIZE (line 12) | pub const DEFAULT_EMBEDDING_CACHE_SIZE: usize = 10_000; type EmbeddingsConfig (line 16) | pub struct EmbeddingsConfig { method resolve (line 73) | pub(crate) fn resolve(settings: &Settings) -> Result { method openai_api_key (line 121) | pub fn openai_api_key(&self) -> Option<&str> { method create_provider (line 130) | pub fn create_provider( method default (line 41) | fn default() -> Self { function default_dimension_for_model (line 60) | pub(crate) fn default_dimension_for_model(model: &str) -> usize { function clear_embedding_env (line 204) | fn clear_embedding_env() { function embeddings_disabled_not_overridden_by_openai_key (line 217) | fn embeddings_disabled_not_overridden_by_openai_key() { function embeddings_enabled_from_settings (line 247) | fn embeddings_enabled_from_settings() { function embeddings_env_override_takes_precedence (line 267) | fn embeddings_env_override_takes_precedence() { function embedding_base_url_parsed_from_env (line 296) | fn embedding_base_url_parsed_from_env() { function embedding_base_url_defaults_to_none (line 315) | fn embedding_base_url_defaults_to_none() { function cache_size_zero_rejected (line 328) | fn cache_size_zero_rejected() { FILE: src/config/heartbeat.rs type HeartbeatConfig (line 7) | pub struct HeartbeatConfig { method resolve (line 42) | pub(crate) fn resolve(settings: &Settings) -> Result { method default (line 27) | fn default() -> Self { function test_quiet_hours_settings_fallback (line 113) | fn test_quiet_hours_settings_fallback() { function test_quiet_hours_rejects_invalid_hour (line 125) | fn test_quiet_hours_rejects_invalid_hour() { function test_quiet_hours_accepts_boundary_values (line 134) | fn test_quiet_hours_accepts_boundary_values() { function test_heartbeat_timezone_rejects_invalid (line 145) | fn test_heartbeat_timezone_rejects_invalid() { function test_heartbeat_timezone_accepts_valid (line 154) | fn test_heartbeat_timezone_accepts_valid() { FILE: src/config/helpers.rs function runtime_overrides (line 27) | fn runtime_overrides() -> &'static Mutex> { function set_runtime_env (line 36) | pub fn set_runtime_env(key: &str, value: &str) { function env_or_override (line 51) | pub fn env_or_override(key: &str) -> Option { function optional_env (line 84) | pub(crate) fn optional_env(key: &str) -> Result, ConfigEr... function parse_optional_env (line 121) | pub(crate) fn parse_optional_env(key: &str, default: T) -> Result Result(key: &str) -> Result, Config... function parse_string_env (line 172) | pub(crate) fn parse_string_env( function validate_base_url (line 188) | pub(crate) fn validate_base_url(url: &str, field_name: &str) -> Result<(... function runtime_env_override_is_visible_to_env_or_override (line 329) | fn runtime_env_override_is_visible_to_env_or_override() { function runtime_env_override_is_visible_to_optional_env (line 344) | fn runtime_env_override_is_visible_to_optional_env() { function real_env_var_takes_priority_over_runtime_override (line 355) | fn real_env_var_takes_priority_over_runtime_override() { function validate_base_url_allows_https (line 378) | fn validate_base_url_allows_https() { function validate_base_url_allows_http_localhost (line 385) | fn validate_base_url_allows_http_localhost() { function validate_base_url_rejects_http_remote (line 392) | fn validate_base_url_rejects_http_remote() { function validate_base_url_rejects_non_http_schemes (line 398) | fn validate_base_url_rejects_non_http_schemes() { function validate_base_url_rejects_cloud_metadata (line 404) | fn validate_base_url_rejects_cloud_metadata() { function validate_base_url_rejects_private_ips (line 409) | fn validate_base_url_rejects_private_ips() { function validate_base_url_rejects_cgn_range (line 416) | fn validate_base_url_rejects_cgn_range() { function validate_base_url_rejects_ipv4_mapped_ipv6 (line 423) | fn validate_base_url_rejects_ipv4_mapped_ipv6() { function validate_base_url_rejects_ula_ipv6 (line 430) | fn validate_base_url_rejects_ula_ipv6() { function validate_base_url_handles_url_with_credentials (line 437) | fn validate_base_url_handles_url_with_credentials() { function validate_base_url_rejects_empty_and_invalid (line 445) | fn validate_base_url_rejects_empty_and_invalid() { function validate_base_url_rejects_unspecified_ipv4 (line 452) | fn validate_base_url_rejects_unspecified_ipv4() { function validate_base_url_rejects_ipv6_loopback_https (line 457) | fn validate_base_url_rejects_ipv6_loopback_https() { function validate_base_url_rejects_ipv6_link_local (line 464) | fn validate_base_url_rejects_ipv6_link_local() { function validate_base_url_rejects_ipv6_multicast (line 470) | fn validate_base_url_rejects_ipv6_multicast() { function validate_base_url_rejects_ipv6_unspecified (line 476) | fn validate_base_url_rejects_ipv6_unspecified() { function validate_base_url_rejects_dns_failure (line 482) | fn validate_base_url_rejects_dns_failure() { FILE: src/config/hygiene.rs type HygieneConfig (line 10) | pub struct HygieneConfig { method resolve (line 33) | pub(crate) fn resolve() -> Result { method to_workspace_config (line 47) | pub fn to_workspace_config(&self) -> crate::workspace::hygiene::Hygien... method default (line 22) | fn default() -> Self { FILE: src/config/llm.rs method for_testing (line 15) | pub fn for_testing() -> Self { method resolve_model (line 48) | fn resolve_model( method resolve (line 58) | pub(crate) fn resolve(settings: &Settings) -> Result { method resolve_registry_provider (line 248) | fn resolve_registry_provider( function parse_extra_headers (line 447) | fn parse_extra_headers(val: &str) -> Result, Confi... function default_session_path (line 477) | pub fn default_session_path() -> PathBuf { function clear_openai_compatible_env (line 489) | fn clear_openai_compatible_env() { function openai_compatible_uses_selected_model_when_llm_model_unset (line 499) | fn openai_compatible_uses_selected_model_when_llm_model_unset() { function openai_compatible_llm_model_env_overrides_selected_model (line 517) | fn openai_compatible_llm_model_env_overrides_selected_model() { function test_extra_headers_parsed (line 544) | fn test_extra_headers_parsed() { function test_extra_headers_empty_string (line 556) | fn test_extra_headers_empty_string() { function test_extra_headers_whitespace_only (line 562) | fn test_extra_headers_whitespace_only() { function test_extra_headers_malformed (line 568) | fn test_extra_headers_malformed() { function test_extra_headers_empty_key (line 574) | fn test_extra_headers_empty_key() { function test_extra_headers_value_with_colons (line 580) | fn test_extra_headers_value_with_colons() { function test_extra_headers_trailing_comma (line 589) | fn test_extra_headers_trailing_comma() { function test_extra_headers_with_spaces (line 595) | fn test_extra_headers_with_spaces() { function clear_ollama_env (line 608) | fn clear_ollama_env() { function ollama_uses_selected_model_when_ollama_model_unset (line 618) | fn ollama_uses_selected_model_when_ollama_model_unset() { function ollama_model_env_overrides_selected_model (line 635) | fn ollama_model_env_overrides_selected_model() { function openai_compatible_preserves_dotted_model_name (line 661) | fn openai_compatible_preserves_dotted_model_name() { function registry_provider_resolves_groq (line 682) | fn registry_provider_resolves_groq() { function registry_provider_resolves_tinfoil (line 707) | fn registry_provider_resolves_tinfoil() { function registry_provider_alias_resolves_zai (line 735) | fn registry_provider_alias_resolves_zai() { function nearai_backend_has_no_registry_provider (line 760) | fn nearai_backend_has_no_registry_provider() { function backend_alias_normalized_to_canonical_id (line 774) | fn backend_alias_normalized_to_canonical_id() { function unknown_backend_falls_back_to_openai_compatible (line 800) | fn unknown_backend_falls_back_to_openai_compatible() { function nearai_aliases_all_resolve_to_nearai (line 824) | fn nearai_aliases_all_resolve_to_nearai() { function base_url_resolution_priority (line 851) | fn base_url_resolution_priority() { function clear_anthropic_env (line 895) | fn clear_anthropic_env() { function anthropic_oauth_token_sets_placeholder_api_key (line 907) | fn anthropic_oauth_token_sets_placeholder_api_key() { function anthropic_api_key_takes_priority_over_oauth (line 945) | fn anthropic_api_key_takes_priority_over_oauth() { function non_anthropic_provider_has_no_oauth_token (line 980) | fn non_anthropic_provider_has_no_oauth_token() { function cache_retention_from_str_primary_values (line 1006) | fn cache_retention_from_str_primary_values() { function cache_retention_from_str_aliases (line 1022) | fn cache_retention_from_str_aliases() { function cache_retention_from_str_case_insensitive (line 1046) | fn cache_retention_from_str_case_insensitive() { function cache_retention_from_str_invalid (line 1066) | fn cache_retention_from_str_invalid() { function cache_retention_display_round_trip (line 1075) | fn cache_retention_display_round_trip() { function test_request_timeout_defaults_to_120 (line 1088) | fn test_request_timeout_defaults_to_120() { function test_request_timeout_configurable (line 1099) | fn test_request_timeout_configurable() { function clear_openai_codex_env (line 1116) | fn clear_openai_codex_env() { function openai_codex_resolves_config (line 1126) | fn openai_codex_resolves_config() { function openai_codex_model_env_resolution (line 1146) | fn openai_codex_model_env_resolution() { function openai_codex_falls_back_to_openai_model (line 1170) | fn openai_codex_falls_back_to_openai_model() { function openai_codex_falls_back_to_selected_model (line 1194) | fn openai_codex_falls_back_to_selected_model() { function openai_codex_rejects_ssrf_api_url (line 1211) | fn openai_codex_rejects_ssrf_api_url() { function openai_codex_rejects_ssrf_auth_url (line 1242) | fn openai_codex_rejects_ssrf_auth_url() { FILE: src/config/mod.rs type Config (line 81) | pub struct Config { method for_testing (line 117) | pub fn for_testing( method from_db (line 187) | pub async fn from_db( method from_db_with_toml (line 195) | pub async fn from_db_with_toml( method from_env (line 226) | pub async fn from_env() -> Result { method from_env_with_toml (line 231) | pub async fn from_env_with_toml( method apply_toml_overlay (line 243) | fn apply_toml_overlay( method re_resolve_llm (line 284) | pub async fn re_resolve_llm( method build (line 305) | async fn build(settings: &Settings) -> Result { function load_bootstrap_settings (line 336) | pub(crate) fn load_bootstrap_settings( function resolve_owner_id (line 347) | pub(crate) fn resolve_owner_id(settings: &Settings) -> Result) { function inject_single_var (line 466) | pub fn inject_single_var(key: &str, value: &str) { function inject_os_credential_store_tokens (line 480) | fn inject_os_credential_store_tokens(injected: &mut HashMap) -> std::fmt::Result { method from_env (line 42) | pub fn from_env() -> Option { method from_values (line 47) | pub fn from_values(url: impl Into, api_key: impl Into)... method from_env_reader (line 59) | fn from_env_reader(env: impl Fn(&str) -> Option) -> Option Result { method default (line 24) | fn default() -> Self { FILE: src/config/safety.rs function resolve_safety_config (line 6) | pub(crate) fn resolve_safety_config( function resolve_falls_back_to_settings (line 26) | fn resolve_falls_back_to_settings() { function env_overrides_settings (line 38) | fn env_overrides_settings() { FILE: src/config/sandbox.rs type SandboxModeConfig (line 6) | pub struct SandboxModeConfig { method resolve (line 55) | pub(crate) fn resolve(settings: &crate::settings::Settings) -> Result<... method to_sandbox_config (line 107) | pub fn to_sandbox_config(&self) -> crate::sandbox::SandboxConfig { method default (line 37) | fn default() -> Self { type ClaudeCodeConfig (line 144) | pub struct ClaudeCodeConfig { method from_env (line 212) | pub fn from_env() -> Self { method extract_oauth_token (line 229) | pub fn extract_oauth_token() -> Option { method resolve (line 266) | pub(crate) fn resolve(settings: &crate::settings::Settings) -> Result<... method resolve_env_only (line 292) | fn resolve_env_only() -> Result { function default_claude_code_allowed_tools (line 173) | fn default_claude_code_allowed_tools() -> Vec { method default (line 195) | fn default() -> Self { function parse_oauth_access_token (line 320) | fn parse_oauth_access_token(json: &str) -> Option { function sandbox_mode_config_default_values (line 340) | fn sandbox_mode_config_default_values() { function sandbox_mode_config_custom_values (line 353) | fn sandbox_mode_config_custom_values() { function sandbox_mode_to_sandbox_config_propagates_fields (line 378) | fn sandbox_mode_to_sandbox_config_propagates_fields() { function sandbox_mode_to_sandbox_config_invalid_policy_falls_back_to_readonly (line 409) | fn sandbox_mode_to_sandbox_config_invalid_policy_falls_back_to_readonly() { function sandbox_mode_to_sandbox_config_includes_default_allowlist (line 419) | fn sandbox_mode_to_sandbox_config_includes_default_allowlist() { function claude_code_config_default_values (line 432) | fn claude_code_config_default_values() { function claude_code_config_custom_values (line 450) | fn claude_code_config_custom_values() { function parse_oauth_token_valid (line 470) | fn parse_oauth_token_valid() { function parse_oauth_token_missing_access_token (line 480) | fn parse_oauth_token_missing_access_token() { function parse_oauth_token_missing_oauth_key (line 486) | fn parse_oauth_token_missing_oauth_key() { function parse_oauth_token_invalid_json (line 492) | fn parse_oauth_token_invalid_json() { function parse_oauth_token_empty_string (line 497) | fn parse_oauth_token_empty_string() { function parse_oauth_token_nested_extra_fields (line 502) | fn parse_oauth_token_nested_extra_fields() { function parse_oauth_token_access_token_is_not_string (line 520) | fn parse_oauth_token_access_token_is_not_string() { function parse_oauth_token_rejects_invalid_prefix (line 526) | fn parse_oauth_token_rejects_invalid_prefix() { function default_allowed_tools_has_expected_count (line 534) | fn default_allowed_tools_has_expected_count() { function default_allowed_tools_all_have_glob_pattern (line 541) | fn default_allowed_tools_all_have_glob_pattern() { function test_full_access_downgraded_without_allow (line 552) | fn test_full_access_downgraded_without_allow() { function test_full_access_allowed_with_explicit_opt_in (line 568) | fn test_full_access_allowed_with_explicit_opt_in() { function test_non_full_access_policy_unaffected (line 580) | fn test_non_full_access_policy_unaffected() { function sandbox_resolve_falls_back_to_settings (line 596) | fn sandbox_resolve_falls_back_to_settings() { function sandbox_env_overrides_settings (line 612) | fn sandbox_env_overrides_settings() { function claude_code_resolve_uses_settings_enabled (line 630) | fn claude_code_resolve_uses_settings_enabled() { function claude_code_resolve_defaults_disabled (line 642) | fn claude_code_resolve_defaults_disabled() { function claude_code_env_overrides_settings (line 652) | fn claude_code_env_overrides_settings() { function test_readonly_policy_unaffected (line 668) | fn test_readonly_policy_unaffected() { FILE: src/config/search.rs type WorkspaceSearchConfig (line 7) | pub struct WorkspaceSearchConfig { method resolve (line 36) | pub(crate) fn resolve() -> Result { method default (line 25) | fn default() -> Self { function clear_search_env (line 97) | fn clear_search_env() { function defaults_when_no_env (line 108) | fn defaults_when_no_env() { function env_overrides (line 120) | fn env_overrides() { function invalid_strategy_rejected (line 142) | fn invalid_strategy_rejected() { function weighted_strategy_defaults (line 158) | fn weighted_strategy_defaults() { function weighted_both_zero_rejected (line 177) | fn weighted_both_zero_rejected() { function rrf_both_zero_allowed (line 195) | fn rrf_both_zero_allowed() { FILE: src/config/secrets.rs type SecretsConfig (line 8) | pub struct SecretsConfig { method fmt (line 18) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method resolve (line 32) | pub(crate) async fn resolve() -> Result { method master_key (line 67) | pub fn master_key(&self) -> Option<&SecretString> { FILE: src/config/skills.rs type SkillsConfig (line 9) | pub struct SkillsConfig { method resolve (line 47) | pub(crate) fn resolve() -> Result { method default (line 25) | fn default() -> Self { function default_skills_dir (line 37) | fn default_skills_dir() -> PathBuf { function default_installed_skills_dir (line 42) | fn default_installed_skills_dir() -> PathBuf { FILE: src/config/transcription.rs type TranscriptionConfig (line 9) | pub struct TranscriptionConfig { method resolve (line 41) | pub(crate) fn resolve(settings: &Settings) -> Result { method resolve_api_key (line 82) | fn resolve_api_key(&self) -> Option<&SecretString> { method create_provider (line 92) | pub fn create_provider(&self) -> Option Self { FILE: src/config/tunnel.rs type TunnelConfig (line 17) | pub struct TunnelConfig { method resolve (line 27) | pub(crate) fn resolve(settings: &Settings) -> Result { method is_enabled (line 94) | pub fn is_enabled(&self) -> bool { method webhook_url (line 99) | pub fn webhook_url(&self, path: &str) -> Option { function default_is_disabled (line 119) | fn default_is_disabled() { function is_enabled_with_static_url (line 129) | fn is_enabled_with_static_url() { function is_enabled_with_provider (line 138) | fn is_enabled_with_provider() { function is_enabled_with_both (line 155) | fn is_enabled_with_both() { function webhook_url_none_when_no_public_url (line 175) | fn webhook_url_none_when_no_public_url() { function webhook_url_basic (line 181) | fn webhook_url_basic() { function webhook_url_trims_trailing_slash_on_base (line 193) | fn webhook_url_trims_trailing_slash_on_base() { function webhook_url_trims_leading_slash_on_path (line 205) | fn webhook_url_trims_leading_slash_on_path() { function webhook_url_double_slash_normalization (line 218) | fn webhook_url_double_slash_normalization() { function webhook_url_empty_path (line 231) | fn webhook_url_empty_path() { function provider_config_cloudflare (line 245) | fn provider_config_cloudflare() { function provider_config_tailscale (line 260) | fn provider_config_tailscale() { function provider_config_tailscale_defaults (line 270) | fn provider_config_tailscale_defaults() { function provider_config_ngrok (line 277) | fn provider_config_ngrok() { function provider_config_ngrok_defaults (line 287) | fn provider_config_ngrok_defaults() { function provider_config_custom (line 294) | fn provider_config_custom() { function provider_config_custom_defaults (line 306) | fn provider_config_custom_defaults() { function cloudflare_config_defaults (line 314) | fn cloudflare_config_defaults() { FILE: src/config/wasm.rs type WasmConfig (line 10) | pub struct WasmConfig { method resolve (line 47) | pub(crate) fn resolve(settings: &crate::settings::Settings) -> Result<... method to_runtime_config (line 75) | pub fn to_runtime_config(&self) -> crate::tools::wasm::WasmRuntimeConf... method default (line 28) | fn default() -> Self { function default_tools_dir (line 42) | fn default_tools_dir() -> PathBuf { function resolve_falls_back_to_settings (line 102) | fn resolve_falls_back_to_settings() { function env_overrides_settings (line 114) | fn env_overrides_settings() { FILE: src/context/fallback.rs type FallbackDeliverable (line 21) | pub struct FallbackDeliverable { method build (line 59) | pub fn build(ctx: &JobContext, memory: &Memory, reason: &str) -> Self { type LastAction (line 42) | pub struct LastAction { type ActionStats (line 51) | pub struct ActionStats { function truncate_str (line 111) | fn truncate_str(s: &str, max_len: usize) -> &str { function test_fallback_zero_actions (line 125) | fn test_fallback_zero_actions() { function test_fallback_mixed_actions (line 143) | fn test_fallback_mixed_actions() { function test_fallback_failed_action_shows_error (line 188) | fn test_fallback_failed_action_shows_error() { function test_fallback_last_action_truncation (line 204) | fn test_fallback_last_action_truncation() { function test_fallback_uses_sanitized_output (line 225) | fn test_fallback_uses_sanitized_output() { function test_fallback_elapsed_time (line 246) | fn test_fallback_elapsed_time() { function test_fallback_no_started_at (line 260) | fn test_fallback_no_started_at() { function test_fallback_elapsed_time_no_completed_at (line 269) | fn test_fallback_elapsed_time_no_completed_at() { function test_fallback_failure_reason_truncation (line 282) | fn test_fallback_failure_reason_truncation() { function test_truncate_str_ascii (line 294) | fn test_truncate_str_ascii() { function test_truncate_str_unicode (line 300) | fn test_truncate_str_unicode() { function test_fallback_serialization (line 309) | fn test_fallback_serialization() { FILE: src/context/manager.rs type ContextManager (line 13) | pub struct ContextManager { method new (line 24) | pub fn new(max_jobs: usize) -> Self { method create_job (line 33) | pub async fn create_job( method create_job_for_user (line 43) | pub async fn create_job_for_user( method register_sandbox_job (line 64) | pub async fn register_sandbox_job( method insert_context (line 82) | async fn insert_context(&self, context: JobContext) -> Result<(), JobE... method get_context (line 106) | pub async fn get_context(&self, job_id: Uuid) -> Result(&self, job_id: Uuid, f: F) -> Result... method update_context_and_get (line 133) | pub async fn update_context_and_get( method get_memory (line 150) | pub async fn get_memory(&self, job_id: Uuid) -> Result(&self, job_id: Uuid, f: F) -> Result<... method active_jobs (line 172) | pub async fn active_jobs(&self) -> Vec { method all_jobs (line 183) | pub async fn all_jobs(&self) -> Vec { method active_jobs_for (line 188) | pub async fn active_jobs_for(&self, user_id: &str) -> Vec { method all_jobs_for (line 199) | pub async fn all_jobs_for(&self, user_id: &str) -> Vec { method active_count (line 210) | pub async fn active_count(&self) -> usize { method remove_job (line 220) | pub async fn remove_job(&self, job_id: Uuid) -> Result<(JobContext, Me... method find_stuck_jobs (line 244) | pub async fn find_stuck_jobs(&self) -> Vec { method find_stuck_jobs_with_threshold (line 249) | pub async fn find_stuck_jobs_with_threshold( method summary (line 284) | pub async fn summary(&self) -> ContextSummary { method summary_for (line 306) | pub async fn summary_for(&self, user_id: &str) -> ContextSummary { method default (line 336) | fn default() -> Self { type ContextSummary (line 343) | pub struct ContextSummary { function test_create_job (line 360) | async fn test_create_job() { function test_create_job_for_user_sets_user_id (line 369) | async fn test_create_job_for_user_sets_user_id() { function test_max_jobs_limit (line 381) | async fn test_max_jobs_limit() { function test_update_context (line 404) | async fn test_update_context() { function concurrent_creates_produce_unique_ids (line 423) | async fn concurrent_creates_produce_unique_ids() { function concurrent_creates_respect_max_jobs_limit (line 448) | async fn concurrent_creates_respect_max_jobs_limit() { function concurrent_creates_and_reads_no_corruption (line 490) | async fn concurrent_creates_and_reads_no_corruption() { function concurrent_updates_do_not_lose_state (line 544) | async fn concurrent_updates_do_not_lose_state() { function get_context_not_found (line 588) | async fn get_context_not_found() { function update_context_not_found (line 596) | async fn update_context_not_found() { function remove_job_returns_context_and_memory (line 604) | async fn remove_job_returns_context_and_memory() { function remove_job_not_found (line 624) | async fn remove_job_not_found() { function get_memory_and_update_memory (line 631) | async fn get_memory_and_update_memory() { function update_memory_not_found (line 655) | async fn update_memory_not_found() { function get_memory_not_found (line 662) | async fn get_memory_not_found() { function find_stuck_jobs_returns_only_stuck (line 669) | async fn find_stuck_jobs_returns_only_stuck() { function find_stuck_jobs_with_threshold_detects_idle_in_progress (line 700) | async fn find_stuck_jobs_with_threshold_detects_idle_in_progress() { function active_count_tracks_non_terminal_jobs (line 740) | async fn active_count_tracks_non_terminal_jobs() { function active_jobs_for_filters_by_user (line 781) | async fn active_jobs_for_filters_by_user() { function summary_counts_states_correctly (line 820) | async fn summary_counts_states_correctly() { function summary_for_scopes_to_user (line 877) | async fn summary_for_scopes_to_user() { function default_context_manager_has_max_10 (line 910) | async fn default_context_manager_has_max_10() { function all_jobs_returns_all_regardless_of_state (line 932) | async fn all_jobs_returns_all_regardless_of_state() { function create_job_uses_default_user (line 960) | async fn create_job_uses_default_user() { function concurrent_remove_and_read (line 968) | async fn concurrent_remove_and_read() { function update_context_and_get_atomicity_regression_issue_807 (line 1017) | async fn update_context_and_get_atomicity_regression_issue_807() { function update_context_and_get_no_concurrent_interleave (line 1048) | async fn update_context_and_get_no_concurrent_interleave() { function sequential_routines_unlimited_completed_not_counted (line 1083) | async fn sequential_routines_unlimited_completed_not_counted() { function parallel_jobs_limit_enforced_for_active_jobs (line 1144) | async fn parallel_jobs_limit_enforced_for_active_jobs() { function completed_jobs_should_free_slots_after_fix (line 1214) | async fn completed_jobs_should_free_slots_after_fix() { function register_sandbox_job_visible_to_queries (line 1302) | async fn register_sandbox_job_visible_to_queries() { function register_sandbox_job_respects_max_jobs (line 1338) | async fn register_sandbox_job_respects_max_jobs() { function register_sandbox_job_transitions_correctly (line 1359) | async fn register_sandbox_job_transitions_correctly() { FILE: src/context/memory.rs type ActionRecord (line 14) | pub struct ActionRecord { method new (line 43) | pub fn new(sequence: u32, tool_name: impl Into, input: serde_j... method succeed (line 65) | pub fn succeed( method fail (line 79) | pub fn fail(mut self, error: impl Into, duration: Duration) ->... method with_warnings (line 87) | pub fn with_warnings(mut self, warnings: Vec) -> Self { method with_cost (line 93) | pub fn with_cost(mut self, cost: Decimal) -> Self { type ConversationMemory (line 101) | pub struct ConversationMemory { method new (line 110) | pub fn new(max_messages: usize) -> Self { method add (line 118) | pub fn add(&mut self, message: ChatMessage) { method messages (line 137) | pub fn messages(&self) -> &[ChatMessage] { method last_n (line 142) | pub fn last_n(&self, n: usize) -> &[ChatMessage] { method clear (line 148) | pub fn clear(&mut self) { method len (line 153) | pub fn len(&self) -> usize { method is_empty (line 158) | pub fn is_empty(&self) -> bool { type Memory (line 165) | pub struct Memory { method new (line 178) | pub fn new(job_id: Uuid) -> Self { method add_message (line 188) | pub fn add_message(&mut self, message: ChatMessage) { method create_action (line 193) | pub fn create_action( method record_action (line 204) | pub fn record_action(&mut self, action: ActionRecord) { method total_cost (line 209) | pub fn total_cost(&self) -> Decimal { method total_duration (line 217) | pub fn total_duration(&self) -> Duration { method successful_actions (line 225) | pub fn successful_actions(&self) -> usize { method failed_actions (line 230) | pub fn failed_actions(&self) -> usize { method last_action (line 235) | pub fn last_action(&self) -> Option<&ActionRecord> { method actions_by_tool (line 240) | pub fn actions_by_tool(&self, tool_name: &str) -> Vec<&ActionRecord> { function test_action_record (line 253) | fn test_action_record() { function test_conversation_memory (line 267) | fn test_conversation_memory() { function test_memory_totals (line 278) | fn test_memory_totals() { function test_action_record_fail (line 299) | fn test_action_record_fail() { function test_action_record_with_warnings (line 311) | fn test_action_record_with_warnings() { function test_action_record_with_cost (line 321) | fn test_action_record_with_cost() { function test_action_record_new_defaults (line 330) | fn test_action_record_new_defaults() { function test_action_record_succeed_sets_fields (line 346) | fn test_action_record_succeed_sets_fields() { function test_conversation_memory_clear (line 369) | fn test_conversation_memory_clear() { function test_conversation_memory_last_n (line 383) | fn test_conversation_memory_last_n() { function test_conversation_memory_last_n_empty (line 401) | fn test_conversation_memory_last_n_empty() { function test_conversation_memory_preserves_system_message_on_trim (line 408) | fn test_conversation_memory_preserves_system_message_on_trim() { function test_conversation_memory_trims_non_system_first (line 427) | fn test_conversation_memory_trims_non_system_first() { function test_conversation_memory_max_one_with_system_does_not_loop (line 440) | fn test_conversation_memory_max_one_with_system_does_not_loop() { function test_memory_failed_actions (line 456) | fn test_memory_failed_actions() { function test_memory_last_action (line 476) | fn test_memory_last_action() { function test_memory_actions_by_tool (line 495) | fn test_memory_actions_by_tool() { function test_memory_create_action_increments_sequence (line 517) | fn test_memory_create_action_increments_sequence() { function test_memory_add_message_delegates_to_conversation (line 531) | fn test_memory_add_message_delegates_to_conversation() { function test_memory_total_cost_with_no_cost_actions (line 543) | fn test_memory_total_cost_with_no_cost_actions() { function test_memory_total_duration_mixed (line 556) | fn test_memory_total_duration_mixed() { FILE: src/context/state.rs type TokenBudgetExceeded (line 17) | pub struct TokenBudgetExceeded { type JobState (line 27) | pub enum JobState { method can_transition_to (line 48) | pub fn can_transition_to(&self, target: JobState) -> bool { method is_terminal (line 76) | pub fn is_terminal(&self) -> bool { method is_active (line 81) | pub fn is_active(&self) -> bool { method is_parallel_blocking (line 90) | pub fn is_parallel_blocking(&self) -> bool { method fmt (line 96) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type StateTransition (line 113) | pub struct StateTransition { type JobContext (line 126) | pub struct JobContext { method new (line 203) | pub fn new(title: impl Into, description: impl Into) -... method with_user (line 208) | pub fn with_user( method with_timezone (line 244) | pub fn with_timezone(mut self, tz: impl Into) -> Self { method with_requester_id (line 250) | pub fn with_requester_id(mut self, requester_id: impl Into) ->... method transition_to (line 256) | pub fn transition_to( method add_cost (line 313) | pub fn add_cost(&mut self, cost: Decimal) { method add_tokens (line 319) | pub fn add_tokens(&mut self, tokens: u64) -> Result<(), TokenBudgetExc... method budget_exceeded (line 332) | pub fn budget_exceeded(&self) -> bool { method elapsed (line 341) | pub fn elapsed(&self) -> Option { method mark_stuck (line 350) | pub fn mark_stuck(&mut self, reason: impl Into) -> Result<(), ... method attempt_recovery (line 355) | pub fn attempt_recovery(&mut self) -> Result<(), String> { method default (line 365) | fn default() -> Self { function test_state_transitions (line 375) | fn test_state_transitions() { function test_completed_to_completed_is_idempotent (line 383) | fn test_completed_to_completed_is_idempotent() { function test_other_self_transitions_still_rejected (line 410) | fn test_other_self_transitions_still_rejected() { function test_terminal_states (line 422) | fn test_terminal_states() { function test_job_context_transitions (line 430) | fn test_job_context_transitions() { function test_transition_history_capped (line 444) | fn test_transition_history_capped() { function test_add_tokens_enforces_budget (line 461) | fn test_add_tokens_enforces_budget() { function test_add_tokens_unlimited (line 471) | fn test_add_tokens_unlimited() { function test_budget_exceeded (line 478) | fn test_budget_exceeded() { function test_budget_exceeded_none (line 489) | fn test_budget_exceeded_none() { function test_stuck_recovery (line 495) | fn test_stuck_recovery() { FILE: src/db/libsql/conversations.rs method create_conversation (line 15) | async fn create_conversation( method touch_conversation (line 33) | async fn touch_conversation(&self, id: Uuid) -> Result<(), DatabaseError> { method add_conversation_message (line 45) | async fn add_conversation_message( method ensure_conversation (line 64) | async fn ensure_conversation( method list_conversations_with_preview (line 89) | async fn list_conversations_with_preview( method list_conversations_all_channels (line 157) | async fn list_conversations_all_channels( method get_or_create_routine_conversation (line 226) | async fn get_or_create_routine_conversation( method get_or_create_heartbeat_conversation (line 295) | async fn get_or_create_heartbeat_conversation( method get_or_create_assistant_conversation (line 355) | async fn get_or_create_assistant_conversation( method create_conversation_with_metadata (line 399) | async fn create_conversation_with_metadata( method list_conversation_messages_paginated (line 417) | async fn list_conversation_messages_paginated( method update_conversation_metadata_field (line 474) | async fn update_conversation_metadata_field( method get_conversation_metadata (line 492) | async fn get_conversation_metadata( method list_conversation_messages (line 515) | async fn list_conversation_messages( method conversation_belongs_to_user (line 549) | async fn conversation_belongs_to_user( function test_get_or_create_routine_conversation_is_idempotent (line 576) | async fn test_get_or_create_routine_conversation_is_idempotent() { function test_routine_conversation_persists_across_messages (line 621) | async fn test_routine_conversation_persists_across_messages() { function test_get_or_create_heartbeat_conversation_is_idempotent (line 670) | async fn test_get_or_create_heartbeat_conversation_is_idempotent() { FILE: src/db/libsql/jobs.rs method save_job (line 21) | async fn save_job(&self, ctx: &JobContext) -> Result<(), DatabaseError> { method get_job (line 79) | async fn get_job(&self, id: Uuid) -> Result, Database... method update_job_status (line 143) | async fn update_job_status( method mark_job_stuck (line 159) | async fn mark_job_stuck(&self, id: Uuid) -> Result<(), DatabaseError> { method get_stuck_jobs (line 171) | async fn get_stuck_jobs(&self) -> Result, DatabaseError> { method list_agent_jobs (line 193) | async fn list_agent_jobs(&self) -> Result, DatabaseE... method get_agent_job_failure_reason (line 233) | async fn get_agent_job_failure_reason( method agent_job_summary (line 257) | async fn agent_job_summary(&self) -> Result Resu... method get_job_actions (line 314) | async fn get_job_actions(&self, job_id: Uuid) -> Result) -> Result Result { method new_memory (line 80) | pub async fn new_memory() -> Result { method new_remote_replica (line 92) | pub async fn new_remote_replica( method shared_db (line 115) | pub fn shared_db(&self) -> Arc { method connect (line 128) | pub async fn connect(&self) -> Result { function parse_timestamp (line 168) | pub(crate) fn parse_timestamp(s: &str) -> Result, String> { function fmt_ts (line 196) | pub(crate) fn fmt_ts(dt: &DateTime) -> String { function fmt_opt_ts (line 201) | pub(crate) fn fmt_opt_ts(dt: &Option>) -> libsql::Value { function parse_job_state (line 208) | pub(crate) fn parse_job_state(s: &str) -> JobState { function get_text (line 223) | pub(crate) fn get_text(row: &libsql::Row, idx: i32) -> String { function get_opt_text (line 229) | pub(crate) fn get_opt_text(row: &libsql::Row, idx: i32) -> Option { function opt_text (line 235) | pub(crate) fn opt_text(s: Option<&str>) -> libsql::Value { function opt_text_owned (line 243) | pub(crate) fn opt_text_owned(s: Option) -> libsql::Value { function normalize_notify_user (line 250) | pub(crate) fn normalize_notify_user(value: Option) -> Option i64 { function get_opt_bool (line 267) | pub(crate) fn get_opt_bool(row: &libsql::Row, idx: i32) -> Option { function get_decimal (line 272) | pub(crate) fn get_decimal(row: &libsql::Row, idx: i32) -> Decimal { function get_opt_decimal (line 280) | pub(crate) fn get_opt_decimal(row: &libsql::Row, idx: i32) -> Option serde_json::Value { function get_ts (line 299) | pub(crate) fn get_ts(row: &libsql::Row, idx: i32) -> DateTime { function get_opt_ts (line 316) | pub(crate) fn get_opt_ts(row: &libsql::Row, idx: i32) -> Option Result<(), DatabaseError> { function row_to_memory_document (line 358) | pub(crate) fn row_to_memory_document(row: &libsql::Row) -> MemoryDocument { function row_to_routine_libsql (line 371) | pub(crate) fn row_to_routine_libsql(row: &libsql::Row) -> Result Result Result<(), Database... method get_routine (line 75) | async fn get_routine(&self, id: Uuid) -> Result, Databas... method get_routine_by_name (line 95) | async fn get_routine_by_name( method list_routines (line 122) | async fn list_routines(&self, user_id: &str) -> Result, Dat... method list_all_routines (line 146) | async fn list_all_routines(&self) -> Result, DatabaseError> { method list_event_routines (line 167) | async fn list_event_routines(&self) -> Result, DatabaseErro... method list_due_cron_routines (line 191) | async fn list_due_cron_routines(&self) -> Result, DatabaseE... method update_routine (line 216) | async fn update_routine(&self, routine: &Routine) -> Result<(), Database... method update_routine_runtime (line 267) | async fn update_routine_runtime( method delete_routine (line 301) | async fn delete_routine(&self, id: Uuid) -> Result { method create_routine_run (line 313) | async fn create_routine_run(&self, run: &RoutineRun) -> Result<(), Datab... method complete_routine_run (line 337) | async fn complete_routine_run( method list_routine_runs (line 366) | async fn list_routine_runs( method count_running_routine_runs (line 394) | async fn count_running_routine_runs(&self, routine_id: Uuid) -> Result Result, ... FILE: src/db/libsql/sandbox.rs method save_sandbox_job (line 18) | async fn save_sandbox_job(&self, job: &SandboxJobRecord) -> Result<(), D... method get_sandbox_job (line 52) | async fn get_sandbox_job(&self, id: Uuid) -> Result Result, Datab... method update_sandbox_job_status (line 126) | async fn update_sandbox_job_status( method cleanup_stale_sandbox_jobs (line 160) | async fn cleanup_stale_sandbox_jobs(&self) -> Result { method sandbox_job_summary (line 182) | async fn sandbox_job_summary(&self) -> Result Result<... method get_sandbox_job_mode (line 319) | async fn get_sandbox_job_mode(&self, id: Uuid) -> Result,... method save_job_event (line 339) | async fn save_job_event( method list_job_events (line 355) | async fn list_job_events( FILE: src/db/libsql/settings.rs method get_setting (line 17) | async fn get_setting( method get_setting_full (line 41) | async fn get_setting_full( method set_setting (line 69) | async fn set_setting( method delete_setting (line 92) | async fn delete_setting(&self, user_id: &str, key: &str) -> Result Result, ... method get_all_settings (line 129) | async fn get_all_settings( method set_all_settings (line 153) | async fn set_all_settings( method has_settings (line 189) | async fn has_settings(&self, user_id: &str) -> Result Result Result<(), Databa... method increment_repair_attempts (line 87) | async fn increment_repair_attempts(&self, tool_name: &str) -> Result<(),... FILE: src/db/libsql/workspace.rs function resolve_embedding_dimension (line 33) | pub(crate) fn resolve_embedding_dimension() -> Option { method ensure_vector_index (line 75) | pub async fn ensure_vector_index(&self, dimension: usize) -> Result<(), ... method get_document_by_path (line 245) | async fn get_document_by_path( method get_document_by_id (line 287) | async fn get_document_by_id(&self, id: Uuid) -> Result Result<(), W... method delete_document_by_path (line 379) | async fn delete_document_by_path( method list_directory (line 406) | async fn list_directory( method list_all_paths (line 511) | async fn list_all_paths( method list_documents (line 546) | async fn list_documents( method delete_chunks (line 587) | async fn delete_chunks(&self, document_id: Uuid) -> Result<(), Workspace... method insert_chunk (line 605) | async fn insert_chunk( method update_chunk_embedding (line 647) | async fn update_chunk_embedding( method get_chunks_without_embeddings (line 671) | async fn get_chunks_without_embeddings( method hybrid_search (line 721) | async fn hybrid_search( function setup_backend (line 851) | async fn setup_backend() -> (LibSqlBackend, tempfile::TempDir) { function insert_test_chunk (line 860) | async fn insert_test_chunk( function test_ensure_vector_index_enables_vector_search (line 885) | async fn test_ensure_vector_index_enables_vector_search() { function test_ensure_vector_index_dimension_change (line 922) | async fn test_ensure_vector_index_dimension_change() { function test_ensure_vector_index_noop_when_unchanged (line 955) | async fn test_ensure_vector_index_noop_when_unchanged() { function test_hybrid_search_returns_vector_results (line 986) | async fn test_hybrid_search_returns_vector_results() { function clear_embedding_env (line 1022) | fn clear_embedding_env() { function returns_none_when_disabled (line 1032) | fn returns_none_when_disabled() { function returns_explicit_dimension (line 1039) | fn returns_explicit_dimension() { function infers_from_model (line 1055) | fn infers_from_model() { function defaults_to_1536_for_unknown_model (line 1071) | fn defaults_to_1536_for_unknown_model() { FILE: src/db/libsql_migrations.rs constant SCHEMA (line 22) | pub const SCHEMA: &str = r#" constant INCREMENTAL_MIGRATIONS (line 588) | pub const INCREMENTAL_MIGRATIONS: &[(i64, &str, &str)] = &[ function run_incremental (line 734) | pub async fn run_incremental(conn: &libsql::Connection) -> Result<(), cr... FILE: src/db/mod.rs function connect_from_config (line 51) | pub async fn connect_from_config( type DatabaseHandles (line 63) | pub struct DatabaseHandles { function connect_with_handles (line 72) | pub async fn connect_with_handles( function create_secrets_store (line 131) | pub async fn create_secrets_store( function connect_without_migrations (line 192) | pub async fn connect_without_migrations( function validate_postgres (line 250) | async fn validate_postgres(pool: &deadpool_postgres::Pool) -> Result<(),... type ConversationStore (line 319) | pub trait ConversationStore: Send + Sync { method create_conversation (line 320) | async fn create_conversation( method touch_conversation (line 326) | async fn touch_conversation(&self, id: Uuid) -> Result<(), DatabaseErr... method add_conversation_message (line 327) | async fn add_conversation_message( method ensure_conversation (line 333) | async fn ensure_conversation( method list_conversations_with_preview (line 340) | async fn list_conversations_with_preview( method list_conversations_all_channels (line 346) | async fn list_conversations_all_channels( method get_or_create_routine_conversation (line 351) | async fn get_or_create_routine_conversation( method get_or_create_heartbeat_conversation (line 357) | async fn get_or_create_heartbeat_conversation( method get_or_create_assistant_conversation (line 361) | async fn get_or_create_assistant_conversation( method create_conversation_with_metadata (line 366) | async fn create_conversation_with_metadata( method list_conversation_messages_paginated (line 372) | async fn list_conversation_messages_paginated( method update_conversation_metadata_field (line 378) | async fn update_conversation_metadata_field( method get_conversation_metadata (line 384) | async fn get_conversation_metadata( method list_conversation_messages (line 388) | async fn list_conversation_messages( method conversation_belongs_to_user (line 392) | async fn conversation_belongs_to_user( type JobStore (line 400) | pub trait JobStore: Send + Sync { method save_job (line 401) | async fn save_job(&self, ctx: &JobContext) -> Result<(), DatabaseError>; method get_job (line 402) | async fn get_job(&self, id: Uuid) -> Result, Databa... method update_job_status (line 403) | async fn update_job_status( method mark_job_stuck (line 409) | async fn mark_job_stuck(&self, id: Uuid) -> Result<(), DatabaseError>; method get_stuck_jobs (line 410) | async fn get_stuck_jobs(&self) -> Result, DatabaseError>; method list_agent_jobs (line 411) | async fn list_agent_jobs(&self) -> Result, Databas... method agent_job_summary (line 412) | async fn agent_job_summary(&self) -> Result Re... method get_job_actions (line 417) | async fn get_job_actions(&self, job_id: Uuid) -> Result) -> Result<... method save_estimation_snapshot (line 419) | async fn save_estimation_snapshot( method update_estimation_actuals (line 428) | async fn update_estimation_actuals( type SandboxStore (line 438) | pub trait SandboxStore: Send + Sync { method save_sandbox_job (line 439) | async fn save_sandbox_job(&self, job: &SandboxJobRecord) -> Result<(),... method get_sandbox_job (line 440) | async fn get_sandbox_job(&self, id: Uuid) -> Result Result, Dat... method update_sandbox_job_status (line 442) | async fn update_sandbox_job_status( method cleanup_stale_sandbox_jobs (line 451) | async fn cleanup_stale_sandbox_jobs(&self) -> Result; method sandbox_job_summary (line 452) | async fn sandbox_job_summary(&self) -> Result Resul... method get_sandbox_job_mode (line 467) | async fn get_sandbox_job_mode(&self, id: Uuid) -> Result Result<(), Databa... method get_routine (line 484) | async fn get_routine(&self, id: Uuid) -> Result, Datab... method get_routine_by_name (line 485) | async fn get_routine_by_name( method list_routines (line 490) | async fn list_routines(&self, user_id: &str) -> Result, D... method list_all_routines (line 491) | async fn list_all_routines(&self) -> Result, DatabaseError>; method list_event_routines (line 492) | async fn list_event_routines(&self) -> Result, DatabaseEr... method list_due_cron_routines (line 493) | async fn list_due_cron_routines(&self) -> Result, Databas... method update_routine (line 494) | async fn update_routine(&self, routine: &Routine) -> Result<(), Databa... method update_routine_runtime (line 495) | async fn update_routine_runtime( method delete_routine (line 504) | async fn delete_routine(&self, id: Uuid) -> Result; method create_routine_run (line 505) | async fn create_routine_run(&self, run: &RoutineRun) -> Result<(), Dat... method complete_routine_run (line 506) | async fn complete_routine_run( method list_routine_runs (line 513) | async fn list_routine_runs( method count_running_routine_runs (line 518) | async fn count_running_routine_runs(&self, routine_id: Uuid) -> Result... method count_running_routine_runs_batch (line 519) | async fn count_running_routine_runs_batch( method link_routine_run_to_job (line 523) | async fn link_routine_run_to_job( method list_dispatched_routine_runs (line 531) | async fn list_dispatched_routine_runs(&self) -> Result... type ToolFailureStore (line 535) | pub trait ToolFailureStore: Send + Sync { method record_tool_failure (line 536) | async fn record_tool_failure( method get_broken_tools (line 541) | async fn get_broken_tools(&self, threshold: i32) -> Result Result<(), Data... method increment_repair_attempts (line 543) | async fn increment_repair_attempts(&self, tool_name: &str) -> Result<(... type SettingsStore (line 547) | pub trait SettingsStore: Send + Sync { method get_setting (line 548) | async fn get_setting( method get_setting_full (line 553) | async fn get_setting_full( method set_setting (line 558) | async fn set_setting( method delete_setting (line 564) | async fn delete_setting(&self, user_id: &str, key: &str) -> Result Result... method get_all_settings (line 566) | async fn get_all_settings( method set_all_settings (line 570) | async fn set_all_settings( method has_settings (line 575) | async fn has_settings(&self, user_id: &str) -> Result Result Result<(),... method delete_document_by_path (line 594) | async fn delete_document_by_path( method list_directory (line 600) | async fn list_directory( method list_all_paths (line 606) | async fn list_all_paths( method list_documents (line 611) | async fn list_documents( method delete_chunks (line 616) | async fn delete_chunks(&self, document_id: Uuid) -> Result<(), Workspa... method insert_chunk (line 617) | async fn insert_chunk( method update_chunk_embedding (line 624) | async fn update_chunk_embedding( method get_chunks_without_embeddings (line 629) | async fn get_chunks_without_embeddings( method hybrid_search (line 635) | async fn hybrid_search( type Database (line 650) | pub trait Database: method run_migrations (line 662) | async fn run_migrations(&self) -> Result<(), DatabaseError>; function test_create_secrets_store_libsql_backend (line 675) | async fn test_create_secrets_store_libsql_backend() { FILE: src/db/postgres.rs type PgBackend (line 36) | pub struct PgBackend { method new (line 43) | pub async fn new(config: &DatabaseConfig) -> Result Pool { method run_migrations (line 61) | async fn run_migrations(&self) -> Result<(), DatabaseError> { method create_conversation (line 70) | async fn create_conversation( method touch_conversation (line 81) | async fn touch_conversation(&self, id: Uuid) -> Result<(), DatabaseError> { method add_conversation_message (line 85) | async fn add_conversation_message( method ensure_conversation (line 96) | async fn ensure_conversation( method list_conversations_with_preview (line 108) | async fn list_conversations_with_preview( method list_conversations_all_channels (line 119) | async fn list_conversations_all_channels( method get_or_create_routine_conversation (line 129) | async fn get_or_create_routine_conversation( method get_or_create_heartbeat_conversation (line 140) | async fn get_or_create_heartbeat_conversation( method get_or_create_assistant_conversation (line 149) | async fn get_or_create_assistant_conversation( method create_conversation_with_metadata (line 159) | async fn create_conversation_with_metadata( method list_conversation_messages_paginated (line 170) | async fn list_conversation_messages_paginated( method update_conversation_metadata_field (line 181) | async fn update_conversation_metadata_field( method get_conversation_metadata (line 192) | async fn get_conversation_metadata( method list_conversation_messages (line 199) | async fn list_conversation_messages( method conversation_belongs_to_user (line 206) | async fn conversation_belongs_to_user( method save_job (line 221) | async fn save_job(&self, ctx: &JobContext) -> Result<(), DatabaseError> { method get_job (line 225) | async fn get_job(&self, id: Uuid) -> Result, Database... method update_job_status (line 229) | async fn update_job_status( method mark_job_stuck (line 240) | async fn mark_job_stuck(&self, id: Uuid) -> Result<(), DatabaseError> { method get_stuck_jobs (line 244) | async fn get_stuck_jobs(&self) -> Result, DatabaseError> { method list_agent_jobs (line 248) | async fn list_agent_jobs(&self) -> Result, DatabaseE... method agent_job_summary (line 252) | async fn agent_job_summary(&self) -> Result Resu... method get_job_actions (line 267) | async fn get_job_actions(&self, job_id: Uuid) -> Result) -> Result Result<(), D... method get_sandbox_job (line 317) | async fn get_sandbox_job(&self, id: Uuid) -> Result Result, Datab... method update_sandbox_job_status (line 325) | async fn update_sandbox_job_status( method cleanup_stale_sandbox_jobs (line 339) | async fn cleanup_stale_sandbox_jobs(&self) -> Result { method sandbox_job_summary (line 343) | async fn sandbox_job_summary(&self) -> Result Result<... method get_sandbox_job_mode (line 375) | async fn get_sandbox_job_mode(&self, id: Uuid) -> Result,... method save_job_event (line 379) | async fn save_job_event( method list_job_events (line 388) | async fn list_job_events( method create_routine (line 401) | async fn create_routine(&self, routine: &Routine) -> Result<(), Database... method get_routine (line 405) | async fn get_routine(&self, id: Uuid) -> Result, Databas... method get_routine_by_name (line 409) | async fn get_routine_by_name( method list_routines (line 417) | async fn list_routines(&self, user_id: &str) -> Result, Dat... method list_all_routines (line 421) | async fn list_all_routines(&self) -> Result, DatabaseError> { method list_event_routines (line 425) | async fn list_event_routines(&self) -> Result, DatabaseErro... method list_due_cron_routines (line 429) | async fn list_due_cron_routines(&self) -> Result, DatabaseE... method update_routine (line 433) | async fn update_routine(&self, routine: &Routine) -> Result<(), Database... method update_routine_runtime (line 437) | async fn update_routine_runtime( method delete_routine (line 458) | async fn delete_routine(&self, id: Uuid) -> Result { method create_routine_run (line 462) | async fn create_routine_run(&self, run: &RoutineRun) -> Result<(), Datab... method complete_routine_run (line 466) | async fn complete_routine_run( method list_routine_runs (line 478) | async fn list_routine_runs( method count_running_routine_runs (line 486) | async fn count_running_routine_runs(&self, routine_id: Uuid) -> Result Result, ... method record_tool_failure (line 516) | async fn record_tool_failure( method get_broken_tools (line 526) | async fn get_broken_tools(&self, threshold: i32) -> Result Result<(), Databa... method increment_repair_attempts (line 534) | async fn increment_repair_attempts(&self, tool_name: &str) -> Result<(),... method get_setting (line 543) | async fn get_setting( method get_setting_full (line 551) | async fn get_setting_full( method set_setting (line 559) | async fn set_setting( method delete_setting (line 568) | async fn delete_setting(&self, user_id: &str, key: &str) -> Result Result, ... method get_all_settings (line 576) | async fn get_all_settings( method set_all_settings (line 583) | async fn set_all_settings( method has_settings (line 591) | async fn has_settings(&self, user_id: &str) -> Result Result Result<(), W... method delete_document_by_path (line 630) | async fn delete_document_by_path( method list_directory (line 641) | async fn list_directory( method list_all_paths (line 650) | async fn list_all_paths( method list_documents (line 658) | async fn list_documents( method delete_chunks (line 666) | async fn delete_chunks(&self, document_id: Uuid) -> Result<(), Workspace... method insert_chunk (line 670) | async fn insert_chunk( method update_chunk_embedding (line 682) | async fn update_chunk_embedding( method get_chunks_without_embeddings (line 690) | async fn get_chunks_without_embeddings( method hybrid_search (line 701) | async fn hybrid_search( FILE: src/db/tls.rs type CreatePoolError (line 15) | pub enum CreatePoolError { function make_rustls_connector (line 23) | fn make_rustls_connector() -> Result { function create_pool (line 59) | pub fn create_pool( function create_pool_disable_mode (line 81) | fn create_pool_disable_mode() { function create_pool_prefer_mode (line 90) | fn create_pool_prefer_mode() { function create_pool_require_mode (line 98) | fn create_pool_require_mode() { FILE: src/document_extraction/extractors.rs function extract_text (line 6) | pub fn extract_text(data: &[u8], mime: &str, filename: Option<&str>) -> ... function extract_pdf (line 67) | fn extract_pdf(data: &[u8]) -> Result { function extract_docx (line 73) | fn extract_docx(data: &[u8]) -> Result { function extract_pptx (line 77) | fn extract_pptx(data: &[u8]) -> Result { function extract_xlsx (line 113) | fn extract_xlsx(data: &[u8]) -> Result { function extract_office_xml (line 164) | fn extract_office_xml(data: &[u8], content_path: &str) -> Result Result { function extract_rtf (line 192) | fn extract_rtf(data: &[u8]) -> Result { function extract_binary_strings (line 248) | fn extract_binary_strings(data: &[u8]) -> Result { function strip_xml_tags (line 274) | fn strip_xml_tags(xml: &str) -> String { function parse_xlsx_shared_strings (line 319) | fn parse_xlsx_shared_strings(xml: &str) -> Vec { function parse_xlsx_sheet (line 360) | fn parse_xlsx_sheet(xml: &str, shared_strings: &[String]) -> String { function try_extract_by_extension (line 436) | fn try_extract_by_extension(data: &[u8], filename: Option<&str>) -> Opti... function strip_xml_basic (line 459) | fn strip_xml_basic() { function strip_xml_entities (line 465) | fn strip_xml_entities() { function extract_utf8_valid (line 471) | fn extract_utf8_valid() { function extract_utf8_lossy (line 476) | fn extract_utf8_lossy() { function extract_by_extension_txt (line 484) | fn extract_by_extension_txt() { function extract_by_extension_unknown (line 490) | fn extract_by_extension_unknown() { function extract_by_extension_no_filename (line 496) | fn extract_by_extension_no_filename() { function rtf_basic_extraction (line 502) | fn rtf_basic_extraction() { function xlsx_shared_strings_parsing (line 510) | fn xlsx_shared_strings_parsing() { FILE: src/document_extraction/mod.rs constant MAX_DOCUMENT_SIZE (line 16) | const MAX_DOCUMENT_SIZE: u64 = 10 * 1024 * 1024; constant MAX_EXTRACTED_TEXT_LEN (line 19) | const MAX_EXTRACTED_TEXT_LEN: usize = 100_000; type DocumentExtractionMiddleware (line 30) | pub struct DocumentExtractionMiddleware; method new (line 33) | pub fn new() -> Self { method process (line 38) | pub async fn process(&self, msg: &mut IncomingMessage) { function doc_attachment (line 153) | fn doc_attachment(mime: &str, filename: &str, data: Vec) -> Incoming... function extracts_plain_text (line 169) | async fn extracts_plain_text() { function extracts_csv (line 183) | async fn extracts_csv() { function extracts_json (line 197) | async fn extracts_json() { function skips_already_extracted (line 208) | async fn skips_already_extracted() { function skips_audio_attachments (line 222) | async fn skips_audio_attachments() { function reports_oversized_documents (line 233) | async fn reports_oversized_documents() { function truncates_long_text (line 248) | async fn truncates_long_text() { function extracts_pdf_text (line 265) | async fn extracts_pdf_text() { FILE: src/error.rs type Error (line 9) | pub enum Error { type ConfigError (line 58) | pub enum ConfigError { type DatabaseError (line 77) | pub enum DatabaseError { type ChannelError (line 115) | pub enum ChannelError { type ToolError (line 149) | pub enum ToolError { type SafetyError (line 186) | pub enum SafetyError { type JobError (line 205) | pub enum JobError { type EstimationError (line 231) | pub enum EstimationError { type EvaluationError (line 244) | pub enum EvaluationError { type RepairError (line 257) | pub enum RepairError { type WorkspaceError (line 282) | pub enum WorkspaceError { type OrchestratorError (line 313) | pub enum OrchestratorError { type WorkerError (line 332) | pub enum WorkerError { type RoutineError (line 354) | pub enum RoutineError { type Result (line 399) | pub type Result = std::result::Result; function config_error_display (line 406) | fn config_error_display() { function database_error_display (line 434) | fn database_error_display() { function channel_error_display (line 448) | fn channel_error_display() { function job_error_display (line 462) | fn job_error_display() { function safety_error_display (line 477) | fn safety_error_display() { function workspace_error_display (line 486) | fn workspace_error_display() { function routine_error_display (line 497) | fn routine_error_display() { function top_level_error_from_conversions (line 506) | fn top_level_error_from_conversions() { FILE: src/estimation/cost.rs type CostEstimator (line 9) | pub struct CostEstimator { method new (line 18) | pub fn new() -> Self { method estimate_tool (line 34) | pub fn estimate_tool(&self, tool_name: &str) -> Decimal { method estimate_llm_tokens (line 42) | pub fn estimate_llm_tokens(&self, input_tokens: u32, output_tokens: u3... method set_tool_cost (line 48) | pub fn set_tool_cost(&mut self, tool_name: impl Into, cost: De... method all_tool_costs (line 53) | pub fn all_tool_costs(&self) -> &HashMap { method default (line 59) | fn default() -> Self { function test_tool_cost_estimation (line 69) | fn test_tool_cost_estimation() { function test_llm_cost_estimation (line 78) | fn test_llm_cost_estimation() { FILE: src/estimation/learner.rs type LearningModel (line 10) | pub struct LearningModel { method default (line 24) | fn default() -> Self { type EstimationLearner (line 36) | pub struct EstimationLearner { method new (line 47) | pub fn new() -> Self { method record (line 56) | pub fn record( method adjust (line 98) | pub fn adjust(&self, category: &str, cost: Decimal, time: Duration) ->... method confidence (line 112) | pub fn confidence(&self, category: &str) -> f64 { method get_model (line 126) | pub fn get_model(&self, category: &str) -> Option<&LearningModel> { method all_models (line 131) | pub fn all_models(&self) -> &HashMap { method set_alpha (line 136) | pub fn set_alpha(&mut self, alpha: f64) { method set_min_samples (line 141) | pub fn set_min_samples(&mut self, min: u64) { method clear (line 146) | pub fn clear(&mut self) { method default (line 152) | fn default() -> Self { function test_learning_model_update (line 163) | fn test_learning_model_update() { function test_adjustment (line 184) | fn test_adjustment() { function test_confidence (line 208) | fn test_confidence() { FILE: src/estimation/mod.rs type JobEstimate (line 23) | pub struct JobEstimate { type ToolEstimate (line 38) | pub struct ToolEstimate { type Estimator (line 46) | pub struct Estimator { method new (line 55) | pub fn new() -> Self { method estimate_job (line 65) | pub fn estimate_job( method record_actuals (line 102) | pub fn record_actuals( method cost (line 120) | pub fn cost(&self) -> &CostEstimator { method time (line 125) | pub fn time(&self) -> &TimeEstimator { method value (line 130) | pub fn value(&self) -> &ValueEstimator { method default (line 136) | fn default() -> Self { FILE: src/estimation/time.rs type TimeEstimator (line 7) | pub struct TimeEstimator { method new (line 14) | pub fn new() -> Self { method estimate_tool (line 27) | pub fn estimate_tool(&self, tool_name: &str) -> Duration { method estimate_llm_response (line 35) | pub fn estimate_llm_response(&self, estimated_tokens: u32) -> Duration { method set_tool_duration (line 42) | pub fn set_tool_duration(&mut self, tool_name: impl Into, dura... method all_tool_durations (line 47) | pub fn all_tool_durations(&self) -> &HashMap { method default (line 53) | fn default() -> Self { function test_tool_time_estimation (line 63) | fn test_tool_time_estimation() { function test_llm_time_estimation (line 71) | fn test_llm_time_estimation() { FILE: src/estimation/value.rs type ValueEstimator (line 7) | pub struct ValueEstimator { method new (line 16) | pub fn new() -> Self { method estimate (line 24) | pub fn estimate(&self, _description: &str, estimated_cost: Decimal) ->... method minimum_bid (line 32) | pub fn minimum_bid(&self, estimated_cost: Decimal) -> Decimal { method ideal_bid (line 37) | pub fn ideal_bid(&self, estimated_cost: Decimal) -> Decimal { method is_profitable (line 42) | pub fn is_profitable(&self, price: Decimal, estimated_cost: Decimal) -... method calculate_profit (line 53) | pub fn calculate_profit(&self, earnings: Decimal, actual_cost: Decimal... method calculate_margin (line 58) | pub fn calculate_margin(&self, earnings: Decimal, actual_cost: Decimal... method set_min_margin (line 66) | pub fn set_min_margin(&mut self, margin: Decimal) { method set_target_margin (line 71) | pub fn set_target_margin(&mut self, margin: Decimal) { method default (line 77) | fn default() -> Self { function test_value_estimation (line 87) | fn test_value_estimation() { function test_profitability (line 97) | fn test_profitability() { function test_margin_calculation (line 106) | fn test_margin_calculation() { function test_profitability_zero_price (line 114) | fn test_profitability_zero_price() { function test_profitability_negative_cost (line 127) | fn test_profitability_negative_cost() { function test_profitability_cost_exceeds_price (line 136) | fn test_profitability_cost_exceeds_price() { function test_margin_zero_earnings (line 143) | fn test_margin_zero_earnings() { function test_estimate_zero_cost (line 157) | fn test_estimate_zero_cost() { function test_minimum_vs_ideal_bid (line 165) | fn test_minimum_vs_ideal_bid() { function test_profit_calculation (line 178) | fn test_profit_calculation() { function is_profitable_with_very_large_values (line 194) | fn is_profitable_with_very_large_values() { function estimate_value_with_very_large_cost (line 212) | fn estimate_value_with_very_large_cost() { function is_profitable_with_negative_price (line 221) | fn is_profitable_with_negative_price() { function calculate_margin_with_negative_earnings (line 238) | fn calculate_margin_with_negative_earnings() { function calculate_margin_with_both_negative (line 247) | fn calculate_margin_with_both_negative() { function minimum_bid_with_zero_cost (line 256) | fn minimum_bid_with_zero_cost() { function minimum_bid_with_negative_cost (line 264) | fn minimum_bid_with_negative_cost() { function estimate_with_negative_cost (line 277) | fn estimate_with_negative_cost() { function custom_margins_affect_profitability (line 285) | fn custom_margins_affect_profitability() { function custom_target_margin_affects_bids (line 303) | fn custom_target_margin_affects_bids() { function is_profitable_at_exact_margin_boundary (line 316) | fn is_profitable_at_exact_margin_boundary() { function profit_with_zero_values (line 327) | fn profit_with_zero_values() { function default_impl_matches_new (line 344) | fn default_impl_matches_new() { FILE: src/evaluation/metrics.rs type QualityMetrics (line 10) | pub struct QualityMetrics { type ToolMetrics (line 29) | pub struct ToolMetrics { method success_rate (line 40) | pub fn success_rate(&self) -> f64 { type MetricsCollector (line 50) | pub struct MetricsCollector { method new (line 56) | pub fn new() -> Self { method record_success (line 63) | pub fn record_success(&mut self, tool_name: &str, duration: Duration, ... method record_failure (line 88) | pub fn record_failure(&mut self, tool_name: &str, error: &str, duratio... method metrics (line 109) | pub fn metrics(&self) -> &QualityMetrics { method success_rate (line 114) | pub fn success_rate(&self) -> f64 { method tool_metrics (line 123) | pub fn tool_metrics(&self, tool_name: &str) -> Option<&ToolMetrics> { method reset (line 128) | pub fn reset(&mut self) { method summary (line 133) | pub fn summary(&self) -> MetricsSummary { method default (line 163) | fn default() -> Self { type MetricsSummary (line 170) | pub struct MetricsSummary { function categorize_error (line 181) | fn categorize_error(error: &str) -> String { function test_metrics_collection (line 207) | fn test_metrics_collection() { function test_error_categorization (line 224) | fn test_error_categorization() { function test_success_rate (line 231) | fn test_success_rate() { function test_quality_metrics_default (line 245) | fn test_quality_metrics_default() { function test_tool_metrics_success_rate_zero_calls (line 259) | fn test_tool_metrics_success_rate_zero_calls() { function test_tool_metrics_success_rate_mixed (line 265) | fn test_tool_metrics_success_rate_mixed() { function test_tool_metrics_success_rate_all_failures (line 276) | fn test_tool_metrics_success_rate_all_failures() { function test_collector_default_is_new (line 289) | fn test_collector_default_is_new() { function test_success_rate_empty_collector (line 297) | fn test_success_rate_empty_collector() { function test_record_success_accumulates_cost (line 303) | fn test_record_success_accumulates_cost() { function test_record_success_none_cost_does_not_change_total (line 313) | fn test_record_success_none_cost_does_not_change_total() { function test_record_failure_does_not_add_cost (line 321) | fn test_record_failure_does_not_add_cost() { function test_tool_avg_time_updates (line 328) | fn test_tool_avg_time_updates() { function test_total_time_across_success_and_failure (line 338) | fn test_total_time_across_success_and_failure() { function test_tool_metrics_returns_none_for_unknown (line 346) | fn test_tool_metrics_returns_none_for_unknown() { function test_reset_clears_everything (line 352) | fn test_reset_clears_everything() { function test_multiple_tools_tracked_independently (line 367) | fn test_multiple_tools_tracked_independently() { function test_categorize_error_all_types (line 388) | fn test_categorize_error_all_types() { function test_error_types_accumulated_in_collector (line 407) | fn test_error_types_accumulated_in_collector() { function test_summary_empty_collector (line 420) | fn test_summary_empty_collector() { function test_summary_most_used_and_most_failed (line 432) | fn test_summary_most_used_and_most_failed() { function test_summary_top_errors_populated (line 449) | fn test_summary_top_errors_populated() { FILE: src/evaluation/success.rs type EvaluationResult (line 11) | pub struct EvaluationResult { method success (line 28) | pub fn success(reasoning: impl Into, quality_score: u32) -> Se... method failure (line 40) | pub fn failure(reasoning: impl Into, issues: Vec) -> S... type SuccessEvaluator (line 54) | pub trait SuccessEvaluator: Send + Sync { method evaluate (line 56) | async fn evaluate( method evaluate (line 103) | async fn evaluate( type RuleBasedEvaluator (line 71) | struct RuleBasedEvaluator { method new (line 77) | fn new() -> Self { method with_min_success_rate (line 84) | fn with_min_success_rate(mut self, rate: f64) -> Self { method with_max_failures (line 89) | fn with_max_failures(mut self, max: u32) -> Self { method default (line 96) | fn default() -> Self { function test_rule_based_evaluator_success (line 192) | async fn test_rule_based_evaluator_success() { function test_rule_based_evaluator_failure (line 213) | async fn test_rule_based_evaluator_failure() { function create_action (line 229) | fn create_action(success: bool) -> ActionRecord { function create_action_with_error (line 233) | fn create_action_with_error(success: bool, error_msg: &str) -> ActionRec... function completed_job (line 247) | fn completed_job(title: &str) -> JobContext { function test_evaluation_result_success_defaults (line 259) | fn test_evaluation_result_success_defaults() { function test_evaluation_result_failure_defaults (line 270) | fn test_evaluation_result_failure_defaults() { function test_evaluation_result_serde_roundtrip (line 281) | fn test_evaluation_result_serde_roundtrip() { function test_rule_based_evaluator_default (line 303) | fn test_rule_based_evaluator_default() { function test_rule_based_evaluator_builder_methods (line 310) | fn test_rule_based_evaluator_builder_methods() { function test_empty_actions_fails (line 321) | async fn test_empty_actions_fails() { function test_all_actions_succeed_completed_job_gets_100 (line 330) | async fn test_all_actions_succeed_completed_job_gets_100() { function test_quality_score_no_completion_bonus_for_pending_job (line 347) | async fn test_quality_score_no_completion_bonus_for_pending_job() { function test_submitted_state_counts_as_completed (line 364) | async fn test_submitted_state_counts_as_completed() { function test_success_rate_below_threshold_fails (line 381) | async fn test_success_rate_below_threshold_fails() { function test_too_many_failures_flagged (line 403) | async fn test_too_many_failures_flagged() { function test_critical_error_detected (line 430) | async fn test_critical_error_detected() { function test_fatal_error_detected (line 446) | async fn test_fatal_error_detected() { function test_quality_score_capped_at_50_with_issues (line 461) | async fn test_quality_score_capped_at_50_with_issues() { function test_failed_result_includes_suggestions (line 474) | async fn test_failed_result_includes_suggestions() { function test_single_successful_action_completed_job (line 485) | async fn test_single_successful_action_completed_job() { FILE: src/extensions/discovery.rs type OnlineDiscovery (line 17) | pub struct OnlineDiscovery { method new (line 22) | pub fn new() -> Self { method discover (line 36) | pub async fn discover(&self, query: &str) -> Vec { method probe_common_patterns (line 75) | pub async fn probe_common_patterns(&self, query: &str) -> Vec Vec { method validate_mcp_url (line 192) | pub async fn validate_mcp_url(&self, url: &str) -> bool { method default (line 198) | fn default() -> Self { function validate_mcp_url_with_client (line 208) | async fn validate_mcp_url_with_client(client: &reqwest::Client, url: &st... function with_timeout (line 240) | async fn with_timeout( function extract_source (line 247) | fn extract_source(source: &ExtensionSource) -> String { function titlecase (line 257) | fn titlecase(s: &str) -> String { type GitHubSearchResponse (line 271) | struct GitHubSearchResponse { type GitHubRepo (line 277) | struct GitHubRepo { function test_titlecase (line 296) | fn test_titlecase() { function test_extract_source (line 303) | fn test_extract_source() { function test_validate_invalid_url (line 316) | async fn test_validate_invalid_url() { function test_discovery_new (line 327) | fn test_discovery_new() { function test_titlecase_single_char (line 333) | fn test_titlecase_single_char() { function test_titlecase_mixed_case (line 339) | fn test_titlecase_mixed_case() { function test_titlecase_multiple_spaces (line 346) | fn test_titlecase_multiple_spaces() { function test_titlecase_punctuation (line 353) | fn test_titlecase_punctuation() { function test_extract_source_wasm_download (line 360) | fn test_extract_source_wasm_download() { function test_extract_source_wasm_buildable (line 375) | fn test_extract_source_wasm_buildable() { function test_online_discovery_default (line 392) | fn test_online_discovery_default() { function test_github_search_response_empty_items (line 399) | fn test_github_search_response_empty_items() { function test_github_search_response_missing_items_field (line 406) | fn test_github_search_response_missing_items_field() { function test_github_search_response_multiple_items (line 414) | fn test_github_search_response_multiple_items() { function test_github_repo_all_fields (line 442) | fn test_github_repo_all_fields() { function test_github_repo_missing_optional_fields (line 461) | fn test_github_repo_missing_optional_fields() { function test_with_timeout_completes (line 475) | async fn test_with_timeout_completes() { function test_with_timeout_expires (line 483) | async fn test_with_timeout_expires() { function test_discover_empty_query (line 495) | async fn test_discover_empty_query() { function test_discover_whitespace_only_query (line 502) | async fn test_discover_whitespace_only_query() { FILE: src/extensions/manager.rs type PendingAuth (line 39) | struct PendingAuth { type HostedOAuthFlowStart (line 48) | struct HostedOAuthFlowStart { function hosted_proxy_client_secret (line 56) | fn hosted_proxy_client_secret( function normalize_oauth_callback_path (line 72) | fn normalize_oauth_callback_path(path: &str) -> String { function normalize_hosted_callback_url (line 83) | fn normalize_hosted_callback_url(callback_url: &str) -> String { type ChannelRuntimeState (line 102) | struct ChannelRuntimeState { type TestWasmChannelLoader (line 111) | type TestWasmChannelLoader = type TestTelegramBindingResolver (line 114) | type TestTelegramBindingResolver = constant TELEGRAM_OWNER_BIND_TIMEOUT_SECS (line 117) | const TELEGRAM_OWNER_BIND_TIMEOUT_SECS: u64 = 120; constant TELEGRAM_OWNER_BIND_CHALLENGE_TTL_SECS (line 118) | const TELEGRAM_OWNER_BIND_CHALLENGE_TTL_SECS: u64 = 300; constant TELEGRAM_GET_UPDATES_TIMEOUT_SECS (line 119) | const TELEGRAM_GET_UPDATES_TIMEOUT_SECS: u64 = 25; constant TELEGRAM_OWNER_BIND_CODE_LEN (line 120) | const TELEGRAM_OWNER_BIND_CODE_LEN: usize = 8; type TelegramBindingData (line 123) | struct TelegramBindingData { type TelegramOwnerBindingState (line 130) | enum TelegramOwnerBindingState { type PendingTelegramVerificationChallenge (line 136) | struct PendingTelegramVerificationChallenge { type TelegramBindingResult (line 143) | enum TelegramBindingResult { function telegram_request_error (line 148) | fn telegram_request_error(action: &'static str, error: &reqwest::Error) ... function telegram_response_parse_error (line 159) | fn telegram_response_parse_error(action: &'static str, error: &reqwest::... type TelegramGetMeResponse (line 170) | struct TelegramGetMeResponse { type TelegramGetMeUser (line 179) | struct TelegramGetMeUser { type TelegramGetUpdatesResponse (line 185) | struct TelegramGetUpdatesResponse { type TelegramApiOkResponse (line 194) | struct TelegramApiOkResponse { type TelegramUpdate (line 201) | struct TelegramUpdate { type TelegramMessage (line 210) | struct TelegramMessage { type TelegramChat (line 219) | struct TelegramChat { type TelegramUser (line 225) | struct TelegramUser { function build_wasm_channel_runtime_config_updates (line 230) | fn build_wasm_channel_runtime_config_updates( function channel_auth_instructions (line 258) | fn channel_auth_instructions( function unix_timestamp_secs (line 272) | fn unix_timestamp_secs() -> u64 { function generate_telegram_verification_code (line 279) | fn generate_telegram_verification_code() -> String { function telegram_verification_deep_link (line 289) | fn telegram_verification_deep_link(bot_username: Option<&str>, code: &st... function telegram_verification_instructions (line 295) | fn telegram_verification_instructions(bot_username: Option<&str>, code: ... function telegram_message_matches_verification_code (line 305) | fn telegram_message_matches_verification_code(text: &str, code: &str) ->... function send_telegram_text_message (line 315) | async fn send_telegram_text_message( type ExtensionManager (line 363) | pub struct ExtensionManager { method owner_id (line 466) | pub fn owner_id(&self) -> &str { method active_tool_names (line 470) | pub async fn active_tool_names(&self) -> HashSet { method new (line 498) | pub fn new( method set_test_wasm_channel_loader (line 555) | async fn set_test_wasm_channel_loader(&self, loader: TestWasmChannelLo... method set_test_telegram_binding_resolver (line 560) | async fn set_test_telegram_binding_resolver(&self, resolver: TestTeleg... method set_test_telegram_pending_verification (line 565) | pub(crate) async fn set_test_telegram_pending_verification( method enable_gateway_mode (line 592) | pub async fn enable_gateway_mode(&self, base_url: String) { method should_use_gateway_mode (line 605) | pub fn should_use_gateway_mode(&self) -> bool { method gateway_callback_redirect_uri (line 628) | async fn gateway_callback_redirect_uri(&self) -> Option { method relay_config (line 656) | fn relay_config(&self) -> Result<&crate::config::RelayConfig, Extensio... method relay_event_tx (line 665) | pub fn relay_event_tx( method relay_signing_secret (line 680) | pub fn relay_signing_secret(&self) -> Option> { method clear_relay_webhook_state (line 684) | async fn clear_relay_webhook_state(&self) { method inject_registry_entry (line 693) | pub async fn inject_registry_entry(&self, entry: crate::extensions::Re... method set_channel_runtime (line 702) | pub async fn set_channel_runtime( method current_channel_owner_id (line 721) | async fn current_channel_owner_id(&self, name: &str) -> Option { method set_channel_owner_id (line 749) | async fn set_channel_owner_id(&self, name: &str, owner_id: i64) -> Res... method load_channel_runtime_config_overrides (line 769) | async fn load_channel_runtime_config_overrides( method has_wasm_channel_owner_binding (line 788) | pub async fn has_wasm_channel_owner_binding(&self, name: &str) -> bool { method notification_target_for_channel (line 792) | pub(crate) async fn notification_target_for_channel(&self, name: &str)... method get_pending_telegram_verification (line 798) | async fn get_pending_telegram_verification( method set_pending_telegram_verification (line 812) | async fn set_pending_telegram_verification( method clear_pending_telegram_verification (line 823) | async fn clear_pending_telegram_verification(&self, name: &str) { method issue_telegram_verification_challenge (line 830) | async fn issue_telegram_verification_challenge( method set_relay_channel_manager (line 876) | pub async fn set_relay_channel_manager(&self, channel_manager: Arc bool { method restore_relay_channels (line 909) | pub async fn restore_relay_channels(&self) { method secrets (line 936) | pub fn secrets(&self) -> &Arc { method set_active_channels (line 942) | pub async fn set_active_channels(&self, names: Vec) { method persist_active_channels (line 950) | async fn persist_active_channels(&self) { method load_persisted_active_channels (line 974) | pub async fn load_persisted_active_channels(&self) -> Vec { method set_sse_sender (line 995) | pub async fn set_sse_sender( method pending_oauth_flows (line 1006) | pub fn pending_oauth_flows(&self) -> &crate::cli::oauth_defaults::Pend... method clear_pending_extension_auth (line 1010) | async fn clear_pending_extension_auth(&self, name: &str) { method rewrite_oauth_state_param (line 1024) | fn rewrite_oauth_state_param( method start_gateway_oauth_flow (line 1067) | async fn start_gateway_oauth_flow(&self, request: HostedOAuthFlowStart... method broadcast_extension_status (line 1103) | async fn broadcast_extension_status(&self, name: &str, status: &str, m... method search (line 1114) | pub async fn search( method install (line 1144) | pub async fn install( method auth (line 1197) | pub async fn auth(&self, name: &str) -> Result Result Result) -> Result Upgrad... method extension_info (line 1830) | pub async fn extension_info(&self, name: &str) -> Result Result Result ToolAuthState { method load_tool_capabilities (line 2828) | async fn load_tool_capabilities( method collect_shared_scopes (line 2844) | async fn collect_shared_scopes( method needs_scope_expansion (line 2868) | async fn needs_scope_expansion(&self, secret_name: &str, merged_scopes... method find_setup_credential_names (line 2910) | async fn find_setup_credential_names( method needs_setup_credentials (line 2938) | async fn needs_setup_credentials( method resolve_oauth_credential (line 2982) | async fn resolve_oauth_credential( method start_wasm_oauth (line 3020) | async fn start_wasm_oauth( method is_auto_resolved_oauth_field (line 3278) | fn is_auto_resolved_oauth_field( method check_tool_auth_status (line 3314) | async fn check_tool_auth_status(&self, name: &str) -> ToolAuthState { method auth_wasm_channel_status (line 3369) | async fn auth_wasm_channel_status(&self, name: &str) -> Result Result Result Result Result St... method auth_channel_relay (line 4060) | async fn auth_channel_relay(&self, name: &str) -> Result Result Result<(), Ex... method determine_installed_kind (line 4207) | async fn determine_installed_kind(&self, name: &str) -> Result Result<(), ExtensionError> { method cleanup_expired_auths (line 4251) | async fn cleanup_expired_auths(&self) { method get_setup_schema (line 4266) | pub async fn get_setup_schema( method configure_telegram_binding (line 4335) | async fn configure_telegram_binding( method resolve_telegram_binding (line 4418) | async fn resolve_telegram_binding( method notify_telegram_owner_verified (line 4605) | async fn notify_telegram_owner_verified( method configure (line 4660) | pub async fn configure( method configure_token (line 4998) | pub async fn configure_token( method revoke_credential_mappings (line 5108) | async fn revoke_credential_mappings(&self, cap_path: &std::path::Path) { method unregister_hook_prefix (line 5146) | async fn unregister_hook_prefix(&self, prefix: &str) -> usize { function sanitize_url_for_logging (line 442) | fn sanitize_url_for_logging(url: &str) -> String { function inject_channel_credentials_from_secrets (line 5171) | async fn inject_channel_credentials_from_secrets( function inject_env_credentials (line 5225) | async fn inject_env_credentials( function resolve_env_credentials (line 5259) | pub(crate) fn resolve_env_credentials( function infer_kind_from_url (line 5293) | fn infer_kind_from_url(url: &str) -> ExtensionKind { type FallbackDecision (line 5303) | enum FallbackDecision { function fallback_decision (line 5312) | fn fallback_decision( function combine_install_errors (line 5332) | fn combine_install_errors( function require (line 5373) | fn require(condition: bool, message: impl Into) -> Result<(), St... function require_eq (line 5381) | fn require_eq(actual: T, expected: T, label: &str) -> Result<(), String> type RecordingChannel (line 5396) | struct RecordingChannel { method name (line 5403) | fn name(&self) -> &str { method start (line 5407) | async fn start(&self) -> Result Result<(), crate::error::ChannelError> { function test_infer_kind_from_url (line 5445) | fn test_infer_kind_from_url() { function make_ok_result (line 5466) | fn make_ok_result() -> Result { function make_fallback_source (line 5474) | fn make_fallback_source() -> Option> { function test_fallback_decision_success_returns_directly (line 5483) | fn test_fallback_decision_success_returns_directly() { function test_fallback_decision_already_installed_skips_fallback (line 5493) | fn test_fallback_decision_already_installed_skips_fallback() { function test_fallback_decision_download_failed_triggers_fallback (line 5504) | fn test_fallback_decision_download_failed_triggers_fallback() { function test_fallback_decision_error_without_fallback_returns (line 5515) | fn test_fallback_decision_error_without_fallback_returns() { function test_combine_errors_includes_both_messages (line 5526) | fn test_combine_errors_includes_both_messages() { function test_combine_errors_forwards_already_installed_from_fallback (line 5540) | fn test_combine_errors_forwards_already_installed_from_fallback() { function test_tool_and_channel_paths_are_separate (line 5553) | fn test_tool_and_channel_paths_are_separate() { function test_determine_kind_priority_tools_before_channels (line 5589) | fn test_determine_kind_priority_tools_before_channels() { function make_test_manager_with_dirs (line 5629) | fn make_test_manager_with_dirs( function make_test_manager (line 5664) | fn make_test_manager( function test_activate_wasm_tool_with_runtime_passes_runtime_check (line 5672) | async fn test_activate_wasm_tool_with_runtime_passes_runtime_check() { function test_activate_wasm_tool_without_runtime_fails_with_runtime_error (line 5697) | async fn test_activate_wasm_tool_without_runtime_fails_with_runtime_erro... function test_capabilities_files_also_separate (line 5715) | fn test_capabilities_files_also_separate() { function test_upgrade_no_installed_extensions (line 5739) | async fn test_upgrade_no_installed_extensions() { function test_upgrade_mcp_server_rejected (line 5747) | async fn test_upgrade_mcp_server_rejected() { function test_upgrade_up_to_date_extension (line 5757) | async fn test_upgrade_up_to_date_extension() { function test_upgrade_outdated_not_in_registry (line 5782) | async fn test_upgrade_outdated_not_in_registry() { function make_manager_with_temp_dirs (line 5806) | fn make_manager_with_temp_dirs() -> ExtensionManager { function make_manager_custom_dirs (line 5811) | fn make_manager_custom_dirs( function make_test_loaded_channel (line 5846) | fn make_test_loaded_channel( function test_telegram_hot_activation_runtime_config_includes_owner_id (line 5873) | fn test_telegram_hot_activation_runtime_config_includes_owner_id() -> Re... function test_current_channel_owner_id_uses_runtime_state (line 5898) | async fn test_current_channel_owner_id_uses_runtime_state() -> Result<()... function test_telegram_hot_activation_configure_uses_mock_loader_and_persists_state (line 5932) | async fn test_telegram_hot_activation_configure_uses_mock_loader_and_per... function test_telegram_hot_activation_returns_verification_challenge_before_binding (line 6125) | async fn test_telegram_hot_activation_returns_verification_challenge_bef... function test_current_channel_owner_id_uses_store_fallback (line 6206) | async fn test_current_channel_owner_id_uses_store_fallback() -> Result<(... function test_notify_telegram_owner_verified_sends_confirmation_for_new_binding (line 6292) | async fn test_notify_telegram_owner_verified_sends_confirmation_for_new_... function test_notify_telegram_owner_verified_skips_existing_binding (line 6343) | async fn test_notify_telegram_owner_verified_skips_existing_binding() ->... function test_security_prefix_check (line 6392) | fn test_security_prefix_check() { function test_already_injected_skipped (line 6418) | fn test_already_injected_skipped() { function test_missing_env_var_not_injected (line 6435) | fn test_missing_env_var_not_injected() { function test_empty_env_var_not_injected (line 6448) | fn test_empty_env_var_not_injected() { function test_empty_channel_name_returns_nothing (line 6464) | fn test_empty_channel_name_returns_nothing() { function test_determine_installed_kind_does_not_auto_install_relay (line 6481) | async fn test_determine_installed_kind_does_not_auto_install_relay() { function test_is_relay_channel_returns_false_without_store (line 6506) | async fn test_is_relay_channel_returns_false_without_store() { function test_activate_channel_relay_without_store_returns_auth_required (line 6515) | async fn test_activate_channel_relay_without_store_returns_auth_required... function test_remove_relay_shuts_down_via_relay_channel_manager (line 6527) | async fn test_remove_relay_shuts_down_via_relay_channel_manager() { function test_remove_wasm_tool_clears_pending_oauth_state_and_activation_error (line 6589) | async fn test_remove_wasm_tool_clears_pending_oauth_state_and_activation... function test_remove_wasm_channel_clears_activation_error_and_deletes_files (line 6694) | async fn test_remove_wasm_channel_clears_activation_error_and_deletes_fi... function test_sanitize_url_with_query_params (line 6728) | fn test_sanitize_url_with_query_params() { function test_sanitize_url_with_credentials (line 6738) | fn test_sanitize_url_with_credentials() { function test_sanitize_url_with_fragment (line 6749) | fn test_sanitize_url_with_fragment() { function test_sanitize_url_with_port (line 6758) | fn test_sanitize_url_with_port() { function test_sanitize_url_with_all_components (line 6767) | fn test_sanitize_url_with_all_components() { function test_sanitize_url_malformed (line 6782) | fn test_sanitize_url_malformed() { function test_sanitize_url_short_string (line 6798) | fn test_sanitize_url_short_string() { function test_sanitize_url_not_url_like (line 6805) | fn test_sanitize_url_not_url_like() { function test_sanitize_url_preserves_path (line 6812) | fn test_sanitize_url_preserves_path() { function make_manager_with_tunnel (line 6826) | fn make_manager_with_tunnel(tunnel_url: Option) -> ExtensionMana... function should_use_gateway_mode_true_for_tunnel_url (line 6856) | fn should_use_gateway_mode_true_for_tunnel_url() { function should_use_gateway_mode_false_without_tunnel (line 6880) | fn should_use_gateway_mode_false_without_tunnel() { function should_use_gateway_mode_false_for_loopback_tunnel (line 6903) | fn should_use_gateway_mode_false_for_loopback_tunnel() { type EnvGuard (line 6927) | struct EnvGuard { method new (line 6933) | fn new() -> Self { method drop (line 6950) | fn drop(&mut self) { function gateway_callback_redirect_uri_from_tunnel_url (line 6963) | async fn gateway_callback_redirect_uri_from_tunnel_url() { function gateway_callback_redirect_uri_none_without_tunnel (line 6974) | async fn gateway_callback_redirect_uri_none_without_tunnel() { function gateway_callback_redirect_uri_trims_trailing_slash (line 6982) | async fn gateway_callback_redirect_uri_trims_trailing_slash() { function gateway_callback_redirect_uri_does_not_duplicate_callback_path_from_env (line 6993) | fn gateway_callback_redirect_uri_does_not_duplicate_callback_path_from_e... function gateway_callback_redirect_uri_trims_trailing_slash_from_env_callback (line 7021) | fn gateway_callback_redirect_uri_trims_trailing_slash_from_env_callback() { function normalize_hosted_callback_url_preserves_query_params (line 7049) | fn normalize_hosted_callback_url_preserves_query_params() { function rewrite_oauth_state_param_updates_only_state_query_param (line 7063) | fn rewrite_oauth_state_param_updates_only_state_query_param() { function gateway_mode_enabled_explicitly (line 7077) | async fn gateway_mode_enabled_explicitly() { function test_configure_token_picks_first_missing_secret (line 7094) | async fn test_configure_token_picks_first_missing_secret() { function test_auth_is_read_only_for_wasm_channel (line 7146) | async fn test_auth_is_read_only_for_wasm_channel() { function test_telegram_auth_instructions_include_owner_verification_guidance (line 7186) | async fn test_telegram_auth_instructions_include_owner_verification_guid... function test_send_telegram_text_message_posts_expected_payload (line 7235) | async fn test_send_telegram_text_message_posts_expected_payload() -> Res... function test_telegram_message_matches_verification_code_variants (line 7298) | fn test_telegram_message_matches_verification_code_variants() -> Result<... function test_configure_dispatches_activation_by_kind (line 7321) | async fn test_configure_dispatches_activation_by_kind() { function test_validation_failed_is_distinct_error_variant (line 7376) | fn test_validation_failed_is_distinct_error_variant() { function test_telegram_token_colon_preserved_in_validation_url (line 7402) | fn test_telegram_token_colon_preserved_in_validation_url() { function test_proxy_client_secret_suppressed_when_builtin_matches_with_exchange_proxy (line 7434) | fn test_proxy_client_secret_suppressed_when_builtin_matches_with_exchang... function test_proxy_client_secret_kept_when_not_builtin_with_exchange_proxy (line 7447) | fn test_proxy_client_secret_kept_when_not_builtin_with_exchange_proxy() { function test_proxy_client_secret_kept_without_exchange_proxy_even_for_builtin_secret (line 7460) | fn test_proxy_client_secret_kept_without_exchange_proxy_even_for_builtin... function test_proxy_client_secret_none_stays_none (line 7473) | fn test_proxy_client_secret_none_stays_none() { function test_proxy_client_secret_no_builtin_provider (line 7484) | fn test_proxy_client_secret_no_builtin_provider() { FILE: src/extensions/mod.rs type ExtensionKind (line 33) | pub enum ExtensionKind { method fmt (line 45) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type RegistryEntry (line 57) | pub struct RegistryEntry { type ExtensionSource (line 84) | pub enum ExtensionSource { type AuthHint (line 112) | pub enum AuthHint { type ResultSource (line 131) | pub enum ResultSource { type SearchResult (line 140) | pub struct SearchResult { type InstallResult (line 153) | pub struct InstallResult { type UpgradeResult (line 161) | pub struct UpgradeResult { type UpgradeOutcome (line 170) | pub struct UpgradeOutcome { type ToolAuthState (line 185) | pub enum ToolAuthState { type AuthStatus (line 198) | pub enum AuthStatus { method as_str (line 222) | pub fn as_str(&self) -> &'static str { type AuthResult (line 235) | pub struct AuthResult { method authenticated (line 244) | pub fn authenticated(name: impl Into, kind: ExtensionKind) -> ... method no_auth_required (line 252) | pub fn no_auth_required(name: impl Into, kind: ExtensionKind) ... method awaiting_authorization (line 260) | pub fn awaiting_authorization( method awaiting_token (line 276) | pub fn awaiting_token( method needs_setup (line 292) | pub fn needs_setup( method is_authenticated (line 310) | pub fn is_authenticated(&self) -> bool { method auth_url (line 314) | pub fn auth_url(&self) -> Option<&str> { method callback_type (line 321) | pub fn callback_type(&self) -> Option<&str> { method instructions (line 328) | pub fn instructions(&self) -> Option<&str> { method setup_url (line 336) | pub fn setup_url(&self) -> Option<&str> { method is_awaiting_token (line 344) | pub fn is_awaiting_token(&self) -> bool { method status_str (line 348) | pub fn status_str(&self) -> &'static str { method deserialize (line 385) | fn deserialize>(deserializer: D) -> Result... method serialize (line 355) | fn serialize(&self, serializer: S) -> Result bool { type InstalledExtension (line 485) | pub struct InstalledExtension { type ExtensionError (line 520) | pub enum ExtensionError { function auth_result_authenticated_round_trip (line 575) | fn auth_result_authenticated_round_trip() { function auth_result_awaiting_authorization_round_trip (line 592) | fn auth_result_awaiting_authorization_round_trip() { function auth_result_awaiting_token_round_trip (line 619) | fn auth_result_awaiting_token_round_trip() { function auth_result_needs_setup_round_trip (line 639) | fn auth_result_needs_setup_round_trip() { function auth_result_no_auth_required_round_trip (line 659) | fn auth_result_no_auth_required_round_trip() { function auth_status_type_safety (line 672) | fn auth_status_type_safety() { function extension_kind_display (line 693) | fn extension_kind_display() { function extension_kind_serde_roundtrip (line 700) | fn extension_kind_serde_roundtrip() { function extension_source_serde_mcp_url (line 728) | fn extension_source_serde_mcp_url() { function extension_source_serde_wasm_download (line 742) | fn extension_source_serde_wasm_download() { function extension_source_serde_wasm_buildable (line 761) | fn extension_source_serde_wasm_buildable() { function extension_source_serde_discovered (line 777) | fn extension_source_serde_discovered() { function auth_hint_serde_all_variants (line 790) | fn auth_hint_serde_all_variants() { function search_result_serde_registry_source (line 825) | fn search_result_serde_registry_source() { function search_result_serde_discovered_source (line 859) | fn search_result_serde_discovered_source() { function install_result_serde_roundtrip (line 888) | fn install_result_serde_roundtrip() { function activate_result_serde_roundtrip (line 906) | fn activate_result_serde_roundtrip() { function installed_extension_serde_defaults (line 924) | fn installed_extension_serde_defaults() { function installed_extension_serde_all_fields (line 945) | fn installed_extension_serde_all_fields() { function extension_error_display_all_variants (line 980) | fn extension_error_display_all_variants() { function tool_auth_state_equality (line 1043) | fn tool_auth_state_equality() { function result_source_serde (line 1057) | fn result_source_serde() { function auth_result_status_str_all_variants (line 1072) | fn auth_result_status_str_all_variants() { FILE: src/extensions/registry.rs type ExtensionRegistry (line 13) | pub struct ExtensionRegistry { method new (line 22) | pub fn new() -> Self { method new_with_catalog (line 33) | pub fn new_with_catalog(catalog_entries: Vec) -> Self { method search (line 53) | pub async fn search(&self, query: &str) -> Vec { method get (line 114) | pub async fn get(&self, name: &str) -> Option { method get_with_kind (line 127) | pub async fn get_with_kind( method all_entries (line 152) | pub async fn all_entries(&self) -> Vec { method cache_discovered (line 167) | pub async fn cache_discovered(&self, entries: Vec) { method default (line 182) | fn default() -> Self { function score_entry (line 188) | fn score_entry(entry: &RegistryEntry, tokens: &[String]) -> u32 { function builtin_entries (line 230) | pub fn builtin_entries() -> Vec { function builtin_entries_with_relay (line 238) | pub fn builtin_entries_with_relay(relay_url: Option) -> Vec ExtensionRegistry { function test_search_returns_sorted (line 374) | async fn test_search_returns_sorted() { function test_search_empty_query_returns_all (line 383) | async fn test_search_empty_query_returns_all() { function test_search_by_keyword (line 391) | async fn test_search_by_keyword() { function test_get_exact_name (line 405) | async fn test_get_exact_name() { function test_cache_discovered (line 417) | async fn test_cache_discovered() { function test_cache_deduplication (line 444) | async fn test_cache_deduplication() { function test_new_with_catalog (line 469) | async fn test_new_with_catalog() { function test_new_with_catalog_dedup_same_kind (line 537) | async fn test_new_with_catalog_dedup_same_kind() { function test_get_with_kind_resolves_collision (line 577) | async fn test_get_with_kind_resolves_collision() { function test_get_with_kind_discovery_cache (line 654) | async fn test_get_with_kind_discovery_cache() { function test_same_name_different_kind_both_discoverable (line 714) | async fn test_same_name_different_kind_both_discoverable() { function test_get_returns_first_match_regardless_of_kind (line 776) | async fn test_get_returns_first_match_regardless_of_kind() { function test_builtin_entries_with_relay_none_excludes_relay (line 823) | fn test_builtin_entries_with_relay_none_excludes_relay() { function test_builtin_entries_with_relay_some_includes_relay (line 834) | fn test_builtin_entries_with_relay_some_includes_relay() { FILE: src/history/analytics.rs type JobStats (line 12) | pub struct JobStats { type ToolStats (line 24) | pub struct ToolStats { method get_job_stats (line 36) | pub async fn get_job_stats(&self) -> Result { method get_tool_stats (line 79) | pub async fn get_tool_stats(&self) -> Result, DatabaseErr... method get_estimation_accuracy (line 127) | pub async fn get_estimation_accuracy( method get_category_history (line 167) | pub async fn get_category_history( type EstimationAccuracy (line 211) | pub struct EstimationAccuracy { type CategoryHistoryEntry (line 219) | pub struct CategoryHistoryEntry { FILE: src/history/store.rs type LlmCallRecord (line 21) | pub struct LlmCallRecord<'a> { type Store (line 34) | pub struct Store { method from_pool (line 41) | pub fn from_pool(pool: Pool) -> Self { method new (line 46) | pub async fn new(config: &DatabaseConfig) -> Result Result<(), DatabaseError> { method conn (line 77) | pub async fn conn(&self) -> Result Pool { method create_conversation (line 91) | pub async fn create_conversation( method touch_conversation (line 110) | pub async fn touch_conversation(&self, id: Uuid) -> Result<(), Databas... method add_conversation_message (line 121) | pub async fn add_conversation_message( method save_job (line 145) | pub async fn save_job(&self, ctx: &JobContext) -> Result<(), DatabaseE... method get_job (line 204) | pub async fn get_job(&self, id: Uuid) -> Result, Da... method update_job_status (line 268) | pub async fn update_job_status( method mark_job_stuck (line 287) | pub async fn mark_job_stuck(&self, id: Uuid) -> Result<(), DatabaseErr... method get_stuck_jobs (line 300) | pub async fn get_stuck_jobs(&self) -> Result, DatabaseError> { method save_action (line 313) | pub async fn save_action( method get_job_actions (line 353) | pub async fn get_job_actions(&self, job_id: Uuid) -> Result) -> Res... method save_estimation_snapshot (line 424) | pub async fn save_estimation_snapshot( method update_estimation_actuals (line 457) | pub async fn update_estimation_actuals( method save_sandbox_job (line 550) | pub async fn save_sandbox_job(&self, job: &SandboxJobRecord) -> Result... method get_sandbox_job (line 584) | pub async fn get_sandbox_job( method list_sandbox_jobs (line 618) | pub async fn list_sandbox_jobs(&self) -> Result,... method list_sandbox_jobs_for_user (line 653) | pub async fn list_sandbox_jobs_for_user( method sandbox_job_summary_for_user (line 691) | pub async fn sandbox_job_summary_for_user( method sandbox_job_belongs_to_user (line 722) | pub async fn sandbox_job_belongs_to_user( method update_sandbox_job_status (line 738) | pub async fn update_sandbox_job_status( method cleanup_stale_sandbox_jobs (line 767) | pub async fn cleanup_stale_sandbox_jobs(&self) -> Result Result Result, Dat... method get_agent_job_failure_reason (line 846) | pub async fn get_agent_job_failure_reason( method agent_job_summary (line 861) | pub async fn agent_job_summary(&self) -> Result R... method get_sandbox_job_mode (line 976) | pub async fn get_sandbox_job_mode(&self, id: Uuid) -> Result Result<(), Da... method get_routine (line 1051) | pub async fn get_routine(&self, id: Uuid) -> Result, D... method get_routine_by_name (line 1060) | pub async fn get_routine_by_name( method list_routines (line 1076) | pub async fn list_routines(&self, user_id: &str) -> Result Result, Database... method list_event_routines (line 1097) | pub async fn list_event_routines(&self) -> Result, Databa... method list_due_cron_routines (line 1109) | pub async fn list_due_cron_routines(&self) -> Result, Dat... method update_routine (line 1128) | pub async fn update_routine(&self, routine: &Routine) -> Result<(), Da... method update_routine_runtime (line 1177) | pub async fn update_routine_runtime( method delete_routine (line 1209) | pub async fn delete_routine(&self, id: Uuid) -> Result Result<(),... method complete_routine_run (line 1245) | pub async fn complete_routine_run( method list_routine_runs (line 1269) | pub async fn list_routine_runs( method count_running_routine_runs (line 1290) | pub async fn count_running_routine_runs(&self, routine_id: Uuid) -> Re... method count_running_routine_runs_batch (line 1304) | pub async fn count_running_routine_runs_batch( method link_routine_run_to_job (line 1338) | pub async fn link_routine_run_to_job( method list_dispatched_routine_runs (line 1353) | pub async fn list_dispatched_routine_runs(&self) -> Result Result Result<(), ... method increment_repair_attempts (line 1990) | pub async fn increment_repair_attempts(&self, tool_name: &str) -> Resu... method get_setting (line 2016) | pub async fn get_setting( method get_setting_full (line 2032) | pub async fn get_setting_full( method set_setting (line 2052) | pub async fn set_setting( method delete_setting (line 2074) | pub async fn delete_setting(&self, user_id: &str, key: &str) -> Result... method list_settings (line 2086) | pub async fn list_settings(&self, user_id: &str) -> Result Result Result Result JobState { type SettingRow (line 2007) | pub struct SettingRow { function test_conversation_summary_has_channel_field (line 2174) | fn test_conversation_summary_has_channel_field() { function test_conversation_summary_channel_various_values (line 2190) | fn test_conversation_summary_channel_various_values() { function test_save_job_persists_user_id (line 2210) | async fn test_save_job_persists_user_id() { FILE: src/hooks/bootstrap.rs type HookBootstrapSummary (line 17) | pub struct HookBootstrapSummary { method total_hooks (line 32) | pub fn total_hooks(&self) -> usize { function bootstrap_hooks (line 38) | pub async fn bootstrap_hooks( function register_plugin_bundles (line 77) | async fn register_plugin_bundles( function register_plugin_bundle_from_capabilities_file (line 107) | pub async fn register_plugin_bundle_from_capabilities_file( function collect_plugin_capability_files (line 131) | async fn collect_plugin_capability_files( function insert_unique (line 218) | fn insert_unique( function load_plugin_bundle_from_capabilities_file (line 230) | async fn load_plugin_bundle_from_capabilities_file( function extract_hooks_section (line 249) | fn extract_hooks_section(root: &serde_json::Value) -> Option<&serde_json... function register_workspace_bundles (line 254) | async fn register_workspace_bundles( function parse_workspace_bundle (line 311) | fn parse_workspace_bundle(value: &serde_json::Value) -> Result bool { function test_extract_hooks_section_from_tool_caps (line 328) | fn test_extract_hooks_section_from_tool_caps() { function test_extract_hooks_section_from_channel_caps (line 339) | fn test_extract_hooks_section_from_channel_caps() { function test_workspace_hook_file_filter (line 354) | fn test_workspace_hook_file_filter() { function test_parse_workspace_bundle_wrapped_hooks (line 362) | fn test_parse_workspace_bundle_wrapped_hooks() { FILE: src/hooks/bundled.rs constant DEFAULT_RULE_PRIORITY (line 18) | const DEFAULT_RULE_PRIORITY: u32 = 100; constant DEFAULT_WEBHOOK_PRIORITY (line 19) | const DEFAULT_WEBHOOK_PRIORITY: u32 = 300; constant DEFAULT_WEBHOOK_TIMEOUT_MS (line 20) | const DEFAULT_WEBHOOK_TIMEOUT_MS: u64 = 2000; constant DEFAULT_WEBHOOK_MAX_IN_FLIGHT (line 21) | const DEFAULT_WEBHOOK_MAX_IN_FLIGHT: usize = 32; constant MAX_HOOK_TIMEOUT_MS (line 22) | const MAX_HOOK_TIMEOUT_MS: u64 = 30_000; constant ALL_HOOK_POINTS (line 24) | const ALL_HOOK_POINTS: [HookPoint; 6] = [ type HookBundleError (line 35) | pub enum HookBundleError { type HookBundleConfig (line 81) | pub struct HookBundleConfig { method from_value (line 96) | pub fn from_value(value: &serde_json::Value) -> Result usize { method merge (line 128) | pub fn merge(&mut self, other: HookRegistrationSummary) { function register_bundled_hooks (line 136) | pub async fn register_bundled_hooks(registry: &Arc) -> Hoo... function register_bundle (line 149) | pub async fn register_bundle( type HookRuleConfig (line 191) | pub struct HookRuleConfig { type RegexReplacementConfig (line 224) | pub struct RegexReplacementConfig { type OutboundWebhookConfig (line 231) | pub struct OutboundWebhookConfig { type AuditLogHook (line 253) | struct AuditLogHook; method name (line 257) | fn name(&self) -> &str { method hook_points (line 261) | fn hook_points(&self) -> &[HookPoint] { method execute (line 265) | async fn execute( type CompiledReplacement (line 283) | struct CompiledReplacement { type RuleHook (line 290) | struct RuleHook { method from_config (line 303) | fn from_config(source: &str, config: HookRuleConfig) -> Result<(Self, ... method name (line 370) | fn name(&self) -> &str { method hook_points (line 374) | fn hook_points(&self) -> &[HookPoint] { method failure_mode (line 378) | fn failure_mode(&self) -> HookFailureMode { method timeout (line 382) | fn timeout(&self) -> Duration { method execute (line 386) | async fn execute( type OutboundWebhookHook (line 430) | struct OutboundWebhookHook { method from_config (line 441) | fn from_config( type OutboundWebhookPayload (line 487) | struct OutboundWebhookPayload { type OutboundWebhookEventSummary (line 497) | enum OutboundWebhookEventSummary { method name (line 522) | fn name(&self) -> &str { method hook_points (line 526) | fn hook_points(&self) -> &[HookPoint] { method timeout (line 530) | fn timeout(&self) -> Duration { method execute (line 534) | async fn execute( function summarize_webhook_event (line 594) | fn summarize_webhook_event(event: &HookEvent) -> OutboundWebhookEventSum... function validate_webhook_url (line 640) | fn validate_webhook_url(hook_name: &str, url: &str) -> Result &str { function validate_webhook_headers (line 733) | fn validate_webhook_headers( function is_forbidden_webhook_host (line 768) | fn is_forbidden_webhook_host(host: &str) -> bool { function is_forbidden_ip (line 777) | fn is_forbidden_ip(ip: IpAddr) -> bool { function ipv6_mapped_ipv4 (line 801) | fn ipv6_mapped_ipv4(v6: Ipv6Addr) -> Option { function is_forbidden_ipv4 (line 821) | fn is_forbidden_ipv4(v4: Ipv4Addr) -> bool { function is_forbidden_header (line 848) | fn is_forbidden_header(name: &str) -> bool { function timeout_from_ms (line 861) | fn timeout_from_ms(timeout_ms: Option, hook_name: &str) -> Result &str { function extract_primary_content (line 886) | fn extract_primary_content(event: &HookEvent) -> String { function inbound_event (line 903) | fn inbound_event(content: &str) -> HookEvent { function test_parse_bundle_array_shorthand (line 913) | fn test_parse_bundle_array_shorthand() { function test_rule_hook_modifies_content (line 928) | async fn test_rule_hook_modifies_content() { function test_rule_hook_rejects (line 969) | async fn test_rule_hook_rejects() { function test_outbound_webhook_hook_registers (line 1000) | async fn test_outbound_webhook_hook_registers() { function test_timeout_from_ms_rejects_zero (line 1025) | fn test_timeout_from_ms_rejects_zero() { function test_timeout_from_ms_rejects_above_limit (line 1031) | fn test_timeout_from_ms_rejects_above_limit() { function test_rule_hook_requires_points (line 1037) | fn test_rule_hook_requires_points() { function test_invalid_webhook_scheme_rejected (line 1056) | fn test_invalid_webhook_scheme_rejected() { function test_private_webhook_host_rejected (line 1073) | fn test_private_webhook_host_rejected() { function test_mapped_ipv4_webhook_host_rejected (line 1090) | fn test_mapped_ipv4_webhook_host_rejected() { function test_restricted_webhook_header_rejected (line 1107) | fn test_restricted_webhook_header_rejected() { function test_zero_max_in_flight_rejected (line 1130) | fn test_zero_max_in_flight_rejected() { function test_runtime_target_validation_blocks_private_ip (line 1150) | async fn test_runtime_target_validation_blocks_private_ip() { function test_runtime_target_validation_allows_public_ip (line 1163) | async fn test_runtime_target_validation_allows_public_ip() { function test_rule_guard_no_match_is_passthrough (line 1175) | async fn test_rule_guard_no_match_is_passthrough() { function test_rule_hook_combined_actions (line 1203) | async fn test_rule_hook_combined_actions() { FILE: src/hooks/hook.rs type HookPoint (line 11) | pub enum HookPoint { method as_str (line 28) | pub fn as_str(&self) -> &'static str { type HookEvent (line 42) | pub enum HookEvent { method hook_point (line 79) | pub fn hook_point(&self) -> HookPoint { method apply_modification (line 91) | pub fn apply_modification(&mut self, modified: &str) { type HookOutcome (line 117) | pub enum HookOutcome { method ok (line 132) | pub fn ok() -> Self { method modify (line 137) | pub fn modify(value: String) -> Self { method reject (line 144) | pub fn reject(reason: impl Into) -> Self { type HookFailureMode (line 154) | pub enum HookFailureMode { type HookError (line 163) | pub enum HookError { type HookContext (line 175) | pub struct HookContext { method default (line 181) | fn default() -> Self { type Hook (line 192) | pub trait Hook: Send + Sync { method name (line 194) | fn name(&self) -> &str; method hook_points (line 197) | fn hook_points(&self) -> &[HookPoint]; method failure_mode (line 202) | fn failure_mode(&self) -> HookFailureMode { method timeout (line 209) | fn timeout(&self) -> Duration { method execute (line 214) | async fn execute(&self, event: &HookEvent, ctx: &HookContext) FILE: src/hooks/registry.rs type HookEntry (line 10) | struct HookEntry { type HookRegistry (line 20) | pub struct HookRegistry { method new (line 26) | pub fn new() -> Self { method register (line 33) | pub async fn register(&self, hook: Arc) { method register_with_priority (line 40) | pub async fn register_with_priority(&self, hook: Arc, priori... method unregister (line 62) | pub async fn unregister(&self, name: &str) -> bool { method list (line 70) | pub async fn list(&self) -> Vec { method run (line 81) | pub async fn run(&self, event: &HookEvent) -> Result Self { function extract_content (line 172) | fn extract_content(event: &HookEvent) -> String { type PassthroughHook (line 193) | struct PassthroughHook { method name (line 200) | fn name(&self) -> &str { method hook_points (line 203) | fn hook_points(&self) -> &[HookPoint] { method execute (line 206) | async fn execute( type ModifyHook (line 216) | struct ModifyHook { method name (line 224) | fn name(&self) -> &str { method hook_points (line 227) | fn hook_points(&self) -> &[HookPoint] { method execute (line 230) | async fn execute( type RejectHook (line 241) | struct RejectHook { method name (line 249) | fn name(&self) -> &str { method hook_points (line 252) | fn hook_points(&self) -> &[HookPoint] { method execute (line 255) | async fn execute( type ErrorHook (line 265) | struct ErrorHook { method name (line 273) | fn name(&self) -> &str { method hook_points (line 276) | fn hook_points(&self) -> &[HookPoint] { method failure_mode (line 279) | fn failure_mode(&self) -> HookFailureMode { method execute (line 282) | async fn execute( type SlowHook (line 294) | struct SlowHook { method name (line 302) | fn name(&self) -> &str { method hook_points (line 305) | fn hook_points(&self) -> &[HookPoint] { method failure_mode (line 308) | fn failure_mode(&self) -> HookFailureMode { method timeout (line 311) | fn timeout(&self) -> Duration { method execute (line 314) | async fn execute( function test_event (line 324) | fn test_event() -> HookEvent { function test_empty_registry_returns_ok (line 334) | async fn test_empty_registry_returns_ok() { function test_register_and_list (line 345) | async fn test_register_and_list() { function test_register_duplicate_name_replaces_existing (line 365) | async fn test_register_duplicate_name_replaces_existing() { function test_priority_ordering (line 403) | async fn test_priority_ordering() { function test_reject_stops_chain (line 444) | async fn test_reject_stops_chain() { function test_modification_chaining (line 477) | async fn test_modification_chaining() { function test_fail_open_on_error (line 511) | async fn test_fail_open_on_error() { function test_fail_closed_on_error (line 526) | async fn test_fail_closed_on_error() { function test_fail_open_on_timeout (line 545) | async fn test_fail_open_on_timeout() { function test_fail_closed_on_timeout (line 560) | async fn test_fail_closed_on_timeout() { function test_unregister (line 576) | async fn test_unregister() { function test_hooks_only_match_their_points (line 594) | async fn test_hooks_only_match_their_points() { FILE: src/import/mod.rs type ImportOptions (line 13) | pub struct ImportOptions { type ImportStats (line 26) | pub struct ImportStats { method is_empty (line 47) | pub fn is_empty(&self) -> bool { method total_imported (line 57) | pub fn total_imported(&self) -> usize { type ImportError (line 69) | pub enum ImportError { FILE: src/import/openclaw/credentials.rs function test_secret_string_not_logged (line 12) | fn test_secret_string_not_logged() { function test_create_secret_params_normalized (line 21) | fn test_create_secret_params_normalized() { FILE: src/import/openclaw/history.rs function import_conversation_atomic (line 33) | pub async fn import_conversation_atomic( function test_conversation_import_structure (line 91) | fn test_conversation_import_structure() { FILE: src/import/openclaw/memory.rs function import_chunk (line 11) | pub async fn import_chunk( function test_memory_chunk_import_structure (line 50) | fn test_memory_chunk_import_structure() { FILE: src/import/openclaw/mod.rs type OpenClawImporter (line 20) | pub struct OpenClawImporter { method new (line 29) | pub fn new( method detect (line 44) | pub fn detect() -> Option { method import (line 66) | pub async fn import(&self) -> Result { FILE: src/import/openclaw/reader.rs type OpenClawConfig (line 15) | pub struct OpenClawConfig { type OpenClawLlmConfig (line 22) | pub struct OpenClawLlmConfig { method fmt (line 30) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type OpenClawEmbeddingsConfig (line 41) | pub struct OpenClawEmbeddingsConfig { method fmt (line 48) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type OpenClawMemoryChunk (line 59) | pub struct OpenClawMemoryChunk { type OpenClawConversation (line 68) | pub struct OpenClawConversation { type OpenClawMessage (line 77) | pub struct OpenClawMessage { function open_sqlite (line 85) | async fn open_sqlite(db_path: &Path) -> Result Result { method detect (line 114) | pub fn detect(home_dir: &Path) -> bool { method read_config (line 121) | pub fn read_config(&self) -> Result { method list_agent_dbs (line 206) | pub fn list_agent_dbs(&self) -> Result, ImportE... method read_memory_chunks (line 239) | pub async fn read_memory_chunks( method read_conversations (line 292) | pub async fn read_conversations( method list_workspace_files (line 369) | pub fn list_workspace_files(&self) -> Result { function test_llm_config_debug_redacts_api_key (line 396) | fn test_llm_config_debug_redacts_api_key() { function test_embeddings_config_debug_redacts_api_key (line 413) | fn test_embeddings_config_debug_redacts_api_key() { function test_llm_config_without_api_key (line 429) | fn test_llm_config_without_api_key() { FILE: src/import/openclaw/settings.rs function map_openclaw_config_to_settings (line 9) | pub fn map_openclaw_config_to_settings( function extract_credentials (line 68) | pub fn extract_credentials(config: &OpenClawConfig) -> Vec<(String, Secr... function test_map_llm_config (line 94) | fn test_map_llm_config() { function test_extract_credentials_never_logs (line 121) | fn test_extract_credentials_never_logs() { FILE: src/llm/anthropic_oauth.rs constant ANTHROPIC_API_URL (line 25) | const ANTHROPIC_API_URL: &str = "https://api.anthropic.com/v1/messages"; constant ANTHROPIC_API_VERSION (line 27) | const ANTHROPIC_API_VERSION: &str = "2023-06-01"; constant ANTHROPIC_OAUTH_BETA (line 30) | const ANTHROPIC_OAUTH_BETA: &str = "oauth-2025-04-20"; constant DEFAULT_MAX_TOKENS (line 31) | const DEFAULT_MAX_TOKENS: u32 = 8192; type AnthropicOAuthProvider (line 34) | pub struct AnthropicOAuthProvider { method new (line 47) | pub fn new(config: &RegistryProviderConfig) -> Result { method strip_unsupported_completion_params (line 84) | fn strip_unsupported_completion_params(&self, req: &mut CompletionRequ... method strip_unsupported_tool_params (line 89) | fn strip_unsupported_tool_params(&self, req: &mut ToolCompletionReques... method api_url (line 93) | fn api_url(&self) -> String { method current_token (line 103) | fn current_token(&self) -> String { method update_token (line 111) | fn update_token(&self, new_token: SecretString) { method send_request (line 118) | async fn send_request Deserialize<'de>>( method complete (line 243) | async fn complete(&self, mut req: CompletionRequest) -> Result &str { method cost_per_token (line 357) | fn cost_per_token(&self) -> (Decimal, Decimal) { method active_model_name (line 362) | fn active_model_name(&self) -> String { method set_model (line 369) | fn set_model(&self, model: &str) -> Result<(), LlmError> { type AnthropicRequest (line 385) | struct AnthropicRequest { type AnthropicMessage (line 400) | struct AnthropicMessage { type AnthropicContent (line 408) | enum AnthropicContent { type AnthropicContentBlock (line 415) | enum AnthropicContentBlock { type AnthropicTool (line 432) | struct AnthropicTool { type AnthropicToolChoice (line 439) | struct AnthropicToolChoice { type AnthropicResponse (line 447) | struct AnthropicResponse { type AnthropicResponseBlock (line 456) | enum AnthropicResponseBlock { type AnthropicUsage (line 468) | struct AnthropicUsage { function convert_messages (line 484) | fn convert_messages(messages: Vec) -> (Option, Vec<... function extract_response_content (line 564) | fn extract_response_content(response: &AnthropicResponse) -> (Option Result { method current_model_id (line 73) | fn current_model_id(&self) -> String { method model_name (line 86) | fn model_name(&self) -> &str { method cost_per_token (line 90) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 95) | async fn complete(&self, request: CompletionRequest) -> Result Result { method active_model_name (line 210) | fn active_model_name(&self) -> String { method effective_model_name (line 214) | fn effective_model_name(&self, _requested_model: Option<&str>) -> String { method set_model (line 220) | fn set_model(&self, model: &str) -> Result<(), LlmError> { function build_inference_config (line 241) | fn build_inference_config( function convert_messages (line 282) | fn convert_messages( function flush_tool_results (line 378) | fn flush_tool_results( function push_message (line 396) | fn push_message( function build_tool_config (line 446) | fn build_tool_config( function extract_content_blocks (line 499) | fn extract_content_blocks( function extract_token_usage (line 536) | fn extract_token_usage(usage: Option<&aws_sdk_bedrockruntime::types::Tok... function map_stop_reason (line 547) | fn map_stop_reason(reason: &StopReason) -> FinishReason { function map_sdk_error (line 564) | fn map_sdk_error( function json_to_document (line 629) | pub(crate) fn json_to_document(value: &serde_json::Value) -> Document { function document_to_json (line 659) | pub(crate) fn document_to_json(doc: &Document) -> serde_json::Value { function test_json_to_document_round_trip (line 698) | fn test_json_to_document_round_trip() { function test_json_to_document_empty_object (line 717) | fn test_json_to_document_empty_object() { function test_convert_messages_system_extraction (line 725) | fn test_convert_messages_system_extraction() { function test_convert_messages_basic_conversation (line 740) | fn test_convert_messages_basic_conversation() { function test_convert_messages_tool_results_merge_into_user (line 757) | fn test_convert_messages_tool_results_merge_into_user() { function test_convert_messages_consecutive_users_merge (line 788) | fn test_convert_messages_consecutive_users_merge() { function test_convert_messages_assistant_with_tool_calls (line 800) | fn test_convert_messages_assistant_with_tool_calls() { function test_convert_messages_empty_assistant_content_with_tool_calls (line 823) | fn test_convert_messages_empty_assistant_content_with_tool_calls() { function test_build_tool_config_empty_tools (line 845) | fn test_build_tool_config_empty_tools() { function test_build_tool_config_none_choice (line 851) | fn test_build_tool_config_none_choice() { function test_build_tool_config_with_tools (line 857) | fn test_build_tool_config_with_tools() { function test_map_stop_reason (line 874) | fn test_map_stop_reason() { function test_model_id_with_cross_region (line 892) | fn test_model_id_with_cross_region() { function test_model_id_without_cross_region (line 901) | fn test_model_id_without_cross_region() { function test_convert_messages_tool_result_after_regular_user (line 909) | fn test_convert_messages_tool_result_after_regular_user() { function test_extract_token_usage_present (line 932) | fn test_extract_token_usage_present() { function test_extract_token_usage_none (line 945) | fn test_extract_token_usage_none() { function test_extract_token_usage_negative_clamps_to_zero (line 952) | fn test_extract_token_usage_negative_clamps_to_zero() { function test_json_to_document_nested_arrays (line 966) | fn test_json_to_document_nested_arrays() { function test_json_to_document_large_numbers (line 974) | fn test_json_to_document_large_numbers() { function test_full_tool_round_trip_conversation (line 985) | fn test_full_tool_round_trip_conversation() { function test_convert_messages_empty_input (line 1062) | fn test_convert_messages_empty_input() { function test_convert_messages_system_only (line 1069) | fn test_convert_messages_system_only() { function test_build_tool_config_required_choice (line 1077) | fn test_build_tool_config_required_choice() { function test_map_stop_reason_all_variants (line 1089) | fn test_map_stop_reason_all_variants() { function test_build_inference_config_none_none (line 1101) | fn test_build_inference_config_none_none() { function test_build_inference_config_temperature_only (line 1106) | fn test_build_inference_config_temperature_only() { function test_build_inference_config_max_tokens_only (line 1112) | fn test_build_inference_config_max_tokens_only() { function test_build_inference_config_both (line 1118) | fn test_build_inference_config_both() { function test_build_inference_config_max_tokens_overflow (line 1124) | fn test_build_inference_config_max_tokens_overflow() { function test_build_inference_config_stop_sequences (line 1132) | fn test_build_inference_config_stop_sequences() { function test_build_inference_config_empty_stop_sequences_ignored (line 1139) | fn test_build_inference_config_empty_stop_sequences_ignored() { function test_empty_messages_returns_error (line 1146) | fn test_empty_messages_returns_error() { FILE: src/llm/circuit_breaker.rs type CircuitBreakerConfig (line 30) | pub struct CircuitBreakerConfig { method default (line 40) | fn default() -> Self { type CircuitState (line 51) | pub enum CircuitState { type BreakerState (line 61) | struct BreakerState { method new (line 69) | fn new() -> Self { type CircuitBreakerProvider (line 85) | pub struct CircuitBreakerProvider { method new (line 92) | pub fn new(inner: Arc, config: CircuitBreakerConfig) ... method circuit_state (line 101) | pub async fn circuit_state(&self) -> CircuitState { method consecutive_failures (line 106) | pub async fn consecutive_failures(&self) -> u32 { method check_allowed (line 111) | async fn check_allowed(&self) -> Result<(), LlmError> { method record_success (line 151) | async fn record_success(&self) { method record_failure (line 185) | async fn record_failure(&self, err: &LlmError) { function is_transient (line 231) | fn is_transient(err: &LlmError) -> bool { method model_name (line 246) | fn model_name(&self) -> &str { method cost_per_token (line 250) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 254) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 258) | fn cache_read_discount(&self) -> Decimal { method complete (line 262) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 297) | async fn model_metadata(&self) -> Result { method effective_model_name (line 301) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 305) | fn active_model_name(&self) -> String { method set_model (line 309) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 313) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... function make_request (line 324) | fn make_request() -> CompletionRequest { function make_tool_request (line 328) | fn make_tool_request() -> ToolCompletionRequest { function fast_config (line 332) | fn fast_config(threshold: u32) -> CircuitBreakerConfig { function closed_allows_calls_and_resets_on_success (line 343) | async fn closed_allows_calls_and_resets_on_success() { function failures_accumulate_then_trip_to_open (line 354) | async fn failures_accumulate_then_trip_to_open() { function open_rejects_immediately (line 371) | async fn open_rejects_immediately() { function recovery_timeout_transitions_to_half_open (line 401) | async fn recovery_timeout_transitions_to_half_open() { function half_open_success_closes_circuit (line 419) | async fn half_open_success_closes_circuit() { function half_open_failure_reopens_circuit (line 439) | async fn half_open_failure_reopens_circuit() { function non_transient_errors_do_not_trip_breaker (line 455) | async fn non_transient_errors_do_not_trip_breaker() { function success_resets_failure_count (line 468) | async fn success_resets_failure_count() { function complete_with_tools_uses_same_breaker_logic (line 485) | async fn complete_with_tools_uses_same_breaker_logic() { function multiple_half_open_successes_needed (line 495) | async fn multiple_half_open_successes_needed() { function transient_classification (line 529) | fn transient_classification() { function passthrough_methods_delegate_to_inner (line 575) | async fn passthrough_methods_delegate_to_inner() { type HangingProvider (line 588) | struct HangingProvider; method model_name (line 592) | fn model_name(&self) -> &str { method cost_per_token (line 595) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 598) | async fn complete( method complete_with_tools (line 605) | async fn complete_with_tools( function hanging_provider_behind_breaker_can_be_timed_out (line 614) | async fn hanging_provider_behind_breaker_can_be_timed_out() { function rapid_open_close_cycles_do_not_corrupt_state (line 627) | async fn rapid_open_close_cycles_do_not_corrupt_state() { function mixed_error_types_only_transient_counts (line 661) | async fn mixed_error_types_only_transient_counts() { function test_cooldown_at_zero_nanos (line 681) | async fn test_cooldown_at_zero_nanos() { function test_circuit_breaker_half_open_failure_reopens (line 732) | async fn test_circuit_breaker_half_open_failure_reopens() { FILE: src/llm/codex_auth.rs constant CHATGPT_BACKEND_URL (line 23) | const CHATGPT_BACKEND_URL: &str = "https://chatgpt.com/backend-api/codex"; constant OPENAI_API_URL (line 26) | const OPENAI_API_URL: &str = "https://api.openai.com/v1"; constant REFRESH_TOKEN_URL (line 29) | const REFRESH_TOKEN_URL: &str = "https://auth.openai.com/oauth/token"; constant CLIENT_ID (line 32) | const CLIENT_ID: &str = "app_EMoamEEZ73f0CkXaXp7hrann"; type CodexCredentials (line 36) | pub struct CodexCredentials { method base_url (line 52) | pub fn base_url(&self) -> &'static str { type CodexAuthJson (line 63) | struct CodexAuthJson { type CodexTokens (line 71) | struct CodexTokens { type RefreshRequest (line 78) | struct RefreshRequest<'a> { type RefreshResponse (line 86) | struct RefreshResponse { function default_codex_auth_path (line 92) | pub fn default_codex_auth_path() -> PathBuf { function load_codex_credentials (line 107) | pub fn load_codex_credentials(path: &Path) -> Option { function refresh_access_token (line 178) | pub async fn refresh_access_token( function persist_refreshed_tokens (line 252) | fn persist_refreshed_tokens( function set_auth_file_permissions (line 279) | fn set_auth_file_permissions(path: &Path) -> Result<(), Box Result<(), Box Self { method with_lazy_model (line 82) | pub fn with_lazy_model( method resolve_model (line 112) | async fn resolve_model(&self) -> &str { method fetch_available_models (line 159) | async fn fetch_available_models( method build_request_body (line 203) | fn build_request_body( method message_to_input_items (line 255) | fn message_to_input_items(msg: &ChatMessage) -> Vec { method send_request (line 347) | async fn send_request(&self, body: Value) -> Result( method parse_sse_response (line 542) | fn parse_sse_response(sse_text: &str) -> Result Value { type ResponsesResult (line 662) | struct ResponsesResult { type PendingToolCall (line 671) | struct PendingToolCall { method model_name (line 680) | fn model_name(&self) -> &str { method cost_per_token (line 688) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 693) | async fn complete(&self, request: CompletionRequest) -> Result String { function test_codex_config (line 25) | pub(crate) fn test_codex_config(session_path: std::path::PathBuf) -> Ope... FILE: src/llm/config.rs constant OAUTH_PLACEHOLDER (line 21) | pub const OAUTH_PLACEHOLDER: &str = "oauth-placeholder"; type CacheRetention (line 31) | pub enum CacheRetention { type Err (line 42) | type Err = String; method from_str (line 44) | fn from_str(s: &str) -> Result { method fmt (line 58) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type RegistryProviderConfig (line 74) | pub struct RegistryProviderConfig { type OpenAiCodexConfig (line 108) | pub struct OpenAiCodexConfig { method default (line 124) | fn default() -> Self { type BedrockConfig (line 138) | pub struct BedrockConfig { type LlmConfig (line 155) | pub struct LlmConfig { method cheap_model_name (line 189) | pub fn cheap_model_name(&self) -> Option<&str> { type NearAiConfig (line 202) | pub struct NearAiConfig { method for_model_discovery (line 239) | pub(crate) fn for_model_discovery() -> Self { FILE: src/llm/costs.rs function model_cost (line 12) | pub fn model_cost(model_id: &str) -> Option<(Decimal, Decimal)> { function default_cost (line 84) | pub fn default_cost() -> (Decimal, Decimal) { function is_local_model (line 90) | fn is_local_model(model_id: &str) -> bool { function test_known_model_costs (line 112) | fn test_known_model_costs() { function test_claude_costs (line 119) | fn test_claude_costs() { function test_local_model_free (line 126) | fn test_local_model_free() { function test_ollama_tagged_model_free (line 133) | fn test_ollama_tagged_model_free() { function test_unknown_model_returns_none (line 140) | fn test_unknown_model_returns_none() { function test_default_cost_nonzero (line 145) | fn test_default_cost_nonzero() { function test_provider_prefix_stripped (line 152) | fn test_provider_prefix_stripped() { function test_openrouter_free_suffix_zero_cost (line 158) | fn test_openrouter_free_suffix_zero_cost() { function test_openrouter_free_router_zero_cost (line 166) | fn test_openrouter_free_router_zero_cost() { function test_bare_free_zero_cost (line 174) | fn test_bare_free_zero_cost() { function test_free_suffix_various_providers (line 182) | fn test_free_suffix_various_providers() { FILE: src/llm/error.rs type LlmError (line 7) | pub enum LlmError { FILE: src/llm/failover.rs type CooldownConfig (line 35) | pub struct CooldownConfig { method default (line 43) | fn default() -> Self { type ProviderCooldown (line 56) | struct ProviderCooldown { method new (line 65) | fn new() -> Self { method is_in_cooldown (line 73) | fn is_in_cooldown(&self, now_nanos: u64, cooldown_nanos: u64) -> bool { method record_failure (line 80) | fn record_failure(&self, threshold: u32) -> bool { method activate_cooldown (line 86) | fn activate_cooldown(&self, now_nanos: u64) { method reset (line 93) | fn reset(&self) { type FailoverProvider (line 108) | pub struct FailoverProvider { method new (line 133) | pub fn new(providers: Vec>) -> Result u64 { method current_task_id (line 172) | fn current_task_id() -> Option { method bind_provider_to_current_task (line 177) | fn bind_provider_to_current_task(&self, provider_idx: usize) { method take_bound_provider_for_current_task (line 187) | fn take_bound_provider_for_current_task(&self) -> Option { method try_providers (line 200) | async fn try_providers(&self, mut call: F) -> Result<(usize... method model_name (line 291) | fn model_name(&self) -> &str { method cost_per_token (line 295) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 299) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 303) | fn cache_read_discount(&self) -> Decimal { method complete (line 307) | async fn complete(&self, request: CompletionRequest) -> Result String { method set_model (line 336) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method list_models (line 343) | async fn list_models(&self) -> Result, LlmError> { method model_metadata (line 364) | async fn model_metadata(&self) -> Result { method calculate_cost (line 370) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... method effective_model_name (line 375) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { type MockProvider (line 394) | struct MockProvider { method succeeding (line 404) | fn succeeding(name: &str, content: &str) -> Self { method succeeding_with_cost (line 430) | fn succeeding_with_cost( method failing_retryable (line 443) | fn failing_retryable(name: &str) -> Self { method failing_non_retryable (line 460) | fn failing_non_retryable(name: &str) -> Self { method failing_rate_limited (line 475) | fn failing_rate_limited(name: &str) -> Self { method model_name (line 495) | fn model_name(&self) -> &str { method cost_per_token (line 499) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 503) | async fn complete( method complete_with_tools (line 514) | async fn complete_with_tools( method list_models (line 525) | async fn list_models(&self) -> Result, LlmError> { method active_model_name (line 529) | fn active_model_name(&self) -> String { method set_model (line 533) | fn set_model(&self, model: &str) -> Result<(), LlmError> { function make_request (line 539) | fn make_request() -> CompletionRequest { function make_tool_request (line 543) | fn make_tool_request() -> ToolCompletionRequest { function primary_succeeds_no_failover (line 549) | async fn primary_succeeds_no_failover() { function primary_fails_retryable_fallback_succeeds (line 561) | async fn primary_fails_retryable_fallback_succeeds() { function all_providers_fail_returns_last_error (line 573) | async fn all_providers_fail_returns_last_error() { function non_retryable_error_fails_immediately (line 590) | async fn non_retryable_error_fails_immediately() { function three_providers_first_two_fail_third_succeeds (line 607) | async fn three_providers_first_two_fail_third_succeeds() { function complete_with_tools_failover (line 620) | async fn complete_with_tools_failover() { function model_name_and_cost_track_last_used_provider (line 635) | async fn model_name_and_cost_track_last_used_provider() { function effective_model_name_is_request_scoped_under_concurrency (line 660) | async fn effective_model_name_is_request_scoped_under_concurrency() { function list_models_aggregates_all (line 703) | async fn list_models_aggregates_all() { type MultiCallMockProvider (line 720) | struct MultiCallMockProvider { method always_ok (line 732) | fn always_ok(name: &str) -> Self { method fail_then_ok (line 742) | fn fail_then_ok(name: &str, n: u32) -> Self { method always_fail (line 752) | fn always_fail(name: &str) -> Self { method always_fail_non_retryable (line 762) | fn always_fail_non_retryable(name: &str) -> Self { method call_count (line 771) | fn call_count(&self) -> u32 { method model_name (line 778) | fn model_name(&self) -> &str { method cost_per_token (line 782) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 786) | async fn complete( method complete_with_tools (line 812) | async fn complete_with_tools( method list_models (line 839) | async fn list_models(&self) -> Result, LlmError> { function cooldown_activates_after_threshold (line 848) | async fn cooldown_activates_after_threshold() { function cooldown_expires_after_duration (line 879) | async fn cooldown_expires_after_duration() { function never_skip_all_providers (line 917) | async fn never_skip_all_providers() { function reset_on_success (line 950) | async fn reset_on_success() { function threshold_boundary (line 999) | async fn threshold_boundary() { function non_retryable_does_not_increment_cooldown (line 1039) | async fn non_retryable_does_not_increment_cooldown() { function three_providers_mixed_cooldown (line 1065) | async fn three_providers_mixed_cooldown() { function retryable_classification (line 1092) | fn retryable_classification() { function empty_providers_returns_error (line 1134) | fn empty_providers_returns_error() { function cooldown_at_nanos_zero_still_activates (line 1141) | fn cooldown_at_nanos_zero_still_activates() { function set_model_propagates_to_all_providers (line 1150) | fn set_model_propagates_to_all_providers() { function hanging_provider_failover_to_healthy_one (line 1177) | async fn hanging_provider_failover_to_healthy_one() { function all_providers_fail_returns_error_not_panic (line 1204) | async fn all_providers_fail_returns_error_not_panic() { function failover_with_tools_follows_same_path (line 1217) | async fn failover_with_tools_follows_same_path() { function single_provider_failover_still_works (line 1229) | async fn single_provider_failover_still_works() { function test_failover_all_providers_fail_no_panic (line 1244) | async fn test_failover_all_providers_fail_no_panic() { function test_failover_with_single_provider_failing (line 1294) | async fn test_failover_with_single_provider_failing() { FILE: src/llm/image_models.rs constant IMAGE_GEN_PATTERNS (line 4) | const IMAGE_GEN_PATTERNS: &[&str] = &[ function is_image_generation_model (line 17) | pub fn is_image_generation_model(model: &str) -> bool { function suggest_image_model (line 25) | pub fn suggest_image_model(models: &[String]) -> Option<&str> { function detects_flux_models (line 54) | fn detects_flux_models() { function detects_dalle_models (line 62) | fn detects_dalle_models() { function rejects_non_image_models (line 68) | fn rejects_non_image_models() { function suggests_flux_first (line 75) | fn suggests_flux_first() { function suggests_dalle_without_flux (line 85) | fn suggests_dalle_without_flux() { function returns_none_when_no_image_models (line 91) | fn returns_none_when_no_image_models() { FILE: src/llm/mod.rs function create_llm_provider (line 84) | pub async fn create_llm_provider( function create_llm_provider_with_config (line 132) | pub fn create_llm_provider_with_config( function create_registry_provider (line 161) | fn create_registry_provider( function create_codex_chatgpt_from_registry (line 177) | fn create_codex_chatgpt_from_registry( function create_bedrock_provider (line 208) | async fn create_bedrock_provider(config: &LlmConfig) -> Result NearAiConfig { function test_llm_config (line 688) | fn test_llm_config() -> LlmConfig { function test_create_cheap_llm_provider_returns_none_when_not_configured (line 703) | fn test_create_cheap_llm_provider_returns_none_when_not_configured() { function test_create_cheap_llm_provider_creates_provider_with_nearai_cheap_model (line 713) | fn test_create_cheap_llm_provider_creates_provider_with_nearai_cheap_mod... function test_create_cheap_llm_provider_generic_overrides_nearai (line 727) | fn test_create_cheap_llm_provider_generic_overrides_nearai() { function test_create_cheap_llm_provider_nearai_cheap_ignored_for_non_nearai_backend (line 746) | fn test_create_cheap_llm_provider_nearai_cheap_ignored_for_non_nearai_ba... function test_create_cheap_llm_provider_bedrock_returns_error (line 762) | fn test_create_cheap_llm_provider_bedrock_returns_error() { function test_cheap_model_name_resolution (line 777) | fn test_cheap_model_name_resolution() { FILE: src/llm/models.rs function fetch_anthropic_models (line 6) | pub(crate) async fn fetch_anthropic_models(cached_key: Option<&str>) -> ... function fetch_openai_models (line 91) | pub(crate) async fn fetch_openai_models(cached_key: Option<&str>) -> Vec... function is_openai_chat_model (line 163) | pub(crate) fn is_openai_chat_model(model_id: &str) -> bool { function openai_model_priority (line 184) | pub(crate) fn openai_model_priority(model_id: &str) -> usize { function sort_openai_models (line 220) | pub(crate) fn sort_openai_models(models: &mut [(String, String)]) { function fetch_ollama_models (line 231) | pub(crate) async fn fetch_ollama_models(base_url: &str) -> Vec<(String, ... function fetch_openai_compatible_models (line 288) | pub(crate) async fn fetch_openai_compatible_models( function build_nearai_model_fetch_config (line 334) | pub(crate) fn build_nearai_model_fetch_config() -> crate::config::LlmCon... FILE: src/llm/nearai_chat.rs type ModelInfo (line 29) | pub struct ModelInfo { constant DEFAULT_MODEL (line 39) | pub const DEFAULT_MODEL: &str = "Qwen/Qwen3.5-122B-A10B"; function default_models (line 43) | pub fn default_models() -> Vec<(String, String)> { type NearAiChatProvider (line 54) | pub struct NearAiChatProvider { method new (line 75) | pub fn new(config: NearAiConfig, session: Arc) -> Resu... method new_with_timeout (line 80) | pub fn new_with_timeout( method new_with_options (line 90) | pub fn new_with_options( method api_url (line 150) | fn api_url(&self, path: &str) -> String { method uses_api_key (line 162) | fn uses_api_key(&self) -> bool { method resolve_bearer_token (line 175) | async fn resolve_bearer_token(&self) -> Result { method send_request (line 215) | async fn send_request Deserialize<'de>>( method send_request_inner (line 231) | async fn send_request_inner Deserialize<'de>>( method list_models_full (line 322) | pub async fn list_models_full(&self) -> Result, LlmErro... method list_models_inner (line 333) | async fn list_models_inner(&self) -> Result, LlmError> { method complete (line 462) | async fn complete(&self, req: CompletionRequest) -> Result &str { method cost_per_token (line 630) | fn cost_per_token(&self) -> (Decimal, Decimal) { method list_models (line 641) | async fn list_models(&self) -> Result, LlmError> { method active_model_name (line 646) | fn active_model_name(&self) -> String { method set_model (line 656) | fn set_model(&self, model: &str) -> Result<(), crate::error::LlmError> { type ChatCompletionRequest (line 673) | struct ChatCompletionRequest { type MessageContent (line 693) | enum MessageContent { method deserialize (line 708) | fn deserialize>(deserializer: D) -> Result... method as_text (line 736) | fn as_text(&self) -> Option<&str> { method serialize (line 699) | fn serialize(&self, serializer: S) -> Result Self { type ModelCost (line 764) | struct ModelCost { type PricingModelEntry (line 772) | struct PricingModelEntry { type PricingMetadata (line 784) | struct PricingMetadata { type PricingResponse (line 791) | struct PricingResponse { function model_cost_to_decimal (line 799) | fn model_cost_to_decimal(mc: &ModelCost) -> Option { function fetch_pricing (line 813) | async fn fetch_pricing( function flatten_tool_messages (line 903) | fn flatten_tool_messages(messages: Vec) -> Vec u32 { function parse_usage (line 1073) | fn parse_usage(usage: Option<&ChatCompletionUsage>) -> (u32, u32) { function test_nearai_config (line 1095) | fn test_nearai_config(base_url: &str) -> NearAiConfig { function test_session (line 1114) | fn test_session() -> Arc { function test_api_url_with_base_without_v1 (line 1119) | fn test_api_url_with_base_without_v1() { function test_api_url_with_base_already_v1 (line 1137) | fn test_api_url_with_base_already_v1() { function test_message_conversion (line 1148) | fn test_message_conversion() { function test_tool_message_conversion (line 1159) | fn test_tool_message_conversion() { function test_assistant_with_tool_calls_conversion (line 1168) | fn test_assistant_with_tool_calls_conversion() { function test_assistant_without_tool_calls_has_none (line 1199) | fn test_assistant_without_tool_calls_has_none() { function test_tool_call_arguments_serialized_to_string (line 1206) | fn test_tool_call_arguments_serialized_to_string() { function test_flatten_no_tool_messages_passthrough (line 1225) | fn test_flatten_no_tool_messages_passthrough() { function test_flatten_tool_call_and_result (line 1249) | fn test_flatten_tool_call_and_result() { function test_flatten_preserves_assistant_text_with_tool_calls (line 1310) | fn test_flatten_preserves_assistant_text_with_tool_calls() { function test_model_cost_to_decimal_basic (line 1346) | fn test_model_cost_to_decimal_basic() { function test_model_cost_to_decimal_zero (line 1357) | fn test_model_cost_to_decimal_zero() { function test_model_cost_to_decimal_larger_scale (line 1366) | fn test_model_cost_to_decimal_larger_scale() { function test_cost_per_token_uses_pricing_map (line 1377) | fn test_cost_per_token_uses_pricing_map() { function test_cost_per_token_falls_back_to_static (line 1393) | fn test_cost_per_token_falls_back_to_static() { function test_cost_per_token_falls_back_to_default (line 1406) | fn test_cost_per_token_falls_back_to_default() { function test_reasoning_content_not_leaked_into_tool_call_response (line 1420) | fn test_reasoning_content_not_leaked_into_tool_call_response() { function test_reasoning_content_used_for_text_response (line 1477) | fn test_reasoning_content_used_for_text_response() { function test_resolve_bearer_token_config_api_key (line 1524) | async fn test_resolve_bearer_token_config_api_key() { function test_resolve_bearer_token_session_token (line 1536) | async fn test_resolve_bearer_token_session_token() { function test_resolve_bearer_token_session_beats_env_var (line 1553) | async fn test_resolve_bearer_token_session_beats_env_var() { function test_resolve_bearer_token_config_beats_session_and_env (line 1586) | async fn test_resolve_bearer_token_config_beats_session_and_env() { function test_model_info_deserialize_with_name_field (line 1618) | fn test_model_info_deserialize_with_name_field() { function test_model_info_deserialize_with_id_alias (line 1626) | fn test_model_info_deserialize_with_id_alias() { function test_model_info_deserialize_with_model_alias (line 1634) | fn test_model_info_deserialize_with_model_alias() { function test_model_info_roundtrip_serializes_as_name (line 1641) | fn test_model_info_roundtrip_serializes_as_name() { function test_request_serialization_minimal (line 1657) | fn test_request_serialization_minimal() { function test_request_serialization_with_tools (line 1685) | fn test_request_serialization_with_tools() { function test_request_omits_null_content_on_assistant_messages (line 1722) | fn test_request_omits_null_content_on_assistant_messages() { function test_response_deserialize_basic (line 1752) | fn test_response_deserialize_basic() { function test_response_deserialize_missing_optional_fields (line 1781) | fn test_response_deserialize_missing_optional_fields() { function test_response_deserialize_with_tool_calls (line 1799) | fn test_response_deserialize_with_tool_calls() { function test_response_deserialize_ignores_unknown_fields (line 1838) | fn test_response_deserialize_ignores_unknown_fields() { function test_parse_usage_with_all_fields (line 1868) | fn test_parse_usage_with_all_fields() { function test_parse_usage_none (line 1878) | fn test_parse_usage_none() { function test_parse_usage_missing_completion_falls_back_to_total_minus_prompt (line 1883) | fn test_parse_usage_missing_completion_falls_back_to_total_minus_prompt() { function test_parse_usage_missing_completion_and_prompt_uses_total (line 1894) | fn test_parse_usage_missing_completion_and_prompt_uses_total() { function test_parse_usage_all_none (line 1905) | fn test_parse_usage_all_none() { function test_saturate_u32_within_range (line 1915) | fn test_saturate_u32_within_range() { function test_saturate_u32_overflow_clamps (line 1922) | fn test_saturate_u32_overflow_clamps() { function test_model_cost_deserialize (line 1930) | fn test_model_cost_deserialize() { function test_model_cost_scale_defaults_to_zero (line 1938) | fn test_model_cost_scale_defaults_to_zero() { function test_model_cost_to_decimal_negative_scale (line 1945) | fn test_model_cost_to_decimal_negative_scale() { function test_pricing_model_entry_deserialize_camel_case_aliases (line 1956) | fn test_pricing_model_entry_deserialize_camel_case_aliases() { function test_pricing_model_entry_deserialize_snake_case (line 1976) | fn test_pricing_model_entry_deserialize_snake_case() { function test_pricing_response_models_wrapper (line 1989) | fn test_pricing_response_models_wrapper() { function test_pricing_response_data_wrapper (line 2003) | fn test_pricing_response_data_wrapper() { function test_flatten_tool_result_missing_name_uses_unknown (line 2018) | fn test_flatten_tool_result_missing_name_uses_unknown() { function test_flatten_tool_result_missing_content_uses_empty (line 2040) | fn test_flatten_tool_result_missing_content_uses_empty() { function test_flatten_multiple_tool_calls_in_single_assistant_message (line 2062) | fn test_flatten_multiple_tool_calls_in_single_assistant_message() { function test_assistant_empty_content_with_tool_calls_becomes_none (line 2118) | fn test_assistant_empty_content_with_tool_calls_becomes_none() { function test_system_message_conversion (line 2137) | fn test_system_message_conversion() { function test_usage_deserialize_partial_fields (line 2152) | fn test_usage_deserialize_partial_fields() { function test_usage_deserialize_empty_object (line 2162) | fn test_usage_deserialize_empty_object() { function test_tool_call_serde_roundtrip (line 2173) | fn test_tool_call_serde_roundtrip() { function test_api_url_with_trailing_v1_slash (line 2199) | fn test_api_url_with_trailing_v1_slash() { function test_api_url_with_deep_base_path (line 2207) | fn test_api_url_with_deep_base_path() { FILE: src/llm/oauth_helpers.rs constant OAUTH_CALLBACK_PORT (line 15) | pub const OAUTH_CALLBACK_PORT: u16 = 9876; type OAuthCallbackError (line 19) | pub enum OAuthCallbackError { function callback_url (line 41) | pub fn callback_url() -> String { function callback_host (line 57) | pub fn callback_host() -> String { function is_loopback_host (line 66) | pub fn is_loopback_host(host: &str) -> bool { function is_wildcard_host (line 79) | fn is_wildcard_host(host: &str) -> bool { function bind_error (line 86) | fn bind_error(e: std::io::Error) -> OAuthCallbackError { function bind_callback_listener (line 102) | pub async fn bind_callback_listener() -> Result String { function landing_html (line 276) | pub fn landing_html(provider_name: &str, success: bool) -> String { function loopback_detection (line 367) | fn loopback_detection() { function wildcard_detection (line 380) | fn wildcard_detection() { function bind_rejects_wildcard_ipv4 (line 392) | async fn bind_rejects_wildcard_ipv4() { function bind_rejects_wildcard_ipv6 (line 416) | async fn bind_rejects_wildcard_ipv6() { FILE: src/llm/openai_codex_provider.rs type AuthState (line 26) | struct AuthState { type OpenAiCodexProvider (line 31) | pub struct OpenAiCodexProvider { method new (line 43) | pub fn new( method update_token (line 68) | pub async fn update_token(&self, token: &str) -> Result<(), LlmError> { method build_headers (line 79) | async fn build_headers(&self) -> Result Result &str { method cost_per_token (line 253) | fn cost_per_token(&self) -> (Decimal, Decimal) { method calculate_cost (line 257) | fn calculate_cost(&self, _input_tokens: u32, _output_tokens: u32) -> Dec... method complete (line 261) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 309) | async fn model_metadata(&self) -> Result { method set_model (line 316) | fn set_model(&self, _model: &str) -> Result<(), LlmError> { method effective_model_name (line 323) | fn effective_model_name(&self, _requested_model: Option<&str>) -> String { function extract_account_id (line 336) | fn extract_account_id(token: &str) -> Result { function convert_message (line 383) | fn convert_message(msg: &ChatMessage, index: usize) -> Vec serde_json::Value { type ParsedResponse (line 476) | struct ParsedResponse { type SseEvent (line 486) | struct SseEvent { type FunctionCallState (line 495) | struct FunctionCallState { function parse_sse_response (line 502) | fn parse_sse_response(body: &str) -> Result { function test_extract_account_id_success (line 764) | fn test_extract_account_id_success() { function test_extract_account_id_missing_claim (line 772) | fn test_extract_account_id_missing_claim() { function test_extract_account_id_invalid_jwt (line 785) | fn test_extract_account_id_invalid_jwt() { function test_convert_user_message (line 791) | fn test_convert_user_message() { function test_convert_system_message_excluded (line 801) | fn test_convert_system_message_excluded() { function test_convert_assistant_text_message (line 808) | fn test_convert_assistant_text_message() { function test_convert_assistant_with_tool_calls (line 819) | fn test_convert_assistant_with_tool_calls() { function test_convert_tool_result_message (line 844) | fn test_convert_tool_result_message() { function test_convert_tool_definition (line 854) | fn test_convert_tool_definition() { function test_parse_sse_text_response (line 872) | fn test_parse_sse_text_response() { function test_parse_sse_tool_call_response (line 893) | fn test_parse_sse_tool_call_response() { function test_parse_sse_error_response (line 920) | fn test_parse_sse_error_response() { function test_parse_sse_failed_response (line 931) | fn test_parse_sse_failed_response() { function test_parse_sse_incomplete_status (line 942) | fn test_parse_sse_incomplete_status() { function test_parse_sse_done_marker (line 956) | fn test_parse_sse_done_marker() { function test_provider_new (line 971) | async fn test_provider_new() { function test_update_token (line 987) | async fn test_update_token() { function test_build_request_body_structure (line 1007) | fn test_build_request_body_structure() { function test_build_request_body_with_tools (line 1037) | fn test_build_request_body_with_tools() { function test_parse_sse_multiple_tool_calls (line 1065) | fn test_parse_sse_multiple_tool_calls() { FILE: src/llm/openai_codex_session.rs type OpenAiCodexSession (line 24) | pub struct OpenAiCodexSession { method fmt (line 32) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type UserCodeRequest (line 44) | struct UserCodeRequest { type UserCodeResponse (line 50) | struct UserCodeResponse { method expires_in_secs (line 105) | fn expires_in_secs(&self) -> u64 { function default_verification_uri (line 72) | fn default_verification_uri() -> String { function default_interval (line 76) | fn default_interval() -> u64 { function deserialize_string_or_u64 (line 81) | fn deserialize_string_or_u64<'de, D>(deserializer: D) -> Result Result { method has_session (line 201) | pub async fn has_session(&self) -> bool { method needs_refresh (line 206) | pub async fn needs_refresh(&self) -> bool { method get_access_token (line 222) | pub async fn get_access_token(&self) -> Result { method ensure_authenticated (line 250) | pub async fn ensure_authenticated(&self) -> Result<(), LlmError> { method device_code_login (line 284) | pub async fn device_code_login(&self) -> Result<(), LlmError> { method refresh_tokens (line 482) | pub async fn refresh_tokens(&self) -> Result<(), LlmError> { method save_session (line 554) | pub async fn save_session(&self, session: &OpenAiCodexSession) -> Resu... method load_session (line 597) | pub async fn load_session(&self) -> Result<(), LlmError> { method set_session (line 623) | pub async fn set_session(&self, session: OpenAiCodexSession) { method handle_auth_failure (line 629) | pub async fn handle_auth_failure(&self) -> Result<(), LlmError> { function test_save_and_load_session (line 644) | async fn test_save_and_load_session() { function test_needs_refresh_when_near_expiry (line 674) | async fn test_needs_refresh_when_near_expiry() { function device_code_parse_error_redacts_body (line 692) | fn device_code_parse_error_redacts_body() { function test_no_refresh_when_fresh (line 715) | async fn test_no_refresh_when_fresh() { FILE: src/llm/provider.rs type Role (line 12) | pub enum Role { type ContentPart (line 22) | pub enum ContentPart { type ImageUrl (line 33) | pub struct ImageUrl { type ChatMessage (line 43) | pub struct ChatMessage { method system (line 65) | pub fn system(content: impl Into) -> Self { method user (line 77) | pub fn user(content: impl Into) -> Self { method user_with_parts (line 91) | pub fn user_with_parts(content: impl Into, parts: Vec) -> Self { method assistant_with_tool_calls (line 118) | pub fn assistant_with_tool_calls(content: Option, tool_calls: ... method tool_result (line 134) | pub fn tool_result( type CompletionRequest (line 152) | pub struct CompletionRequest { method new (line 165) | pub fn new(messages: Vec) -> Self { method with_model (line 177) | pub fn with_model(mut self, model: impl Into) -> Self { method with_max_tokens (line 183) | pub fn with_max_tokens(mut self, max_tokens: u32) -> Self { method with_temperature (line 189) | pub fn with_temperature(mut self, temperature: f32) -> Self { type CompletionResponse (line 197) | pub struct CompletionResponse { type FinishReason (line 212) | pub enum FinishReason { type ToolDefinition (line 222) | pub struct ToolDefinition { type ToolCall (line 230) | pub struct ToolCall { type ToolResult (line 238) | pub struct ToolResult { type ToolCompletionRequest (line 247) | pub struct ToolCompletionRequest { method new (line 263) | pub fn new(messages: Vec, tools: Vec) -> ... method with_model (line 277) | pub fn with_model(mut self, model: impl Into) -> Self { method with_max_tokens (line 283) | pub fn with_max_tokens(mut self, max_tokens: u32) -> Self { method with_temperature (line 289) | pub fn with_temperature(mut self, temperature: f32) -> Self { method with_stop_sequences (line 295) | pub fn with_stop_sequences(mut self, stop_sequences: Vec) -> S... method with_tool_choice (line 301) | pub fn with_tool_choice(mut self, choice: impl Into) -> Self { type ToolCompletionResponse (line 309) | pub struct ToolCompletionResponse { type ModelMetadata (line 325) | pub struct ModelMetadata { type LlmProvider (line 333) | pub trait LlmProvider: Send + Sync { method model_name (line 335) | fn model_name(&self) -> &str; method cost_per_token (line 338) | fn cost_per_token(&self) -> (Decimal, Decimal); method complete (line 341) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 357) | async fn model_metadata(&self) -> Result { method effective_model_name (line 368) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 378) | fn active_model_name(&self) -> String { method set_model (line 383) | fn set_model(&self, _model: &str) -> Result<(), LlmError> { method calculate_cost (line 391) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Dec... method cache_write_multiplier (line 400) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 409) | fn cache_read_discount(&self) -> Decimal { function sanitize_tool_messages (line 427) | pub fn sanitize_tool_messages(messages: &mut [ChatMessage]) { type UnsupportedParam (line 471) | pub enum UnsupportedParam { method name (line 479) | pub fn name(&self) -> &'static str { function strip_unsupported_completion_params (line 492) | pub fn strip_unsupported_completion_params( function strip_unsupported_tool_params (line 515) | pub fn strip_unsupported_tool_params( function test_sanitize_preserves_valid_pairs (line 538) | fn test_sanitize_preserves_valid_pairs() { function test_sanitize_rewrites_orphaned_tool_result (line 555) | fn test_sanitize_rewrites_orphaned_tool_result() { function test_sanitize_handles_no_tool_messages (line 569) | fn test_sanitize_handles_no_tool_messages() { function test_sanitize_multiple_orphaned (line 581) | fn test_sanitize_multiple_orphaned() { function test_sanitize_preserves_tool_results_with_matching_assistant (line 606) | fn test_sanitize_preserves_tool_results_with_matching_assistant() { function test_sanitize_rewrites_orphaned_tool_results (line 640) | fn test_sanitize_rewrites_orphaned_tool_results() { function test_strip_unsupported_tool_params_strips_stop_sequences (line 664) | fn test_strip_unsupported_tool_params_strips_stop_sequences() { FILE: src/llm/reasoning.rs constant SILENT_REPLY_TOKEN (line 17) | pub const SILENT_REPLY_TOKEN: &str = "NO_REPLY"; constant TOOL_INTENT_NUDGE (line 21) | pub const TOOL_INTENT_NUDGE: &str = "\ function llm_signals_tool_intent (line 32) | pub fn llm_signals_tool_intent(response: &str) -> bool { function strip_code_blocks (line 99) | fn strip_code_blocks(text: &str) -> String { function strip_quoted_strings (line 125) | fn strip_quoted_strings(line: &str) -> String { function is_silent_reply (line 146) | pub fn is_silent_reply(text: &str) -> bool { type ReasoningContext (line 177) | pub struct ReasoningContext { method new (line 199) | pub fn new() -> Self { method with_message (line 212) | pub fn with_message(mut self, message: ChatMessage) -> Self { method with_messages (line 218) | pub fn with_messages(mut self, messages: Vec) -> Self { method with_tools (line 224) | pub fn with_tools(mut self, tools: Vec) -> Self { method with_system_prompt (line 231) | pub fn with_system_prompt(mut self, prompt: String) -> Self { method with_job (line 237) | pub fn with_job(mut self, description: impl Into) -> Self { method with_metadata (line 243) | pub fn with_metadata(mut self, metadata: std::collections::HashMap Self { type PlannedAction (line 257) | pub struct PlannedAction { type ActionPlan (line 270) | pub struct ActionPlan { type ToolSelection (line 285) | pub struct ToolSelection { type TokenUsage (line 304) | pub struct TokenUsage { method total (line 314) | pub fn total(&self) -> u32 { type RespondResult (line 323) | pub enum RespondResult { type RespondOutput (line 337) | pub struct RespondOutput { type Reasoning (line 343) | pub struct Reasoning { method new (line 362) | pub fn new(llm: Arc) -> Self { method with_system_prompt (line 378) | pub fn with_system_prompt(mut self, prompt: String) -> Self { method with_skill_context (line 389) | pub fn with_skill_context(mut self, context: String) -> Self { method with_channel (line 397) | pub fn with_channel(mut self, channel: impl Into) -> Self { method with_model_name (line 406) | pub fn with_model_name(mut self, name: impl Into) -> Self { method with_group_chat (line 415) | pub fn with_group_chat(mut self, is_group: bool) -> Self { method with_conversation_data (line 427) | pub fn with_conversation_data( method complete (line 442) | pub async fn complete( method plan (line 458) | pub async fn plan(&self, context: &ReasoningContext) -> Result Result String { method build_system_prompt_with_tools (line 800) | pub fn build_system_prompt_with_tools(&self, tools: &[ToolDefinition])... method build_extensions_section_for_tools (line 927) | fn build_extensions_section_for_tools(&self, tools: &[ToolDefinition])... method build_channel_section (line 945) | fn build_channel_section(&self) -> String { method build_runtime_section (line 996) | fn build_runtime_section(&self) -> String { method build_conversation_section (line 1010) | fn build_conversation_section(&self) -> String { method build_group_section (line 1029) | fn build_group_section(&self) -> String { method parse_plan (line 1046) | fn parse_plan(&self, content: &str) -> Result { method parse_evaluation (line 1056) | fn parse_evaluation(&self, content: &str) -> Result Option<&str> { type CodeRegion (line 1108) | struct CodeRegion { function find_code_regions (line 1116) | fn find_code_regions(text: &str) -> Vec { function is_inside_code (line 1285) | fn is_inside_code(pos: usize, regions: &[CodeRegion]) -> bool { function recover_tool_calls_from_content (line 1302) | fn recover_tool_calls_from_content( function clean_response (line 1420) | fn clean_response(text: &str) -> String { function strip_bracket_tool_calls (line 1458) | fn strip_bracket_tool_calls(text: &str) -> String { constant TOOL_TAGS (line 1481) | const TOOL_TAGS: &[&str] = &["tool_call", "function_call", "tool_calls"]; constant TOOL_TAG_PATTERNS (line 1484) | const TOOL_TAG_PATTERNS: &[&str] = &[ function truncate_at_tool_tags (line 1509) | fn truncate_at_tool_tags(text: &str) -> String { function closing_tag_for (line 1560) | fn closing_tag_for(open_pattern: &str) -> Option { function strip_thinking_tags_regex (line 1579) | fn strip_thinking_tags_regex(text: &str, code_regions: &[CodeRegion]) ->... function extract_final_content (line 1629) | fn extract_final_content(text: &str, code_regions: &[CodeRegion]) -> Opt... function strip_pipe_reasoning_tags (line 1673) | fn strip_pipe_reasoning_tags(text: &str) -> String { function strip_xml_tag (line 1716) | fn strip_xml_tag(text: &str, tag: &str) -> String { function strip_pipe_tag (line 1762) | fn strip_pipe_tag(text: &str, tag: &str) -> String { function collapse_newlines (line 1786) | fn collapse_newlines(text: &str) -> String { function test_extract_json (line 1801) | fn test_extract_json() { function test_reasoning_context_builder (line 1811) | fn test_reasoning_context_builder() { function test_strip_thinking_tags_basic (line 1822) | fn test_strip_thinking_tags_basic() { function test_strip_thinking_tags_multiple (line 1828) | fn test_strip_thinking_tags_multiple() { function test_strip_thinking_tags_multiline (line 1835) | fn test_strip_thinking_tags_multiline() { function test_strip_thinking_tags_no_tags (line 1844) | fn test_strip_thinking_tags_no_tags() { function test_strip_thinking_tags_unclosed (line 1850) | fn test_strip_thinking_tags_unclosed() { function test_strip_think_tags (line 1859) | fn test_strip_think_tags() { function test_strip_thought_tags (line 1865) | fn test_strip_thought_tags() { function test_strip_thoughts_tags (line 1871) | fn test_strip_thoughts_tags() { function test_strip_reasoning_tags (line 1877) | fn test_strip_reasoning_tags() { function test_strip_reflection_tags (line 1883) | fn test_strip_reflection_tags() { function test_strip_scratchpad_tags (line 1889) | fn test_strip_scratchpad_tags() { function test_strip_inner_monologue_tags (line 1896) | fn test_strip_inner_monologue_tags() { function test_strip_antthinking_tags (line 1902) | fn test_strip_antthinking_tags() { function test_whitespace_in_tags (line 1910) | fn test_whitespace_in_tags() { function test_case_insensitive_tags (line 1916) | fn test_case_insensitive_tags() { function test_mixed_case_tags (line 1922) | fn test_mixed_case_tags() { function test_tags_with_attributes (line 1928) | fn test_tags_with_attributes() { function test_strip_tool_call_tags (line 1936) | fn test_strip_tool_call_tags() { function test_strip_tool_call_with_surrounding_text (line 1942) | fn test_strip_tool_call_with_surrounding_text() { function test_strip_function_call_tags (line 1948) | fn test_strip_function_call_tags() { function test_strip_tool_calls_plural (line 1954) | fn test_strip_tool_calls_plural() { function test_strip_xml_tag_with_attributes (line 1960) | fn test_strip_xml_tag_with_attributes() { function test_strip_pipe_delimited_tags (line 1968) | fn test_strip_pipe_delimited_tags() { function test_strip_pipe_delimited_thinking (line 1974) | fn test_strip_pipe_delimited_thinking() { function test_strip_pipe_delimited_think (line 1980) | fn test_strip_pipe_delimited_think() { function test_strip_multiple_internal_tags (line 1988) | fn test_strip_multiple_internal_tags() { function test_strip_multiple_reasoning_tag_types (line 1994) | fn test_strip_multiple_reasoning_tag_types() { function test_clean_response_preserves_normal_content (line 2000) | fn test_clean_response_preserves_normal_content() { function test_clean_response_thinking_tags_with_trailing_text (line 2006) | fn test_clean_response_thinking_tags_with_trailing_text() { function test_clean_response_thinking_tags_reasoning_properly_tagged (line 2012) | fn test_clean_response_thinking_tags_reasoning_properly_tagged() { function test_tags_in_fenced_code_block_preserved (line 2023) | fn test_tags_in_fenced_code_block_preserved() { function test_tags_in_tilde_fenced_block_preserved (line 2030) | fn test_tags_in_tilde_fenced_block_preserved() { function test_tags_in_inline_backticks_preserved (line 2036) | fn test_tags_in_inline_backticks_preserved() { function test_mixed_real_and_code_tags (line 2042) | fn test_mixed_real_and_code_tags() { function test_code_block_with_info_string (line 2049) | fn test_code_block_with_info_string() { function test_final_tag_basic (line 2057) | fn test_final_tag_basic() { function test_final_tag_strips_untagged_reasoning (line 2063) | fn test_final_tag_strips_untagged_reasoning() { function test_final_tag_multiple_blocks (line 2069) | fn test_final_tag_multiple_blocks() { function test_no_final_tag_fallthrough (line 2076) | fn test_no_final_tag_fallthrough() { function test_no_tags_at_all (line 2083) | fn test_no_tags_at_all() { function test_final_tag_in_code_preserved (line 2089) | fn test_final_tag_in_code_preserved() { function test_final_tag_unclosed_includes_trailing (line 2096) | fn test_final_tag_unclosed_includes_trailing() { function test_unicode_content_preserved (line 2104) | fn test_unicode_content_preserved() { function test_unicode_in_final (line 2110) | fn test_unicode_in_final() { function test_collapse_triple_newlines (line 2118) | fn test_collapse_triple_newlines() { function test_trims_whitespace (line 2124) | fn test_trims_whitespace() { function test_find_code_regions_fenced (line 2132) | fn test_find_code_regions_fenced() { function test_find_code_regions_inline (line 2140) | fn test_find_code_regions_inline() { function test_find_code_regions_unclosed_fence (line 2148) | fn test_find_code_regions_unclosed_fence() { function make_tools (line 2158) | fn make_tools(names: &[&str]) -> Vec { function test_recover_bare_tool_name (line 2170) | fn test_recover_bare_tool_name() { function test_recover_json_tool_call (line 2180) | fn test_recover_json_tool_call() { function test_recover_pipe_delimited (line 2191) | fn test_recover_pipe_delimited() { function test_recover_unknown_tool_ignored (line 2200) | fn test_recover_unknown_tool_ignored() { function test_recover_no_tags (line 2208) | fn test_recover_no_tags() { function test_recover_multiple_tool_calls (line 2216) | fn test_recover_multiple_tool_calls() { function test_recover_function_call_variant (line 2226) | fn test_recover_function_call_variant() { function test_recover_with_surrounding_text (line 2236) | fn test_recover_with_surrounding_text() { function make_test_reasoning (line 2246) | fn make_test_reasoning() -> Reasoning { function test_system_prompt_with_tools_contains_tools_section (line 2253) | fn test_system_prompt_with_tools_contains_tools_section() { function test_clean_response_strips_think_before_json_plan (line 2275) | fn test_clean_response_strips_think_before_json_plan() { function test_clean_response_strips_think_before_json_evaluation (line 2285) | fn test_clean_response_strips_think_before_json_evaluation() { function test_unclosed_think_before_final (line 2297) | fn test_unclosed_think_before_final() { function test_unclosed_thinking_before_final (line 2305) | fn test_unclosed_thinking_before_final() { function test_unclosed_think_before_final_with_prefix (line 2313) | fn test_unclosed_think_before_final_with_prefix() { function test_unclosed_think_no_final_still_discards (line 2321) | fn test_unclosed_think_no_final_still_discards() { function test_recover_bracket_format_tool_call (line 2326) | fn test_recover_bracket_format_tool_call() { function test_recover_bracket_format_unknown_tool_ignored (line 2337) | fn test_recover_bracket_format_unknown_tool_ignored() { function test_clean_response_strips_bracket_tool_calls (line 2345) | fn test_clean_response_strips_bracket_tool_calls() { function test_merge_system_messages_no_system_in_context (line 2356) | fn test_merge_system_messages_no_system_in_context() { function test_merge_system_messages_merges_worker_system (line 2366) | fn test_merge_system_messages_merges_worker_system() { function test_merge_system_messages_multiple_system (line 2387) | fn test_merge_system_messages_multiple_system() { function test_system_prompt_without_tools_omits_tools_section (line 2406) | fn test_system_prompt_without_tools_omits_tools_section() { function test_system_prompt_with_tools_contains_tool_guidance (line 2425) | fn test_system_prompt_with_tools_contains_tool_guidance() { function test_system_prompt_is_deterministic (line 2445) | fn test_system_prompt_is_deterministic() { function test_context_system_prompt_overrides_build (line 2459) | fn test_context_system_prompt_overrides_build() { function test_llm_signals_tool_intent_true_positives (line 2469) | fn test_llm_signals_tool_intent_true_positives() { function test_llm_signals_tool_intent_true_negatives_conversational (line 2481) | fn test_llm_signals_tool_intent_true_negatives_conversational() { function test_llm_signals_tool_intent_exclusion_takes_precedence (line 2492) | fn test_llm_signals_tool_intent_exclusion_takes_precedence() { function test_llm_signals_tool_intent_ignores_code_blocks (line 2500) | fn test_llm_signals_tool_intent_ignores_code_blocks() { function test_llm_signals_tool_intent_ignores_indented_code (line 2506) | fn test_llm_signals_tool_intent_ignores_indented_code() { function test_llm_signals_tool_intent_ignores_plain_text (line 2513) | fn test_llm_signals_tool_intent_ignores_plain_text() { function test_llm_signals_tool_intent_quoted_string_in_code_block (line 2522) | fn test_llm_signals_tool_intent_quoted_string_in_code_block() { function test_llm_signals_tool_intent_quoted_string_outside_code_block (line 2528) | fn test_llm_signals_tool_intent_quoted_string_outside_code_block() { function test_llm_signals_tool_intent_shadowed_prefix (line 2538) | fn test_llm_signals_tool_intent_shadowed_prefix() { function test_truncate_preserves_text_before_tool_tag (line 2552) | fn test_truncate_preserves_text_before_tool_tag() { function test_truncate_no_tool_tags_unchanged (line 2561) | fn test_truncate_no_tool_tags_unchanged() { function test_truncate_empty_string (line 2567) | fn test_truncate_empty_string() { function test_truncate_tool_tag_at_start (line 2572) | fn test_truncate_tool_tag_at_start() { function test_truncate_picks_earliest_unclosed_tag (line 2580) | fn test_truncate_picks_earliest_unclosed_tag() { function test_truncate_pipe_delimited_tags (line 2591) | fn test_truncate_pipe_delimited_tags() { function test_truncate_closed_tag_with_attributes_preserved (line 2597) | fn test_truncate_closed_tag_with_attributes_preserved() { function test_truncate_unclosed_tag_with_attributes (line 2604) | fn test_truncate_unclosed_tag_with_attributes() { function test_truncate_whitespace_only_before_tag (line 2610) | fn test_truncate_whitespace_only_before_tag() { function test_truncate_ignores_tags_inside_code_blocks (line 2615) | fn test_truncate_ignores_tags_inside_code_blocks() { function test_truncate_finds_tag_after_code_block (line 2621) | fn test_truncate_finds_tag_after_code_block() { function test_issue_789_force_text_unclosed_tool_tag (line 2632) | fn test_issue_789_force_text_unclosed_tool_tag() { function test_issue_789_only_tool_tag_produces_empty (line 2643) | fn test_issue_789_only_tool_tag_produces_empty() { function test_issue_789_thinking_then_tool_tag (line 2651) | fn test_issue_789_thinking_then_tool_tag() { function test_issue_789_closed_tool_tag_preserved_for_clean_response (line 2660) | fn test_issue_789_closed_tool_tag_preserved_for_clean_response() { function make_reasoning_with_model (line 2675) | fn make_reasoning_with_model(model: &str) -> Reasoning { function test_system_prompt_skips_think_final_for_native_thinking (line 2681) | fn test_system_prompt_skips_think_final_for_native_thinking() { function test_system_prompt_includes_think_final_for_regular_model (line 2692) | fn test_system_prompt_includes_think_final_for_regular_model() { function test_system_prompt_defaults_to_think_final_when_no_model (line 2700) | fn test_system_prompt_defaults_to_think_final_when_no_model() { function test_system_prompt_deepseek_r1_skips_think_final (line 2709) | fn test_system_prompt_deepseek_r1_skips_think_final() { function test_truncate_unicode_content_before_tool_tag (line 2719) | fn test_truncate_unicode_content_before_tool_tag() { function test_truncate_emoji_content_preserved (line 2728) | fn test_truncate_emoji_content_preserved() { function test_truncate_very_long_text_before_tag (line 2734) | fn test_truncate_very_long_text_before_tag() { function test_truncate_multiple_code_blocks_with_tags (line 2743) | fn test_truncate_multiple_code_blocks_with_tags() { function test_truncate_inline_code_with_tool_tag (line 2750) | fn test_truncate_inline_code_with_tool_tag() { function test_truncate_tag_immediately_after_code_block (line 2760) | fn test_truncate_tag_immediately_after_code_block() { function test_truncate_interleaved_thinking_and_tool_tags (line 2766) | fn test_truncate_interleaved_thinking_and_tool_tags() { function test_truncate_closed_tool_calls_plural_preserved (line 2775) | fn test_truncate_closed_tool_calls_plural_preserved() { function test_truncate_unclosed_tool_calls_plural (line 2782) | fn test_truncate_unclosed_tool_calls_plural() { function test_truncate_closed_pipe_function_call_preserved (line 2788) | fn test_truncate_closed_pipe_function_call_preserved() { function test_truncate_unclosed_pipe_function_call (line 2794) | fn test_truncate_unclosed_pipe_function_call() { function test_truncate_adversarial_nested_code_blocks (line 2800) | fn test_truncate_adversarial_nested_code_blocks() { function test_complete_truncates_tool_tags_from_response (line 2811) | async fn test_complete_truncates_tool_tags_from_response() { function test_complete_with_only_tool_tag_returns_empty (line 2823) | async fn test_complete_with_only_tool_tag_returns_empty() { function test_respond_with_tools_force_text_truncates_tool_tags (line 2835) | async fn test_respond_with_tools_force_text_truncates_tool_tags() { function test_respond_with_tools_force_text_only_tag_uses_fallback (line 2857) | async fn test_respond_with_tools_force_text_only_tag_uses_fallback() { function test_plan_truncates_tool_tags_before_json (line 2878) | async fn test_plan_truncates_tool_tags_before_json() { function test_with_model_name_affects_system_prompt (line 2897) | async fn test_with_model_name_affects_system_prompt() { function test_truncate_case_insensitive_upper (line 2923) | fn test_truncate_case_insensitive_upper() { function test_truncate_case_insensitive_mixed (line 2929) | fn test_truncate_case_insensitive_mixed() { function test_truncate_unicode_before_case_insensitive_tag_no_panic (line 2935) | fn test_truncate_unicode_before_case_insensitive_tag_no_panic() { function test_truncate_case_insensitive_function_call_closed (line 2944) | fn test_truncate_case_insensitive_function_call_closed() { function test_truncate_case_insensitive_function_call_unclosed (line 2951) | fn test_truncate_case_insensitive_function_call_unclosed() { function test_evaluate_success_truncates_tool_tags (line 2959) | async fn test_evaluate_success_truncates_tool_tags() { function test_respond_with_tools_recovered_tool_calls_preserves_text (line 2978) | async fn test_respond_with_tools_recovered_tool_calls_preserves_text() { function test_respond_with_tools_recovered_only_tag_content_is_none (line 3012) | async fn test_respond_with_tools_recovered_only_tag_content_is_none() { function test_openai_reasoning_models_not_detected (line 3049) | fn test_openai_reasoning_models_not_detected() { function test_closing_tag_for_standard_tags (line 3061) | fn test_closing_tag_for_standard_tags() { function test_closing_tag_for_space_suffixed_patterns (line 3077) | fn test_closing_tag_for_space_suffixed_patterns() { function test_closing_tag_for_pipe_delimited (line 3094) | fn test_closing_tag_for_pipe_delimited() { function test_closing_tag_for_covers_all_patterns (line 3110) | fn test_closing_tag_for_covers_all_patterns() { function test_truncate_mixed_closed_then_unclosed_different_types (line 3124) | fn test_truncate_mixed_closed_then_unclosed_different_types() { FILE: src/llm/reasoning_models.rs constant NATIVE_THINKING_PATTERNS (line 32) | const NATIVE_THINKING_PATTERNS: &[&str] = &[ function has_native_thinking (line 66) | pub fn has_native_thinking(model: &str) -> bool { function detects_qwen3_models (line 76) | fn detects_qwen3_models() { function detects_qwq (line 88) | fn detects_qwq() { function detects_deepseek_reasoning (line 94) | fn detects_deepseek_reasoning() { function detects_glm_reasoning_variants (line 100) | fn detects_glm_reasoning_variants() { function detects_other_reasoning_models (line 107) | fn detects_other_reasoning_models() { function rejects_non_reasoning_models (line 116) | fn rejects_non_reasoning_models() { function rejects_non_reasoning_variants_in_same_family (line 125) | fn rejects_non_reasoning_variants_in_same_family() { FILE: src/llm/recording.rs type TraceFile (line 34) | pub struct TraceFile { type MemorySnapshotEntry (line 49) | pub struct MemorySnapshotEntry { type HttpExchange (line 56) | pub struct HttpExchange { type HttpExchangeRequest (line 63) | pub struct HttpExchangeRequest { type HttpExchangeResponse (line 74) | pub struct HttpExchangeResponse { type TraceStep (line 83) | pub struct TraceStep { type RequestHint (line 96) | pub struct RequestHint { type TraceResponse (line 110) | pub enum TraceResponse { type TraceToolCall (line 128) | pub struct TraceToolCall { type ExpectedToolResult (line 140) | pub struct ExpectedToolResult { type HttpInterceptor (line 154) | pub trait HttpInterceptor: Send + Sync + std::fmt::Debug { method before_request (line 159) | async fn before_request(&self, request: &HttpExchangeRequest) -> Optio... method after_response (line 162) | async fn after_response(&self, request: &HttpExchangeRequest, response... method before_request (line 192) | async fn before_request(&self, _request: &HttpExchangeRequest) -> Opti... method after_response (line 197) | async fn after_response(&self, request: &HttpExchangeRequest, response... method before_request (line 224) | async fn before_request(&self, request: &HttpExchangeRequest) -> Optio... method after_response (line 252) | async fn after_response( type RecordingHttpInterceptor (line 167) | pub struct RecordingHttpInterceptor { method new (line 178) | pub fn new() -> Self { method take_exchanges (line 185) | pub async fn take_exchanges(&self) -> Vec { method default (line 172) | fn default() -> Self { type ReplayingHttpInterceptor (line 210) | pub struct ReplayingHttpInterceptor { method new (line 215) | pub fn new(exchanges: Vec) -> Self { type RecordingLlm (line 264) | pub struct RecordingLlm { method new (line 276) | pub fn new(inner: Arc, output_path: PathBuf, model_na... method from_env (line 293) | pub fn from_env(inner: Arc) -> Option> { method http_interceptor (line 326) | pub fn http_interceptor(&self) -> Arc { method snapshot_memory (line 333) | pub async fn snapshot_memory(&self, workspace: &crate::workspace::Work... method flush (line 362) | pub async fn flush(&self) -> Result<(), std::io::Error> { method capture_new_messages (line 389) | async fn capture_new_messages( method model_name (line 460) | fn model_name(&self) -> &str { method cost_per_token (line 464) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 468) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 472) | fn cache_read_discount(&self) -> Decimal { method complete (line 476) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 538) | async fn model_metadata(&self) -> Result { method effective_model_name (line 542) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 546) | fn active_model_name(&self) -> String { method set_model (line 550) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 554) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... function make_recorder (line 564) | fn make_recorder(stub: Arc) -> RecordingLlm { function captures_user_input_before_first_response (line 574) | async fn captures_user_input_before_first_response() { function captures_text_response_correctly (line 599) | async fn captures_text_response_correctly() { function captures_tool_calls_response (line 624) | async fn captures_tool_calls_response() { function no_spurious_user_input_for_tool_iterations (line 638) | async fn no_spurious_user_input_for_tool_iterations() { function captures_tool_results_for_verification (line 672) | async fn captures_tool_results_for_verification() { function request_hint_extraction (line 703) | async fn request_hint_extraction() { function flush_writes_valid_json_with_all_fields (line 724) | async fn flush_writes_valid_json_with_all_fields() { function from_env_returns_none_when_unset (line 774) | fn from_env_returns_none_when_unset() { function recording_http_interceptor_passes_through_and_records (line 783) | async fn recording_http_interceptor_passes_through_and_records() { function replaying_http_interceptor_returns_recorded_responses (line 810) | async fn replaying_http_interceptor_returns_recorded_responses() { function serde_roundtrip_extended_format (line 843) | fn serde_roundtrip_extended_format() { function request_hint_handles_multibyte_utf8 (line 913) | async fn request_hint_handles_multibyte_utf8() { function backward_compatible_with_old_format (line 939) | fn backward_compatible_with_old_format() { FILE: src/llm/registry.rs type ProviderProtocol (line 32) | pub enum ProviderProtocol { type SetupHint (line 45) | pub enum SetupHint { method display_name (line 78) | pub fn display_name(&self) -> &str { method can_list_models (line 86) | pub fn can_list_models(&self) -> bool { method secret_name (line 100) | pub fn secret_name(&self) -> Option<&str> { method models_filter (line 108) | pub fn models_filter(&self) -> Option<&str> { constant VALID_PARAMS (line 123) | const VALID_PARAMS: &[&str] = &["temperature", "max_tokens", "stop_seque... function deserialize (line 125) | pub fn deserialize<'de, D>(deserializer: D) -> Result, D::Er... type ProviderDefinition (line 147) | pub struct ProviderDefinition { type ProviderRegistry (line 194) | pub struct ProviderRegistry { method new (line 204) | pub fn new(providers: Vec) -> Self { method load (line 219) | pub fn load() -> Self { method find (line 261) | pub fn find(&self, id: &str) -> Option<&ProviderDefinition> { method all (line 268) | pub fn all(&self) -> &[ProviderDefinition] { method selectable (line 276) | pub fn selectable(&self) -> Vec<&ProviderDefinition> { method is_known (line 299) | pub fn is_known(&self, backend: &str) -> bool { method model_env_var (line 310) | pub fn model_env_var(&self, backend: &str) -> &str { function user_providers_path (line 320) | fn user_providers_path() -> Option { function test_builtin_registry_loads (line 329) | fn test_builtin_registry_loads() { function test_find_by_id (line 340) | fn test_find_by_id() { function test_find_by_alias (line 350) | fn test_find_by_alias() { function test_find_case_insensitive (line 361) | fn test_find_case_insensitive() { function test_find_unknown_returns_none (line 371) | fn test_find_unknown_returns_none() { function test_selectable_has_setup_hints (line 379) | fn test_selectable_has_setup_hints() { function test_user_override_wins (line 395) | fn test_user_override_wins() { function test_model_env_var_nearai (line 422) | fn test_model_env_var_nearai() { function test_model_env_var_registry_provider (line 431) | fn test_model_env_var_registry_provider() { function test_model_env_var_unknown_fallback (line 441) | fn test_model_env_var_unknown_fallback() { function test_is_known (line 449) | fn test_is_known() { function test_all_providers_have_required_fields (line 460) | fn test_all_providers_have_required_fields() { function test_openai_compatible_providers_have_base_url (line 480) | fn test_openai_compatible_providers_have_base_url() { function test_models_filter_accessor (line 500) | fn test_models_filter_accessor() { function test_selectable_user_override_adds_setup (line 537) | fn test_selectable_user_override_adds_setup() { function test_selectable_user_override_removes_setup (line 602) | fn test_selectable_user_override_removes_setup() { function test_selectable_preserves_order_with_dedup (line 660) | fn test_selectable_preserves_order_with_dedup() { function test_unsupported_params_deserialized (line 754) | fn test_unsupported_params_deserialized() { function test_unsupported_params_validation_rejects_invalid (line 806) | fn test_unsupported_params_validation_rejects_invalid() { function test_all_builtin_api_key_providers_have_api_key_env (line 829) | fn test_all_builtin_api_key_providers_have_api_key_env() { FILE: src/llm/response_cache.rs constant STATS_LOG_EVERY_N (line 35) | const STATS_LOG_EVERY_N: u64 = 100; type ResponseCacheConfig (line 39) | pub struct ResponseCacheConfig { method default (line 47) | fn default() -> Self { type CacheEntry (line 55) | struct CacheEntry { type CachedProvider (line 66) | pub struct CachedProvider { method new (line 82) | pub fn new(inner: Arc, config: ResponseCacheConfig) -... method len (line 93) | pub fn len(&self) -> usize { method is_empty (line 98) | pub fn is_empty(&self) -> bool { method total_hits (line 109) | pub fn total_hits(&self) -> u64 { method clear (line 114) | pub fn clear(&self) { method maybe_log_stats (line 123) | fn maybe_log_stats(guard: &HashMap, req_no: u64, t... function cache_key (line 142) | fn cache_key(model: &str, request: &CompletionRequest) -> String { method model_name (line 176) | fn model_name(&self) -> &str { method cost_per_token (line 180) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 184) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 188) | fn cache_read_discount(&self) -> Decimal { method complete (line 192) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 282) | async fn model_metadata(&self) -> Result { method effective_model_name (line 286) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 290) | fn active_model_name(&self) -> String { method set_model (line 294) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 302) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... type SwitchableStub (line 324) | struct SwitchableStub { method new (line 330) | fn new() -> Self { method model_name (line 340) | fn model_name(&self) -> &str { method active_model_name (line 344) | fn active_model_name(&self) -> String { method cost_per_token (line 348) | fn cost_per_token(&self) -> (Decimal, Decimal) { method set_model (line 352) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method complete (line 357) | async fn complete( method complete_with_tools (line 372) | async fn complete_with_tools( function simple_request (line 388) | fn simple_request() -> CompletionRequest { function different_request (line 399) | fn different_request() -> CompletionRequest { function cache_key_is_deterministic (line 411) | fn cache_key_is_deterministic() { function cache_key_varies_by_model (line 420) | fn cache_key_varies_by_model() { function cache_key_varies_by_messages (line 428) | fn cache_key_varies_by_messages() { function cache_key_varies_by_temperature (line 435) | fn cache_key_varies_by_temperature() { function cache_key_varies_by_max_tokens (line 444) | fn cache_key_varies_by_max_tokens() { function cache_hit_avoids_provider_call (line 453) | async fn cache_hit_avoids_provider_call() { function different_messages_get_different_entries (line 477) | async fn different_messages_get_different_entries() { function expired_entries_are_evicted (line 489) | async fn expired_entries_are_evicted() { function lru_eviction_removes_oldest (line 511) | async fn lru_eviction_removes_oldest() { function tool_calls_are_never_cached (line 541) | async fn tool_calls_are_never_cached() { function provider_errors_are_not_cached (line 565) | async fn provider_errors_are_not_cached() { function clear_empties_cache (line 587) | async fn clear_empties_cache() { function model_override_gets_distinct_cache_entries (line 599) | async fn model_override_gets_distinct_cache_entries() { function default_config_is_reasonable (line 616) | fn default_config_is_reasonable() { function delegates_model_name (line 623) | async fn delegates_model_name() { function set_model_isolates_per_model_via_key (line 632) | async fn set_model_isolates_per_model_via_key() { function set_model_error_leaves_cache_intact (line 666) | async fn set_model_error_leaves_cache_intact() { function total_hits_survives_eviction (line 682) | async fn total_hits_survives_eviction() { function stats_logged_at_request_100 (line 709) | async fn stats_logged_at_request_100() { function stats_logged_on_provider_error_at_interval (line 755) | async fn stats_logged_on_provider_error_at_interval() { FILE: src/llm/retry.rs constant MAX_RETRY_AFTER_SECS (line 26) | pub(crate) const MAX_RETRY_AFTER_SECS: u64 = 3600; function is_retryable (line 45) | pub(crate) fn is_retryable(err: &LlmError) -> bool { function retry_backoff_delay (line 63) | pub(crate) fn retry_backoff_delay(attempt: u32) -> Duration { function cap_retry_after (line 77) | pub(crate) fn cap_retry_after(duration: Duration) -> Duration { function parse_retry_after (line 87) | pub(crate) fn parse_retry_after(header: Option<&reqwest::header::HeaderV... constant DEFAULT_RETRY_AFTER_SECS (line 106) | const DEFAULT_RETRY_AFTER_SECS: u64 = 60; type RetryConfig (line 110) | pub struct RetryConfig { method default (line 117) | fn default() -> Self { type RetryProvider (line 130) | pub struct RetryProvider { method new (line 136) | pub fn new(inner: Arc, config: RetryConfig) -> Self { method retry_loop (line 140) | async fn retry_loop(&self, mut op: F, label: &str) -> Resul... method model_name (line 187) | fn model_name(&self) -> &str { method cost_per_token (line 191) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 195) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 199) | fn cache_read_discount(&self) -> Decimal { method complete (line 203) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 234) | async fn model_metadata(&self) -> Result { method effective_model_name (line 238) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 242) | fn active_model_name(&self) -> String { method set_model (line 246) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 250) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... function make_request (line 261) | fn make_request() -> CompletionRequest { function make_tool_request (line 265) | fn make_tool_request() -> ToolCompletionRequest { function fast_config (line 269) | fn fast_config(max_retries: u32) -> RetryConfig { function test_retry_backoff_delay_exponential_growth (line 276) | fn test_retry_backoff_delay_exponential_growth() { function test_retry_backoff_delay_minimum (line 298) | fn test_retry_backoff_delay_minimum() { function test_retry_backoff_delay_no_overflow (line 307) | fn test_retry_backoff_delay_no_overflow() { function test_is_retryable_classification (line 316) | fn test_is_retryable_classification() { function success_on_first_attempt (line 359) | async fn success_on_first_attempt() { function retries_transient_errors_then_succeeds (line 370) | async fn retries_transient_errors_then_succeeds() { function non_transient_error_fails_immediately (line 391) | async fn non_transient_error_fails_immediately() { function exhausts_retries_then_returns_error (line 402) | async fn exhausts_retries_then_returns_error() { function complete_with_tools_retries_same_as_complete (line 413) | async fn complete_with_tools_retries_same_as_complete() { function passthrough_methods_delegate_to_inner (line 426) | async fn passthrough_methods_delegate_to_inner() { function rate_limited_error_always_has_duration (line 442) | fn rate_limited_error_always_has_duration() { function cap_retry_after_clamps_huge_delays (line 464) | fn cap_retry_after_clamps_huge_delays() { function parse_retry_after_delay_seconds (line 476) | fn parse_retry_after_delay_seconds() { function parse_retry_after_missing_header (line 482) | fn parse_retry_after_missing_header() { function parse_retry_after_unparseable (line 490) | fn parse_retry_after_unparseable() { function parse_retry_after_clamps_large_value (line 499) | fn parse_retry_after_clamps_large_value() { function parse_retry_after_http_date (line 508) | fn parse_retry_after_http_date() { FILE: src/llm/rig_adapter.rs type RigAdapter (line 36) | pub struct RigAdapter { function new (line 53) | pub fn new(model: M, model_name: impl Into) -> Self { function with_cache_retention (line 80) | pub fn with_cache_retention(mut self, retention: CacheRetention) -> Self { function with_unsupported_params (line 97) | pub fn with_unsupported_params(mut self, params: Vec) -> Self { function strip_unsupported_completion_params (line 103) | fn strip_unsupported_completion_params(&self, req: &mut CompletionReques... function strip_unsupported_tool_params (line 108) | fn strip_unsupported_tool_params(&self, req: &mut ToolCompletionRequest) { function round_f32_to_f64 (line 121) | fn round_f32_to_f64(val: f32) -> f64 { function normalize_schema_strict (line 135) | pub(crate) fn normalize_schema_strict(schema: &JsonValue) -> JsonValue { function normalize_schema_recursive (line 141) | fn normalize_schema_recursive(schema: &mut JsonValue) { function make_nullable (line 246) | fn make_nullable(schema: &mut JsonValue) { function convert_messages (line 285) | fn convert_messages(messages: &[ChatMessage]) -> (Option, Vec, seed: usize) -> String { function convert_tools (line 414) | fn convert_tools(tools: &[IronToolDefinition]) -> Vec { function convert_tool_choice (line 426) | fn convert_tool_choice(choice: Option<&str>) -> Option { function extract_response (line 436) | fn extract_response( function saturate_u32 (line 478) | fn saturate_u32(val: u64) -> u32 { function supports_prompt_cache (line 486) | fn supports_prompt_cache(name: &str) -> bool { function extract_cache_creation (line 503) | fn extract_cache_creation(raw: &T) -> u32 { function build_rig_request (line 520) | fn build_rig_request( method model_name (line 568) | fn model_name(&self) -> &str { method cost_per_token (line 572) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 576) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 584) | fn cache_read_discount(&self) -> Decimal { method complete (line 592) | async fn complete( method complete_with_tools (line 655) | async fn complete_with_tools( method active_model_name (line 737) | fn active_model_name(&self) -> String { method effective_model_name (line 741) | fn effective_model_name(&self, _requested_model: Option<&str>) -> String { method set_model (line 745) | fn set_model(&self, _model: &str) -> Result<(), LlmError> { function normalize_tool_name (line 762) | fn normalize_tool_name(name: &str, known_tools: &HashSet) -> Str... function test_round_f32_to_f64_no_precision_artifacts (line 781) | fn test_round_f32_to_f64_no_precision_artifacts() { function test_convert_messages_system_to_preamble (line 792) | fn test_convert_messages_system_to_preamble() { function test_convert_messages_multiple_systems_concatenated (line 803) | fn test_convert_messages_multiple_systems_concatenated() { function test_convert_messages_tool_result (line 815) | fn test_convert_messages_tool_result() { function test_convert_messages_assistant_with_tool_calls (line 838) | fn test_convert_messages_assistant_with_tool_calls() { function test_convert_messages_tool_result_without_id_gets_fallback (line 863) | fn test_convert_messages_tool_result_without_id_gets_fallback() { function test_convert_tools (line 886) | fn test_convert_tools() { function test_convert_tool_choice (line 904) | fn test_convert_tool_choice() { function test_extract_response_text_only (line 926) | fn test_extract_response_text_only() { function test_extract_response_tool_call (line 936) | fn test_extract_response_tool_call() { function test_assistant_tool_call_empty_id_gets_generated (line 948) | fn test_assistant_tool_call_empty_id_gets_generated() { function test_assistant_tool_call_whitespace_id_gets_generated (line 977) | fn test_assistant_tool_call_whitespace_id_gets_generated() { function test_assistant_and_tool_result_missing_ids_share_generated_id (line 1004) | fn test_assistant_and_tool_result_missing_ids_share_generated_id() { function test_saturate_u32 (line 1072) | fn test_saturate_u32() { function test_normalize_tool_name_exact_match (line 1081) | fn test_normalize_tool_name_exact_match() { function test_normalize_tool_name_proxy_prefix_match (line 1087) | fn test_normalize_tool_name_proxy_prefix_match() { function test_normalize_tool_name_proxy_prefix_no_match_kept (line 1093) | fn test_normalize_tool_name_proxy_prefix_no_match_kept() { function test_normalize_tool_name_unknown_passthrough (line 1102) | fn test_normalize_tool_name_unknown_passthrough() { function test_build_rig_request_injects_cache_control_short (line 1108) | fn test_build_rig_request_injects_cache_control_short() { function test_build_rig_request_injects_cache_control_long (line 1131) | fn test_build_rig_request_injects_cache_control_long() { function test_build_rig_request_no_cache_control_when_none (line 1151) | fn test_build_rig_request_no_cache_control_when_none() { function test_cache_write_multiplier_values (line 1175) | fn test_cache_write_multiplier_values() { function cache_write_multiplier_for (line 1194) | fn cache_write_multiplier_for(retention: CacheRetention) -> rust_decimal... function test_supports_prompt_cache_supported_models (line 1205) | fn test_supports_prompt_cache_supported_models() { function test_supports_prompt_cache_unsupported_models (line 1218) | fn test_supports_prompt_cache_unsupported_models() { function test_with_unsupported_params_populates_set (line 1229) | fn test_with_unsupported_params_populates_set() { function test_strip_unsupported_completion_params (line 1248) | fn test_strip_unsupported_completion_params() { function test_strip_unsupported_tool_params (line 1280) | fn test_strip_unsupported_tool_params() { function test_unsupported_params_empty_by_default (line 1305) | fn test_unsupported_params_empty_by_default() { function test_consecutive_tool_results_merged_into_single_user_message (line 1326) | fn test_consecutive_tool_results_merged_into_single_user_message() { function test_tool_result_after_user_text_not_merged (line 1374) | fn test_tool_result_after_user_text_not_merged() { FILE: src/llm/session.rs type SessionData (line 22) | pub struct SessionData { type SessionConfig (line 31) | pub struct SessionConfig { method default (line 39) | fn default() -> Self { type SessionManager (line 50) | pub struct SessionManager { method new (line 65) | pub fn new(config: SessionConfig) -> Self { method new_async (line 96) | pub async fn new_async(config: SessionConfig) -> Self { method attach_store (line 121) | pub async fn attach_store(&self, store: Arc, ... method get_token (line 132) | pub async fn get_token(&self) -> Result { method has_token (line 140) | pub async fn has_token(&self) -> bool { method ensure_authenticated (line 149) | pub async fn ensure_authenticated(&self) -> Result<(), LlmError> { method validate_token (line 170) | async fn validate_token(&self) -> Result<(), LlmError> { method handle_auth_failure (line 209) | pub async fn handle_auth_failure(&self) -> Result<(), LlmError> { method initiate_login (line 234) | async fn initiate_login(&self) -> Result<(), LlmError> { method api_key_login (line 382) | async fn api_key_login(&self) -> Result<(), LlmError> { method save_session (line 428) | async fn save_session(&self, token: &str, auth_provider: Option<&str>)... method load_session_from_db (line 504) | async fn load_session_from_db(&self) -> Result<(), LlmError> { method load_session (line 563) | async fn load_session(&self) -> Result<(), LlmError> { method set_token (line 598) | pub async fn set_token(&self, token: SecretString) { function create_session_manager (line 608) | pub async fn create_session_manager(config: SessionConfig) -> Arc Self { method to_score (line 62) | pub fn to_score(self) -> u32 { method as_str (line 72) | pub fn as_str(&self) -> &'static str { method fmt (line 83) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type ScorerWeights (line 90) | pub struct ScorerWeights { method default (line 107) | fn default() -> Self { constant DEFAULT_DOMAIN_KEYWORDS (line 127) | pub const DEFAULT_DOMAIN_KEYWORDS: &[&str] = &[ type ScorerConfig (line 232) | pub struct ScorerConfig { function build_domain_regex (line 244) | fn build_domain_regex(keywords: &[&str]) -> Regex { type ScoreBreakdown (line 257) | pub struct ScoreBreakdown { type PatternOverride (line 353) | struct PatternOverride { function count_matches (line 408) | fn count_matches(re: &Regex, text: &str) -> usize { function score_complexity (line 415) | pub fn score_complexity(prompt: &str) -> ScoreBreakdown { function score_complexity_with_config (line 423) | pub fn score_complexity_with_config(prompt: &str, config: &ScorerConfig)... function score_complexity_with_regex (line 435) | pub fn score_complexity_with_regex( function score_complexity_internal (line 444) | fn score_complexity_internal( type TaskComplexity (line 622) | pub enum TaskComplexity { method from (line 632) | fn from(tier: Tier) -> Self { type SmartRoutingConfig (line 647) | pub struct SmartRoutingConfig { method default (line 655) | fn default() -> Self { type SmartRoutingStats (line 664) | struct SmartRoutingStats { method new (line 672) | fn new() -> Self { type SmartRoutingSnapshot (line 684) | pub struct SmartRoutingSnapshot { type SmartRoutingProvider (line 696) | pub struct SmartRoutingProvider { method new (line 708) | pub fn new( method stats (line 735) | pub fn stats(&self) -> SmartRoutingSnapshot { method classify (line 747) | fn classify(&self, request: &CompletionRequest) -> TaskComplexity { method response_is_uncertain (line 813) | fn response_is_uncertain(response: &CompletionResponse) -> bool { method model_name (line 853) | fn model_name(&self) -> &str { method cost_per_token (line 857) | fn cost_per_token(&self) -> (Decimal, Decimal) { method cache_write_multiplier (line 861) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 865) | fn cache_read_discount(&self) -> Decimal { method complete (line 869) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 946) | async fn model_metadata(&self) -> Result { method effective_model_name (line 950) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 954) | fn active_model_name(&self) -> String { method set_model (line 958) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 962) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... function default_config (line 973) | fn default_config() -> SmartRoutingConfig { function score_empty_prompt_is_flash (line 982) | fn score_empty_prompt_is_flash() { function score_simple_greeting_is_flash (line 989) | fn score_simple_greeting_is_flash() { function score_quick_question_is_flash_or_standard (line 996) | fn score_quick_question_is_flash_or_standard() { function score_code_task_is_standard_or_higher (line 1007) | fn score_code_task_is_standard_or_higher() { function score_complex_analysis_is_at_least_standard (line 1018) | fn score_complex_analysis_is_at_least_standard() { function score_security_audit_prompt_is_at_least_standard (line 1036) | fn score_security_audit_prompt_is_at_least_standard() { function score_reasoning_dimension (line 1053) | fn score_reasoning_dimension() { function score_multi_step_dimension (line 1067) | fn score_multi_step_dimension() { function score_code_dimension (line 1081) | fn score_code_dimension() { function score_safety_dimension (line 1092) | fn score_safety_dimension() { function score_domain_dimension (line 1103) | fn score_domain_dimension() { function score_creativity_dimension (line 1117) | fn score_creativity_dimension() { function score_question_complexity_dimension (line 1127) | fn score_question_complexity_dimension() { function score_sentence_complexity_dimension (line 1144) | fn score_sentence_complexity_dimension() { function score_token_estimate_for_long_prompt (line 1158) | fn score_token_estimate_for_long_prompt() { function score_token_estimate_for_short_prompt (line 1170) | fn score_token_estimate_for_short_prompt() { function score_multi_dimensional_boost (line 1185) | fn score_multi_dimensional_boost() { function score_explicit_tier_hint_flash (line 1204) | fn score_explicit_tier_hint_flash() { function score_explicit_tier_hint_frontier (line 1216) | fn score_explicit_tier_hint_frontier() { function score_explicit_tier_hint_case_insensitive (line 1222) | fn score_explicit_tier_hint_case_insensitive() { function score_custom_domain_keywords_override_defaults (line 1232) | fn score_custom_domain_keywords_override_defaults() { function score_whitespace_only_is_flash (line 1280) | fn score_whitespace_only_is_flash() { function score_single_word_no_keywords (line 1286) | fn score_single_word_no_keywords() { function score_very_long_prompt_is_at_least_standard (line 1296) | fn score_very_long_prompt_is_at_least_standard() { function score_all_dimensions_have_entries (line 1307) | fn score_all_dimensions_have_entries() { function score_is_clamped_to_100 (line 1335) | fn score_is_clamped_to_100() { function pattern_override_greeting_is_simple (line 1356) | fn pattern_override_greeting_is_simple() { function pattern_override_security_audit_is_complex (line 1367) | fn pattern_override_security_audit_is_complex() { function pattern_override_production_deploy_is_moderate (line 1380) | fn pattern_override_production_deploy_is_moderate() { function pattern_override_time_question_is_simple (line 1391) | fn pattern_override_time_question_is_simple() { function pattern_override_time_does_not_match_complex_questions (line 1402) | fn pattern_override_time_does_not_match_complex_questions() { function empty_domain_keywords_uses_defaults (line 1423) | fn empty_domain_keywords_uses_defaults() { function tier_to_task_complexity_mapping (line 1448) | fn tier_to_task_complexity_mapping() { function tier_from_score_boundaries (line 1459) | fn tier_from_score_boundaries() { function tier_display (line 1471) | fn tier_display() { function detects_uncertain_short_response (line 1481) | fn detects_uncertain_short_response() { function detects_empty_response_as_uncertain (line 1494) | fn detects_empty_response_as_uncertain() { function short_confident_response_is_not_uncertain (line 1507) | fn short_confident_response_is_not_uncertain() { function confident_response_is_not_uncertain (line 1520) | fn confident_response_is_not_uncertain() { function make_request (line 1537) | fn make_request(content: &str) -> CompletionRequest { function make_tool_request (line 1541) | fn make_tool_request() -> ToolCompletionRequest { function simple_task_routes_to_cheap (line 1546) | async fn simple_task_routes_to_cheap() { function complex_task_routes_to_primary (line 1566) | async fn complex_task_routes_to_primary() { function tool_use_always_routes_to_primary (line 1585) | async fn tool_use_always_routes_to_primary() { function stats_increment_correctly (line 1601) | async fn stats_increment_correctly() { function cascade_escalates_on_uncertain_response (line 1635) | async fn cascade_escalates_on_uncertain_response() { function cascade_does_not_escalate_on_confident_response (line 1664) | async fn cascade_does_not_escalate_on_confident_response() { function model_name_returns_primary (line 1694) | async fn model_name_returns_primary() { function tier_hint_overrides_pattern_override (line 1704) | async fn tier_hint_overrides_pattern_override() { function trimmed_greeting_matches_override (line 1730) | async fn trimmed_greeting_matches_override() { FILE: src/llm/token_refreshing.rs type TokenRefreshingProvider (line 27) | pub struct TokenRefreshingProvider { method new (line 33) | pub fn new(inner: Arc, session: Arc Result<(), LlmError> { method ensure_fresh_token (line 49) | async fn ensure_fresh_token(&self) { method model_name (line 71) | fn model_name(&self) -> &str { method cost_per_token (line 75) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 79) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 117) | async fn model_metadata(&self) -> Result { method active_model_name (line 122) | fn active_model_name(&self) -> String { method effective_model_name (line 126) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method set_model (line 130) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 134) | fn calculate_cost(&self, _input_tokens: u32, _output_tokens: u32) -> Dec... method cache_write_multiplier (line 138) | fn cache_write_multiplier(&self) -> Decimal { method cache_read_discount (line 142) | fn cache_read_discount(&self) -> Decimal { function make_provider_and_session (line 154) | fn make_provider_and_session() -> (TokenRefreshingProvider, tempfile::Te... function test_model_name_delegates (line 167) | fn test_model_name_delegates() { function test_cost_per_token_zero (line 173) | fn test_cost_per_token_zero() { function test_calculate_cost_zero (line 181) | fn test_calculate_cost_zero() { function test_active_model_name_delegates (line 187) | fn test_active_model_name_delegates() { FILE: src/llm/vision_models.rs constant VISION_PATTERNS (line 4) | const VISION_PATTERNS: &[&str] = &[ function is_vision_model (line 22) | pub fn is_vision_model(model: &str) -> bool { function suggest_vision_model (line 30) | pub fn suggest_vision_model(models: &[String]) -> Option<&str> { function detects_claude_vision (line 60) | fn detects_claude_vision() { function detects_gpt4_vision (line 67) | fn detects_gpt4_vision() { function detects_other_vision_models (line 74) | fn detects_other_vision_models() { function rejects_non_vision_models (line 81) | fn rejects_non_vision_models() { function suggests_claude_first (line 88) | fn suggests_claude_first() { function returns_none_when_no_vision_models (line 100) | fn returns_none_when_no_vision_models() { FILE: src/main.rs function main (line 37) | fn main() -> anyhow::Result<()> { function async_main (line 47) | async fn async_main() -> anyhow::Result<()> { FILE: src/observability/log.rs type LogObserver (line 10) | pub struct LogObserver; method record_event (line 13) | fn record_event(&self, event: &ObserverEvent) { method record_metric (line 81) | fn record_metric(&self, metric: &ObserverMetric) { method name (line 101) | fn name(&self) -> &str { function name_is_log (line 114) | fn name_is_log() { function record_event_does_not_panic (line 119) | fn record_event_does_not_panic() { function record_metric_does_not_panic (line 169) | fn record_metric_does_not_panic() { function flush_does_not_panic (line 178) | fn flush_does_not_panic() { FILE: src/observability/mod.rs type ObservabilityConfig (line 27) | pub struct ObservabilityConfig { method default (line 33) | fn default() -> Self { function create_observer (line 44) | pub fn create_observer(config: &ObservabilityConfig) -> Box { function default_config_is_none (line 56) | fn default_config_is_none() { function factory_returns_noop_for_none (line 62) | fn factory_returns_noop_for_none() { function factory_returns_noop_for_empty (line 71) | fn factory_returns_noop_for_empty() { function factory_returns_noop_for_unknown (line 80) | fn factory_returns_noop_for_unknown() { function factory_returns_log_for_log (line 89) | fn factory_returns_log_for_log() { function factory_returns_noop_for_noop (line 98) | fn factory_returns_noop_for_noop() { FILE: src/observability/multi.rs type MultiObserver (line 8) | pub struct MultiObserver { method new (line 15) | pub fn new(observers: Vec>) -> Self { method record_event (line 21) | fn record_event(&self, event: &ObserverEvent) { method record_metric (line 27) | fn record_metric(&self, metric: &ObserverMetric) { method flush (line 33) | fn flush(&self) { method name (line 39) | fn name(&self) -> &str { type CountingObserver (line 54) | struct CountingObserver { method new (line 61) | fn new() -> (Self, Arc, Arc, Arc &str { function name_is_multi (line 94) | fn name_is_multi() { function empty_multi_does_not_panic (line 100) | fn empty_multi_does_not_panic() { function dispatches_to_all_observers (line 108) | fn dispatches_to_all_observers() { function single_observer_works (line 128) | fn single_observer_works() { FILE: src/observability/noop.rs type NoopObserver (line 9) | pub struct NoopObserver; method record_event (line 13) | fn record_event(&self, _event: &ObserverEvent) {} method record_metric (line 16) | fn record_metric(&self, _metric: &ObserverMetric) {} method name (line 18) | fn name(&self) -> &str { function name_is_noop (line 32) | fn name_is_noop() { function record_event_does_not_panic (line 37) | fn record_event_does_not_panic() { function record_metric_does_not_panic (line 48) | fn record_metric_does_not_panic() { function flush_does_not_panic (line 57) | fn flush_does_not_panic() { FILE: src/observability/traits.rs type Observer (line 12) | pub trait Observer: Send + Sync { method record_event (line 14) | fn record_event(&self, event: &ObserverEvent); method record_metric (line 17) | fn record_metric(&self, metric: &ObserverMetric); method flush (line 20) | fn flush(&self) {} method name (line 23) | fn name(&self) -> &str; type ObserverEvent (line 28) | pub enum ObserverEvent { type ObserverMetric (line 79) | pub enum ObserverMetric { function event_variants_are_constructible (line 95) | fn event_variants_are_constructible() { function metric_variants_are_constructible (line 137) | fn metric_variants_are_constructible() { FILE: src/orchestrator/api.rs type PendingPrompt (line 31) | pub struct PendingPrompt { type OrchestratorState (line 38) | pub struct OrchestratorState { type OrchestratorApi (line 55) | pub struct OrchestratorApi; method router (line 59) | pub fn router(state: OrchestratorState) -> Router { method start (line 93) | pub async fn start( function health_check (line 118) | async fn health_check() -> &'static str { function get_job (line 122) | async fn get_job( function llm_complete (line 139) | async fn llm_complete( function llm_complete_with_tools (line 168) | async fn llm_complete_with_tools( function report_status (line 200) | async fn report_status( function report_complete (line 220) | async fn report_complete( function job_event_handler (line 253) | async fn job_event_handler( function get_prompt_handler (line 364) | async fn get_prompt_handler( function get_credentials_handler (line 390) | async fn get_credentials_handler( function format_finish_reason (line 446) | fn format_finish_reason(reason: crate::llm::FinishReason) -> String { function test_state (line 471) | fn test_state() -> OrchestratorState { function health_requires_no_auth (line 487) | async fn health_requires_no_auth() { function worker_route_rejects_missing_token (line 501) | async fn worker_route_rejects_missing_token() { function worker_route_rejects_wrong_token (line 516) | async fn worker_route_rejects_wrong_token() { function worker_route_accepts_valid_token (line 532) | async fn worker_route_accepts_valid_token() { function token_for_job_a_rejected_on_job_b (line 551) | async fn token_for_job_a_rejected_on_job_b() { function prompt_returns_204_when_queue_empty (line 573) | async fn prompt_returns_204_when_queue_empty() { function prompt_returns_queued_prompt (line 590) | async fn prompt_returns_queued_prompt() { function credentials_returns_204_when_no_grants (line 623) | async fn credentials_returns_204_when_no_grants() { function credentials_returns_503_when_no_secrets_store (line 640) | async fn credentials_returns_503_when_no_secrets_store() { function credentials_returns_secrets_when_store_configured (line 670) | async fn credentials_returns_secrets_when_store_configured() { function job_event_broadcasts_message (line 734) | async fn job_event_broadcasts_message() { function job_event_handles_tool_use (line 789) | async fn job_event_handles_tool_use() { function job_event_handles_unknown_type (line 837) | async fn job_event_handles_unknown_type() { function report_status_updates_handle (line 880) | async fn report_status_updates_handle() { FILE: src/orchestrator/auth.rs type CredentialGrant (line 29) | pub struct CredentialGrant { type TokenStore (line 36) | pub struct TokenStore { method new (line 44) | pub fn new() -> Self { method create_token (line 52) | pub async fn create_token(&self, job_id: Uuid) -> String { method validate (line 59) | pub async fn validate(&self, job_id: Uuid, token: &str) -> bool { method revoke (line 69) | pub async fn revoke(&self, job_id: Uuid) { method active_count (line 75) | pub async fn active_count(&self) -> usize { method store_grants (line 80) | pub async fn store_grants(&self, job_id: Uuid, grants: Vec Option Self { function generate_token (line 99) | fn generate_token() -> String { function worker_auth_middleware (line 118) | pub async fn worker_auth_middleware( function extract_job_id_from_path (line 141) | fn extract_job_id_from_path(path: &str) -> Option { function test_token_create_and_validate (line 155) | async fn test_token_create_and_validate() { function test_token_revoke (line 168) | async fn test_token_revoke() { function test_extract_job_id (line 180) | fn test_extract_job_id() { function test_token_is_random (line 190) | fn test_token_is_random() { function test_store_and_get_grants (line 197) | async fn test_store_and_get_grants() { function test_revoke_clears_grants (line 225) | async fn test_revoke_clears_grants() { function test_empty_grants_not_stored (line 249) | async fn test_empty_grants_not_stored() { function test_grants_isolated_per_job (line 260) | async fn test_grants_isolated_per_job() { FILE: src/orchestrator/job_manager.rs type JobMode (line 21) | pub enum JobMode { method as_str (line 29) | pub fn as_str(&self) -> &'static str { method fmt (line 38) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type ContainerJobConfig (line 45) | pub struct ContainerJobConfig { method default (line 72) | fn default() -> Self { type ContainerState (line 90) | pub enum ContainerState { method fmt (line 98) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type ContainerHandle (line 110) | pub struct ContainerHandle { type CompletionResult (line 130) | pub struct CompletionResult { function validate_bind_mount_path (line 147) | fn validate_bind_mount_path( type ContainerJobManager (line 210) | pub struct ContainerJobManager { method new (line 219) | pub fn new(config: ContainerJobConfig, token_store: TokenStore) -> Self { method docker (line 229) | async fn docker(&self) -> Result { method create_job (line 251) | pub async fn create_job( method create_job_inner (line 298) | async fn create_job_inner( method stop_job (line 465) | pub async fn stop_job(&self, job_id: Uuid) -> Result<(), OrchestratorE... method complete_job (line 523) | pub async fn complete_job( method cleanup_job (line 581) | pub async fn cleanup_job(&self, job_id: Uuid) { method update_worker_status (line 586) | pub async fn update_worker_status( method get_handle (line 599) | pub async fn get_handle(&self, job_id: Uuid) -> Option { method list_jobs (line 604) | pub async fn list_jobs(&self) -> Vec { method token_store (line 609) | pub fn token_store(&self) -> &TokenStore { function test_container_job_config_default (line 619) | fn test_container_job_config_default() { function test_container_state_display (line 626) | fn test_container_state_display() { function test_validate_bind_mount_valid_path (line 632) | fn test_validate_bind_mount_valid_path() { function test_validate_bind_mount_rejects_outside_base (line 648) | fn test_validate_bind_mount_rejects_outside_base() { function test_validate_bind_mount_rejects_nonexistent (line 663) | fn test_validate_bind_mount_rejects_nonexistent() { function test_update_worker_status (line 676) | async fn test_update_worker_status() { FILE: src/orchestrator/mod.rs function resolve_orchestrator_port (line 56) | fn resolve_orchestrator_port() -> u16 { type OrchestratorSetup (line 64) | pub struct OrchestratorSetup { function setup_orchestrator (line 73) | pub async fn setup_orchestrator( function resolve_orchestrator_port_from_env (line 175) | fn resolve_orchestrator_port_from_env() { FILE: src/orchestrator/reaper.rs type ReaperConfig (line 27) | pub struct ReaperConfig { method default (line 37) | fn default() -> Self { type SandboxReaper (line 47) | pub struct SandboxReaper { method new (line 56) | pub async fn new( method run (line 71) | pub async fn run(self) { method scan_and_reap (line 90) | async fn scan_and_reap(&self) { method list_ironclaw_containers (line 151) | async fn list_ironclaw_containers( method reap_container (line 223) | async fn reap_container(&self, container_id: &str, job_id: Uuid) { function orphan_threshold_filters_young_containers (line 293) | fn orphan_threshold_filters_young_containers() { function orphan_threshold_allows_old_containers (line 300) | fn orphan_threshold_allows_old_containers() { function active_job_is_not_orphaned (line 308) | async fn active_job_is_not_orphaned() { function missing_job_is_treated_as_orphaned (line 322) | async fn missing_job_is_treated_as_orphaned() { function terminal_job_is_treated_as_orphaned (line 333) | async fn terminal_job_is_treated_as_orphaned() { type MockDocker (line 362) | struct MockDocker { method new (line 380) | fn new() -> Self { method add_container (line 390) | fn add_container(&self, id: String, labels: HashMap, c... method set_stop_error (line 399) | fn set_stop_error(&self, error: bool) { method set_remove_error (line 403) | fn set_remove_error(&self, error: bool) { method stop_call_count (line 407) | fn stop_call_count(&self) -> u32 { method remove_call_count (line 411) | fn remove_call_count(&self) -> u32 { type ContainerSummary (line 372) | struct ContainerSummary { function parse_container_labels_extracts_job_id_and_timestamp (line 418) | fn parse_container_labels_extracts_job_id_and_timestamp() { function missing_job_id_label_is_skipped (line 441) | fn missing_job_id_label_is_skipped() { function malformed_timestamp_fallback_works (line 451) | fn malformed_timestamp_fallback_works() { function age_calculation_correctly_filters_containers (line 479) | async fn age_calculation_correctly_filters_containers() { function active_job_prevents_cleanup_of_old_container (line 498) | async fn active_job_prevents_cleanup_of_old_container() { function failed_job_allows_cleanup (line 521) | async fn failed_job_allows_cleanup() { function reaper_config_defaults_are_reasonable (line 547) | fn reaper_config_defaults_are_reasonable() { function reaper_config_can_be_customized (line 564) | fn reaper_config_can_be_customized() { function reaper_cleanup_decision_matrix (line 577) | async fn reaper_cleanup_decision_matrix() { function should_run_e2e (line 675) | fn should_run_e2e() -> bool { function e2e_reaper_lists_ironclaw_containers (line 681) | async fn e2e_reaper_lists_ironclaw_containers() { function e2e_reaper_removes_orphaned_containers (line 767) | async fn e2e_reaper_removes_orphaned_containers() { function e2e_reaper_respects_age_threshold (line 864) | async fn e2e_reaper_respects_age_threshold() { FILE: src/pairing/store.rs constant PAIRING_CODE_LENGTH (line 18) | const PAIRING_CODE_LENGTH: usize = 8; constant PAIRING_ALPHABET (line 19) | const PAIRING_ALPHABET: &[u8] = b"ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; constant PAIRING_PENDING_TTL_SECS (line 21) | const PAIRING_PENDING_TTL_SECS: u64 = 15 * 60; constant PAIRING_PENDING_MAX (line 22) | const PAIRING_PENDING_MAX: usize = 3; constant PAIRING_APPROVE_RATE_LIMIT (line 24) | const PAIRING_APPROVE_RATE_LIMIT: usize = 10; constant PAIRING_APPROVE_RATE_WINDOW_SECS (line 26) | const PAIRING_APPROVE_RATE_WINDOW_SECS: u64 = 5 * 60; type PairingStoreError (line 30) | pub enum PairingStoreError { type UpsertResult (line 49) | pub struct UpsertResult { type PairingRequest (line 56) | pub struct PairingRequest { type PairingStoreFile (line 66) | struct PairingStoreFile { type AllowFromStoreFile (line 72) | struct AllowFromStoreFile { function default_pairing_dir (line 78) | fn default_pairing_dir() -> PathBuf { function safe_channel_key (line 82) | fn safe_channel_key(channel: &str) -> Result { function pairing_path (line 101) | fn pairing_path(base_dir: &Path, channel: &str) -> Result Result Result String { function now_secs (line 131) | fn now_secs() -> u64 { function parse_timestamp (line 138) | fn parse_timestamp(value: &str) -> Option { function is_expired (line 145) | fn is_expired(req: &PairingRequest, now_secs: u64) -> bool { function random_code (line 150) | fn random_code() -> String { function generate_unique_code (line 160) | fn generate_unique_code(existing: &HashSet) -> String { type PairingStore (line 174) | pub struct PairingStore { method new (line 180) | pub fn new() -> Self { method with_base_dir (line 187) | pub fn with_base_dir(base_dir: PathBuf) -> Self { method list_pending (line 192) | pub fn list_pending(&self, channel: &str) -> Result Result Result<(), PairingSt... method approve (line 361) | pub fn approve( method read_allow_from (line 424) | pub fn read_allow_from(&self, channel: &str) -> Result, Pa... method is_sender_allowed (line 444) | pub fn is_sender_allowed( method add_allow_from (line 468) | fn add_allow_from(&self, channel: &str, entry: &str) -> Result<(), Pai... method write_pairing_file (line 514) | fn write_pairing_file( method write_pairing_file_locked (line 531) | fn write_pairing_file_locked( method default (line 551) | fn default() -> Self { function test_safe_channel_key (line 562) | fn test_safe_channel_key() { function test_random_code (line 569) | fn test_random_code() { function test_store (line 575) | fn test_store() -> (PairingStore, TempDir) { function test_list_pending_empty (line 582) | fn test_list_pending_empty() { function test_upsert_request_creates_new (line 589) | fn test_upsert_request_creates_new() { function test_upsert_request_updates_existing (line 609) | fn test_upsert_request_updates_existing() { function test_approve_adds_to_allow_from (line 626) | fn test_approve_adds_to_allow_from() { function test_approve_case_insensitive_code (line 640) | fn test_approve_case_insensitive_code() { function test_approve_invalid_code_returns_none (line 649) | fn test_approve_invalid_code_returns_none() { function test_approve_rate_limited_after_many_failures (line 657) | fn test_approve_rate_limited_after_many_failures() { function test_is_sender_allowed_by_id (line 668) | fn test_is_sender_allowed_by_id() { function test_is_sender_allowed_by_username (line 682) | fn test_is_sender_allowed_by_username() { function test_channel_normalization (line 705) | fn test_channel_normalization() { function test_invalid_channel_rejected (line 714) | fn test_invalid_channel_rejected() { FILE: src/profile.rs constant ANALYSIS_FRAMEWORK (line 19) | pub const ANALYSIS_FRAMEWORK: &str = r#"Analyze across these 9 dimensions: constant PROFILE_JSON_SCHEMA (line 99) | pub const PROFILE_JSON_SCHEMA: &str = r#"{ type PersonalityTraits (line 189) | pub struct PersonalityTraits { function deserialize_trait_score (line 206) | fn deserialize_trait_score<'de, D>(deserializer: D) -> Result method default (line 219) | fn default() -> Self { type CommunicationPreferences (line 236) | pub struct CommunicationPreferences { function default_unknown (line 256) | fn default_unknown() -> String { function default_moderate (line 260) | fn default_moderate() -> String { method default (line 265) | fn default() -> Self { type UserCohort (line 286) | pub enum UserCohort { method fmt (line 296) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type CohortClassification (line 309) | pub struct CohortClassification { function deserialize_cohort (line 321) | fn deserialize_cohort<'de, D>(deserializer: D) -> Result(deserializer: D) -> Result Self { type AssistancePreferences (line 433) | pub struct AssistancePreferences { method default (line 449) | fn default() -> Self { type ContextualInfo (line 468) | pub struct ContextualInfo { type RelationshipValues (line 481) | pub struct RelationshipValues { type InteractionPreferences (line 495) | pub struct InteractionPreferences { method default (line 505) | fn default() -> Self { type AnalysisMetadata (line 516) | pub struct AnalysisMetadata { type PsychographicProfile (line 546) | pub struct PsychographicProfile { method is_populated (line 606) | pub fn is_populated(&self) -> bool { method to_user_md (line 613) | pub fn to_user_md(&self) -> String { method to_assistant_directives (line 753) | pub fn to_assistant_directives(&self) -> String { method to_heartbeat_md (line 838) | pub fn to_heartbeat_md(&self) -> String { method default (line 579) | fn default() -> Self { function test_default_profile_serialization_roundtrip (line 870) | fn test_default_profile_serialization_roundtrip() { function test_user_cohort_display (line 881) | fn test_user_cohort_display() { function test_to_user_md_includes_name (line 891) | fn test_to_user_md_includes_name() { function test_to_user_md_includes_goals (line 901) | fn test_to_user_md_includes_goals() { function test_to_user_md_skips_unknown_fields (line 909) | fn test_to_user_md_skips_unknown_fields() { function test_to_assistant_directives_high_proactivity (line 917) | fn test_to_assistant_directives_high_proactivity() { function test_to_heartbeat_md_includes_focus_areas (line 927) | fn test_to_heartbeat_md_includes_focus_areas() { function test_personality_traits_default_is_midpoint (line 942) | fn test_personality_traits_default_is_midpoint() { function test_personality_trait_score_clamped_to_100 (line 949) | fn test_personality_trait_score_clamped_to_100() { function test_personality_trait_score_handles_floats_and_negatives (line 961) | fn test_personality_trait_score_handles_floats_and_negatives() { function test_is_populated_default_is_false (line 973) | fn test_is_populated_default_is_false() { function test_is_populated_with_name (line 979) | fn test_is_populated_with_name() { function test_backward_compat_old_cohort_format (line 988) | fn test_backward_compat_old_cohort_format() { function test_new_format_with_rich_cohort (line 1021) | fn test_new_format_with_rich_cohort() { function test_profile_from_llm_json_old_format (line 1069) | fn test_profile_from_llm_json_old_format() { function test_analysis_framework_contains_all_dimensions (line 1134) | fn test_analysis_framework_contains_all_dimensions() { FILE: src/registry/artifacts.rs constant WASM_TRIPLES (line 21) | const WASM_TRIPLES: &[&str] = &[ function resolve_target_dir (line 33) | pub fn resolve_target_dir(crate_dir: &Path) -> PathBuf { function find_wasm_artifact (line 50) | pub fn find_wasm_artifact(crate_dir: &Path, crate_name: &str, profile: &... function find_any_wasm_artifact (line 74) | pub fn find_any_wasm_artifact(crate_dir: &Path, profile: &str) -> Option... function build_wasm_component (line 98) | pub async fn build_wasm_component( function build_wasm_component_sync (line 154) | pub fn build_wasm_component_sync(source_dir: &Path, release: bool) -> an... function install_wasm_files (line 206) | pub async fn install_wasm_files( function test_resolve_target_dir_default (line 259) | fn test_resolve_target_dir_default() { function test_find_wasm_artifact_not_found (line 267) | fn test_find_wasm_artifact_not_found() { function test_find_wasm_artifact_found (line 273) | fn test_find_wasm_artifact_found() { function test_find_wasm_artifact_hyphen_to_underscore (line 286) | fn test_find_wasm_artifact_hyphen_to_underscore() { function test_find_any_wasm_artifact_found (line 299) | fn test_find_any_wasm_artifact_found() { function test_find_any_wasm_artifact_not_found (line 311) | fn test_find_any_wasm_artifact_not_found() { function test_install_wasm_files_copies (line 317) | async fn test_install_wasm_files_copies() { function test_install_wasm_files_refuses_overwrite (line 346) | async fn test_install_wasm_files_refuses_overwrite() { function test_wasm_triples_order (line 370) | fn test_wasm_triples_order() { FILE: src/registry/catalog.rs type RegistryError (line 11) | pub enum RegistryError { type RegistryCatalog (line 92) | pub struct RegistryCatalog { method find_dir (line 107) | pub fn find_dir() -> Option { method load_or_embedded (line 145) | pub fn load_or_embedded() -> Result { method load (line 176) | pub fn load(registry_dir: &Path) -> Result { method load_manifests_from_dir (line 222) | fn load_manifests_from_dir( method root (line 263) | pub fn root(&self) -> &Path { method all (line 268) | pub fn all(&self) -> Vec<&ExtensionManifest> { method list (line 275) | pub fn list(&self, kind: Option, tag: Option<&str>) -> V... method get (line 292) | pub fn get(&self, name: &str) -> Option<&ExtensionManifest> { method get_strict (line 313) | pub fn get_strict(&self, name: &str) -> Result<&ExtensionManifest, Reg... method key_for (line 355) | pub fn key_for(&self, name: &str) -> Option { method search (line 380) | pub fn search(&self, query: &str) -> Vec<&ExtensionManifest> { method score_manifest (line 397) | fn score_manifest(manifest: &ExtensionManifest, tokens: &[&str]) -> us... method get_bundle (line 439) | pub fn get_bundle(&self, name: &str) -> Option<&BundleDefinition> { method bundle_names (line 444) | pub fn bundle_names(&self) -> Vec<&str> { method resolve_bundle (line 452) | pub fn resolve_bundle( method is_bundle (line 476) | pub fn is_bundle(&self, name: &str) -> bool { method resolve (line 482) | pub fn resolve( function create_test_registry (line 510) | fn create_test_registry(dir: &Path) { function test_load_catalog (line 613) | fn test_load_catalog() { function test_list_by_kind (line 622) | fn test_list_by_kind() { function test_list_by_tag (line 638) | fn test_list_by_tag() { function test_get_by_name (line 651) | fn test_get_by_name() { function test_search (line 671) | fn test_search() { function test_resolve_bundle (line 689) | fn test_resolve_bundle() { function test_resolve_single_or_bundle (line 703) | fn test_resolve_single_or_bundle() { function test_bundle_names (line 721) | fn test_bundle_names() { function test_directory_not_found (line 731) | fn test_directory_not_found() { function test_load_or_embedded_succeeds (line 737) | fn test_load_or_embedded_succeeds() { function test_bundle_entries_resolve_against_real_registry (line 745) | fn test_bundle_entries_resolve_against_real_registry() { FILE: src/registry/embedded.rs constant EMBEDDED_CATALOG (line 13) | const EMBEDDED_CATALOG: &str = include_str!(concat!(env!("OUT_DIR"), "/e... type EmbeddedCatalogRaw (line 17) | struct EmbeddedCatalogRaw { type ParsedCatalog (line 29) | struct ParsedCatalog { function parsed_catalog (line 34) | fn parsed_catalog() -> &'static ParsedCatalog { function load_embedded (line 70) | pub fn load_embedded() -> HashMap { function load_embedded_bundles (line 75) | pub fn load_embedded_bundles() -> HashMap { function test_load_embedded_parses (line 84) | fn test_load_embedded_parses() { function test_load_embedded_bundles_parses (line 96) | fn test_load_embedded_bundles_parses() { FILE: src/registry/installer.rs constant ALLOWED_ARTIFACT_HOSTS (line 15) | const ALLOWED_ARTIFACT_HOSTS: &[&str] = &[ function should_attempt_source_fallback (line 22) | fn should_attempt_source_fallback(err: &RegistryError) -> bool { function is_allowed_artifact_host (line 41) | fn is_allowed_artifact_host(host: &str) -> bool { function validate_artifact_url (line 48) | fn validate_artifact_url( function validate_manifest_install_inputs (line 86) | fn validate_manifest_install_inputs(manifest: &ExtensionManifest) -> Res... function require_source (line 163) | fn require_source(manifest: &ExtensionManifest) -> Result<&SourceSpec, R... function download_failure_reason (line 174) | fn download_failure_reason(error: &reqwest::Error) -> String { type InstallOutcome (line 188) | pub struct InstallOutcome { type RegistryInstaller (line 202) | pub struct RegistryInstaller { method new (line 212) | pub fn new(repo_root: PathBuf, tools_dir: PathBuf, channels_dir: PathB... method with_defaults (line 221) | pub fn with_defaults(repo_root: PathBuf) -> Self { method install_from_source (line 231) | pub async fn install_from_source( method install_with_source_fallback (line 329) | pub async fn install_with_source_fallback( method install_from_artifact (line 405) | pub async fn install_from_artifact( method install (line 554) | pub async fn install( method install_bundle (line 575) | pub async fn install_bundle( function download_artifact (line 637) | async fn download_artifact(url: &str) -> Result Result<(), ... function is_gzip (line 683) | fn is_gzip(bytes: &[u8]) -> bool { type ExtractResult (line 689) | struct ExtractResult { function extract_tar_gz (line 694) | fn extract_tar_gz( function test_manifest (line 802) | fn test_manifest( function test_manifest_with_kind (line 811) | fn test_manifest_with_kind( function test_installer_creation (line 851) | fn test_installer_creation() { function test_is_gzip (line 861) | fn test_is_gzip() { function test_verify_sha256_valid (line 869) | fn test_verify_sha256_valid() { function test_verify_sha256_invalid (line 879) | fn test_verify_sha256_invalid() { function test_install_from_source_rejects_path_traversal_name (line 885) | async fn test_install_from_source_rejects_path_traversal_name() { function test_install_from_artifact_rejects_non_https_url (line 905) | async fn test_install_from_artifact_rejects_non_https_url() { function test_install_from_artifact_rejects_disallowed_host (line 932) | async fn test_install_from_artifact_rejects_disallowed_host() { function test_install_from_artifact_rejects_null_sha256 (line 957) | async fn test_install_from_artifact_rejects_null_sha256() { function test_should_attempt_source_fallback_policy (line 985) | fn test_should_attempt_source_fallback_policy() { function test_extract_tar_gz (line 1014) | fn test_extract_tar_gz() { function test_install_from_source_rejects_wrong_prefix_for_channel (line 1057) | async fn test_install_from_source_rejects_wrong_prefix_for_channel() { function test_install_from_source_accepts_correct_channel_prefix (line 1085) | async fn test_install_from_source_accepts_correct_channel_prefix() { function test_extract_tar_gz_missing_wasm (line 1117) | fn test_extract_tar_gz_missing_wasm() { function test_source_fallback_on_latest_url_mismatch (line 1153) | fn test_source_fallback_on_latest_url_mismatch() { function build_test_tar_gz (line 1181) | fn build_test_tar_gz(wasm_name: &str, caps_name: Option<&str>) -> Vec { function test_extract_rejects_archive_with_wrong_wasm_name (line 1214) | fn test_extract_rejects_archive_with_wrong_wasm_name() { function test_extract_correct_wasm_from_tool_bundle (line 1242) | fn test_extract_correct_wasm_from_tool_bundle() { function test_extract_correct_wasm_from_channel_bundle (line 1265) | fn test_extract_correct_wasm_from_channel_bundle() { function test_tool_and_channel_install_to_separate_directories (line 1282) | async fn test_tool_and_channel_install_to_separate_directories() { FILE: src/registry/manifest.rs type ExtensionManifest (line 12) | pub struct ExtensionManifest { method to_registry_entry (line 172) | pub fn to_registry_entry(&self) -> Option { method to_mcp_registry_entry (line 181) | fn to_mcp_registry_entry(&self) -> Option { method to_wasm_registry_entry (line 220) | fn to_wasm_registry_entry(&self) -> RegistryEntry { type ManifestKind (line 62) | pub enum ManifestKind { method fmt (line 79) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method from (line 69) | fn from(kind: ManifestKind) -> Self { type SourceSpec (line 90) | pub struct SourceSpec { type ArtifactSpec (line 103) | pub struct ArtifactSpec { type AuthSummary (line 120) | pub struct AuthSummary { type BundleDefinition (line 145) | pub struct BundleDefinition { type BundlesFile (line 163) | pub struct BundlesFile { function test_parse_tool_manifest (line 293) | fn test_parse_tool_manifest() { function test_parse_channel_manifest (line 330) | fn test_parse_channel_manifest() { function test_parse_bundles (line 355) | fn test_parse_bundles() { function test_manifest_kind_display (line 381) | fn test_manifest_kind_display() { function test_manifest_with_download_url_has_buildable_fallback (line 390) | fn test_manifest_with_download_url_has_buildable_fallback() { function test_manifest_with_null_url_no_fallback (line 443) | fn test_manifest_with_null_url_no_fallback() { function test_manifest_no_artifacts_no_fallback (line 477) | fn test_manifest_no_artifacts_no_fallback() { function test_parse_mcp_server_manifest (line 507) | fn test_parse_mcp_server_manifest() { function test_mcp_server_oauth_pre_configured (line 536) | fn test_mcp_server_oauth_pre_configured() { function test_mcp_server_auth_none (line 557) | fn test_mcp_server_auth_none() { function test_mcp_server_missing_url_returns_none (line 575) | fn test_mcp_server_missing_url_returns_none() { FILE: src/sandbox/config.rs type SandboxConfig (line 7) | pub struct SandboxConfig { method default (line 36) | fn default() -> Self { type SandboxPolicy (line 66) | pub enum SandboxPolicy { method allows_writes (line 92) | pub fn allows_writes(&self) -> bool { method has_full_network (line 100) | pub fn has_full_network(&self) -> bool { method is_sandboxed (line 105) | pub fn is_sandboxed(&self) -> bool { type Err (line 111) | type Err = String; method from_str (line 113) | fn from_str(s: &str) -> Result { type ResourceLimits (line 128) | pub struct ResourceLimits { method default (line 140) | fn default() -> Self { function default_allowlist (line 151) | pub fn default_allowlist() -> Vec { function default_credential_mappings (line 180) | pub fn default_credential_mappings() -> Vec Self { method is_available (line 102) | pub async fn is_available(&self) -> bool { method image_exists (line 107) | pub async fn image_exists(&self) -> bool { method pull_image (line 112) | pub async fn pull_image(&self) -> Result<()> { method execute (line 144) | pub async fn execute( method exec_in_container (line 197) | pub async fn exec_in_container( method create_container (line 240) | async fn create_container( method wait_for_container (line 358) | async fn wait_for_container( method collect_logs (line 398) | async fn collect_logs( method run_exec (line 438) | async fn run_exec(&self, exec_id: &str, max_output: usize) -> Result b... function connect_docker (line 500) | pub async fn connect_docker() -> Result { function unix_socket_candidates (line 539) | fn unix_socket_candidates() -> Vec { function unix_socket_candidates_from_env (line 548) | fn unix_socket_candidates_from_env( function append_with_limit_truncates_on_utf8_boundary (line 582) | fn append_with_limit_truncates_on_utf8_boundary() { function append_with_limit_marks_truncated_when_full (line 590) | fn append_with_limit_marks_truncated_when_full() { function append_with_limit_appends_without_truncation (line 598) | fn append_with_limit_appends_without_truncation() { function test_unix_socket_candidates_include_rootless_paths (line 607) | fn test_unix_socket_candidates_include_rootless_paths() { function test_docker_connection (line 621) | async fn test_docker_connection() { FILE: src/sandbox/detect.rs type DockerStatus (line 26) | pub enum DockerStatus { method is_ok (line 39) | pub fn is_ok(&self) -> bool { method as_str (line 44) | pub fn as_str(&self) -> &'static str { type Platform (line 56) | pub enum Platform { method current (line 64) | pub fn current() -> Self { method install_hint (line 73) | pub fn install_hint(&self) -> &'static str { method start_hint (line 86) | pub fn start_hint(&self) -> &'static str { type DockerDetection (line 98) | pub struct DockerDetection { function check_docker (line 108) | pub async fn check_docker() -> DockerDetection { function docker_binary_exists (line 144) | fn docker_binary_exists() -> bool { function docker_cli_daemon_reachable (line 166) | fn docker_cli_daemon_reachable() -> bool { function test_detect_platform (line 196) | fn test_detect_platform() { function test_install_hint_not_empty (line 204) | fn test_install_hint_not_empty() { function test_docker_status_display (line 212) | fn test_docker_status_display() { function test_docker_status_is_ok (line 220) | fn test_docker_status_is_ok() { function test_check_docker_returns_valid_status (line 228) | async fn test_check_docker_returns_valid_status() { FILE: src/sandbox/error.rs type SandboxError (line 7) | pub enum SandboxError { type Result (line 58) | pub type Result = std::result::Result; FILE: src/sandbox/manager.rs type ExecOutput (line 47) | pub struct ExecOutput { method from (line 63) | fn from(c: ContainerOutput) -> Self { type SandboxManager (line 84) | pub struct SandboxManager { method new (line 93) | pub fn new(config: SandboxConfig) -> Self { method with_defaults (line 103) | pub fn with_defaults() -> Self { method is_available (line 108) | pub async fn is_available(&self) -> bool { method initialize (line 120) | pub async fn initialize(&self) -> Result<()> { method shutdown (line 180) | pub async fn shutdown(&self) { method execute (line 192) | pub async fn execute( method execute_with_policy (line 203) | pub async fn execute_with_policy( method try_execute_in_container (line 279) | async fn try_execute_in_container( method execute_direct (line 314) | async fn execute_direct( method build (line 381) | pub async fn build( method config (line 392) | pub fn config(&self) -> &SandboxConfig { method is_initialized (line 397) | pub fn is_initialized(&self) -> bool { method proxy_port (line 402) | pub async fn proxy_port(&self) -> Option { method drop (line 412) | fn drop(&mut self) { function is_transient_sandbox_error (line 425) | fn is_transient_sandbox_error(err: &SandboxError) -> bool { type SandboxManagerBuilder (line 435) | pub struct SandboxManagerBuilder { method new (line 441) | pub fn new() -> Self { method enabled (line 448) | pub fn enabled(mut self, enabled: bool) -> Self { method policy (line 459) | pub fn policy(mut self, policy: SandboxPolicy) -> Self { method allow_full_access (line 465) | pub fn allow_full_access(mut self, allow: bool) -> Self { method timeout (line 471) | pub fn timeout(mut self, timeout: Duration) -> Self { method memory_limit_mb (line 477) | pub fn memory_limit_mb(mut self, mb: u64) -> Self { method image (line 483) | pub fn image(mut self, image: &str) -> Self { method allow_domains (line 489) | pub fn allow_domains(mut self, domains: Vec) -> Self { method build (line 495) | pub fn build(self) -> SandboxManager { method build_and_init (line 500) | pub async fn build_and_init(self) -> Result { method default (line 508) | fn default() -> Self { function test_exec_output_from_container_output (line 518) | fn test_exec_output_from_container_output() { function test_exec_output_combined (line 533) | fn test_exec_output_combined() { function test_builder_defaults (line 549) | fn test_builder_defaults() { function test_builder_custom (line 555) | fn test_builder_custom() { function test_direct_execution (line 572) | async fn test_direct_execution() { function test_direct_execution_blocked_without_allow (line 591) | async fn test_direct_execution_blocked_without_allow() { function test_builder_full_access_without_allow_returns_error (line 614) | async fn test_builder_full_access_without_allow_returns_error() { function test_direct_execution_truncates_large_output (line 635) | async fn test_direct_execution_truncates_large_output() { function transient_errors_are_retryable (line 660) | fn transient_errors_are_retryable() { function non_transient_errors_are_not_retryable (line 679) | fn non_transient_errors_are_not_retryable() { FILE: src/sandbox/mod.rs function default_allowlist (line 106) | pub fn default_allowlist() -> Vec { function default_credential_mappings (line 111) | pub fn default_credential_mappings() -> Vec Self { method matches (line 37) | pub fn matches(&self, host: &str) -> bool { method pattern (line 50) | pub fn pattern(&self) -> &str { method fmt (line 56) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type DomainValidationResult (line 63) | pub enum DomainValidationResult { method is_allowed (line 71) | pub fn is_allowed(&self) -> bool { type DomainAllowlist (line 78) | pub struct DomainAllowlist { method new (line 84) | pub fn new(domains: &[String]) -> Self { method empty (line 91) | pub fn empty() -> Self { method add (line 96) | pub fn add(&mut self, pattern: &str) { method is_allowed (line 101) | pub fn is_allowed(&self, host: &str) -> DomainValidationResult { method patterns (line 124) | pub fn patterns(&self) -> &[DomainPattern] { method is_empty (line 129) | pub fn is_empty(&self) -> bool { method len (line 134) | pub fn len(&self) -> usize { method default (line 140) | fn default() -> Self { function extract_host (line 146) | pub fn extract_host(url: &str) -> Option { function test_exact_match (line 164) | fn test_exact_match() { function test_wildcard_match (line 173) | fn test_wildcard_match() { function test_allowlist_allows (line 183) | fn test_allowlist_allows() { function test_allowlist_denies (line 197) | fn test_allowlist_denies() { function test_empty_allowlist (line 205) | fn test_empty_allowlist() { function test_extract_host (line 211) | fn test_extract_host() { function test_subdomain_bypass_attempt (line 239) | fn test_subdomain_bypass_attempt() { function test_wildcard_depth (line 259) | fn test_wildcard_depth() { function test_case_insensitive_domains (line 275) | fn test_case_insensitive_domains() { function test_extract_host_with_credentials_in_url (line 284) | fn test_extract_host_with_credentials_in_url() { function test_extract_host_port_ignored (line 293) | fn test_extract_host_port_ignored() { function test_empty_and_single_pattern (line 302) | fn test_empty_and_single_pattern() { function test_ip_address_not_matched_by_domain (line 315) | fn test_ip_address_not_matched_by_domain() { function test_extract_host_ipv6 (line 324) | fn test_extract_host_ipv6() { FILE: src/sandbox/proxy/http.rs type ProxyState (line 32) | struct ProxyState { type CredentialResolver (line 47) | pub trait CredentialResolver: Send + Sync { method resolve (line 49) | async fn resolve(&self, name: &str) -> Option; method resolve (line 57) | async fn resolve(&self, name: &str) -> Option { method resolve (line 67) | async fn resolve(&self, _name: &str) -> Option { type EnvCredentialResolver (line 53) | pub struct EnvCredentialResolver; type NoCredentialResolver (line 63) | pub struct NoCredentialResolver; type HttpProxy (line 73) | pub struct HttpProxy { method new (line 81) | pub fn new( method start (line 99) | pub async fn start(&self, port: u16) -> Result { method stop (line 172) | pub async fn stop(&self) { method addr (line 179) | pub async fn addr(&self) -> Option { method is_running (line 184) | pub fn is_running(&self) -> bool { method request_count (line 189) | pub fn request_count(&self) -> u64 { function handle_request (line 197) | async fn handle_request( function handle_connect (line 249) | async fn handle_connect( function forward_request (line 327) | async fn forward_request( function is_hop_by_hop_header (line 444) | fn is_hop_by_hop_header(name: &str) -> bool { function make_response (line 459) | fn make_response( function make_response_from_builder (line 478) | fn make_response_from_builder( function error_response (line 497) | fn error_response(status: StatusCode, message: String) -> Response BoxBody { function full_body (line 512) | fn full_body(bytes: Bytes) -> BoxBody { function test_proxy_starts_and_stops (line 523) | async fn test_proxy_starts_and_stops() { function test_hop_by_hop_headers (line 540) | fn test_hop_by_hop_headers() { function test_make_response_does_not_panic (line 549) | fn test_make_response_does_not_panic() { FILE: src/sandbox/proxy/mod.rs type NetworkProxyBuilder (line 49) | pub struct NetworkProxyBuilder { method new (line 58) | pub fn new() -> Self { method from_config (line 68) | pub fn from_config(config: &SandboxConfig) -> Self { method with_allowlist (line 78) | pub fn with_allowlist(mut self, domains: Vec) -> Self { method allow_domain (line 84) | pub fn allow_domain(mut self, domain: &str) -> Self { method with_credentials (line 90) | pub fn with_credentials(mut self, mappings: Vec) ->... method with_credential_resolver (line 96) | pub fn with_credential_resolver(mut self, resolver: Arc Self { method build (line 108) | pub fn build(self) -> HttpProxy { method build_and_start (line 122) | pub async fn build_and_start(self, port: u16) -> Result { method default (line 130) | fn default() -> Self { function test_builder_default (line 140) | fn test_builder_default() { function test_builder_with_custom_allowlist (line 146) | fn test_builder_with_custom_allowlist() { function test_builder_builds_proxy (line 156) | async fn test_builder_builds_proxy() { FILE: src/sandbox/proxy/policy.rs type NetworkRequest (line 13) | pub struct NetworkRequest { method from_url (line 26) | pub fn from_url(method: &str, url: &str) -> Option { function extract_path (line 51) | fn extract_path(url: &str) -> String { type NetworkDecision (line 63) | pub enum NetworkDecision { method is_allowed (line 81) | pub fn is_allowed(&self) -> bool { type NetworkPolicyDecider (line 88) | pub trait NetworkPolicyDecider: Send + Sync { method decide (line 90) | async fn decide(&self, request: &NetworkRequest) -> NetworkDecision; method decide (line 121) | async fn decide(&self, request: &NetworkRequest) -> NetworkDecision { method decide (line 169) | async fn decide(&self, _request: &NetworkRequest) -> NetworkDecision { method decide (line 189) | async fn decide(&self, _request: &NetworkRequest) -> NetworkDecision { type DefaultPolicyDecider (line 94) | pub struct DefaultPolicyDecider { method new (line 101) | pub fn new(allowlist: DomainAllowlist, credential_mappings: Vec Option<&CredentialMapping> { function host_matches_pattern (line 144) | fn host_matches_pattern(host: &str, pattern: &str) -> bool { type AllowAllDecider (line 165) | pub struct AllowAllDecider; type DenyAllDecider (line 175) | pub struct DenyAllDecider { method new (line 180) | pub fn new(reason: &str) -> Self { function test_network_request_from_url (line 201) | fn test_network_request_from_url() { function test_extract_path (line 209) | fn test_extract_path() { function test_default_policy_allows_listed_domain (line 224) | async fn test_default_policy_allows_listed_domain() { function test_default_policy_denies_unlisted_domain (line 235) | async fn test_default_policy_denies_unlisted_domain() { function test_credential_injection (line 246) | async fn test_credential_injection() { function test_credential_injection_with_wildcard_host_pattern (line 267) | async fn test_credential_injection_with_wildcard_host_pattern() { function test_host_matches_pattern_exact (line 296) | fn test_host_matches_pattern_exact() { function test_host_matches_pattern_wildcard (line 302) | fn test_host_matches_pattern_wildcard() { FILE: src/secrets/crypto.rs constant KEY_SIZE (line 27) | const KEY_SIZE: usize = 32; constant NONCE_SIZE (line 30) | const NONCE_SIZE: usize = 12; constant SALT_SIZE (line 33) | const SALT_SIZE: usize = 32; constant TAG_SIZE (line 36) | const TAG_SIZE: usize = 16; type SecretsCrypto (line 42) | pub struct SecretsCrypto { method new (line 51) | pub fn new(master_key: SecretString) -> Result { method generate_salt (line 60) | pub fn generate_salt() -> Vec { method encrypt (line 71) | pub fn encrypt(&self, plaintext: &[u8]) -> Result<(Vec, Vec), ... method decrypt (line 99) | pub fn decrypt( method derive_key (line 129) | fn derive_key(&self, salt: &[u8]) -> Result<[u8; KEY_SIZE], SecretErro... method fmt (line 144) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function test_crypto (line 158) | fn test_crypto() -> SecretsCrypto { function test_encrypt_decrypt_roundtrip (line 164) | fn test_encrypt_decrypt_roundtrip() { function test_different_salts_different_ciphertext (line 178) | fn test_different_salts_different_ciphertext() { function test_wrong_salt_fails (line 196) | fn test_wrong_salt_fails() { function test_tampered_ciphertext_fails (line 208) | fn test_tampered_ciphertext_fails() { function test_master_key_too_short (line 224) | fn test_master_key_too_short() { function test_empty_plaintext (line 231) | fn test_empty_plaintext() { function test_large_plaintext (line 241) | fn test_large_plaintext() { function test_generate_salt_correct_length (line 252) | fn test_generate_salt_correct_length() { function test_generate_salt_nonzero (line 258) | fn test_generate_salt_nonzero() { function test_generate_salt_unique (line 264) | fn test_generate_salt_unique() { function test_decrypt_truncated_ciphertext (line 271) | fn test_decrypt_truncated_ciphertext() { function test_different_master_keys_different_ciphertext (line 287) | fn test_different_master_keys_different_ciphertext() { function test_exact_minimum_key_length (line 309) | fn test_exact_minimum_key_length() { function test_longer_master_key_works (line 320) | fn test_longer_master_key_works() { function test_debug_redacts_master_key (line 331) | fn test_debug_redacts_master_key() { function test_encrypted_output_structure (line 339) | fn test_encrypted_output_structure() { function test_tampered_nonce_fails (line 353) | fn test_tampered_nonce_fails() { function test_unicode_plaintext_roundtrip (line 366) | fn test_unicode_plaintext_roundtrip() { FILE: src/secrets/keychain.rs constant SERVICE_NAME (line 24) | const SERVICE_NAME: &str = "ironclaw"; constant MASTER_KEY_ACCOUNT (line 28) | const MASTER_KEY_ACCOUNT: &str = "master_key"; function generate_master_key (line 31) | pub fn generate_master_key() -> Vec { function generate_master_key_hex (line 40) | pub fn generate_master_key_hex() -> String { function store_master_key (line 58) | pub async fn store_master_key(key: &[u8]) -> Result<(), SecretError> { function get_master_key (line 67) | pub async fn get_master_key() -> Result, SecretError> { function delete_master_key (line 80) | pub async fn delete_master_key() -> Result<(), SecretError> { function has_master_key (line 87) | pub async fn has_master_key() -> bool { function store_master_key (line 103) | pub async fn store_master_key(key: &[u8]) -> Result<(), SecretError> { function get_master_key (line 142) | pub async fn get_master_key() -> Result, SecretError> { function delete_master_key (line 183) | pub async fn delete_master_key() -> Result<(), SecretError> { function has_master_key (line 209) | pub async fn has_master_key() -> bool { function store_master_key (line 239) | pub async fn store_master_key(_key: &[u8]) -> Result<(), SecretError> { function get_master_key (line 245) | pub async fn get_master_key() -> Result, SecretError> { function delete_master_key (line 251) | pub async fn delete_master_key() -> Result<(), SecretError> { function has_master_key (line 257) | pub async fn has_master_key() -> bool { function hex_to_bytes (line 267) | fn hex_to_bytes(hex: &str) -> Result, SecretError> { function test_generate_master_key (line 288) | fn test_generate_master_key() { function test_generate_master_key_hex (line 298) | fn test_generate_master_key_hex() { function test_hex_to_bytes (line 305) | fn test_hex_to_bytes() { function test_hex_to_bytes_invalid (line 314) | fn test_hex_to_bytes_invalid() { FILE: src/secrets/mod.rs function create_secrets_store (line 84) | pub fn create_secrets_store( function resolve_master_key (line 120) | pub async fn resolve_master_key() -> Option { function crypto_from_hex (line 145) | pub fn crypto_from_hex(hex: &str) -> Result Result Result Result, SecretEr... method delete (line 50) | async fn delete(&self, user_id: &str, name: &str) -> Result Result<(), SecretError>; method is_accessible (line 56) | async fn is_accessible( method create (line 82) | async fn create( method get (line 131) | async fn get(&self, user_id: &str, name: &str) -> Result Result Result, SecretEr... method delete (line 222) | async fn delete(&self, user_id: &str, name: &str) -> Result Result<(), SecretErro... method is_accessible (line 263) | async fn is_accessible( method create (line 346) | async fn create( method get (line 422) | async fn get(&self, user_id: &str, name: &str) -> Result Result Result, SecretEr... method delete (line 510) | async fn delete(&self, user_id: &str, name: &str) -> Result Result<(), SecretErro... method is_accessible (line 542) | async fn is_accessible( method create (line 683) | async fn create( method get (line 713) | async fn get(&self, user_id: &str, name: &str) -> Result Result Result, SecretEr... method delete (line 764) | async fn delete(&self, user_id: &str, name: &str) -> Result Result<(), SecretErr... method is_accessible (line 777) | async fn is_accessible( type PostgresSecretsStore (line 66) | pub struct PostgresSecretsStore { method new (line 74) | pub fn new(pool: Pool, crypto: Arc) -> Self { function row_to_secret (line 296) | fn row_to_secret(row: &tokio_postgres::Row) -> Secret { type LibSqlSecretsStore (line 319) | pub struct LibSqlSecretsStore { method new (line 327) | pub fn new(db: Arc, crypto: Arc) -> S... method connect (line 331) | async fn connect(&self) -> Result { function libsql_opt_text (line 571) | fn libsql_opt_text(s: Option<&str>) -> libsql::Value { function libsql_parse_timestamp (line 579) | fn libsql_parse_timestamp(s: &str) -> Result, Secr... function libsql_row_to_secret (line 596) | fn libsql_row_to_secret(row: &libsql::Row) -> Result { type InMemorySecretsStore (line 667) | pub struct InMemorySecretsStore { method new (line 673) | pub fn new(crypto: Arc) -> Self { function test_store (line 811) | fn test_store() -> crate::secrets::store::in_memory::InMemorySecretsStore { function test_create_and_get (line 816) | async fn test_create_and_get() { function test_exists (line 827) | async fn test_exists() { function test_delete (line 837) | async fn test_delete() { function test_list (line 849) | async fn test_list() { function test_is_accessible (line 873) | async fn test_is_accessible() { function test_expired_secret_returns_error (line 922) | async fn test_expired_secret_returns_error() { function test_non_expired_secret_succeeds (line 938) | async fn test_non_expired_secret_succeeds() { function test_user_isolation (line 950) | async fn test_user_isolation() { FILE: src/secrets/types.rs type Secret (line 17) | pub struct Secret { method fmt (line 38) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type SecretRef (line 58) | pub struct SecretRef { method new (line 64) | pub fn new(name: impl Into) -> Self { method with_provider (line 71) | pub fn with_provider(mut self, provider: impl Into) -> Self { type DecryptedSecret (line 83) | pub struct DecryptedSecret { method from_bytes (line 92) | pub fn from_bytes(bytes: Vec) -> Result { method expose (line 104) | pub fn expose(&self) -> &str { method len (line 109) | pub fn len(&self) -> usize { method is_empty (line 114) | pub fn is_empty(&self) -> bool { method fmt (line 120) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { method clone (line 126) | fn clone(&self) -> Self { type SecretError (line 135) | pub enum SecretError { type CreateSecretParams (line 166) | pub struct CreateSecretParams { method new (line 177) | pub fn new(name: impl Into, value: impl Into) -> Self { method with_provider (line 186) | pub fn with_provider(mut self, provider: impl Into) -> Self { method with_expiry (line 191) | pub fn with_expiry(mut self, expires_at: DateTime) -> Self { type CredentialLocation (line 199) | pub enum CredentialLocation { type CredentialMapping (line 218) | pub struct CredentialMapping { method bearer (line 228) | pub fn bearer(secret_name: impl Into, host_pattern: impl Into<... method header (line 236) | pub fn header( function test_secret_ref_creation (line 257) | fn test_secret_ref_creation() { function test_decrypted_secret_redaction (line 264) | fn test_decrypted_secret_redaction() { function test_decrypted_secret_expose (line 272) | fn test_decrypted_secret_expose() { function test_create_params (line 279) | fn test_create_params() { function test_create_params_name_lowercased (line 286) | fn test_create_params_name_lowercased() { function test_create_params_with_expiry (line 292) | fn test_create_params_with_expiry() { function test_secret_ref_without_provider (line 300) | fn test_secret_ref_without_provider() { function test_secret_ref_serde_roundtrip (line 307) | fn test_secret_ref_serde_roundtrip() { function test_secret_ref_serde_without_provider (line 316) | fn test_secret_ref_serde_without_provider() { function test_credential_location_serde_roundtrip_bearer (line 325) | fn test_credential_location_serde_roundtrip_bearer() { function test_credential_location_serde_roundtrip_basic (line 334) | fn test_credential_location_serde_roundtrip_basic() { function test_credential_location_serde_roundtrip_header (line 350) | fn test_credential_location_serde_roundtrip_header() { function test_credential_location_serde_roundtrip_query_param (line 368) | fn test_credential_location_serde_roundtrip_query_param() { function test_credential_location_serde_roundtrip_url_path (line 382) | fn test_credential_location_serde_roundtrip_url_path() { function test_credential_location_default_is_bearer (line 396) | fn test_credential_location_default_is_bearer() { function test_credential_mapping_bearer_constructor (line 403) | fn test_credential_mapping_bearer_constructor() { function test_credential_mapping_header_constructor (line 415) | fn test_credential_mapping_header_constructor() { function test_credential_mapping_serde_roundtrip (line 430) | fn test_credential_mapping_serde_roundtrip() { function test_decrypted_secret_invalid_utf8 (line 440) | fn test_decrypted_secret_invalid_utf8() { function test_decrypted_secret_empty (line 446) | fn test_decrypted_secret_empty() { function test_decrypted_secret_clone (line 454) | fn test_decrypted_secret_clone() { function test_secret_debug_redacts_fields (line 462) | fn test_secret_debug_redacts_fields() { function test_secret_error_display (line 486) | fn test_secret_error_display() { FILE: src/service.rs constant SERVICE_LABEL (line 17) | const SERVICE_LABEL: &str = "com.ironclaw.daemon"; constant SYSTEMD_UNIT (line 18) | const SYSTEMD_UNIT: &str = "ironclaw.service"; function handle_command (line 23) | pub fn handle_command(command: &ServiceAction) -> Result<()> { type ServiceAction (line 35) | pub enum ServiceAction { function install (line 45) | fn install() -> Result<()> { function install_macos (line 55) | fn install_macos() -> Result<()> { function macos_plist_content (line 80) | fn macos_plist_content(exe: &str, stdout: &str, stderr: &str) -> String { function install_linux (line 117) | fn install_linux() -> Result<()> { function start (line 152) | fn start() -> Result<()> { function stop (line 174) | fn stop() -> Result<()> { function status (line 198) | fn status() -> Result<()> { function uninstall (line 226) | fn uninstall() -> Result<()> { function macos_plist_path (line 254) | fn macos_plist_path() -> Result { function linux_unit_path (line 262) | fn linux_unit_path() -> Result { function ironclaw_logs_dir (line 271) | fn ironclaw_logs_dir() -> PathBuf { function run_checked (line 277) | fn run_checked(command: &mut Command) -> Result<()> { function run_capture (line 286) | fn run_capture(command: &mut Command) -> Result { function xml_escape (line 295) | fn xml_escape(raw: &str) -> String { function xml_escape_handles_reserved_chars (line 310) | fn xml_escape_handles_reserved_chars() { function xml_escape_passes_through_plain_text (line 316) | fn xml_escape_passes_through_plain_text() { function run_capture_reads_stdout (line 321) | fn run_capture_reads_stdout() { function run_capture_falls_back_to_stderr (line 328) | fn run_capture_falls_back_to_stderr() { function run_checked_errors_on_non_zero_exit (line 335) | fn run_checked_errors_on_non_zero_exit() { function run_checked_succeeds_on_zero_exit (line 342) | fn run_checked_succeeds_on_zero_exit() { function macos_plist_path_has_expected_suffix (line 348) | fn macos_plist_path_has_expected_suffix() { function linux_unit_path_has_expected_suffix (line 359) | fn linux_unit_path_has_expected_suffix() { function logs_dir_under_ironclaw (line 369) | fn logs_dir_under_ironclaw() { function macos_plist_sets_cli_enabled_false (line 376) | fn macos_plist_sets_cli_enabled_false() { FILE: src/settings.rs type Settings (line 14) | pub struct Settings { method from_db_map (line 746) | pub fn from_db_map(map: &std::collections::HashMap std::collections::HashMap std::path::PathBuf { method load (line 808) | pub fn load() -> Self { method load_from (line 813) | pub fn load_from(path: &std::path::Path) -> Self { method default_toml_path (line 821) | pub fn default_toml_path() -> PathBuf { method load_toml (line 829) | pub fn load_toml(path: &std::path::Path) -> Result, Strin... method save_toml (line 842) | pub fn save_toml(&self, path: &std::path::Path) -> Result<(), String> { method merge_from (line 873) | pub fn merge_from(&mut self, other: &Self) { method get (line 895) | pub fn get(&self, path: &str) -> Option { method set (line 916) | pub fn set(&mut self, path: &str, value: &str) -> Result<(), String> { method reset (line 990) | pub fn reset(&mut self, path: &str) -> Result<(), String> { method list (line 1000) | pub fn list(&self) -> Vec<(String, String)> { type KeySource (line 146) | pub enum KeySource { type EmbeddingsSettings (line 158) | pub struct EmbeddingsSettings { function default_embeddings_provider (line 172) | fn default_embeddings_provider() -> String { function default_embeddings_model (line 176) | fn default_embeddings_model() -> String { method default (line 181) | fn default() -> Self { type TunnelSettings (line 198) | pub struct TunnelSettings { type ChannelSettings (line 243) | pub struct ChannelSettings { method default (line 336) | fn default() -> Self { type HeartbeatSettings (line 365) | pub struct HeartbeatSettings { function default_heartbeat_interval (line 399) | fn default_heartbeat_interval() -> u64 { method default (line 404) | fn default() -> Self { type AgentSettings (line 420) | pub struct AgentSettings { function default_agent_name (line 471) | fn default_agent_name() -> String { function default_max_parallel_jobs (line 475) | fn default_max_parallel_jobs() -> u32 { function default_job_timeout (line 479) | fn default_job_timeout() -> u64 { function default_stuck_threshold (line 483) | fn default_stuck_threshold() -> u64 { function default_repair_interval (line 487) | fn default_repair_interval() -> u64 { function default_session_idle_timeout (line 491) | fn default_session_idle_timeout() -> u64 { function default_max_repair_attempts (line 495) | fn default_max_repair_attempts() -> u32 { function default_max_tool_iterations (line 499) | fn default_max_tool_iterations() -> usize { function default_timezone (line 503) | fn default_timezone() -> String { function default_true (line 507) | fn default_true() -> bool { method default (line 512) | fn default() -> Self { type WasmSettings (line 532) | pub struct WasmSettings { function default_wasm_memory_limit (line 562) | fn default_wasm_memory_limit() -> u64 { function default_wasm_timeout (line 566) | fn default_wasm_timeout() -> u64 { function default_wasm_fuel_limit (line 570) | fn default_wasm_fuel_limit() -> u64 { method default (line 575) | fn default() -> Self { type SandboxSettings (line 590) | pub struct SandboxSettings { function default_sandbox_policy (line 628) | fn default_sandbox_policy() -> String { function default_sandbox_timeout (line 632) | fn default_sandbox_timeout() -> u64 { function default_sandbox_memory (line 636) | fn default_sandbox_memory() -> u64 { function default_sandbox_cpu_shares (line 640) | fn default_sandbox_cpu_shares() -> u32 { function default_sandbox_image (line 644) | fn default_sandbox_image() -> String { method default (line 649) | fn default() -> Self { type SafetySettings (line 666) | pub struct SafetySettings { function default_max_output_length (line 676) | fn default_max_output_length() -> usize { method default (line 681) | fn default() -> Self { type BuilderSettings (line 691) | pub struct BuilderSettings { function default_builder_max_iterations (line 713) | fn default_builder_max_iterations() -> u32 { function default_builder_timeout (line 717) | fn default_builder_timeout() -> u64 { method default (line 722) | fn default() -> Self { type TranscriptionSettings (line 735) | pub struct TranscriptionSettings { function collect_settings_json (line 1014) | fn collect_settings_json( function collect_settings (line 1037) | fn collect_settings( function merge_non_default (line 1075) | fn merge_non_default( function test_db_map_round_trip (line 1108) | fn test_db_map_round_trip() { function test_get_setting (line 1123) | fn test_get_setting() { function test_set_setting (line 1136) | fn test_set_setting() { function test_reset_setting (line 1150) | fn test_reset_setting() { function test_list_settings (line 1159) | fn test_list_settings() { function test_key_source_serialization (line 1170) | fn test_key_source_serialization() { function test_embeddings_defaults (line 1184) | fn test_embeddings_defaults() { function test_wasm_channel_owner_ids_db_round_trip (line 1192) | fn test_wasm_channel_owner_ids_db_round_trip() { function test_wasm_channel_owner_ids_default_empty (line 1208) | fn test_wasm_channel_owner_ids_default_empty() { function test_wasm_channel_owner_ids_via_set (line 1214) | fn test_wasm_channel_owner_ids_via_set() { function test_llm_backend_round_trip (line 1226) | fn test_llm_backend_round_trip() { function test_openai_compatible_db_map_round_trip (line 1252) | fn test_openai_compatible_db_map_round_trip() { function toml_round_trip (line 1283) | fn toml_round_trip() { function toml_selected_model_update_persists (line 1304) | fn toml_selected_model_update_persists() { function toml_missing_file_returns_none (line 1326) | fn toml_missing_file_returns_none() { function toml_invalid_content_returns_error (line 1332) | fn toml_invalid_content_returns_error() { function toml_partial_config_uses_defaults (line 1342) | fn toml_partial_config_uses_defaults() { function toml_header_comment_present (line 1357) | fn toml_header_comment_present() { function merge_only_overrides_non_default_values (line 1370) | fn merge_only_overrides_non_default_values() { function merge_preserves_base_when_overlay_is_default (line 1385) | fn merge_preserves_base_when_overlay_is_default() { function toml_creates_parent_dirs (line 1398) | fn toml_creates_parent_dirs() { function default_toml_path_under_ironclaw (line 1407) | fn default_toml_path_under_ironclaw() { function tunnel_settings_round_trip (line 1414) | fn tunnel_settings_round_trip() { function wizard_recovery_step1_overrides_stale_db (line 1461) | fn wizard_recovery_step1_overrides_stale_db() { function wizard_recovery_defaults_dont_clobber_prior (line 1521) | fn wizard_recovery_defaults_dont_clobber_prior() { function comprehensive_db_map_round_trip (line 1560) | fn comprehensive_db_map_round_trip() { function toml_json_db_all_agree (line 1671) | fn toml_json_db_all_agree() { function set_get_round_trip_all_documented_paths (line 1727) | fn set_get_round_trip_all_documented_paths() { function option_string_fields_survive_db_round_trip_as_null (line 1752) | fn option_string_fields_survive_db_round_trip_as_null() { function provider_only_rerun_preserves_unrelated_settings (line 1790) | fn provider_only_rerun_preserves_unrelated_settings() { function channels_only_rerun_preserves_unrelated_settings (line 1859) | fn channels_only_rerun_preserves_unrelated_settings() { function quick_mode_rerun_preserves_prior_channels_and_heartbeat (line 1912) | fn quick_mode_rerun_preserves_prior_channels_and_heartbeat() { function full_rerun_same_provider_preserves_model_through_merge (line 1996) | fn full_rerun_same_provider_preserves_model_through_merge() { function full_rerun_different_provider_clears_model_through_merge (line 2050) | fn full_rerun_different_provider_clears_model_through_merge() { function incremental_persist_does_not_clobber_prior_steps (line 2093) | fn incremental_persist_does_not_clobber_prior_steps() { function switching_db_backend_allows_fresh_connection_settings (line 2153) | fn switching_db_backend_allows_fresh_connection_settings() { function merge_preserves_true_booleans_when_overlay_has_default_false (line 2203) | fn merge_preserves_true_booleans_when_overlay_has_default_false() { function embeddings_survive_rerun_that_skips_step5 (line 2249) | fn embeddings_survive_rerun_that_skips_step5() { FILE: src/setup/channels.rs type ChannelSetupError (line 27) | pub enum ChannelSetupError { type SecretsContext (line 45) | pub struct SecretsContext { method from_store (line 52) | pub fn from_store(store: Arc, user_id: &str) -> Self { method new (line 61) | pub fn new(pool: deadpool_postgres::Pool, crypto: Arc, ... method save_secret (line 69) | pub async fn save_secret( method secret_exists (line 85) | pub async fn secret_exists(&self, name: &str) -> bool { method get_secret (line 96) | pub async fn get_secret(&self, name: &str) -> Result Result Result { function setup_tunnel_cloudflare (line 216) | async fn setup_tunnel_cloudflare() -> Result Option { function setup_tunnel_tailscale (line 399) | fn setup_tunnel_tailscale() -> Result { function setup_tunnel_custom (line 418) | fn setup_tunnel_custom() -> Result { function setup_tunnel_static (line 448) | fn setup_tunnel_static() -> Result { type HttpSetupResult (line 474) | pub struct HttpSetupResult { type SignalSetupResult (line 482) | pub struct SignalSetupResult { function setup_http (line 494) | pub async fn setup_http(secrets: &SecretsContext) -> Result String { function http_webhook_secret_hint (line 538) | fn http_webhook_secret_hint() -> &'static str { function validate_e164 (line 542) | fn validate_e164(account: &str) -> Result<(), String> { function validate_allow_from_list (line 559) | fn validate_allow_from_list(list: &str) -> Result<(), String> { function validate_allow_from_groups_list (line 594) | fn validate_allow_from_groups_list(list: &str) -> Result<(), String> { function setup_signal (line 618) | pub async fn setup_signal(_settings: &Settings) -> Result bool { function normalize_ip (line 1005) | fn normalize_ip(ip: std::net::IpAddr) -> std::net::IpAddr { function normalize_validation_domain (line 1015) | fn normalize_validation_domain(host: &str) -> &str { function validation_placeholder_regex (line 1019) | fn validation_placeholder_regex() -> &'static regex::Regex { function validation_target_display (line 1027) | fn validation_target_display(parsed: &Url) -> String { function describe_validation_request_error (line 1035) | fn describe_validation_request_error(error: &reqwest::Error) -> &'static... function validate_cloudflare_token_live (line 1054) | async fn validate_cloudflare_token_live(token: &str) -> Result<(), Strin... function validate_cloudflare_token_format (line 1118) | fn validate_cloudflare_token_format(token: &str) -> bool { function generate_secret_with_length (line 1128) | fn generate_secret_with_length(length: usize) -> String { function test_secrets_context (line 1148) | fn test_secrets_context() -> SecretsContext { function test_generate_webhook_secret (line 1162) | fn test_generate_webhook_secret() { function test_generate_secret_with_length (line 1168) | fn test_generate_secret_with_length() { function test_validate_cloudflare_token_valid (line 1180) | fn test_validate_cloudflare_token_valid() { function test_validate_cloudflare_token_missing_fields (line 1189) | fn test_validate_cloudflare_token_missing_fields() { function test_validate_cloudflare_token_not_base64 (line 1198) | fn test_validate_cloudflare_token_not_base64() { function test_validate_cloudflare_token_not_json (line 1203) | fn test_validate_cloudflare_token_not_json() { function test_validate_cloudflare_token_empty (line 1209) | fn test_validate_cloudflare_token_empty() { function test_substitute_validation_placeholders (line 1214) | async fn test_substitute_validation_placeholders() { function test_substitute_validation_placeholders_url_encodes_secrets (line 1245) | async fn test_substitute_validation_placeholders_url_encodes_secrets() { function test_substitute_validation_placeholders_missing_secret (line 1269) | async fn test_substitute_validation_placeholders_missing_secret() { function test_validate_public_https_url_rejects_localhost (line 1283) | async fn test_validate_public_https_url_rejects_localhost() { function test_validate_public_https_url_rejects_localhost_with_trailing_dot (line 1292) | async fn test_validate_public_https_url_rejects_localhost_with_trailing_... function test_validate_public_https_url_rejects_private_ip (line 1301) | async fn test_validate_public_https_url_rejects_private_ip() { function test_validate_public_https_url_rejects_ipv4_mapped_ipv6 (line 1310) | async fn test_validate_public_https_url_rejects_ipv4_mapped_ipv6() { function test_validate_public_https_url_rejects_http (line 1319) | async fn test_validate_public_https_url_rejects_http() { function test_validate_public_https_url_accepts_public_https_literal_ip (line 1328) | async fn test_validate_public_https_url_accepts_public_https_literal_ip() { function test_validate_public_https_url_fails_closed_on_dns_error (line 1338) | async fn test_validate_public_https_url_fails_closed_on_dns_error() { function test_http_webhook_secret_hint_reflects_current_behavior (line 1347) | fn test_http_webhook_secret_hint_reflects_current_behavior() { FILE: src/setup/mod.rs function check_onboard_needed (line 45) | pub fn check_onboard_needed() -> Option<&'static str> { FILE: src/setup/profile_evolution.rs function profile_evolution_prompt (line 13) | pub fn profile_evolution_prompt( constant PROFILE_EVOLUTION_ROUTINE_PROMPT (line 72) | pub const PROFILE_EVOLUTION_ROUTINE_PROMPT: &str = r#"You are running a ... function test_profile_evolution_prompt_contains_profile (line 92) | fn test_profile_evolution_prompt_contains_profile() { function test_profile_evolution_prompt_contains_instructions (line 100) | fn test_profile_evolution_prompt_contains_instructions() { function test_profile_evolution_prompt_includes_framework (line 108) | fn test_profile_evolution_prompt_includes_framework() { function test_routine_prompt_mentions_tools (line 118) | fn test_routine_prompt_mentions_tools() { FILE: src/setup/prompts.rs function drain_pending_events (line 27) | fn drain_pending_events() { function select_one (line 43) | pub fn select_one(prompt: &str, options: &[&str]) -> io::Result { function select_many (line 99) | pub fn select_many(prompt: &str, options: &[(&str, bool)]) -> io::Result... function secret_input (line 202) | pub fn secret_input(prompt: &str) -> io::Result { function read_secret_line (line 216) | fn read_secret_line() -> io::Result { function confirm (line 268) | pub fn confirm(prompt: &str, default: bool) -> io::Result { function print_banner (line 288) | pub fn print_banner() { function print_header (line 308) | pub fn print_header(text: &str) { function print_step (line 328) | pub fn print_step(current: usize, total: usize, name: &str) { function print_success (line 335) | pub fn print_success(message: &str) { function print_error (line 344) | pub fn print_error(message: &str) { function print_warning (line 353) | pub fn print_warning(message: &str) { function print_info (line 362) | pub fn print_info(message: &str) { function input (line 371) | pub fn input(prompt: &str) -> io::Result { function optional_input (line 382) | pub fn optional_input(prompt: &str, hint: Option<&str>) -> io::Result Self { type SetupConfig (line 78) | pub struct SetupConfig { type SetupWizard (line 90) | pub struct SetupWizard { method owner_id (line 108) | fn owner_id(&self) -> &str { method fallback_with_default_owner (line 112) | fn fallback_with_default_owner( method from_bootstrap_settings (line 132) | fn from_bootstrap_settings( method new (line 152) | pub fn new() -> Self { method with_config (line 160) | pub fn with_config(config: SetupConfig) -> Self { method try_with_config_and_toml (line 167) | pub fn try_with_config_and_toml( method with_session (line 176) | pub fn with_session(mut self, session: Arc) -> Self { method run (line 187) | pub async fn run(&mut self) -> Result<(), SetupError> { method reconnect_existing_db (line 345) | async fn reconnect_existing_db(&mut self) -> Result<(), SetupError> { method reconnect_postgres (line 370) | async fn reconnect_postgres(&mut self) -> Result<(), SetupError> { method reconnect_libsql (line 397) | async fn reconnect_libsql(&mut self) -> Result<(), SetupError> { method step_database (line 433) | async fn step_database(&mut self) -> Result<(), SetupError> { method step_database_postgres (line 499) | async fn step_database_postgres(&mut self) -> Result<(), SetupError> { method step_database_libsql (line 561) | async fn step_database_libsql(&mut self) -> Result<(), SetupError> { method test_database_connection_postgres (line 672) | async fn test_database_connection_postgres(&mut self, url: &str) -> Re... method test_database_connection_libsql (line 740) | async fn test_database_connection_libsql( method run_migrations_postgres (line 767) | async fn run_migrations_postgres(&self) -> Result<(), SetupError> { method run_migrations_libsql (line 797) | async fn run_migrations_libsql(&self) -> Result<(), SetupError> { method step_security (line 820) | async fn step_security(&mut self) -> Result<(), SetupError> { method auto_setup_database (line 934) | async fn auto_setup_database(&mut self) -> Result<(), SetupError> { method auto_setup_security (line 1009) | async fn auto_setup_security(&mut self) -> Result<(), SetupError> { method step_inference_provider (line 1068) | async fn step_inference_provider(&mut self) -> Result<(), SetupError> { method run_provider_setup (line 1161) | async fn run_provider_setup( method set_llm_backend_preserving_model (line 1242) | fn set_llm_backend_preserving_model(&mut self, backend: &str) { method setup_nearai (line 1251) | async fn setup_nearai(&mut self) -> Result<(), SetupError> { method setup_anthropic (line 1334) | async fn setup_anthropic(&mut self) -> Result<(), SetupError> { method setup_anthropic_oauth (line 1357) | async fn setup_anthropic_oauth(&mut self) -> Result<(), SetupError> { method save_anthropic_oauth_token (line 1405) | async fn save_anthropic_oauth_token(&mut self, token: &str) -> Result<... method setup_api_key_provider (line 1437) | async fn setup_api_key_provider( method setup_openai_codex (line 1507) | async fn setup_openai_codex(&mut self) -> Result<(), SetupError> { method setup_ollama_generic (line 1530) | fn setup_ollama_generic( method setup_bedrock (line 1563) | async fn setup_bedrock(&mut self) -> Result<(), SetupError> { method setup_bedrock_cross_region (line 1617) | fn setup_bedrock_cross_region(&mut self) -> Result<(), SetupError> { method setup_openai_compatible_generic (line 1649) | async fn setup_openai_compatible_generic( method step_model_selection (line 1704) | async fn step_model_selection(&mut self) -> Result<(), SetupError> { method select_from_model_list (line 1834) | fn select_from_model_list(&mut self, models: &[(String, String)]) -> R... method fetch_nearai_models (line 1866) | async fn fetch_nearai_models(&self) -> Vec { method step_embeddings (line 1895) | fn step_embeddings(&mut self) -> Result<(), SetupError> { method init_secrets_context (line 1965) | async fn init_secrets_context(&mut self) -> Result Result<(), SetupError> { method step_extensions (line 2305) | async fn step_extensions(&mut self) -> Result<(), SetupError> { method step_docker_sandbox (line 2431) | async fn step_docker_sandbox(&mut self) -> Result<(), SetupError> { method step_claude_code_sandbox (line 2514) | async fn step_claude_code_sandbox(&mut self) -> Result<(), SetupError> { method step_heartbeat (line 2570) | fn step_heartbeat(&mut self) -> Result<(), SetupError> { method persist_settings (line 2612) | async fn persist_settings(&self) -> Result { method write_bootstrap_env (line 2665) | fn write_bootstrap_env(&self) -> Result<(), SetupError> { method persist_session_to_db (line 2817) | async fn persist_session_to_db(&self) { method persist_after_step (line 2860) | async fn persist_after_step(&self) { method try_load_existing_settings (line 2885) | async fn try_load_existing_settings(&mut self) { method save_and_summarize (line 2941) | async fn save_and_summarize(&mut self) -> Result<(), SetupError> { method default (line 3082) | fn default() -> Self { function mask_password_in_url (line 3089) | fn mask_password_in_url(url: &str) -> String { function discover_wasm_channels (line 3120) | async fn discover_wasm_channels(dir: &std::path::Path) -> Vec<(String, C... function mask_api_key (line 3186) | fn mask_api_key(key: &str) -> String { function capitalize_first (line 3198) | fn capitalize_first(s: &str) -> String { function install_missing_bundled_channels (line 3207) | async fn install_missing_bundled_channels( function build_channel_options (line 3230) | fn build_channel_options(discovered: &[(String, ChannelCapabilitiesFile)... function load_registry_catalog (line 3255) | fn load_registry_catalog() -> Option HashSe... function install_selected_bundled_channels (line 3359) | async fn install_selected_bundled_channels( function test_wizard_creation (line 3399) | fn test_wizard_creation() { function test_wizard_with_config (line 3406) | fn test_wizard_with_config() { function test_wizard_owner_id_uses_resolved_env_scope (line 3418) | fn test_wizard_owner_id_uses_resolved_env_scope() { function test_wizard_owner_id_uses_toml_scope (line 3427) | fn test_wizard_owner_id_uses_toml_scope() { function test_try_with_config_and_toml_propagates_invalid_owner_env (line 3441) | fn test_try_with_config_and_toml_propagates_invalid_owner_env() { function test_mask_password_in_url (line 3465) | fn test_mask_password_in_url() { function test_capitalize_first (line 3479) | fn test_capitalize_first() { function test_mask_api_key (line 3486) | fn test_mask_api_key() { function test_install_missing_bundled_channels_installs_telegram (line 3500) | async fn test_install_missing_bundled_channels_installs_telegram() { function test_build_channel_options_includes_available_when_missing (line 3520) | fn test_build_channel_options_includes_available_when_missing() { function test_build_channel_options_dedupes_available (line 3535) | fn test_build_channel_options_dedupes_available() { function test_fetch_anthropic_models_static_fallback (line 3547) | async fn test_fetch_anthropic_models_static_fallback() { function test_fetch_openai_models_static_fallback (line 3559) | async fn test_fetch_openai_models_static_fallback() { function test_is_openai_chat_model_includes_gpt5_and_filters_non_chat_variants (line 3571) | fn test_is_openai_chat_model_includes_gpt5_and_filters_non_chat_variants... function test_sort_openai_models_prioritizes_best_models_first (line 3582) | fn test_sort_openai_models_prioritizes_best_models_first() { function test_fetch_ollama_models_unreachable_fallback (line 3607) | async fn test_fetch_ollama_models_unreachable_fallback() { function test_discover_wasm_channels_empty_dir (line 3614) | async fn test_discover_wasm_channels_empty_dir() { function test_discover_wasm_channels_nonexistent_dir (line 3621) | async fn test_discover_wasm_channels_nonexistent_dir() { type EnvGuard (line 3630) | struct EnvGuard { method set (line 3636) | fn set(key: &'static str, value: &str) -> Self { method clear (line 3644) | fn clear(key: &'static str) -> Self { method drop (line 3654) | fn drop(&mut self) { function test_set_llm_backend_preserves_model_when_backend_unchanged (line 3666) | fn test_set_llm_backend_preserves_model_when_backend_unchanged() { function test_set_llm_backend_clears_model_when_backend_was_unset (line 3678) | fn test_set_llm_backend_clears_model_when_backend_was_unset() { function test_set_llm_backend_clears_model_when_backend_changes (line 3689) | fn test_set_llm_backend_clears_model_when_backend_changes() { function test_same_provider_preserves_selected_model (line 3703) | fn test_same_provider_preserves_selected_model() { function test_different_provider_clears_selected_model (line 3725) | fn test_different_provider_clears_selected_model() { function test_bedrock_same_provider_preserves_model (line 3745) | fn test_bedrock_same_provider_preserves_model() { function test_bedrock_clears_stale_profile_on_default_creds (line 3767) | fn test_bedrock_clears_stale_profile_on_default_creds() { function test_bedrock_empty_profile_clears_existing (line 3784) | fn test_bedrock_empty_profile_clears_existing() { function test_run_provider_setup_no_setup_hint (line 3803) | async fn test_run_provider_setup_no_setup_hint() { function test_env_var_security_initializes_crypto (line 3844) | fn test_env_var_security_initializes_crypto() { function test_build_nearai_model_fetch_config_picks_up_api_key_env (line 3871) | fn test_build_nearai_model_fetch_config_picks_up_api_key_env() { function test_build_nearai_model_fetch_config_none_when_no_api_key (line 3897) | fn test_build_nearai_model_fetch_config_none_when_no_api_key() { function test_build_nearai_model_fetch_config_none_when_empty_api_key (line 3916) | fn test_build_nearai_model_fetch_config_none_when_empty_api_key() { function test_build_nearai_model_fetch_config_picks_up_runtime_env (line 3932) | fn test_build_nearai_model_fetch_config_picks_up_runtime_env() { FILE: src/skills/attenuation.rs constant READ_ONLY_TOOLS (line 26) | const READ_ONLY_TOOLS: &[&str] = &[ type AttenuationResult (line 39) | pub struct AttenuationResult { function attenuate_tools (line 55) | pub fn attenuate_tools( function make_tool (line 122) | fn make_tool(name: &str) -> ToolDefinition { function make_skill_with_trust (line 130) | fn make_skill_with_trust(name: &str, trust: SkillTrust) -> LoadedSkill { function all_tools (line 150) | fn all_tools() -> Vec { function test_no_skills_returns_all_tools (line 165) | fn test_no_skills_returns_all_tools() { function test_trusted_skills_no_filtering (line 173) | fn test_trusted_skills_no_filtering() { function test_installed_only_read_only (line 183) | fn test_installed_only_read_only() { function test_mixed_trust_drops_to_lowest (line 202) | fn test_mixed_trust_drops_to_lowest() { function test_attenuation_result_has_explanation (line 217) | fn test_attenuation_result_has_explanation() { FILE: src/skills/catalog.rs constant DEFAULT_REGISTRY_URL (line 20) | const DEFAULT_REGISTRY_URL: &str = "https://wry-manatee-359.convex.site"; constant CACHE_TTL (line 23) | const CACHE_TTL: Duration = Duration::from_secs(300); constant MAX_RESULTS (line 26) | const MAX_RESULTS: usize = 25; constant REQUEST_TIMEOUT (line 29) | const REQUEST_TIMEOUT: Duration = Duration::from_secs(10); type CatalogSearchOutcome (line 33) | pub struct CatalogSearchOutcome { type CatalogEntry (line 42) | pub struct CatalogEntry { type SkillDetailResponse (line 77) | struct SkillDetailResponse { type SkillDetailInner (line 86) | struct SkillDetailInner { type SkillDetail (line 101) | pub struct SkillDetail { type SkillStats (line 120) | pub struct SkillStats { type SkillOwner (line 135) | pub struct SkillOwner { type CachedSearch (line 143) | struct CachedSearch { type SkillCatalog (line 150) | pub struct SkillCatalog { method new (line 164) | pub fn new() -> Self { method with_url (line 184) | pub fn with_url(url: &str) -> Self { method search (line 204) | pub async fn search(&self, query: &str) -> CatalogSearchOutcome { method fetch_search (line 240) | async fn fetch_search(&self, query: &str) -> CatalogSearchOutcome { method fetch_skill_detail (line 323) | pub async fn fetch_skill_detail(&self, slug: &str) -> Option &str { method clear_cache (line 390) | pub async fn clear_cache(&self) { method default (line 396) | fn default() -> Self { type CatalogSearchEnvelope (line 403) | struct CatalogSearchEnvelope { type CatalogSearchResult (line 410) | struct CatalogSearchResult { function skill_download_url (line 428) | pub fn skill_download_url(registry_url: &str, slug: &str) -> String { function shared_catalog (line 437) | pub fn shared_catalog() -> Arc { function test_default_registry_url (line 446) | fn test_default_registry_url() { function test_custom_registry_url (line 453) | fn test_custom_registry_url() { function test_search_returns_error_on_network_failure (line 459) | async fn test_search_returns_error_on_network_failure() { function test_cache_is_populated_after_search (line 477) | async fn test_cache_is_populated_after_search() { function test_clear_cache (line 488) | async fn test_clear_cache() { function test_skill_download_url (line 498) | fn test_skill_download_url() { function test_skill_download_url_encodes_special_chars (line 507) | fn test_skill_download_url_encodes_special_chars() { function test_parse_wrapped_response (line 513) | fn test_parse_wrapped_response() { function test_parse_bare_array_response (line 526) | fn test_parse_bare_array_response() { function test_parse_skill_detail (line 535) | fn test_parse_skill_detail() { function test_fetch_skill_detail_returns_none_on_error (line 577) | async fn test_fetch_skill_detail_returns_none_on_error() { function test_catalog_entry_serde (line 584) | fn test_catalog_entry_serde() { FILE: src/skills/gating.rs type GatingResult (line 10) | pub struct GatingResult { function check_requirements (line 20) | pub async fn check_requirements(requirements: &GatingRequirements) -> Ga... function check_requirements_sync (line 50) | pub fn check_requirements_sync(requirements: &GatingRequirements) -> Gat... function binary_exists (line 78) | pub(crate) fn binary_exists(name: &str) -> bool { function test_empty_requirements_pass (line 104) | fn test_empty_requirements_pass() { function test_missing_binary_fails (line 112) | fn test_missing_binary_fails() { function test_missing_env_var_fails (line 124) | fn test_missing_env_var_fails() { function test_present_env_var_passes (line 135) | fn test_present_env_var_passes() { function test_missing_config_fails (line 146) | fn test_missing_config_fails() { function test_multiple_mixed_requirements (line 157) | fn test_multiple_mixed_requirements() { FILE: src/skills/mod.rs constant MAX_KEYWORDS_PER_SKILL (line 34) | const MAX_KEYWORDS_PER_SKILL: usize = 20; constant MAX_PATTERNS_PER_SKILL (line 37) | const MAX_PATTERNS_PER_SKILL: usize = 5; constant MAX_TAGS_PER_SKILL (line 40) | const MAX_TAGS_PER_SKILL: usize = 10; constant MIN_KEYWORD_TAG_LENGTH (line 44) | const MIN_KEYWORD_TAG_LENGTH: usize = 3; constant MAX_PROMPT_FILE_SIZE (line 47) | pub const MAX_PROMPT_FILE_SIZE: u64 = 64 * 1024; function validate_skill_name (line 54) | pub fn validate_skill_name(name: &str) -> bool { type SkillTrust (line 66) | pub enum SkillTrust { method fmt (line 74) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type SkillSource (line 85) | pub enum SkillSource { type ActivationCriteria (line 96) | pub struct ActivationCriteria { method enforce_limits (line 122) | pub fn enforce_limits(&mut self) { function default_max_context_tokens (line 134) | fn default_max_context_tokens() -> usize { type SkillManifest (line 140) | pub struct SkillManifest { function default_version (line 157) | fn default_version() -> String { type SkillMetadata (line 163) | pub struct SkillMetadata { type OpenClawMeta (line 171) | pub struct OpenClawMeta { type GatingRequirements (line 179) | pub struct GatingRequirements { type LoadedSkill (line 193) | pub struct LoadedSkill { method name (line 219) | pub fn name(&self) -> &str { method version (line 224) | pub fn version(&self) -> &str { method compile_patterns (line 231) | pub fn compile_patterns(patterns: &[String]) -> Vec { function escape_xml_attr (line 252) | pub fn escape_xml_attr(s: &str) -> String { function escape_skill_content (line 266) | pub fn escape_skill_content(content: &str) -> String { function normalize_line_endings (line 284) | pub fn normalize_line_endings(content: &str) -> String { function test_skill_trust_ordering (line 293) | fn test_skill_trust_ordering() { function test_skill_trust_display (line 298) | fn test_skill_trust_display() { function test_validate_skill_name_valid (line 304) | fn test_validate_skill_name_valid() { function test_validate_skill_name_invalid (line 313) | fn test_validate_skill_name_invalid() { function test_escape_xml_attr (line 327) | fn test_escape_xml_attr() { function test_escape_skill_content_closing_tags (line 338) | fn test_escape_skill_content_closing_tags() { function test_escape_skill_content_opening_tags (line 354) | fn test_escape_skill_content_opening_tags() { function test_normalize_line_endings (line 364) | fn test_normalize_line_endings() { function test_enforce_keyword_limits (line 371) | fn test_enforce_keyword_limits() { function test_enforce_limits_filters_short_keywords (line 385) | fn test_enforce_limits_filters_short_keywords() { function test_activation_criteria_enforce_limits (line 397) | fn test_activation_criteria_enforce_limits() { function test_compile_patterns (line 465) | fn test_compile_patterns() { function test_parse_skill_manifest_yaml (line 476) | fn test_parse_skill_manifest_yaml() { function test_parse_openclaw_metadata (line 492) | fn test_parse_openclaw_metadata() { function test_loaded_skill_name_version (line 511) | fn test_loaded_skill_name_version() { FILE: src/skills/parser.rs type SkillParseError (line 10) | pub enum SkillParseError { type ParsedSkill (line 26) | pub struct ParsedSkill { function parse_skill_md (line 46) | pub fn parse_skill_md(content: &str) -> Result Option { function test_parse_valid_full (line 123) | fn test_parse_valid_full() { function test_parse_minimal (line 152) | fn test_parse_minimal() { function test_missing_frontmatter (line 161) | fn test_missing_frontmatter() { function test_malformed_yaml (line 168) | fn test_malformed_yaml() { function test_empty_body (line 175) | fn test_empty_body() { function test_invalid_name (line 182) | fn test_invalid_name() { function test_activation_with_patterns_and_tags (line 189) | fn test_activation_with_patterns_and_tags() { function test_bom_handling (line 206) | fn test_bom_handling() { FILE: src/skills/registry.rs constant MAX_DISCOVERED_SKILLS (line 25) | const MAX_DISCOVERED_SKILLS: usize = 100; function to_lowercase_vec (line 27) | fn to_lowercase_vec(items: &[String]) -> Vec { type SkillRegistryError (line 33) | pub enum SkillRegistryError { type SkillRegistry (line 72) | pub struct SkillRegistry { method new (line 85) | pub fn new(user_dir: PathBuf) -> Self { method with_installed_dir (line 100) | pub fn with_installed_dir(mut self, dir: PathBuf) -> Self { method with_workspace_dir (line 106) | pub fn with_workspace_dir(mut self, dir: PathBuf) -> Self { method discover_all (line 117) | pub async fn discover_all(&mut self) -> Vec { method discover_from_dir (line 178) | async fn discover_from_dir( method load_skill_md (line 276) | async fn load_skill_md( method skills (line 286) | pub fn skills(&self) -> &[LoadedSkill] { method count (line 291) | pub fn count(&self) -> usize { method retain_only (line 298) | pub fn retain_only(&mut self, names: &[&str]) { method has (line 308) | pub fn has(&self, name: &str) -> bool { method find_by_name (line 313) | pub fn find_by_name(&self, name: &str) -> Option<&LoadedSkill> { method prepare_install_to_disk (line 321) | pub async fn prepare_install_to_disk( method commit_install (line 351) | pub fn commit_install( method install_skill (line 373) | pub async fn install_skill(&mut self, content: &str) -> Result Result Result<(), SkillRegist... method commit_remove (line 444) | pub fn commit_remove(&mut self, name: &str) -> Result<(), SkillRegistr... method remove_skill (line 461) | pub async fn remove_skill(&mut self, name: &str) -> Result<(), SkillRe... method reload (line 468) | pub async fn reload(&mut self) -> Vec { method user_dir (line 474) | pub fn user_dir(&self) -> &Path { method installed_dir (line 479) | pub fn installed_dir(&self) -> Option<&Path> { method install_target_dir (line 488) | pub fn install_target_dir(&self) -> &Path { function load_and_validate_skill (line 498) | async fn load_and_validate_skill( function compute_hash (line 610) | pub fn compute_hash(content: &str) -> String { function check_gating (line 619) | pub async fn check_gating( function test_discover_empty_dir (line 631) | async fn test_discover_empty_dir() { function test_discover_nonexistent_dir (line 639) | async fn test_discover_nonexistent_dir() { function test_load_subdirectory_layout (line 646) | async fn test_load_subdirectory_layout() { function test_workspace_overrides_user (line 668) | async fn test_workspace_overrides_user() { function test_gating_failure_skips_skill (line 700) | async fn test_gating_failure_skips_skill() { function test_symlink_rejected (line 717) | async fn test_symlink_rejected() { function test_file_size_limit (line 737) | async fn test_file_size_limit() { function test_invalid_skill_md_skipped (line 754) | async fn test_invalid_skill_md_skipped() { function test_line_ending_normalization (line 768) | async fn test_line_ending_normalization() { function test_token_budget_rejection (line 788) | async fn test_token_budget_rejection() { function test_has_and_find_by_name (line 806) | async fn test_has_and_find_by_name() { function test_install_skill_from_content (line 826) | async fn test_install_skill_from_content() { function test_install_duplicate_rejected (line 844) | async fn test_install_duplicate_rejected() { function test_remove_user_skill (line 859) | async fn test_remove_user_skill() { function test_remove_workspace_skill_rejected (line 873) | async fn test_remove_workspace_skill_rejected() { function test_remove_nonexistent_fails (line 897) | async fn test_remove_nonexistent_fails() { function test_reload_clears_and_rediscovers (line 906) | async fn test_reload_clears_and_rediscovers() { function test_load_flat_layout (line 926) | async fn test_load_flat_layout() { function test_mixed_flat_and_subdirectory_layout (line 947) | async fn test_mixed_flat_and_subdirectory_layout() { function test_lowercased_fields_populated (line 975) | async fn test_lowercased_fields_populated() { function test_retain_only_empty_is_noop (line 994) | async fn test_retain_only_empty_is_noop() { function test_compute_hash_deterministic (line 1015) | fn test_compute_hash_deterministic() { function test_compute_hash_different_content (line 1023) | fn test_compute_hash_different_content() { function test_installed_dir_uses_installed_trust (line 1033) | async fn test_installed_dir_uses_installed_trust() { function test_install_target_dir_prefers_installed_dir (line 1062) | fn test_install_target_dir_prefers_installed_dir() { function test_user_dir_stays_trusted_with_installed_dir (line 1075) | async fn test_user_dir_stays_trusted_with_installed_dir() { FILE: src/skills/selector.rs constant MAX_SKILL_CONTEXT_TOKENS (line 16) | pub const MAX_SKILL_CONTEXT_TOKENS: usize = 4000; constant MAX_KEYWORD_SCORE (line 20) | const MAX_KEYWORD_SCORE: u32 = 30; constant MAX_TAG_SCORE (line 23) | const MAX_TAG_SCORE: u32 = 15; constant MAX_REGEX_SCORE (line 27) | const MAX_REGEX_SCORE: u32 = 40; type ScoredSkill (line 31) | pub struct ScoredSkill<'a> { function prefilter_skills (line 40) | pub fn prefilter_skills<'a>( function score_skill (line 101) | fn score_skill(skill: &LoadedSkill, message_lower: &str, message_origina... function make_skill (line 156) | fn make_skill(name: &str, keywords: &[&str], tags: &[&str], patterns: &[... function test_empty_message_returns_nothing (line 189) | fn test_empty_message_returns_nothing() { function test_no_matching_skills (line 196) | fn test_no_matching_skills() { function test_keyword_exact_match (line 208) | fn test_keyword_exact_match() { function test_keyword_substring_match (line 221) | fn test_keyword_substring_match() { function test_tag_match (line 233) | fn test_tag_match() { function test_regex_pattern_match (line 245) | fn test_regex_pattern_match() { function test_scoring_priority (line 262) | fn test_scoring_priority() { function test_max_candidates_limit (line 283) | fn test_max_candidates_limit() { function test_context_budget_limit (line 294) | fn test_context_budget_limit() { function test_invalid_regex_handled_gracefully (line 307) | fn test_invalid_regex_handled_gracefully() { function test_keyword_score_capped (line 314) | fn test_keyword_score_capped() { function test_tag_score_capped (line 330) | fn test_tag_score_capped() { function test_regex_score_capped (line 346) | fn test_regex_score_capped() { function test_zero_context_tokens_still_costs_budget (line 370) | fn test_zero_context_tokens_still_costs_budget() { function make_skill_with_excludes (line 383) | fn make_skill_with_excludes( function test_exclude_keyword_vetos_match (line 400) | fn test_exclude_keyword_vetos_match() { function test_exclude_keyword_absent_does_not_block (line 423) | fn test_exclude_keyword_absent_does_not_block() { function test_exclude_keyword_veto_wins_over_positive_match (line 446) | fn test_exclude_keyword_veto_wins_over_positive_match() { function test_exclude_keyword_case_insensitive (line 469) | fn test_exclude_keyword_case_insensitive() { FILE: src/testing/credentials.rs constant TEST_CRYPTO_KEY (line 16) | pub const TEST_CRYPTO_KEY: &str = "0123456789abcdef0123456789abcdef"; constant TEST_GATEWAY_CRYPTO_KEY (line 19) | pub const TEST_GATEWAY_CRYPTO_KEY: &str = "test-key-at-least-32-chars-lo... constant TEST_OPENAI_API_KEY (line 24) | pub const TEST_OPENAI_API_KEY: &str = "sk-test123"; constant TEST_OPENAI_API_KEY_LONG (line 27) | pub const TEST_OPENAI_API_KEY_LONG: &str = "sk-test-key-1234567890"; constant TEST_OPENAI_API_KEY_SHORT (line 30) | pub const TEST_OPENAI_API_KEY_SHORT: &str = "sk-test"; constant TEST_OPENAI_API_KEY_ISSUE_129 (line 33) | pub const TEST_OPENAI_API_KEY_ISSUE_129: &str = "sk-test-key-for-issue-1... constant TEST_ANTHROPIC_OAUTH_TOKEN (line 38) | pub const TEST_ANTHROPIC_OAUTH_TOKEN: &str = "sk-ant-oat01-test-token"; constant TEST_ANTHROPIC_API_KEY (line 41) | pub const TEST_ANTHROPIC_API_KEY: &str = "sk-ant-priority-key"; constant TEST_ANTHROPIC_OAUTH_BASIC (line 44) | pub const TEST_ANTHROPIC_OAUTH_BASIC: &str = "sk-ant-oat01-basic"; constant TEST_ANTHROPIC_OAUTH_NESTED (line 47) | pub const TEST_ANTHROPIC_OAUTH_NESTED: &str = "sk-ant-oat01-primary-token"; constant TEST_GOOGLE_OAUTH_TOKEN (line 52) | pub const TEST_GOOGLE_OAUTH_TOKEN: &str = "ya29.test-token"; constant TEST_GOOGLE_OAUTH_FRESH (line 55) | pub const TEST_GOOGLE_OAUTH_FRESH: &str = "ya29.fresh-token"; constant TEST_GOOGLE_OAUTH_LEGACY (line 58) | pub const TEST_GOOGLE_OAUTH_LEGACY: &str = "ya29.legacy-token"; constant TEST_GITHUB_TOKEN (line 63) | pub const TEST_GITHUB_TOKEN: &str = "ghp_test123"; constant TEST_TELEGRAM_BOT_TOKEN (line 68) | pub const TEST_TELEGRAM_BOT_TOKEN: &str = "telegram-test-bot-token-not-a... constant TEST_OAUTH_CLIENT_ID (line 73) | pub const TEST_OAUTH_CLIENT_ID: &str = "test-client-id"; constant TEST_OAUTH_CLIENT_SECRET (line 76) | pub const TEST_OAUTH_CLIENT_SECRET: &str = "test-client-secret"; constant TEST_BEARER_TOKEN (line 81) | pub const TEST_BEARER_TOKEN: &str = "test-token"; constant TEST_BEARER_TOKEN_123 (line 84) | pub const TEST_BEARER_TOKEN_123: &str = "test-token-123"; constant TEST_AUTH_SECRET_TOKEN (line 87) | pub const TEST_AUTH_SECRET_TOKEN: &str = "secret-token"; constant TEST_STRIPE_KEY (line 92) | pub const TEST_STRIPE_KEY: &str = "sk_test_fake123"; constant TEST_REDACT_SECRET (line 97) | pub const TEST_REDACT_SECRET: &str = "sk-secret"; constant TEST_REDACT_SECRET_123 (line 100) | pub const TEST_REDACT_SECRET_123: &str = "sk-secret-123"; constant TEST_SESSION_TOKEN (line 105) | pub const TEST_SESSION_TOKEN: &str = "test_token_123"; constant TEST_SESSION_NEARAI_ABC (line 108) | pub const TEST_SESSION_NEARAI_ABC: &str = "sess_abc123"; constant TEST_SESSION_NEARAI_XYZ (line 111) | pub const TEST_SESSION_NEARAI_XYZ: &str = "sess_xyz789"; constant TEST_API_KEY (line 116) | pub const TEST_API_KEY: &str = "test-key"; constant TEST_SECRET_VALUE (line 119) | pub const TEST_SECRET_VALUE: &str = "sk-test-12345"; constant TEST_HTTP_SECRET (line 122) | pub const TEST_HTTP_SECRET: &str = "test-secret-123"; function test_secrets_store (line 130) | pub fn test_secrets_store() -> InMemorySecretsStore { FILE: src/testing/fault_injection.rs type FaultType (line 27) | pub enum FaultType { method to_llm_error (line 46) | pub fn to_llm_error(&self, provider: &str) -> LlmError { type FaultAction (line 80) | pub enum FaultAction { type FaultMode (line 91) | pub enum FaultMode { type FaultInjector (line 110) | pub struct FaultInjector { method fmt (line 119) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method sequence (line 129) | pub fn sequence(actions: impl IntoIterator) -> Self { method sequence_loop (line 139) | pub fn sequence_loop(actions: impl IntoIterator) -... method random (line 155) | pub fn random(error_rate: f64, fault: FaultType, seed: u64) -> Self { method next_action (line 174) | pub fn next_action(&self) -> FaultAction { method call_count (line 213) | pub fn call_count(&self) -> u32 { method reset (line 222) | pub fn reset(&self) { function sequence_once_plays_then_succeeds (line 236) | fn sequence_once_plays_then_succeeds() { function sequence_loop_repeats (line 261) | fn sequence_loop_repeats() { function random_mode_is_deterministic_with_seed (line 274) | fn random_mode_is_deterministic_with_seed() { function fault_type_produces_correct_llm_errors (line 289) | fn fault_type_produces_correct_llm_errors() { function delay_action_exists (line 326) | fn delay_action_exists() { function random_seed_zero_does_not_always_fail (line 332) | fn random_seed_zero_does_not_always_fail() { function empty_sequence_always_succeeds (line 342) | fn empty_sequence_always_succeeds() { function reset_restores_random_rng_from_stored_seed (line 350) | fn reset_restores_random_rng_from_stored_seed() { function random_rejects_error_rate_above_one (line 368) | fn random_rejects_error_rate_above_one() { function random_rejects_negative_error_rate (line 374) | fn random_rejects_negative_error_rate() { function random_rejects_nan_error_rate (line 380) | fn random_rejects_nan_error_rate() { function error_rate_one_always_fails (line 385) | fn error_rate_one_always_fails() { function error_rate_zero_never_fails (line 396) | fn error_rate_zero_never_fails() { function delay_action_pauses_execution (line 407) | async fn delay_action_pauses_execution() { FILE: src/testing/mod.rs function test_db (line 50) | pub async fn test_db() -> (Arc, tempfile::TempDir) { type StubErrorKind (line 67) | pub enum StubErrorKind { type StubLlm (line 83) | pub struct StubLlm { method new (line 96) | pub fn new(response: impl Into) -> Self { method failing (line 108) | pub fn failing(name: impl Into) -> Self { method failing_non_transient (line 120) | pub fn failing_non_transient(name: impl Into) -> Self { method with_model_name (line 132) | pub fn with_model_name(mut self, name: impl Into) -> Self { method calls (line 138) | pub fn calls(&self) -> u32 { method with_fault_injector (line 146) | pub fn with_fault_injector(mut self, injector: Arc Option { method make_error (line 175) | fn make_error(&self) -> LlmError { method default (line 190) | fn default() -> Self { method model_name (line 197) | fn model_name(&self) -> &str { method cost_per_token (line 201) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 205) | async fn complete(&self, _request: CompletionRequest) -> Result) -> (Self, mpsc::Sender Vec<(IncomingMessage, OutgoingResp... method captured_responses_handle (line 290) | pub fn captured_responses_handle( method captured_statuses (line 297) | pub fn captured_statuses(&self) -> Vec { method captured_statuses_handle (line 302) | pub fn captured_statuses_handle(&self) -> Arc>> { method set_healthy (line 307) | pub fn set_healthy(&self, healthy: bool) { method name (line 314) | fn name(&self) -> &str { method start (line 318) | async fn start(&self) -> Result { method respond (line 332) | async fn respond( method send_status (line 344) | async fn send_status( method health_check (line 353) | async fn health_check(&self) -> Result<(), ChannelError> { type TestHarness (line 365) | pub struct TestHarness { type TestHarnessBuilder (line 387) | pub struct TestHarnessBuilder { method new (line 396) | pub fn new() -> Self { method with_db (line 406) | pub fn with_db(mut self, db: Arc) -> Self { method with_llm (line 412) | pub fn with_llm(mut self, llm: Arc) -> Self { method with_tools (line 418) | pub fn with_tools(mut self, tools: Arc) -> Self { method with_stub_channel (line 427) | pub fn with_stub_channel(mut self) -> Self { method build (line 434) | pub async fn build(self) -> TestHarness { method default (line 509) | fn default() -> Self { function test_harness_builds_with_defaults (line 520) | async fn test_harness_builds_with_defaults() { function test_harness_custom_llm (line 528) | async fn test_harness_custom_llm() { function test_harness_db_works (line 536) | async fn test_harness_db_works() { function test_conversation_message_round_trip (line 551) | async fn test_conversation_message_round_trip() { function test_conversation_metadata_persistence (line 598) | async fn test_conversation_metadata_persistence() { function test_conversation_belongs_to_user (line 650) | async fn test_conversation_belongs_to_user() { function test_ensure_conversation_idempotent (line 676) | async fn test_ensure_conversation_idempotent() { function test_ensure_conversation_foreign_conflict_does_not_touch_last_activity (line 716) | async fn test_ensure_conversation_foreign_conflict_does_not_touch_last_a... function test_paginated_messages (line 760) | async fn test_paginated_messages() { function test_conversations_with_preview (line 802) | async fn test_conversations_with_preview() { function test_job_action_persistence (line 838) | async fn test_job_action_persistence() { function test_stub_llm_complete (line 896) | async fn test_stub_llm_complete() { function test_stub_channel_inject_and_capture (line 907) | async fn test_stub_channel_inject_and_capture() { function test_stub_channel_health_check (line 940) | async fn test_stub_channel_health_check() { function test_settings_crud (line 952) | async fn test_settings_crud() { function test_harness_with_channel (line 1001) | async fn test_harness_with_channel() { function test_settings_bulk_operations (line 1020) | async fn test_settings_bulk_operations() { function test_tool_failure_tracking (line 1057) | async fn test_tool_failure_tracking() { function test_routine_crud (line 1086) | async fn test_routine_crud() { function test_routine_runtime_update (line 1222) | async fn test_routine_runtime_update() { function test_llm_call_recording (line 1295) | async fn test_llm_call_recording() { function test_sandbox_job_lifecycle (line 1318) | async fn test_sandbox_job_lifecycle() { function test_sandbox_job_mode (line 1413) | async fn test_sandbox_job_mode() { function test_job_events (line 1454) | async fn test_job_events() { function test_estimation_snapshot_round_trip (line 1516) | async fn test_estimation_snapshot_round_trip() { function stub_llm_fault_injector_sequence (line 1551) | async fn stub_llm_fault_injector_sequence() { FILE: src/timezone.rs function resolve_timezone (line 9) | pub fn resolve_timezone( function parse_timezone (line 24) | pub fn parse_timezone(s: &str) -> Option { function today_in_tz (line 29) | pub fn today_in_tz(tz: Tz) -> NaiveDate { function now_in_tz (line 34) | pub fn now_in_tz(tz: Tz) -> DateTime { function detect_system_timezone (line 39) | pub fn detect_system_timezone() -> Tz { function test_resolve_client_wins (line 53) | fn test_resolve_client_wins() { function test_resolve_user_setting_fallback (line 59) | fn test_resolve_user_setting_fallback() { function test_resolve_config_fallback (line 65) | fn test_resolve_config_fallback() { function test_resolve_all_none_utc (line 71) | fn test_resolve_all_none_utc() { function test_resolve_invalid_client_skipped (line 77) | fn test_resolve_invalid_client_skipped() { function test_parse_valid (line 83) | fn test_parse_valid() { function test_parse_invalid (line 91) | fn test_parse_invalid() { function test_detect_system_tz (line 96) | fn test_detect_system_tz() { function test_today_in_tz_returns_valid_date (line 103) | fn test_today_in_tz_returns_valid_date() { FILE: src/tools/autonomy.rs constant AUTONOMOUS_TOOL_DENYLIST (line 8) | pub const AUTONOMOUS_TOOL_DENYLIST: &[&str] = &[ function is_autonomous_tool_denylisted (line 28) | pub fn is_autonomous_tool_denylisted(tool_name: &str) -> bool { function autonomous_unavailable_message (line 32) | pub fn autonomous_unavailable_message(tool_name: &str, owner_id: &str) -... function autonomous_unavailable_error (line 40) | pub fn autonomous_unavailable_error(tool_name: &str, owner_id: &str) -> ... function autonomous_allowed_tool_names (line 47) | pub async fn autonomous_allowed_tool_names( type FakeTool (line 86) | struct FakeTool { method name (line 92) | fn name(&self) -> &str { method description (line 96) | fn description(&self) -> &str { method parameters_schema (line 100) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 107) | async fn execute( function write_test_extension_wasm (line 116) | async fn write_test_extension_wasm(tools_dir: &Path, name: &str) { function make_extension_manager (line 125) | fn make_extension_manager( function autonomous_scope_keeps_allowed_builtins_and_blocks_denylisted_builtins (line 156) | async fn autonomous_scope_keeps_allowed_builtins_and_blocks_denylisted_b... function autonomous_scope_includes_active_extension_tools_for_matching_owner (line 168) | async fn autonomous_scope_includes_active_extension_tools_for_matching_o... function autonomous_scope_excludes_inactive_extension_tools (line 184) | async fn autonomous_scope_excludes_inactive_extension_tools() { function autonomous_scope_excludes_active_extension_tools_for_other_owner (line 196) | async fn autonomous_scope_excludes_active_extension_tools_for_other_owne... FILE: src/tools/builder/core.rs type BuildRequirement (line 51) | pub struct BuildRequirement { type SoftwareType (line 73) | pub enum SoftwareType { type Language (line 89) | pub enum Language { method extension (line 100) | pub fn extension(&self) -> &'static str { method build_command (line 112) | pub fn build_command(&self, project_dir: &str) -> Option { method test_command (line 122) | pub fn test_command(&self, project_dir: &str) -> String { type BuildResult (line 137) | pub struct BuildResult { type BuildLog (line 172) | pub struct BuildLog { type BuildPhase (line 182) | pub enum BuildPhase { type BuilderConfig (line 198) | pub struct BuilderConfig { method default (line 218) | fn default() -> Self { type SoftwareBuilder (line 234) | pub trait SoftwareBuilder: Send + Sync { method analyze (line 236) | async fn analyze(&self, description: &str) -> Result Result Result Result, tools: Ar... method get_build_tools (line 268) | async fn get_build_tools(&self) -> Vec { method build_system_prompt (line 283) | fn build_system_prompt(&self, requirement: &BuildRequirement) -> String { method wasm_tool_context (line 329) | fn wasm_tool_context(&self) -> String { method execute_build_loop (line 501) | async fn execute_build_loop( method execute_build_tool (line 769) | async fn execute_build_tool( method find_artifact (line 787) | async fn find_artifact(&self, requirement: &BuildRequirement, project_... type BuildSoftwareTool (line 907) | pub struct BuildSoftwareTool { method new (line 912) | pub fn new(builder: Arc) -> Self { method name (line 919) | fn name(&self) -> &str { method description (line 923) | fn description(&self) -> &str { method parameters_schema (line 930) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 953) | async fn execute( method requires_approval (line 1013) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... function test_language_extension_all_variants (line 1023) | fn test_language_extension_all_variants() { function test_language_build_command_compiled_returns_some (line 1033) | fn test_language_build_command_compiled_returns_some() { function test_language_build_command_interpreted_returns_none (line 1049) | fn test_language_build_command_interpreted_returns_none() { function test_language_build_command_includes_project_dir (line 1057) | fn test_language_build_command_includes_project_dir() { function test_language_test_command_all_variants_non_empty (line 1070) | fn test_language_test_command_all_variants_non_empty() { function test_language_test_command_specific_tools (line 1096) | fn test_language_test_command_specific_tools() { function test_software_type_serde_roundtrip (line 1107) | fn test_software_type_serde_roundtrip() { function test_language_serde_roundtrip (line 1135) | fn test_language_serde_roundtrip() { function test_build_requirement_serde_roundtrip (line 1165) | fn test_build_requirement_serde_roundtrip() { function test_build_requirement_serde_optional_fields_none (line 1189) | fn test_build_requirement_serde_optional_fields_none() { function test_builder_config_default_sensible_values (line 1209) | fn test_builder_config_default_sensible_values() { function test_build_phase_serde_roundtrip (line 1238) | fn test_build_phase_serde_roundtrip() { function test_build_result_serde_success (line 1264) | fn test_build_result_serde_success() { function test_build_result_serde_failure (line 1300) | fn test_build_result_serde_failure() { function test_build_result_default_fields_from_json (line 1340) | fn test_build_result_default_fields_from_json() { function test_build_log_serde_roundtrip (line 1370) | fn test_build_log_serde_roundtrip() { function test_build_log_serde_details_none (line 1388) | fn test_build_log_serde_details_none() { FILE: src/tools/builder/templates.rs type TemplateType (line 13) | pub enum TemplateType { type Template (line 30) | pub struct Template { method get (line 84) | pub fn get(template_type: TemplateType) -> Self { method wasm_http_tool (line 95) | fn wasm_http_tool() -> Self { method wasm_transform_tool (line 115) | fn wasm_transform_tool() -> Self { method wasm_compute_tool (line 135) | fn wasm_compute_tool() -> Self { method cli_binary (line 155) | fn cli_binary() -> Self { method python_script (line 175) | fn python_script() -> Self { method bash_script (line 188) | fn bash_script() -> Self { type TemplateFile (line 39) | pub struct TemplateFile { type TemplateEngine (line 47) | pub struct TemplateEngine { method new (line 52) | pub fn new() -> Self { method set (line 57) | pub fn set(&mut self, key: impl Into, value: impl Into... method render (line 63) | pub fn render(&self, template: &str) -> String { method render_template (line 73) | pub fn render_template(&self, template: &Template) -> Vec<(String, Str... constant WASM_CARGO_TOML (line 206) | const WASM_CARGO_TOML: &str = r##"[package] constant WASM_HTTP_LIB_RS (line 223) | const WASM_HTTP_LIB_RS: &str = r##"//! {{description}} constant WASM_TRANSFORM_LIB_RS (line 304) | const WASM_TRANSFORM_LIB_RS: &str = r##"//! {{description}} constant WASM_COMPUTE_LIB_RS (line 360) | const WASM_COMPUTE_LIB_RS: &str = r##"//! {{description}} constant CLI_CARGO_TOML (line 409) | const CLI_CARGO_TOML: &str = r##"[package] constant CLI_MAIN_RS (line 421) | const CLI_MAIN_RS: &str = r##"//! {{description}} constant PYTHON_SCRIPT (line 446) | const PYTHON_SCRIPT: &str = r##"#!/usr/bin/env python3 constant BASH_SCRIPT (line 466) | const BASH_SCRIPT: &str = r##"#!/bin/bash function test_template_engine (line 486) | fn test_template_engine() { function test_get_template (line 496) | fn test_get_template() { function test_render_no_variables (line 503) | fn test_render_no_variables() { function test_render_variable_not_found (line 510) | fn test_render_variable_not_found() { function test_render_multiple_replacements_of_same_variable (line 518) | fn test_render_multiple_replacements_of_same_variable() { function test_set_overwrites_existing_variable (line 525) | fn test_set_overwrites_existing_variable() { function test_render_template_all_files (line 534) | fn test_render_template_all_files() { function test_all_template_types_return_non_empty (line 555) | fn test_all_template_types_return_non_empty() { function test_template_type_serde_roundtrip (line 581) | fn test_template_type_serde_roundtrip() { function test_each_template_has_at_least_one_required_file (line 598) | fn test_each_template_has_at_least_one_required_file() { function test_template_file_extensions (line 615) | fn test_template_file_extensions() { function test_python_and_bash_templates_have_name_in_path (line 647) | fn test_python_and_bash_templates_have_name_in_path() { FILE: src/tools/builder/testing.rs type TestError (line 19) | pub enum TestError { type TestCase (line 41) | pub struct TestCase { type ExpectedField (line 62) | pub struct ExpectedField { type TestResult (line 73) | pub struct TestResult { type TestSuite (line 88) | pub struct TestSuite { method new (line 111) | pub fn new(name: impl Into) -> Self { method add_test (line 119) | pub fn add_test(&mut self, test: TestCase) -> &mut Self { method add_io_test (line 125) | pub fn add_io_test( method add_error_test (line 145) | pub fn add_error_test( method default (line 100) | fn default() -> Self { type TestHarness (line 166) | pub struct TestHarness { method new (line 173) | pub fn new(runtime: Arc) -> Self { method with_capabilities (line 182) | pub fn with_capabilities(mut self, caps: Capabilities) -> Self { method with_timeout (line 188) | pub fn with_timeout(mut self, timeout: Duration) -> Self { method run_suite_file (line 194) | pub async fn run_suite_file( method run_suite_bytes (line 204) | pub async fn run_suite_bytes( method run_test (line 230) | async fn run_test( function get_json_path (line 390) | fn get_json_path<'a>(value: &'a serde_json::Value, path: &str) -> Option... function generate_basic_tests (line 415) | pub fn generate_basic_tests(name: &str, input_schema: &serde_json::Value... function test_get_json_path (line 475) | fn test_get_json_path() { function test_test_suite_builder (line 499) | fn test_test_suite_builder() { function test_generate_basic_tests (line 515) | fn test_generate_basic_tests() { FILE: src/tools/builder/validation.rs type ValidationError (line 12) | pub enum ValidationError { type ValidationResult (line 41) | pub struct ValidationResult { type ExportInfo (line 58) | pub struct ExportInfo { type ExportKind (line 65) | pub enum ExportKind { type ImportInfo (line 74) | pub struct ImportInfo { type ImportKind (line 82) | pub enum ImportKind { type WasmValidator (line 90) | pub struct WasmValidator { method new (line 114) | pub fn new() -> Self { method with_max_size (line 119) | pub fn with_max_size(mut self, max_bytes: u64) -> Self { method with_required_export (line 125) | pub fn with_required_export(mut self, name: impl Into) -> Self { method with_allowed_import (line 131) | pub fn with_allowed_import(mut self, module: impl Into) -> Self { method validate_file (line 137) | pub async fn validate_file(&self, path: &Path) -> Result Result Self { function test_validator_default (line 292) | fn test_validator_default() { function test_validator_builder (line 299) | fn test_validator_builder() { function test_validate_bytes_invalid_bytes (line 319) | fn test_validate_bytes_invalid_bytes() { function test_validate_bytes_empty (line 333) | fn test_validate_bytes_empty() { function test_validate_bytes_minimal_wasm_missing_run_export (line 346) | fn test_validate_bytes_minimal_wasm_missing_run_export() { function test_validation_result_is_valid_when_no_errors (line 362) | fn test_validation_result_is_valid_when_no_errors() { function test_validation_result_is_invalid_when_errors_present (line 376) | fn test_validation_result_is_invalid_when_errors_present() { function test_validation_error_display (line 390) | fn test_validation_error_display() { function test_export_kind_equality (line 430) | fn test_export_kind_equality() { function test_import_kind_equality (line 440) | fn test_import_kind_equality() { function test_validate_bytes_exceeds_max_size (line 450) | fn test_validate_bytes_exceeds_max_size() { function test_with_max_size_then_validate_over_limit (line 465) | fn test_with_max_size_then_validate_over_limit() { FILE: src/tools/builtin/echo.rs type EchoTool (line 9) | pub struct EchoTool; method name (line 13) | fn name(&self) -> &str { method description (line 17) | fn description(&self) -> &str { method parameters_schema (line 21) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 34) | async fn execute( method requires_sanitization (line 46) | fn requires_sanitization(&self) -> bool { FILE: src/tools/builtin/extension_tools.rs type ToolSearchTool (line 16) | pub struct ToolSearchTool { method new (line 21) | pub fn new(manager: Arc) -> Self { method name (line 28) | fn name(&self) -> &str { method description (line 32) | fn description(&self) -> &str { method parameters_schema (line 38) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 56) | async fn execute( type ToolInstallTool (line 87) | pub struct ToolInstallTool { method new (line 92) | pub fn new(manager: Arc) -> Self { method name (line 99) | fn name(&self) -> &str { method description (line 103) | fn description(&self) -> &str { method parameters_schema (line 108) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 130) | async fn execute( method requires_approval (line 163) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... type ToolAuthTool (line 170) | pub struct ToolAuthTool { method new (line 175) | pub fn new(manager: Arc) -> Self { method name (line 182) | fn name(&self) -> &str { method description (line 186) | fn description(&self) -> &str { method parameters_schema (line 192) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 205) | async fn execute( method requires_approval (line 258) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... type ToolActivateTool (line 271) | pub struct ToolActivateTool { method new (line 276) | pub fn new(manager: Arc) -> Self { method name (line 283) | fn name(&self) -> &str { method description (line 287) | fn description(&self) -> &str { method parameters_schema (line 291) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 304) | async fn execute( type ToolListTool (line 365) | pub struct ToolListTool { method new (line 370) | pub fn new(manager: Arc) -> Self { method name (line 377) | fn name(&self) -> &str { method description (line 381) | fn description(&self) -> &str { method parameters_schema (line 386) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 404) | async fn execute( type ToolRemoveTool (line 443) | pub struct ToolRemoveTool { method new (line 448) | pub fn new(manager: Arc) -> Self { method name (line 455) | fn name(&self) -> &str { method description (line 459) | fn description(&self) -> &str { method parameters_schema (line 464) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 477) | async fn execute( method requires_approval (line 500) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... type ToolUpgradeTool (line 507) | pub struct ToolUpgradeTool { method new (line 512) | pub fn new(manager: Arc) -> Self { method name (line 519) | fn name(&self) -> &str { method description (line 523) | fn description(&self) -> &str { method parameters_schema (line 529) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 541) | async fn execute( method requires_approval (line 562) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... type ExtensionInfoTool (line 569) | pub struct ExtensionInfoTool { method new (line 574) | pub fn new(manager: Arc) -> Self { method name (line 581) | fn name(&self) -> &str { method description (line 585) | fn description(&self) -> &str { method parameters_schema (line 590) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 603) | async fn execute( function test_tool_search_schema (line 627) | fn test_tool_search_schema() { function test_tool_install_schema (line 638) | fn test_tool_install_schema() { function test_tool_auth_schema (line 654) | fn test_tool_auth_schema() { function test_tool_activate_schema (line 674) | fn test_tool_activate_schema() { function test_tool_list_schema (line 687) | fn test_tool_list_schema() { function test_tool_remove_schema (line 702) | fn test_tool_remove_schema() { function tool_remove_always_requires_approval_regardless_of_params (line 715) | fn tool_remove_always_requires_approval_regardless_of_params() { function tool_auth_no_approval_in_gateway_mode (line 743) | async fn tool_auth_no_approval_in_gateway_mode() { function test_tool_upgrade_schema (line 759) | fn test_tool_upgrade_schema() { function test_extension_info_schema (line 779) | fn test_extension_info_schema() { function test_manager_stub (line 791) | fn test_manager_stub() -> Arc { FILE: src/tools/builtin/file.rs constant WORKSPACE_FILES (line 24) | const WORKSPACE_FILES: &[&str] = &[ function is_workspace_path (line 36) | fn is_workspace_path(path: &str) -> bool { constant MAX_READ_SIZE (line 48) | const MAX_READ_SIZE: u64 = 1024 * 1024; constant MAX_WRITE_SIZE (line 51) | const MAX_WRITE_SIZE: usize = 5 * 1024 * 1024; constant MAX_DIR_ENTRIES (line 54) | const MAX_DIR_ENTRIES: usize = 500; type ReadFileTool (line 58) | pub struct ReadFileTool { method new (line 63) | pub fn new() -> Self { method with_base_dir (line 67) | pub fn with_base_dir(mut self, dir: PathBuf) -> Self { method name (line 75) | fn name(&self) -> &str { method description (line 79) | fn description(&self) -> &str { method parameters_schema (line 85) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 106) | async fn execute( method requires_sanitization (line 169) | fn requires_sanitization(&self) -> bool { method requires_approval (line 173) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method domain (line 177) | fn domain(&self) -> ToolDomain { type WriteFileTool (line 184) | pub struct WriteFileTool { method new (line 189) | pub fn new() -> Self { method with_base_dir (line 193) | pub fn with_base_dir(mut self, dir: PathBuf) -> Self { method name (line 201) | fn name(&self) -> &str { method description (line 205) | fn description(&self) -> &str { method parameters_schema (line 211) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 228) | async fn execute( method requires_approval (line 280) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 284) | fn requires_sanitization(&self) -> bool { method domain (line 288) | fn domain(&self) -> ToolDomain { method rate_limit_config (line 292) | fn rate_limit_config(&self) -> Option Self { method with_base_dir (line 308) | pub fn with_base_dir(mut self, dir: PathBuf) -> Self { method name (line 316) | fn name(&self) -> &str { method description (line 320) | fn description(&self) -> &str { method parameters_schema (line 325) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 346) | async fn execute( method requires_sanitization (line 396) | fn requires_sanitization(&self) -> bool { method domain (line 400) | fn domain(&self) -> ToolDomain { function list_dir_inner (line 406) | async fn list_dir_inner( function format_size (line 474) | fn format_size(bytes: u64) -> String { type ApplyPatchTool (line 492) | pub struct ApplyPatchTool { method new (line 497) | pub fn new() -> Self { method with_base_dir (line 501) | pub fn with_base_dir(mut self, dir: PathBuf) -> Self { method name (line 509) | fn name(&self) -> &str { method description (line 513) | fn description(&self) -> &str { method parameters_schema (line 519) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 544) | async fn execute( method requires_approval (line 605) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 609) | fn requires_sanitization(&self) -> bool { method domain (line 613) | fn domain(&self) -> ToolDomain { method rate_limit_config (line 617) | fn rate_limit_config(&self) -> Option Result Result Self { method with_credentials (line 72) | pub fn with_credentials( function validate_save_to_path (line 88) | fn validate_save_to_path(save_to: &str) -> Result Result { function validate_and_resolve_url (line 153) | pub(crate) async fn validate_and_resolve_url( function build_pinned_client (line 191) | pub(crate) fn build_pinned_client( function is_disallowed_ipv4 (line 210) | fn is_disallowed_ipv4(v4: &Ipv4Addr) -> bool { function is_disallowed_ip (line 220) | fn is_disallowed_ip(ip: &IpAddr) -> bool { function is_html_response (line 243) | fn is_html_response(headers: &HashMap) -> bool { function parse_headers_param (line 251) | fn parse_headers_param( function parse_timeout_secs_param (line 316) | fn parse_timeout_secs_param(timeout: Option<&serde_json::Value>) -> Resu... function parse_save_to_param (line 351) | fn parse_save_to_param(save_to: Option<&serde_json::Value>) -> Result Option { method default (line 378) | fn default() -> Self { method name (line 385) | fn name(&self) -> &str { method description (line 389) | fn description(&self) -> &str { method parameters_schema (line 395) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 437) | async fn execute( method estimated_duration (line 824) | fn estimated_duration(&self, _params: &serde_json::Value) -> Option bool { method requires_approval (line 832) | fn requires_approval(&self, params: &serde_json::Value) -> ApprovalRequi... method rate_limit_config (line 852) | fn rate_limit_config(&self) -> Option Result, ... method name (line 63) | fn name(&self) -> &str { method description (line 67) | fn description(&self) -> &str { method parameters_schema (line 71) | fn parameters_schema(&self) -> serde_json::Value { method requires_sanitization (line 89) | fn requires_sanitization(&self) -> bool { method execute (line 93) | async fn execute( function test_media_type_detection (line 188) | fn test_media_type_detection() { function test_requires_approval_returns_never (line 199) | fn test_requires_approval_returns_never() { function test_read_image_bytes_rejects_path_traversal (line 213) | async fn test_read_image_bytes_rejects_path_traversal() { function test_read_image_bytes_rejects_absolute_path_outside_sandbox (line 231) | async fn test_read_image_bytes_rejects_absolute_path_outside_sandbox() { FILE: src/tools/builtin/image_edit.rs type ImageEditTool (line 13) | pub struct ImageEditTool { method new (line 28) | pub fn new( method read_image_bytes (line 51) | async fn read_image_bytes(&self, image_path: &str) -> Result, ... method fallback_generate (line 202) | async fn fallback_generate( method name (line 62) | fn name(&self) -> &str { method description (line 66) | fn description(&self) -> &str { method parameters_schema (line 70) | fn parameters_schema(&self) -> serde_json::Value { method requires_sanitization (line 88) | fn requires_sanitization(&self) -> bool { method execute (line 92) | async fn execute( function test_tool_metadata (line 269) | fn test_tool_metadata() { function test_read_image_bytes_rejects_path_traversal (line 285) | async fn test_read_image_bytes_rejects_path_traversal() { function test_read_image_bytes_rejects_absolute_path_outside_sandbox (line 303) | async fn test_read_image_bytes_rejects_absolute_path_outside_sandbox() { FILE: src/tools/builtin/image_gen.rs type ImageGenerateTool (line 11) | pub struct ImageGenerateTool { method new (line 45) | pub fn new(api_base_url: String, api_key: String, model: String) -> Se... type ImageGenRequest (line 23) | struct ImageGenRequest { type ImageGenResponse (line 32) | struct ImageGenResponse { type ImageGenData (line 38) | struct ImageGenData { method name (line 61) | fn name(&self) -> &str { method description (line 65) | fn description(&self) -> &str { method parameters_schema (line 69) | fn parameters_schema(&self) -> serde_json::Value { method requires_sanitization (line 89) | fn requires_sanitization(&self) -> bool { method execute (line 93) | async fn execute( function test_tool_metadata (line 187) | fn test_tool_metadata() { function test_missing_prompt (line 205) | async fn test_missing_prompt() { function test_invalid_size (line 217) | async fn test_invalid_size() { function test_prompt_too_long (line 234) | async fn test_prompt_too_long() { FILE: src/tools/builtin/job.rs type SchedulerSlot (line 33) | pub type SchedulerSlot = Arc>>>; function resolve_job_id (line 39) | async fn resolve_job_id(input: &str, context_manager: &ContextManager) -... type CreateJobTool (line 81) | pub struct CreateJobTool { method new (line 96) | pub fn new(context_manager: Arc) -> Self { method with_sandbox (line 109) | pub fn with_sandbox( method with_monitor_deps (line 121) | pub fn with_monitor_deps( method with_scheduler_slot (line 132) | pub fn with_scheduler_slot(mut self, slot: SchedulerSlot) -> Self { method with_secrets (line 138) | pub fn with_secrets(mut self, secrets: Arc bool { method parse_credentials (line 152) | async fn parse_credentials( method persist_job (line 218) | fn persist_job(&self, record: SandboxJobRecord) { method update_context_state_async (line 231) | async fn update_context_state_async( method update_context_state (line 249) | fn update_context_state(&self, job_id: Uuid, state: JobState, reason: ... method update_status (line 264) | fn update_status( method execute_local (line 295) | async fn execute_local( method execute_sandbox (line 358) | async fn execute_sandbox( constant DANGEROUS_ENV_VARS (line 635) | const DANGEROUS_ENV_VARS: &[&str] = &[ function validate_env_var_name (line 664) | fn validate_env_var_name(name: &str) -> Result<(), ToolError> { function projects_base (line 694) | fn projects_base() -> PathBuf { function resolve_project_dir (line 705) | fn resolve_project_dir( function monitor_route_from_ctx (line 767) | fn monitor_route_from_ctx(ctx: &JobContext) -> Option &str { method description (line 803) | fn description(&self) -> &str { method parameters_schema (line 817) | fn parameters_schema(&self) -> serde_json::Value { method execution_timeout (line 874) | fn execution_timeout(&self) -> Duration { method rate_limit_config (line 883) | fn rate_limit_config(&self) -> Option bool { type ListJobsTool (line 927) | pub struct ListJobsTool { method new (line 932) | pub fn new(context_manager: Arc) -> Self { method name (line 939) | fn name(&self) -> &str { method description (line 943) | fn description(&self) -> &str { method parameters_schema (line 947) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 960) | async fn execute( method requires_sanitization (line 1014) | fn requires_sanitization(&self) -> bool { type JobStatusTool (line 1020) | pub struct JobStatusTool { method new (line 1025) | pub fn new(context_manager: Arc) -> Self { method name (line 1032) | fn name(&self) -> &str { method description (line 1036) | fn description(&self) -> &str { method parameters_schema (line 1040) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1053) | async fn execute( method requires_sanitization (line 1094) | fn requires_sanitization(&self) -> bool { type CancelJobTool (line 1104) | pub struct CancelJobTool { method new (line 1111) | pub fn new(context_manager: Arc) -> Self { method with_sandbox (line 1120) | pub fn with_sandbox( method name (line 1133) | fn name(&self) -> &str { method description (line 1137) | fn description(&self) -> &str { method parameters_schema (line 1141) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1154) | async fn execute( method requires_approval (line 1234) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 1238) | fn requires_sanitization(&self) -> bool { type JobEventsTool (line 1252) | pub struct JobEventsTool { method new (line 1258) | pub fn new(store: Arc, context_manager: Arc &str { method description (line 1272) | fn description(&self) -> &str { method parameters_schema (line 1278) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1295) | async fn execute( method requires_sanitization (line 1363) | fn requires_sanitization(&self) -> bool { type JobPromptTool (line 1375) | pub struct JobPromptTool { method new (line 1391) | pub fn new(prompt_queue: PromptQueue, context_manager: Arc &str { method description (line 1405) | fn description(&self) -> &str { method parameters_schema (line 1411) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1433) | async fn execute( method requires_approval (line 1497) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 1501) | fn requires_sanitization(&self) -> bool { function test_create_job_tool_local (line 1511) | async fn test_create_job_tool_local() { function test_schema_changes_with_sandbox (line 1536) | fn test_schema_changes_with_sandbox() { function test_execution_timeout_sandbox (line 1550) | fn test_execution_timeout_sandbox() { function test_sandbox_without_job_manager_returns_error (line 1559) | async fn test_sandbox_without_job_manager_returns_error() { function test_list_jobs_tool (line 1584) | async fn test_list_jobs_tool() { function test_job_status_tool (line 1602) | async fn test_job_status_tool() { function test_create_job_params (line 1622) | async fn test_create_job_params() { function test_list_jobs_formatting (line 1653) | async fn test_list_jobs_formatting() { function test_job_status_transitions (line 1719) | async fn test_job_status_transitions() { function test_cancel_job_running (line 1751) | async fn test_cancel_job_running() { function test_cancel_job_completed (line 1780) | async fn test_cancel_job_completed() { function test_job_status_includes_fallback_deliverable (line 1808) | async fn test_job_status_includes_fallback_deliverable() { function test_resolve_project_dir_auto (line 1850) | fn test_resolve_project_dir_auto() { function test_resolve_project_dir_explicit_under_base (line 1865) | fn test_resolve_project_dir_explicit_under_base() { function test_resolve_project_dir_rejects_outside_base (line 1884) | fn test_resolve_project_dir_rejects_outside_base() { function test_resolve_project_dir_rejects_outside_base_existing (line 1902) | fn test_resolve_project_dir_rejects_outside_base_existing() { function test_resolve_project_dir_rejects_traversal (line 1919) | fn test_resolve_project_dir_rejects_traversal() { function test_sandbox_schema_includes_project_dir (line 1939) | fn test_sandbox_schema_includes_project_dir() { function test_sandbox_schema_includes_credentials (line 1956) | fn test_sandbox_schema_includes_credentials() { function test_parse_credentials_empty (line 1973) | async fn test_parse_credentials_empty() { function test_parse_credentials_no_secrets_store (line 1989) | async fn test_parse_credentials_no_secrets_store() { function test_parse_credentials_missing_secret (line 2006) | async fn test_parse_credentials_missing_secret() { function test_parse_credentials_valid (line 2027) | async fn test_parse_credentials_valid() { function test_prompt_tool (line 2054) | fn test_prompt_tool(queue: PromptQueue) -> JobPromptTool { function test_job_prompt_tool_queues_prompt (line 2060) | async fn test_job_prompt_tool_queues_prompt() { function test_job_prompt_tool_requires_approval (line 2094) | async fn test_job_prompt_tool_requires_approval() { function test_job_prompt_tool_rejects_invalid_uuid (line 2107) | async fn test_job_prompt_tool_rejects_invalid_uuid() { function test_job_prompt_tool_rejects_missing_content (line 2123) | async fn test_job_prompt_tool_rejects_missing_content() { function test_job_events_tool_rejects_other_users_job (line 2138) | async fn test_job_events_tool_rejects_other_users_job() { function test_job_events_tool_schema (line 2165) | fn test_job_events_tool_schema() { function test_job_prompt_tool_rejects_other_users_job (line 2191) | async fn test_job_prompt_tool_rejects_other_users_job() { function test_resolve_job_id_full_uuid (line 2225) | async fn test_resolve_job_id_full_uuid() { function test_resolve_job_id_short_prefix (line 2234) | async fn test_resolve_job_id_short_prefix() { function test_resolve_job_id_no_match (line 2246) | async fn test_resolve_job_id_no_match() { function test_resolve_job_id_invalid_input (line 2262) | async fn test_resolve_job_id_invalid_input() { FILE: src/tools/builtin/json.rs type JsonTool (line 9) | pub struct JsonTool; method name (line 13) | fn name(&self) -> &str { method description (line 17) | fn description(&self) -> &str { method parameters_schema (line 23) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 48) | async fn execute( method requires_sanitization (line 132) | fn requires_sanitization(&self) -> bool { function parse_json_input (line 137) | fn parse_json_input(data: &serde_json::Value) -> Result Result bool { function map_write_err (line 48) | fn map_write_err(e: crate::error::WorkspaceError) -> ToolError { type MemorySearchTool (line 64) | pub struct MemorySearchTool { method new (line 70) | pub fn new(workspace: Arc) -> Self { method name (line 77) | fn name(&self) -> &str { method description (line 81) | fn description(&self) -> &str { method parameters_schema (line 87) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 107) | async fn execute( method requires_sanitization (line 144) | fn requires_sanitization(&self) -> bool { type MemoryWriteTool (line 153) | pub struct MemoryWriteTool { method new (line 159) | pub fn new(workspace: Arc) -> Self { method name (line 166) | fn name(&self) -> &str { method description (line 170) | fn description(&self) -> &str { method parameters_schema (line 180) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 203) | async fn execute( method requires_sanitization (line 378) | fn requires_sanitization(&self) -> bool { method rate_limit_config (line 382) | fn rate_limit_config(&self) -> Option) -> Self { method name (line 403) | fn name(&self) -> &str { method description (line 407) | fn description(&self) -> &str { method parameters_schema (line 415) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 428) | async fn execute( method requires_sanitization (line 461) | fn requires_sanitization(&self) -> bool { type MemoryTreeTool (line 469) | pub struct MemoryTreeTool { method new (line 475) | pub fn new(workspace: Arc) -> Self { method build_tree (line 482) | async fn build_tree( method name (line 526) | fn name(&self) -> &str { method description (line 530) | fn description(&self) -> &str { method parameters_schema (line 536) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 556) | async fn execute( method requires_sanitization (line 580) | fn requires_sanitization(&self) -> bool { function detects_filesystem_paths (line 592) | fn detects_filesystem_paths() { function allows_workspace_memory_paths (line 600) | fn allows_workspace_memory_paths() { function make_test_workspace (line 610) | fn make_test_workspace() -> Arc { function test_memory_search_schema (line 623) | fn test_memory_search_schema() { function test_memory_write_schema (line 641) | fn test_memory_write_schema() { function test_memory_read_schema (line 654) | fn test_memory_read_schema() { function test_memory_tree_schema (line 671) | fn test_memory_tree_schema() { function test_memory_write_rejects_injection_to_identity_file (line 684) | async fn test_memory_write_rejects_injection_to_identity_file() { FILE: src/tools/builtin/message.rs type MessageTool (line 19) | pub struct MessageTool { method new (line 32) | pub fn new(channel_manager: Arc) -> Self { method with_extension_manager (line 44) | pub fn with_extension_manager(mut self, extension_manager: Arc Self { method set_context (line 58) | pub async fn set_context(&self, channel: Option, target: Optio... function metadata_string (line 70) | fn metadata_string(metadata: &serde_json::Value, key: &str) -> Option Option { function channel_matches_source (line 83) | fn channel_matches_source(resolved_channel: Option<&str>, source_channel... function resolve_channel_fallback_target (line 91) | async fn resolve_channel_fallback_target( type MessageTargetResolution (line 109) | struct MessageTargetResolution<'a> { function resolve_message_target (line 121) | async fn resolve_message_target(inputs: MessageTargetResolution<'_>) -> ... method name (line 161) | fn name(&self) -> &str { method description (line 165) | fn description(&self) -> &str { method parameters_schema (line 176) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 202) | async fn execute( method requires_approval (line 390) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method rate_limit_config (line 396) | fn rate_limit_config(&self) -> Option { method requires_sanitization (line 400) | fn requires_sanitization(&self) -> bool { type BroadcastCapture (line 416) | type BroadcastCapture = Arc>>; type RecordingChannel (line 418) | struct RecordingChannel { method new (line 424) | fn new(name: &'static str) -> (Self, BroadcastCapture) { method name (line 438) | fn name(&self) -> &str { method start (line 442) | async fn start(&self) -> Result { method respond (line 447) | async fn respond( method send_status (line 455) | async fn send_status( method broadcast (line 463) | async fn broadcast( method health_check (line 475) | async fn health_check(&self) -> Result<(), ChannelError> { function message_tool_with_recording_channels (line 480) | async fn message_tool_with_recording_channels() function message_tool_name (line 496) | fn message_tool_name() { function message_tool_description (line 502) | fn message_tool_description() { function message_tool_schema_has_required_fields (line 508) | fn message_tool_schema_has_required_fields() { function message_tool_schema_has_optional_attachments (line 525) | fn message_tool_schema_has_optional_attachments() { function message_tool_set_context_updates_defaults (line 534) | async fn message_tool_set_context_updates_defaults() { function message_tool_explicit_params_override_defaults (line 559) | async fn message_tool_explicit_params_override_defaults() { function message_tool_with_attachments_outside_sandbox (line 587) | async fn message_tool_with_attachments_outside_sandbox() { function message_tool_with_attachments_inside_sandbox_no_channel (line 615) | async fn message_tool_with_attachments_inside_sandbox_no_channel() { function message_tool_with_attachments_in_tmp_no_channel (line 648) | async fn message_tool_with_attachments_in_tmp_no_channel() { function message_tool_requires_content (line 684) | async fn message_tool_requires_content() { function message_tool_does_not_require_sanitization (line 704) | fn message_tool_does_not_require_sanitization() { function path_traversal_rejects_double_dot (line 710) | fn path_traversal_rejects_double_dot() { function path_traversal_accepts_normal_paths (line 718) | fn path_traversal_accepts_normal_paths() { function message_tool_rejects_path_traversal_attachments (line 726) | async fn message_tool_rejects_path_traversal_attachments() { function message_tool_passes_attachment_to_broadcast (line 748) | async fn message_tool_passes_attachment_to_broadcast() { function message_tool_passes_multiple_attachments_to_broadcast (line 785) | async fn message_tool_passes_multiple_attachments_to_broadcast() { function requires_approval_always_never (line 825) | fn requires_approval_always_never() { function message_tool_falls_back_to_job_metadata (line 839) | async fn message_tool_falls_back_to_job_metadata() { function message_tool_falls_back_to_ctx_user_when_channel_known (line 873) | async fn message_tool_falls_back_to_ctx_user_when_channel_known() { function message_tool_no_metadata_still_errors (line 898) | async fn message_tool_no_metadata_still_errors() { function message_tool_broadcasts_all_when_no_channel (line 918) | async fn message_tool_broadcasts_all_when_no_channel() { function message_tool_prefers_metadata_over_stale_default_context (line 950) | async fn message_tool_prefers_metadata_over_stale_default_context() { function message_tool_notify_user_only_metadata_does_not_reuse_stale_default_channel (line 982) | async fn message_tool_notify_user_only_metadata_does_not_reuse_stale_def... function message_tool_applies_notify_thread_id_for_gateway_delivery (line 1019) | async fn message_tool_applies_notify_thread_id_for_gateway_delivery() { FILE: src/tools/builtin/mod.rs function media_type_from_path (line 56) | pub(crate) fn media_type_from_path(path: &str) -> String { FILE: src/tools/builtin/path_utils.rs function normalize_lexical (line 14) | pub fn normalize_lexical(path: &Path) -> PathBuf { function validate_path (line 48) | pub fn validate_path(path_str: &str, base_dir: Option<&Path>) -> Result<... function is_path_safe_basic (line 134) | pub fn is_path_safe_basic(path: &str) -> bool { function is_path_safe_minimal (line 157) | fn is_path_safe_minimal(path: &str) -> bool { function test_is_path_safe_basic_allows_normal_paths (line 176) | fn test_is_path_safe_basic_allows_normal_paths() { function test_is_path_safe_basic_rejects_traversal (line 183) | fn test_is_path_safe_basic_rejects_traversal() { function test_is_path_safe_basic_rejects_null_bytes (line 190) | fn test_is_path_safe_basic_rejects_null_bytes() { function test_is_path_safe_basic_rejects_url_encoding (line 196) | fn test_is_path_safe_basic_rejects_url_encoding() { function test_validate_path_allows_within_sandbox (line 203) | fn test_validate_path_allows_within_sandbox() { function test_validate_path_rejects_traversal_nonexistent_parent (line 210) | fn test_validate_path_rejects_traversal_nonexistent_parent() { function test_validate_path_rejects_relative_traversal (line 219) | fn test_validate_path_rejects_relative_traversal() { function test_validate_path_allows_valid_nested_write (line 226) | fn test_validate_path_allows_valid_nested_write() { function test_validate_path_allows_dot_dot_within_sandbox (line 233) | fn test_validate_path_allows_dot_dot_within_sandbox() { FILE: src/tools/builtin/restart.rs type RestartTool (line 39) | pub struct RestartTool; method name (line 43) | fn name(&self) -> &str { method description (line 47) | fn description(&self) -> &str { method parameters_schema (line 52) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 66) | async fn execute( method requires_sanitization (line 155) | fn requires_sanitization(&self) -> bool { function enable_docker_env (line 170) | fn enable_docker_env() { function test_restart_tool_approval_handled_at_command_level (line 177) | fn test_restart_tool_approval_handled_at_command_level() { function test_restart_tool_name (line 188) | fn test_restart_tool_name() { function test_restart_tool_parameters_schema (line 194) | fn test_restart_tool_parameters_schema() { function test_restart_tool_requires_sanitization (line 208) | fn test_restart_tool_requires_sanitization() { function test_restart_tool_delay_parameter_validation (line 214) | async fn test_restart_tool_delay_parameter_validation() { function test_restart_tool_delay_clamping (line 237) | async fn test_restart_tool_delay_clamping() { function test_restart_tool_description (line 262) | fn test_restart_tool_description() { function test_restart_tool_schema_completeness (line 272) | fn test_restart_tool_schema_completeness() { function test_restart_tool_boundary_values (line 291) | async fn test_restart_tool_boundary_values() { function test_restart_tool_invalid_parameter_types (line 325) | async fn test_restart_tool_invalid_parameter_types() { function test_restart_tool_output_structure (line 359) | async fn test_restart_tool_output_structure() { function test_restart_tool_extra_parameters_ignored (line 379) | async fn test_restart_tool_extra_parameters_ignored() { function test_restart_tool_negative_numbers (line 403) | async fn test_restart_tool_negative_numbers() { function test_restart_tool_very_large_numbers (line 420) | async fn test_restart_tool_very_large_numbers() { function test_restart_tool_empty_object (line 436) | async fn test_restart_tool_empty_object() { function test_restart_tool_approval_consistent_regardless_of_params (line 452) | fn test_restart_tool_approval_consistent_regardless_of_params() { function test_restart_tool_requires_docker_environment (line 467) | fn test_restart_tool_requires_docker_environment() { FILE: src/tools/builtin/routine.rs type NormalizedTriggerRequest (line 35) | enum NormalizedTriggerRequest { type NormalizedExecutionMode (line 53) | enum NormalizedExecutionMode { type NormalizedExecutionRequest (line 59) | struct NormalizedExecutionRequest { type NormalizedDeliveryRequest (line 67) | struct NormalizedDeliveryRequest { type NormalizedRoutineCreateRequest (line 73) | struct NormalizedRoutineCreateRequest { function routine_request_properties (line 83) | fn routine_request_properties() -> Value { function execution_properties (line 125) | fn execution_properties() -> Value { function delivery_properties (line 151) | fn delivery_properties() -> Value { function advanced_properties (line 164) | fn advanced_properties() -> Value { function manual_request_variant (line 173) | fn manual_request_variant() -> Value { function cron_request_variant (line 188) | fn cron_request_variant() -> Value { function message_event_request_variant (line 211) | fn message_event_request_variant() -> Value { function system_event_request_variant (line 234) | fn system_event_request_variant() -> Value { function routine_request_discovery_schema (line 265) | fn routine_request_discovery_schema() -> Value { function lightweight_execution_variant (line 286) | fn lightweight_execution_variant() -> Value { function full_job_execution_variant (line 316) | fn full_job_execution_variant() -> Value { function execution_discovery_schema (line 331) | fn execution_discovery_schema() -> Value { function routine_create_examples (line 347) | fn routine_create_examples() -> Vec { function routine_create_tool_summary (line 397) | fn routine_create_tool_summary() -> ToolDiscoverySummary { function routine_create_schema (line 416) | fn routine_create_schema(include_compatibility_aliases: bool) -> Value { function routine_create_parameters_schema (line 603) | pub(crate) fn routine_create_parameters_schema() -> Value { function routine_create_discovery_schema (line 607) | fn routine_create_discovery_schema() -> Value { function routine_update_parameters_schema (line 612) | pub(crate) fn routine_update_parameters_schema() -> Value { function nested_object (line 645) | fn nested_object<'a>(params: &'a Value, field: &str) -> Option<&'a Map) -> Result Result) -> Result Result NormalizedDeliveryRequest { function parse_routine_create_request (line 871) | fn parse_routine_create_request( function build_routine_trigger (line 898) | fn build_routine_trigger(trigger: &NormalizedTriggerRequest) -> Trigger { function build_routine_action (line 921) | fn build_routine_action( function routine_requests_full_job (line 942) | fn routine_requests_full_job(params: &Value) -> bool { function event_emit_schema (line 949) | fn event_emit_schema(include_source_alias: bool) -> Value { function event_emit_parameters_schema (line 996) | pub(crate) fn event_emit_parameters_schema() -> Value { function event_emit_discovery_schema (line 1000) | fn event_emit_discovery_schema() -> Value { function parse_event_emit_args (line 1005) | fn parse_event_emit_args(params: &Value) -> Result<(String, String, Valu... type RoutineCreateTool (line 1024) | pub struct RoutineCreateTool { method new (line 1030) | pub fn new(store: Arc, engine: Arc) -> Se... method name (line 1037) | fn name(&self) -> &str { method description (line 1041) | fn description(&self) -> &str { method requires_approval (line 1047) | fn requires_approval(&self, params: &serde_json::Value) -> ApprovalRequi... method parameters_schema (line 1055) | fn parameters_schema(&self) -> serde_json::Value { method discovery_schema (line 1059) | fn discovery_schema(&self) -> serde_json::Value { method discovery_summary (line 1063) | fn discovery_summary(&self) -> Option { method execute (line 1067) | async fn execute( method requires_sanitization (line 1140) | fn requires_sanitization(&self) -> bool { type RoutineListTool (line 1147) | pub struct RoutineListTool { method new (line 1152) | pub fn new(store: Arc) -> Self { method name (line 1159) | fn name(&self) -> &str { method description (line 1163) | fn description(&self) -> &str { method parameters_schema (line 1167) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1175) | async fn execute( method requires_sanitization (line 1214) | fn requires_sanitization(&self) -> bool { type RoutineUpdateTool (line 1221) | pub struct RoutineUpdateTool { method new (line 1227) | pub fn new(store: Arc, engine: Arc) -> Se... method name (line 1234) | fn name(&self) -> &str { method description (line 1238) | fn description(&self) -> &str { method parameters_schema (line 1243) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1247) | async fn execute( method requires_sanitization (line 1344) | fn requires_sanitization(&self) -> bool { type RoutineDeleteTool (line 1351) | pub struct RoutineDeleteTool { method new (line 1357) | pub fn new(store: Arc, engine: Arc) -> Se... method name (line 1364) | fn name(&self) -> &str { method description (line 1368) | fn description(&self) -> &str { method parameters_schema (line 1372) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1385) | async fn execute( method requires_sanitization (line 1418) | fn requires_sanitization(&self) -> bool { type RoutineFireTool (line 1425) | pub struct RoutineFireTool { method new (line 1431) | pub fn new(store: Arc, engine: Arc) -> Se... method name (line 1438) | fn name(&self) -> &str { method description (line 1442) | fn description(&self) -> &str { method requires_approval (line 1446) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method parameters_schema (line 1452) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1465) | async fn execute( method requires_sanitization (line 1498) | fn requires_sanitization(&self) -> bool { type RoutineHistoryTool (line 1505) | pub struct RoutineHistoryTool { method new (line 1510) | pub fn new(store: Arc) -> Self { method name (line 1517) | fn name(&self) -> &str { method description (line 1521) | fn description(&self) -> &str { method parameters_schema (line 1525) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1543) | async fn execute( method requires_sanitization (line 1600) | fn requires_sanitization(&self) -> bool { type EventEmitTool (line 1607) | pub struct EventEmitTool { method new (line 1612) | pub fn new(engine: Arc) -> Self { method name (line 1619) | fn name(&self) -> &str { method description (line 1623) | fn description(&self) -> &str { method requires_approval (line 1628) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method parameters_schema (line 1634) | fn parameters_schema(&self) -> serde_json::Value { method discovery_schema (line 1638) | fn discovery_schema(&self) -> serde_json::Value { method execute (line 1642) | async fn execute( method requires_sanitization (line 1665) | fn requires_sanitization(&self) -> bool { constant ROUTINE_CREATE_LEGACY_ALIASES (line 1676) | const ROUTINE_CREATE_LEGACY_ALIASES: &[&str] = &[ function schema_property (line 1694) | fn schema_property<'a>(schema: &'a Value, name: &str) -> &'a Value { function maybe_schema_property (line 1702) | fn maybe_schema_property<'a>(schema: &'a Value, name: &str) -> Option<&'... function nested_schema_property (line 1709) | fn nested_schema_property<'a>(schema: &'a Value, object_name: &str, name... function variant_with_kind (line 1717) | fn variant_with_kind<'a>(variants: &'a [Value], kind: &str) -> &'a Value { function variant_with_mode (line 1732) | fn variant_with_mode<'a>(variants: &'a [Value], mode: &str) -> &'a Value { function parses_grouped_manual_lightweight_request (line 1748) | fn parses_grouped_manual_lightweight_request() { function parses_grouped_cron_full_job_request (line 1777) | fn parses_grouped_cron_full_job_request() { function parses_grouped_message_event_with_tools (line 1818) | fn parses_grouped_message_event_with_tools() { function parses_context_paths_with_trim_drop_empty_and_stable_dedupe (line 1854) | fn parses_context_paths_with_trim_drop_empty_and_stable_dedupe() { function parses_grouped_system_event_request (line 1885) | fn parses_grouped_system_event_request() { function rejects_system_event_filters_with_nested_values (line 1922) | fn rejects_system_event_filters_with_nested_values() { function parses_legacy_flat_shape (line 1955) | fn parses_legacy_flat_shape() { function parses_mixed_grouped_and_legacy_aliases (line 1986) | fn parses_mixed_grouped_and_legacy_aliases() { function parses_event_emit_with_source_alias (line 2019) | fn parses_event_emit_with_source_alias() { function parses_event_emit_with_event_source (line 2035) | fn parses_event_emit_with_event_source() { function routine_create_parameters_schema_prefers_grouped_request_shape (line 2050) | fn routine_create_parameters_schema_prefers_grouped_request_shape() { function routine_create_discovery_schema_keeps_legacy_aliases (line 2081) | fn routine_create_discovery_schema_keeps_legacy_aliases() { function routine_create_discovery_schema_splits_request_variants (line 2098) | fn routine_create_discovery_schema_splits_request_variants() { function routine_create_discovery_schema_splits_execution_variants (line 2140) | fn routine_create_discovery_schema_splits_execution_variants() { function routine_create_discovery_summary_explains_rules_and_examples (line 2173) | fn routine_create_discovery_summary_explains_rules_and_examples() { function routine_create_parameters_schema_describes_grouped_trigger_fields (line 2202) | fn routine_create_parameters_schema_describes_grouped_trigger_fields() { function routine_update_schema_exposes_supported_fields_and_limits (line 2258) | fn routine_update_schema_exposes_supported_fields_and_limits() { function routine_create_detects_full_job_requests_for_approval (line 2297) | fn routine_create_detects_full_job_requests_for_approval() { function event_emit_parameters_schema_prefers_canonical_event_source (line 2315) | fn event_emit_parameters_schema_prefers_canonical_event_source() { function event_emit_discovery_schema_keeps_source_alias (line 2342) | fn event_emit_discovery_schema_keeps_source_alias() { function build_full_job_action_uses_live_owner_scope_defaults (line 2356) | fn build_full_job_action_uses_live_owner_scope_defaults() { FILE: src/tools/builtin/secrets_tools.rs type SecretListTool (line 24) | pub struct SecretListTool { method new (line 29) | pub fn new(store: Arc) -> Self { method name (line 36) | fn name(&self) -> &str { method description (line 40) | fn description(&self) -> &str { method parameters_schema (line 46) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 53) | async fn execute( type SecretDeleteTool (line 88) | pub struct SecretDeleteTool { method new (line 93) | pub fn new(store: Arc) -> Self { method name (line 100) | fn name(&self) -> &str { method description (line 104) | fn description(&self) -> &str { method parameters_schema (line 108) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 121) | async fn execute( method requires_approval (line 152) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... function test_store (line 166) | fn test_store() -> Arc { function test_ctx (line 170) | fn test_ctx() -> JobContext { function test_secret_list (line 175) | async fn test_secret_list() { function test_secret_delete (line 195) | async fn test_secret_delete() { FILE: src/tools/builtin/shell.rs constant MAX_OUTPUT_SIZE (line 63) | const MAX_OUTPUT_SIZE: usize = 64 * 1024; constant DEFAULT_TIMEOUT (line 66) | const DEFAULT_TIMEOUT: Duration = Duration::from_secs(120); constant SAFE_ENV_VARS (line 151) | const SAFE_ENV_VARS: &[&str] = &[ function requires_explicit_approval (line 202) | pub fn requires_explicit_approval(command: &str) -> bool { function detect_command_injection (line 217) | pub fn detect_command_injection(cmd: &str) -> Option<&'static str> { function contains_shell_pipe (line 298) | fn contains_shell_pipe(lower: &str) -> bool { function has_pipe_to (line 309) | fn has_pipe_to(lower: &str, shell: &str) -> bool { function has_command_substitution (line 328) | fn has_command_substitution(s: &str) -> bool { function has_command_token (line 340) | fn has_command_token(lower: &str, token: &str) -> bool { type ShellTool (line 354) | pub struct ShellTool { method fmt (line 368) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method new (line 381) | pub fn new() -> Self { method with_working_dir (line 392) | pub fn with_working_dir(mut self, dir: PathBuf) -> Self { method with_timeout (line 398) | pub fn with_timeout(mut self, timeout: Duration) -> Self { method with_sandbox (line 404) | pub fn with_sandbox(mut self, sandbox: Arc) -> Self { method with_sandbox_policy (line 410) | pub fn with_sandbox_policy(mut self, policy: SandboxPolicy) -> Self { method is_blocked (line 416) | fn is_blocked(&self, cmd: &str) -> Option<&'static str> { method execute_sandboxed (line 437) | async fn execute_sandboxed( method execute_direct (line 468) | async fn execute_direct( method execute_command (line 582) | async fn execute_command( method default (line 635) | fn default() -> Self { method name (line 642) | fn name(&self) -> &str { method description (line 646) | fn description(&self) -> &str { method parameters_schema (line 652) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 673) | async fn execute( method requires_approval (line 701) | fn requires_approval(&self, params: &serde_json::Value) -> ApprovalRequi... method requires_sanitization (line 721) | fn requires_sanitization(&self) -> bool { method domain (line 725) | fn domain(&self) -> ToolDomain { method rate_limit_config (line 729) | fn rate_limit_config(&self) -> Option String { function truncate_for_error (line 752) | fn truncate_for_error(s: &str) -> String { function test_echo_command (line 765) | async fn test_echo_command() { function test_blocked_commands (line 780) | fn test_blocked_commands() { function test_command_timeout (line 791) | async fn test_command_timeout() { function test_requires_explicit_approval (line 803) | fn test_requires_explicit_approval() { function test_destructive_command_extraction_from_object_args (line 827) | fn test_destructive_command_extraction_from_object_args() { function test_destructive_command_extraction_from_string_args (line 847) | fn test_destructive_command_extraction_from_string_args() { function test_requires_approval_destructive_command (line 866) | fn test_requires_approval_destructive_command() { function test_requires_approval_safe_command (line 885) | fn test_requires_approval_safe_command() { function test_requires_approval_string_encoded_args (line 900) | fn test_requires_approval_string_encoded_args() { function test_sandbox_policy_builder (line 909) | fn test_sandbox_policy_builder() { function test_has_command_token (line 921) | fn test_has_command_token() { function test_injection_null_byte (line 947) | fn test_injection_null_byte() { function test_injection_base64_to_shell (line 953) | fn test_injection_base64_to_shell() { function test_injection_printf_encoded_to_shell (line 965) | fn test_injection_printf_encoded_to_shell() { function test_injection_xxd_reverse_to_shell (line 976) | fn test_injection_xxd_reverse_to_shell() { function test_injection_dns_exfiltration (line 985) | fn test_injection_dns_exfiltration() { function test_injection_netcat_piping (line 1003) | fn test_injection_netcat_piping() { function test_injection_curl_post_file (line 1019) | fn test_injection_curl_post_file() { function test_injection_wget_post_file (line 1035) | fn test_injection_wget_post_file() { function test_injection_rev_to_shell (line 1043) | fn test_injection_rev_to_shell() { function test_injection_curl_no_space_variant (line 1052) | fn test_injection_curl_no_space_variant() { function test_shell_pipe_word_boundary (line 1059) | fn test_shell_pipe_word_boundary() { function test_injection_legitimate_commands_not_blocked (line 1078) | fn test_injection_legitimate_commands_not_blocked() { function test_env_scrubbing_hides_secrets (line 1103) | async fn test_env_scrubbing_hides_secrets() { function test_env_scrubbing_forwards_safe_vars (line 1142) | async fn test_env_scrubbing_forwards_safe_vars() { function test_env_scrubbing_common_secret_patterns (line 1166) | async fn test_env_scrubbing_common_secret_patterns() { function test_injection_blocked_at_execution (line 1207) | async fn test_injection_blocked_at_execution() { function test_large_output_command (line 1227) | async fn test_large_output_command() { function test_netcat_blocked_at_execution (line 1247) | async fn test_netcat_blocked_at_execution() { function test_blocked_command_with_object_args (line 1269) | async fn test_blocked_command_with_object_args() { function test_injection_blocked_with_object_args (line 1286) | async fn test_injection_blocked_with_object_args() { function test_env_scrubbing_custom_var_hidden (line 1305) | async fn test_env_scrubbing_custom_var_hidden() { function test_env_scrubbing_path_preserved (line 1334) | async fn test_env_scrubbing_path_preserved() { function test_injection_encoded_to_absolute_path_shell (line 1352) | fn test_injection_encoded_to_absolute_path_shell() { function test_injection_false_positives_avoided (line 1359) | fn test_injection_false_positives_avoided() { function test_approval_with_mixed_case_destructive (line 1372) | fn test_approval_with_mixed_case_destructive() { FILE: src/tools/builtin/skill_tools.rs type SkillListTool (line 17) | pub struct SkillListTool { method new (line 22) | pub fn new(registry: Arc>) -> Self { method name (line 29) | fn name(&self) -> &str { method description (line 33) | fn description(&self) -> &str { method parameters_schema (line 37) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 50) | async fn execute( type SkillSearchTool (line 112) | pub struct SkillSearchTool { method new (line 118) | pub fn new( method name (line 128) | fn name(&self) -> &str { method description (line 132) | fn description(&self) -> &str { method parameters_schema (line 136) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 149) | async fn execute( type SkillInstallTool (line 248) | pub struct SkillInstallTool { method new (line 254) | pub fn new( method name (line 264) | fn name(&self) -> &str { method description (line 268) | fn description(&self) -> &str { method parameters_schema (line 272) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 293) | async fn execute( method requires_approval (line 376) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... function validate_fetch_url (line 387) | pub fn validate_fetch_url(url_str: &str) -> Result) -> Option { function normalize_ip (line 436) | fn normalize_ip(ip: std::net::IpAddr) -> std::net::IpAddr { function validate_fetch_ip (line 446) | fn validate_fetch_ip(ip: &std::net::IpAddr, display_host: &str) -> Resul... function normalize_domain (line 457) | fn normalize_domain(host: &str) -> &str { function validate_resolved_addrs (line 461) | fn validate_resolved_addrs(host: &str, addrs: &[std::net::SocketAddr]) -... function build_fetch_client_builder (line 477) | fn build_fetch_client_builder() -> reqwest::ClientBuilder { function build_safe_fetch_client (line 484) | async fn build_safe_fetch_client(parsed: &reqwest::Url) -> Result bool { function is_link_local_ip (line 533) | fn is_link_local_ip(ip: &std::net::IpAddr) -> bool { function fetch_skill_content (line 550) | pub async fn fetch_skill_content(url: &str) -> Result { function extract_skill_from_zip (line 605) | fn extract_skill_from_zip(data: &[u8]) -> Result { type SkillRemoveTool (line 699) | pub struct SkillRemoveTool { method new (line 704) | pub fn new(registry: Arc>) -> Self { method name (line 711) | fn name(&self) -> &str { method description (line 715) | fn description(&self) -> &str { method parameters_schema (line 720) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 733) | async fn execute( method requires_approval (line 777) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... function test_registry (line 786) | fn test_registry() -> Arc> { function test_catalog (line 793) | fn test_catalog() -> Arc { function test_skill_list_schema (line 798) | fn test_skill_list_schema() { function test_skill_search_schema (line 811) | fn test_skill_search_schema() { function test_skill_install_schema (line 824) | fn test_skill_install_schema() { function test_skill_remove_schema (line 839) | fn test_skill_remove_schema() { function skill_remove_always_requires_approval_regardless_of_params (line 852) | fn skill_remove_always_requires_approval_regardless_of_params() { function test_validate_fetch_url_allows_https (line 881) | fn test_validate_fetch_url_allows_https() { function test_validate_fetch_url_rejects_http (line 886) | fn test_validate_fetch_url_rejects_http() { function test_validate_fetch_url_rejects_private_ip (line 892) | fn test_validate_fetch_url_rejects_private_ip() { function test_validate_fetch_url_rejects_loopback (line 898) | fn test_validate_fetch_url_rejects_loopback() { function test_validate_fetch_url_rejects_localhost (line 904) | fn test_validate_fetch_url_rejects_localhost() { function test_validate_fetch_url_rejects_localhost_fqdn (line 910) | fn test_validate_fetch_url_rejects_localhost_fqdn() { function test_validate_fetch_url_rejects_metadata_endpoint (line 916) | fn test_validate_fetch_url_rejects_metadata_endpoint() { function test_validate_fetch_url_rejects_internal_domain (line 923) | fn test_validate_fetch_url_rejects_internal_domain() { function test_validate_fetch_url_rejects_file_scheme (line 930) | fn test_validate_fetch_url_rejects_file_scheme() { function test_validate_fetch_url_rejects_ipv4_mapped_ipv6_loopback (line 936) | fn test_validate_fetch_url_rejects_ipv4_mapped_ipv6_loopback() { function test_validate_fetch_url_rejects_ipv6_loopback (line 942) | fn test_validate_fetch_url_rejects_ipv6_loopback() { function test_validate_resolved_addrs_rejects_loopback_hostname (line 948) | fn test_validate_resolved_addrs_rejects_loopback_hostname() { function test_validate_resolved_addrs_allows_public_hostname (line 959) | fn test_validate_resolved_addrs_allows_public_hostname() { function test_extract_skill_from_zip_deflate (line 971) | fn test_extract_skill_from_zip_deflate() { function test_extract_skill_from_zip_store (line 1002) | fn test_extract_skill_from_zip_store() { function test_extract_skill_from_zip_missing_skill_md (line 1025) | fn test_extract_skill_from_zip_missing_skill_md() { function build_zip_entry_store (line 1047) | fn build_zip_entry_store(file_name: &str, content: &[u8]) -> Vec { function test_zip_extract_valid_skill (line 1065) | fn test_zip_extract_valid_skill() { function test_zip_extract_ignores_non_skill_entries (line 1073) | fn test_zip_extract_ignores_non_skill_entries() { function test_zip_extract_path_traversal_rejected (line 1088) | fn test_zip_extract_path_traversal_rejected() { function test_zip_extract_nested_path_not_matched (line 1102) | fn test_zip_extract_nested_path_not_matched() { function test_zip_extract_oversized_rejected (line 1116) | fn test_zip_extract_oversized_rejected() { function test_is_private_ip_blocks_loopback (line 1146) | fn test_is_private_ip_blocks_loopback() { function test_is_private_ip_blocks_private_ranges (line 1156) | fn test_is_private_ip_blocks_private_ranges() { function test_is_private_ip_blocks_link_local (line 1178) | fn test_is_private_ip_blocks_link_local() { function test_is_private_ip_allows_public (line 1193) | fn test_is_private_ip_allows_public() { function test_is_private_ip_blocks_ipv4_mapped_ipv6 (line 1207) | fn test_is_private_ip_blocks_ipv4_mapped_ipv6() { function test_is_restricted_host_blocks_metadata (line 1252) | fn test_is_restricted_host_blocks_metadata() { function test_is_restricted_host_allows_normal (line 1289) | fn test_is_restricted_host_allows_normal() { function test_empty_url_param_is_treated_as_absent (line 1306) | fn test_empty_url_param_is_treated_as_absent() { FILE: src/tools/builtin/time.rs type TimeTool (line 11) | pub struct TimeTool; method name (line 15) | fn name(&self) -> &str { method description (line 19) | fn description(&self) -> &str { method parameters_schema (line 23) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 69) | async fn execute( method requires_sanitization (line 95) | fn requires_sanitization(&self) -> bool { function execute_now (line 100) | fn execute_now( function execute_parse (line 121) | fn execute_parse( function execute_convert (line 136) | fn execute_convert( function execute_format (line 168) | fn execute_format( function execute_diff (line 198) | fn execute_diff( function require_input (line 223) | fn require_input(params: &serde_json::Value) -> Result<&str, ToolError> { function resolve_parse_timezone (line 235) | fn resolve_parse_timezone( function resolve_timezone_for_output (line 246) | fn resolve_timezone_for_output( function context_timezone (line 266) | fn context_timezone(ctx: &JobContext) -> Result, To... function optional_timezone (line 291) | fn optional_timezone(params: &serde_json::Value, keys: &[&str]) -> Resul... function parse_timezone (line 304) | fn parse_timezone(value: &str) -> Result { function parse_timestamp (line 313) | fn parse_timestamp(input: &str, fallback_tz: Option<&Tz>) -> Result Option { function localize_naive_datetime (line 352) | fn localize_naive_datetime( function test_now_accepts_explicit_timezone (line 382) | async fn test_now_accepts_explicit_timezone() { function test_now_includes_local_time_when_user_timezone_set (line 409) | async fn test_now_includes_local_time_when_user_timezone_set() { function test_now_uses_context_metadata_timezone_fallback (line 430) | async fn test_now_uses_context_metadata_timezone_fallback() { function test_now_returns_utc_by_default (line 453) | async fn test_now_returns_utc_by_default() { function test_convert_across_dst_boundary (line 466) | async fn test_convert_across_dst_boundary() { function test_format_with_timezone (line 490) | async fn test_format_with_timezone() { function test_invalid_timezone_returns_clear_error (line 515) | async fn test_invalid_timezone_returns_clear_error() { function test_parse_naive_timestamp_with_timezone (line 539) | fn test_parse_naive_timestamp_with_timezone() { function test_now_with_empty_timezone_string_does_not_error (line 547) | async fn test_now_with_empty_timezone_string_does_not_error() { function test_convert_with_empty_from_timezone_string_does_not_error (line 568) | async fn test_convert_with_empty_from_timezone_string_does_not_error() { FILE: src/tools/builtin/tool_info.rs type ToolInfoDetail (line 20) | enum ToolInfoDetail { method parse (line 27) | fn parse(params: &serde_json::Value) -> Result { function schema_param_names (line 47) | fn schema_param_names(schema: &serde_json::Value) -> Vec { function fallback_summary (line 55) | fn fallback_summary(schema: &serde_json::Value) -> ToolDiscoverySummary { type ToolInfoTool (line 71) | pub struct ToolInfoTool { method new (line 76) | pub fn new(registry: Weak) -> Self { method name (line 83) | fn name(&self) -> &str { method description (line 87) | fn description(&self) -> &str { method parameters_schema (line 91) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 115) | async fn execute( function test_tool_info_default_returns_param_names (line 171) | async fn test_tool_info_default_returns_param_names() { function test_tool_info_with_summary (line 201) | async fn test_tool_info_with_summary() { function test_tool_info_with_schema (line 225) | async fn test_tool_info_with_schema() { function test_tool_info_invalid_detail (line 247) | async fn test_tool_info_invalid_detail() { function test_tool_info_unknown_tool (line 263) | async fn test_tool_info_unknown_tool() { function test_tool_info_registry_dropped (line 274) | async fn test_tool_info_registry_dropped() { FILE: src/tools/coercion.rs function prepare_tool_params (line 1) | pub(crate) fn prepare_tool_params( function prepare_params_for_schema (line 8) | pub(crate) fn prepare_params_for_schema( function coerce_value (line 15) | fn coerce_value(value: &serde_json::Value, schema: &serde_json::Value) -... function coerce_string_value (line 71) | fn coerce_string_value(s: &str, schema: &serde_json::Value) -> Option bool { type StubTool (line 137) | struct StubTool { method name (line 143) | fn name(&self) -> &str { method description (line 147) | fn description(&self) -> &str { method parameters_schema (line 151) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 155) | async fn execute( function coerces_scalar_strings (line 165) | fn coerces_scalar_strings() { function coerces_stringified_array_and_recurses_into_items (line 188) | fn coerces_stringified_array_and_recurses_into_items() { function coerces_stringified_object_and_recurses_into_properties (line 211) | fn coerces_stringified_object_and_recurses_into_properties() { function coerces_nullable_stringified_arrays (line 238) | fn coerces_nullable_stringified_arrays() { function coerces_typed_additional_properties (line 263) | fn coerces_typed_additional_properties() { function leaves_invalid_json_strings_unchanged (line 292) | fn leaves_invalid_json_strings_unchanged() { function leaves_string_when_schema_allows_string (line 312) | fn leaves_string_when_schema_allows_string() { function permissive_schema_is_noop (line 329) | fn permissive_schema_is_noop() { function prepare_tool_params_uses_discovery_schema (line 343) | fn prepare_tool_params_uses_discovery_schema() { FILE: src/tools/execute.rs function execute_tool_with_safety (line 18) | pub async fn execute_tool_with_safety( function process_tool_result (line 127) | pub fn process_tool_result( function execute_tool_simple (line 148) | pub async fn execute_tool_simple( type EchoTool (line 167) | struct EchoTool; method name (line 171) | fn name(&self) -> &str { method description (line 174) | fn description(&self) -> &str { method parameters_schema (line 177) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 180) | async fn execute( method requires_sanitization (line 187) | fn requires_sanitization(&self) -> bool { type FailTool (line 192) | struct FailTool; method name (line 196) | fn name(&self) -> &str { method description (line 199) | fn description(&self) -> &str { method parameters_schema (line 202) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 205) | async fn execute( method requires_sanitization (line 214) | fn requires_sanitization(&self) -> bool { type SlowTool (line 219) | struct SlowTool; method name (line 223) | fn name(&self) -> &str { method description (line 226) | fn description(&self) -> &str { method parameters_schema (line 229) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 232) | async fn execute( method execution_timeout (line 240) | fn execution_timeout(&self) -> Duration { method requires_sanitization (line 243) | fn requires_sanitization(&self) -> bool { type ArrayEchoTool (line 248) | struct ArrayEchoTool; method name (line 252) | fn name(&self) -> &str { method description (line 255) | fn description(&self) -> &str { method parameters_schema (line 258) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 269) | async fn execute( method requires_sanitization (line 276) | fn requires_sanitization(&self) -> bool { function test_safety (line 281) | fn test_safety() -> SafetyLayer { function test_job_ctx (line 288) | fn test_job_ctx() -> JobContext { function registry_with (line 292) | async fn registry_with(tools: Vec>) -> ToolRegistry { function test_execute_empty_tool_name_returns_not_found (line 301) | async fn test_execute_empty_tool_name_returns_not_found() { function test_execute_success (line 328) | async fn test_execute_success() { function test_execute_missing_tool (line 345) | async fn test_execute_missing_tool() { function test_execute_tool_failure (line 368) | async fn test_execute_tool_failure() { function test_execute_tool_timeout (line 391) | async fn test_execute_tool_timeout() { function test_execute_normalizes_stringified_array_params (line 420) | async fn test_execute_normalizes_stringified_array_params() { function test_process_tool_result_success (line 440) | fn test_process_tool_result_success() { function test_process_tool_result_error (line 461) | fn test_process_tool_result_error() { FILE: src/tools/mcp/auth.rs function oauth_http_client (line 26) | fn oauth_http_client() -> Result<&'static reqwest::Client, AuthError> { function log_redirect_if_applicable (line 44) | fn log_redirect_if_applicable(url: &str, response: &reqwest::Response) { type AuthError (line 61) | pub enum AuthError { type ProtectedResourceMetadata (line 96) | pub struct ProtectedResourceMetadata { type AuthorizationServerMetadata (line 112) | pub struct AuthorizationServerMetadata { type ClientRegistrationRequest (line 145) | pub struct ClientRegistrationRequest { type ClientRegistrationResponse (line 164) | pub struct ClientRegistrationResponse { type AccessToken (line 187) | pub struct AccessToken { type TokenResponse (line 206) | struct TokenResponse { type PkceChallenge (line 216) | pub struct PkceChallenge { method generate (line 225) | pub fn generate() -> Self { function build_well_known_uri (line 252) | pub fn build_well_known_uri(base_url: &str, suffix: &str) -> Result String { function is_dangerous_ip (line 283) | fn is_dangerous_ip(ip: IpAddr) -> bool { function validate_url_safe (line 315) | async fn validate_url_safe(url: &str) -> Result<(), AuthError> { function parse_resource_metadata_url (line 389) | fn parse_resource_metadata_url(www_authenticate: &str) -> Option { function fetch_resource_metadata (line 418) | async fn fetch_resource_metadata(url: &str) -> Result Result Result<(TcpListener, u16), AuthErr... function build_authorization_url (line 827) | pub fn build_authorization_url( function wait_for_authorization_callback (line 873) | pub async fn wait_for_authorization_callback( function exchange_code_for_token (line 893) | pub async fn exchange_code_for_token( function store_tokens (line 951) | pub async fn store_tokens( function store_client_id (line 982) | pub async fn store_client_id( function get_client_id (line 999) | async fn get_client_id( function get_access_token (line 1023) | pub async fn get_access_token( function is_authenticated (line 1043) | pub async fn is_authenticated( function refresh_access_token (line 1059) | pub async fn refresh_access_token( function test_pkce_challenge_generation (line 1142) | fn test_pkce_challenge_generation() { function test_build_authorization_url (line 1160) | fn test_build_authorization_url() { function test_build_authorization_url_with_pkce (line 1179) | fn test_build_authorization_url_with_pkce() { function test_build_authorization_url_with_extra_params (line 1196) | fn test_build_authorization_url_with_extra_params() { function test_pkce_challenge_s256_is_correct_sha256 (line 1216) | fn test_pkce_challenge_s256_is_correct_sha256() { function test_build_authorization_url_empty_scopes_no_scope_param (line 1228) | fn test_build_authorization_url_empty_scopes_no_scope_param() { function test_build_authorization_url_special_characters_are_encoded (line 1244) | fn test_build_authorization_url_special_characters_are_encoded() { function test_protected_resource_metadata_serde_roundtrip_full (line 1262) | fn test_protected_resource_metadata_serde_roundtrip_full() { function test_protected_resource_metadata_serde_roundtrip_minimal (line 1284) | fn test_protected_resource_metadata_serde_roundtrip_minimal() { function test_authorization_server_metadata_serde_roundtrip_all_fields (line 1295) | fn test_authorization_server_metadata_serde_roundtrip_all_fields() { function test_authorization_server_metadata_serde_without_registration (line 1327) | fn test_authorization_server_metadata_serde_without_registration() { function test_client_registration_request_serialization (line 1342) | fn test_client_registration_request_serialization() { function test_client_registration_response_deserialization_full (line 1365) | fn test_client_registration_response_deserialization_full() { function test_client_registration_response_deserialization_minimal (line 1387) | fn test_client_registration_response_deserialization_minimal() { function test_access_token_construction (line 1400) | fn test_access_token_construction() { function test_token_response_to_access_token_pattern (line 1429) | fn test_token_response_to_access_token_pattern() { function test_auth_error_display_strings (line 1472) | fn test_auth_error_display_strings() { function test_auth_error_clone_preserves_http_variant_and_payload (line 1524) | fn test_auth_error_clone_preserves_http_variant_and_payload() { function test_build_well_known_uri_no_path (line 1537) | fn test_build_well_known_uri_no_path() { function test_build_well_known_uri_with_path (line 1547) | fn test_build_well_known_uri_with_path() { function test_build_well_known_uri_with_trailing_slash (line 1557) | fn test_build_well_known_uri_with_trailing_slash() { function test_build_well_known_uri_root_trailing_slash (line 1567) | fn test_build_well_known_uri_root_trailing_slash() { function test_canonical_resource_uri_strips_fragment (line 1579) | fn test_canonical_resource_uri_strips_fragment() { function test_canonical_resource_uri_strips_trailing_slash (line 1587) | fn test_canonical_resource_uri_strips_trailing_slash() { function test_canonical_resource_uri_no_changes_needed (line 1595) | fn test_canonical_resource_uri_no_changes_needed() { function test_is_dangerous_ip_loopback_v4 (line 1605) | fn test_is_dangerous_ip_loopback_v4() { function test_is_dangerous_ip_private_v4 (line 1611) | fn test_is_dangerous_ip_private_v4() { function test_is_dangerous_ip_link_local_v4 (line 1618) | fn test_is_dangerous_ip_link_local_v4() { function test_is_dangerous_ip_cgnat (line 1623) | fn test_is_dangerous_ip_cgnat() { function test_is_dangerous_ip_safe_v4 (line 1629) | fn test_is_dangerous_ip_safe_v4() { function test_is_dangerous_ip_ipv4_mapped_v6_loopback (line 1635) | fn test_is_dangerous_ip_ipv4_mapped_v6_loopback() { function test_is_dangerous_ip_ipv4_mapped_v6_link_local (line 1642) | fn test_is_dangerous_ip_ipv4_mapped_v6_link_local() { function test_is_dangerous_ip_unspecified (line 1649) | fn test_is_dangerous_ip_unspecified() { function test_is_dangerous_ip_v6_loopback (line 1655) | fn test_is_dangerous_ip_v6_loopback() { function test_validate_url_safe_https (line 1660) | async fn test_validate_url_safe_https() { function test_validate_url_safe_http_localhost_allowed (line 1665) | async fn test_validate_url_safe_http_localhost_allowed() { function test_validate_url_safe_http_non_localhost_rejected (line 1676) | async fn test_validate_url_safe_http_non_localhost_rejected() { function test_validate_url_safe_bad_scheme (line 1682) | async fn test_validate_url_safe_bad_scheme() { function test_validate_url_safe_private_ip (line 1688) | async fn test_validate_url_safe_private_ip() { function test_validate_url_safe_public_ip (line 1703) | async fn test_validate_url_safe_public_ip() { function test_parse_resource_metadata_url_bearer (line 1710) | fn test_parse_resource_metadata_url_bearer() { function test_parse_resource_metadata_url_with_other_params (line 1720) | fn test_parse_resource_metadata_url_with_other_params() { function test_parse_resource_metadata_url_missing (line 1727) | fn test_parse_resource_metadata_url_missing() { function test_build_authorization_url_with_resource (line 1736) | fn test_build_authorization_url_with_resource() { function test_build_authorization_url_without_resource (line 1751) | fn test_build_authorization_url_without_resource() { function test_authorization_url_includes_state_parameter (line 1780) | fn test_authorization_url_includes_state_parameter() { FILE: src/tools/mcp/client.rs type McpClient (line 30) | pub struct McpClient { method new (line 71) | pub fn new(server_url: impl Into) -> Self { method new_with_name (line 94) | pub fn new_with_name(server_name: impl Into, server_url: impl ... method new_with_config (line 120) | pub fn new_with_config(config: McpServerConfig) -> Result &str { method server_url (line 229) | pub fn server_url(&self) -> &str { method has_session_manager (line 234) | pub fn has_session_manager(&self) -> bool { method next_request_id (line 239) | fn next_request_id(&self) -> u64 { method get_access_token (line 244) | async fn get_access_token(&self) -> Result, ToolError> { method build_request_headers (line 269) | async fn build_request_headers(&self) -> Result Result bool { method send_request (line 358) | async fn send_request(&self, request: McpRequest) -> Result Result { method list_tools (line 451) | pub async fn list_tools(&self) -> Result, ToolError> { method call_tool (line 480) | pub async fn call_tool( method clear_cache (line 507) | pub async fn clear_cache(&self) { method create_tools (line 512) | pub async fn create_tools(&self) -> Result>, ToolErr... method test_connection (line 529) | pub async fn test_connection(&self) -> Result<(), ToolError> { method clone (line 542) | fn clone(&self) -> Self { function extract_server_name (line 560) | fn extract_server_name(url: &str) -> String { type McpToolWrapper (line 569) | struct McpToolWrapper { method name (line 577) | fn name(&self) -> &str { method description (line 580) | fn description(&self) -> &str { method parameters_schema (line 583) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 587) | async fn execute( method requires_sanitization (line 612) | fn requires_sanitization(&self) -> bool { method requires_approval (line 616) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... function strip_top_level_nulls (line 631) | fn strip_top_level_nulls(value: serde_json::Value) -> serde_json::Value { function test_mcp_request_list_tools (line 646) | fn test_mcp_request_list_tools() { function test_mcp_request_call_tool (line 653) | fn test_mcp_request_call_tool() { function test_extract_server_name (line 660) | fn test_extract_server_name() { function test_simple_client_creation (line 670) | fn test_simple_client_creation() { function test_extract_server_name_with_port (line 678) | fn test_extract_server_name_with_port() { function test_extract_server_name_with_path (line 686) | fn test_extract_server_name_with_path() { function test_extract_server_name_with_query_params (line 694) | fn test_extract_server_name_with_query_params() { function test_extract_server_name_https (line 702) | fn test_extract_server_name_https() { function test_extract_server_name_ip_address (line 710) | fn test_extract_server_name_ip_address() { function test_new_defaults (line 718) | fn test_new_defaults() { function test_new_with_name_uses_custom_name (line 728) | fn test_new_with_name_uses_custom_name() { function test_server_name_accessor (line 738) | fn test_server_name_accessor() { function test_server_url_accessor (line 744) | fn test_server_url_accessor() { function test_clone_preserves_fields (line 751) | fn test_clone_preserves_fields() { function test_clone_resets_tools_cache (line 763) | async fn test_clone_resets_tools_cache() { function test_new_with_config_carries_custom_headers (line 771) | fn test_new_with_config_carries_custom_headers() { function test_new_with_config_no_headers (line 787) | fn test_new_with_config_no_headers() { function test_with_session_manager (line 798) | fn test_with_session_manager() { function test_next_request_id_monotonically_increasing (line 809) | fn test_next_request_id_monotonically_increasing() { function test_mcp_tool_requires_approval_destructive (line 817) | fn test_mcp_tool_requires_approval_destructive() { function test_mcp_tool_no_approval_when_not_destructive (line 834) | fn test_mcp_tool_no_approval_when_not_destructive() { function test_mcp_tool_no_approval_when_no_annotations (line 851) | fn test_mcp_tool_no_approval_when_no_annotations() { type MockTransport (line 863) | struct MockTransport { method new (line 870) | fn new(supports_http: bool, responses: Vec) -> Self { method recorded_headers (line 877) | fn recorded_headers(&self) -> Vec> { method send (line 884) | async fn send( method shutdown (line 898) | async fn shutdown(&self) -> Result<(), ToolError> { method supports_http_features (line 901) | fn supports_http_features(&self) -> bool { type RetryMockTransport (line 908) | struct RetryMockTransport { method new (line 915) | fn new(supports_http: bool, outcomes: Vec Vec> { method send (line 930) | async fn send( method shutdown (line 945) | async fn shutdown(&self) -> Result<(), ToolError> { method supports_http_features (line 949) | fn supports_http_features(&self) -> bool { function test_non_http_transport_skips_401_retry (line 955) | async fn test_non_http_transport_skips_401_retry() { function test_transport_supports_http_features_accessor (line 1003) | async fn test_transport_supports_http_features_accessor() { function test_stdio_client_auto_initializes_without_session_manager (line 1013) | async fn test_stdio_client_auto_initializes_without_session_manager() { function test_http_session_error_triggers_reinitialize_and_retry (line 1055) | async fn test_http_session_error_triggers_reinitialize_and_retry() { function test_strip_top_level_nulls_removes_null_fields (line 1132) | fn test_strip_top_level_nulls_removes_null_fields() { function test_strip_top_level_nulls_preserves_non_objects (line 1149) | fn test_strip_top_level_nulls_preserves_non_objects() { function test_strip_top_level_nulls_preserves_nested_nulls (line 1156) | fn test_strip_top_level_nulls_preserves_nested_nulls() { function test_new_with_config_rejects_stdio_transport (line 1170) | fn test_new_with_config_rejects_stdio_transport() { function make_test_mcp_tool (line 1191) | fn make_test_mcp_tool(destructive: bool) -> McpTool { function test_mcp_tool_wrapper_name_is_prefixed (line 1216) | fn test_mcp_tool_wrapper_name_is_prefixed() { function test_mcp_tool_wrapper_description (line 1227) | fn test_mcp_tool_wrapper_description() { function test_mcp_tool_wrapper_parameters_schema (line 1238) | fn test_mcp_tool_wrapper_parameters_schema() { function test_mcp_tool_wrapper_requires_sanitization (line 1251) | fn test_mcp_tool_wrapper_requires_sanitization() { function test_mcp_tool_wrapper_approval_destructive (line 1265) | fn test_mcp_tool_wrapper_approval_destructive() { function test_mcp_tool_wrapper_approval_non_destructive (line 1277) | fn test_mcp_tool_wrapper_approval_non_destructive() { function test_build_headers_skips_empty_token (line 1292) | async fn test_build_headers_skips_empty_token() { function test_build_headers_trims_token (line 1358) | async fn test_build_headers_trims_token() { FILE: src/tools/mcp/config.rs type McpTransportConfig (line 18) | pub enum McpTransportConfig { type McpServerConfig (line 35) | pub struct McpServerConfig { method new (line 69) | pub fn new(name: impl Into, url: impl Into) -> Self { method new_stdio (line 82) | pub fn new_stdio( method new_unix (line 104) | pub fn new_unix(name: impl Into, socket_path: impl Into Self { method with_description (line 125) | pub fn with_description(mut self, description: impl Into) -> S... method with_headers (line 131) | pub fn with_headers(mut self, headers: HashMap) -> Self { method effective_transport (line 137) | pub fn effective_transport(&self) -> EffectiveTransport<'_> { method validate (line 150) | pub fn validate(&self) -> Result<(), ConfigError> { method has_custom_auth_header (line 219) | pub fn has_custom_auth_header(&self) -> bool { method requires_auth (line 231) | pub fn requires_auth(&self) -> bool { method token_secret_name (line 248) | pub fn token_secret_name(&self) -> String { method refresh_token_secret_name (line 253) | pub fn refresh_token_secret_name(&self) -> String { method client_id_secret_name (line 258) | pub fn client_id_secret_name(&self) -> String { function default_true (line 63) | fn default_true() -> bool { type OAuthConfig (line 265) | pub struct OAuthConfig { method new (line 294) | pub fn new(client_id: impl Into) -> Self { method with_endpoints (line 306) | pub fn with_endpoints( method with_scopes (line 317) | pub fn with_scopes(mut self, scopes: Vec) -> Self { type McpServersFile (line 325) | pub struct McpServersFile { method get (line 341) | pub fn get(&self, name: &str) -> Option<&McpServerConfig> { method get_mut (line 346) | pub fn get_mut(&mut self, name: &str) -> Option<&mut McpServerConfig> { method upsert (line 351) | pub fn upsert(&mut self, config: McpServerConfig) { method remove (line 360) | pub fn remove(&mut self, name: &str) -> bool { method enabled_servers (line 367) | pub fn enabled_servers(&self) -> impl Iterator { function default_schema_version (line 335) | fn default_schema_version() -> u32 { type ConfigError (line 374) | pub enum ConfigError { method from (line 389) | fn from(err: ConfigError) -> Self { function default_config_path (line 395) | pub fn default_config_path() -> PathBuf { function load_mcp_servers (line 400) | pub async fn load_mcp_servers() -> Result { function load_mcp_servers_from (line 405) | pub async fn load_mcp_servers_from(path: impl AsRef) -> Result Result<(), Con... function save_mcp_servers_to (line 431) | pub async fn save_mcp_servers_to( function add_mcp_server (line 454) | pub async fn add_mcp_server(config: McpServerConfig) -> Result<(), Confi... function remove_mcp_server (line 465) | pub async fn remove_mcp_server(name: &str) -> Result<(), ConfigError> { function get_mcp_server (line 480) | pub async fn get_mcp_server(name: &str) -> Result bool { type EffectiveTransport (line 590) | pub enum EffectiveTransport<'a> { function test_is_localhost_url (line 608) | fn test_is_localhost_url() { function test_server_config_validation (line 624) | fn test_server_config_validation() { function test_oauth_config_builder (line 643) | fn test_oauth_config_builder() { function test_servers_file_operations (line 659) | fn test_servers_file_operations() { function test_load_save_config (line 687) | async fn test_load_save_config() { function test_load_nonexistent_returns_empty (line 713) | async fn test_load_nonexistent_returns_empty() { function test_load_rejects_corrupted_headers (line 722) | async fn test_load_rejects_corrupted_headers() { function test_token_secret_names (line 750) | fn test_token_secret_names() { function test_requires_auth_with_oauth (line 760) | fn test_requires_auth_with_oauth() { function test_requires_auth_remote_https_without_oauth (line 767) | fn test_requires_auth_remote_https_without_oauth() { function test_requires_auth_localhost_no_auth (line 777) | fn test_requires_auth_localhost_no_auth() { function test_requires_auth_http_remote_no_auth (line 791) | fn test_requires_auth_http_remote_no_auth() { function test_stdio_config_creation (line 799) | fn test_stdio_config_creation() { function test_unix_config_creation (line 832) | fn test_unix_config_creation() { function test_stdio_validation (line 848) | fn test_stdio_validation() { function test_unix_validation (line 869) | fn test_unix_validation() { function test_requires_auth_stdio_never (line 890) | fn test_requires_auth_stdio_never() { function test_requires_auth_unix_never (line 901) | fn test_requires_auth_unix_never() { function test_header_crlf_injection_rejected (line 911) | fn test_header_crlf_injection_rejected() { function test_header_value_crlf_injection_rejected (line 926) | fn test_header_value_crlf_injection_rejected() { function test_header_name_with_space_rejected (line 943) | fn test_header_name_with_space_rejected() { function test_header_name_with_colon_rejected (line 951) | fn test_header_name_with_colon_rejected() { function test_header_name_with_null_byte_rejected (line 959) | fn test_header_name_with_null_byte_rejected() { function test_header_empty_name_rejected (line 967) | fn test_header_empty_name_rejected() { function test_has_custom_auth_header_case_insensitive (line 981) | fn test_has_custom_auth_header_case_insensitive() { function test_custom_headers (line 999) | fn test_custom_headers() { function test_transport_config_serde_http (line 1012) | fn test_transport_config_serde_http() { function test_transport_config_serde_stdio (line 1022) | fn test_transport_config_serde_stdio() { function test_transport_config_serde_unix (line 1044) | fn test_transport_config_serde_unix() { function test_backward_compat_no_transport_field (line 1062) | fn test_backward_compat_no_transport_field() { function test_config_roundtrip_with_transport (line 1081) | fn test_config_roundtrip_with_transport() { function test_is_localhost_url_rejects_attacker_subdomain (line 1135) | fn test_is_localhost_url_rejects_attacker_subdomain() { function test_is_localhost_url_accepts_real_localhost (line 1144) | fn test_is_localhost_url_accepts_real_localhost() { function test_is_localhost_url_accepts_loopback_ip (line 1150) | fn test_is_localhost_url_accepts_loopback_ip() { function test_is_localhost_url_rejects_remote (line 1156) | fn test_is_localhost_url_rejects_remote() { FILE: src/tools/mcp/factory.rs type McpFactoryError (line 14) | pub enum McpFactoryError { function create_client_from_config (line 27) | pub async fn create_client_from_config( function test_factory_non_oauth_http_has_session_manager (line 117) | async fn test_factory_non_oauth_http_has_session_manager() { FILE: src/tools/mcp/http_transport.rs type HttpMcpTransport (line 21) | pub struct HttpMcpTransport { method new (line 31) | pub fn new(server_url: impl Into, server_name: impl Into)... method server_url (line 63) | pub(crate) fn server_url(&self) -> &str { method session_manager (line 69) | pub(crate) fn session_manager(&self) -> Option<&Arc> { method parse_sse_response (line 168) | async fn parse_sse_response( method send (line 76) | async fn send( method shutdown (line 153) | async fn shutdown(&self) -> Result<(), ToolError> { method supports_http_features (line 158) | fn supports_http_features(&self) -> bool { function sanitize_error_body (line 246) | pub(crate) fn sanitize_error_body(body: &str) -> String { function test_sanitize_error_body_strips_html_tags (line 294) | fn test_sanitize_error_body_strips_html_tags() { function test_sanitize_error_body_truncates_large_html_page (line 305) | fn test_sanitize_error_body_truncates_large_html_page() { function test_sanitize_error_body_passes_short_plain_text (line 317) | fn test_sanitize_error_body_passes_short_plain_text() { function test_sanitize_error_body_truncates_long_plain_text (line 322) | fn test_sanitize_error_body_truncates_long_plain_text() { function test_sanitize_error_body_multibyte_no_panic (line 330) | fn test_sanitize_error_body_multibyte_no_panic() { function test_sanitize_error_body_strips_uppercase_html (line 341) | fn test_sanitize_error_body_strips_uppercase_html() { function test_sanitize_error_body_preserves_angle_brackets_in_non_html (line 352) | fn test_sanitize_error_body_preserves_angle_brackets_in_non_html() { function test_sanitize_error_body_empty_string (line 358) | fn test_sanitize_error_body_empty_string() { function test_new_creates_transport (line 363) | fn test_new_creates_transport() { function test_supports_http_features (line 371) | fn test_supports_http_features() { function test_with_session_manager (line 377) | fn test_with_session_manager() { function test_with_custom_headers (line 385) | fn test_with_custom_headers() { function spawn_echo_server (line 401) | async fn spawn_echo_server() -> (String, tokio::task::JoinHandle<()>) { function test_wire_custom_headers_sent (line 432) | async fn test_wire_custom_headers_sent() { function test_wire_per_request_headers_override_custom (line 459) | async fn test_wire_per_request_headers_override_custom() { function test_wire_custom_auth_preserved_when_no_per_request_auth (line 488) | async fn test_wire_custom_auth_preserved_when_no_per_request_auth() { FILE: src/tools/mcp/process.rs type StdioSpawnConfig (line 18) | pub struct StdioSpawnConfig { type McpProcessManager (line 27) | pub struct McpProcessManager { method new (line 33) | pub fn new() -> Self { method spawn_stdio (line 41) | pub async fn spawn_stdio( method get (line 72) | pub async fn get(&self, name: &str) -> Option> { method shutdown_all (line 77) | pub async fn shutdown_all(&self) { method shutdown (line 91) | pub async fn shutdown(&self, name: &str) -> Result<(), ToolError> { method try_restart (line 105) | pub async fn try_restart(&self, name: &str) -> Result Vec { method default (line 180) | fn default() -> Self { function test_new_creates_empty_manager (line 190) | fn test_new_creates_empty_manager() { function test_managed_servers_returns_empty_list_initially (line 195) | async fn test_managed_servers_returns_empty_list_initially() { function test_shutdown_all_on_empty_manager_does_not_panic (line 202) | async fn test_shutdown_all_on_empty_manager_does_not_panic() { FILE: src/tools/mcp/protocol.rs function deserialize_flexible_id (line 6) | fn deserialize_flexible_id<'de, D>(deserializer: D) -> Result bool { function default_input_schema (line 44) | fn default_input_schema() -> serde_json::Value { type McpToolAnnotations (line 50) | pub struct McpToolAnnotations { type ExecutionTimeHint (line 72) | pub enum ExecutionTimeHint { type McpRequest (line 93) | pub struct McpRequest { method new (line 108) | pub fn new(id: u64, method: impl Into, params: Option Self { method initialized_notification (line 138) | pub fn initialized_notification() -> Self { method list_tools (line 148) | pub fn list_tools(id: u64) -> Self { method call_tool (line 153) | pub fn call_tool(id: u64, name: &str, arguments: serde_json::Value) ->... type McpResponse (line 167) | pub struct McpResponse { type McpError (line 183) | pub struct McpError { type InitializeResult (line 195) | pub struct InitializeResult { type ServerCapabilities (line 214) | pub struct ServerCapabilities { type ToolsCapability (line 234) | pub struct ToolsCapability { type ResourcesCapability (line 242) | pub struct ResourcesCapability { type PromptsCapability (line 254) | pub struct PromptsCapability { type ServerInfo (line 262) | pub struct ServerInfo { type ListToolsResult (line 272) | pub struct ListToolsResult { type CallToolResult (line 278) | pub struct CallToolResult { type ContentBlock (line 287) | pub enum ContentBlock { method as_text (line 302) | pub fn as_text(&self) -> Option<&str> { function test_mcp_tool_deserialize_camel_case_input_schema (line 315) | fn test_mcp_tool_deserialize_camel_case_input_schema() { function test_mcp_tool_deserialize_snake_case_alias (line 341) | fn test_mcp_tool_deserialize_snake_case_alias() { function test_mcp_tool_missing_schema_gets_default (line 360) | fn test_mcp_tool_missing_schema_gets_default() { function test_initialize_request (line 372) | fn test_initialize_request() { function test_initialized_notification (line 388) | fn test_initialized_notification() { function test_call_tool_request (line 396) | fn test_call_tool_request() { function test_mcp_response_deserialize_success (line 408) | fn test_mcp_response_deserialize_success() { function test_mcp_response_deserialize_error (line 421) | fn test_mcp_response_deserialize_error() { function test_mcp_error_roundtrip (line 439) | fn test_mcp_error_roundtrip() { function test_initialize_result_full (line 453) | fn test_initialize_result_full() { function test_content_block_as_text (line 496) | fn test_content_block_as_text() { function test_content_block_serde_tagged_union (line 517) | fn test_content_block_serde_tagged_union() { function test_call_tool_result_is_error (line 545) | fn test_call_tool_result_is_error() { function test_call_tool_result_is_error_defaults_false (line 563) | fn test_call_tool_result_is_error_defaults_false() { function test_requires_approval_with_destructive_hint (line 572) | fn test_requires_approval_with_destructive_hint() { function test_requires_approval_without_destructive_hint (line 586) | fn test_requires_approval_without_destructive_hint() { function test_requires_approval_no_annotations (line 601) | fn test_requires_approval_no_annotations() { function test_mcp_tool_annotations_defaults (line 612) | fn test_mcp_tool_annotations_defaults() { function test_execution_time_hint_serde (line 621) | fn test_execution_time_hint_serde() { function test_notification_serializes_without_id_field (line 645) | fn test_notification_serializes_without_id_field() { function test_response_with_string_id (line 657) | fn test_response_with_string_id() { function test_response_with_null_id (line 669) | fn test_response_with_null_id() { function test_response_with_non_numeric_string_id (line 681) | fn test_response_with_non_numeric_string_id() { function test_mcp_tool_roundtrip_preserves_schema (line 694) | fn test_mcp_tool_roundtrip_preserves_schema() { FILE: src/tools/mcp/session.rs type McpSession (line 13) | pub struct McpSession { method new (line 29) | pub fn new(server_url: impl Into) -> Self { method update_session_id (line 39) | pub fn update_session_id(&mut self, session_id: Option) { method mark_initialized (line 47) | pub fn mark_initialized(&mut self) { method is_stale (line 53) | pub fn is_stale(&self, max_idle_secs: u64) -> bool { method touch (line 58) | pub fn touch(&mut self) { type McpSessionManager (line 64) | pub struct McpSessionManager { method new (line 74) | pub fn new() -> Self { method with_idle_timeout (line 82) | pub fn with_idle_timeout(max_idle_secs: u64) -> Self { method get_or_create (line 90) | pub async fn get_or_create(&self, server_name: &str, server_url: &str)... method get_session_id (line 111) | pub async fn get_session_id(&self, server_name: &str) -> Option { method update_session_id (line 117) | pub async fn update_session_id(&self, server_name: &str, session_id: O... method mark_initialized (line 125) | pub async fn mark_initialized(&self, server_name: &str) { method is_initialized (line 133) | pub async fn is_initialized(&self, server_name: &str) -> bool { method touch (line 142) | pub async fn touch(&self, server_name: &str) { method terminate (line 150) | pub async fn terminate(&self, server_name: &str) { method active_servers (line 156) | pub async fn active_servers(&self) -> Vec { method cleanup_stale (line 162) | pub async fn cleanup_stale(&self) -> usize { method default (line 171) | fn default() -> Self { function test_session_creation (line 181) | fn test_session_creation() { function test_session_update (line 189) | fn test_session_update() { function test_session_staleness (line 200) | fn test_session_staleness() { function test_session_manager_get_or_create (line 215) | async fn test_session_manager_get_or_create() { function test_session_manager_terminate (line 237) | async fn test_session_manager_terminate() { function test_session_manager_initialization (line 258) | async fn test_session_manager_initialization() { function test_active_servers (line 273) | async fn test_active_servers() { function test_update_session_id_none_leaves_id_unchanged (line 290) | fn test_update_session_id_none_leaves_id_unchanged() { function test_touch_updates_last_activity (line 300) | fn test_touch_updates_last_activity() { function test_with_idle_timeout (line 312) | fn test_with_idle_timeout() { function test_get_session_id_nonexistent_returns_none (line 318) | async fn test_get_session_id_nonexistent_returns_none() { function test_update_session_id_nonexistent_is_noop (line 324) | async fn test_update_session_id_nonexistent_is_noop() { function test_mark_initialized_nonexistent_is_noop (line 334) | async fn test_mark_initialized_nonexistent_is_noop() { function test_touch_nonexistent_is_noop (line 341) | async fn test_touch_nonexistent_is_noop() { function test_cleanup_stale_removes_only_stale (line 348) | async fn test_cleanup_stale_removes_only_stale() { function test_terminate_nonexistent_is_noop (line 379) | async fn test_terminate_nonexistent_is_noop() { function test_default_trait_impl (line 387) | fn test_default_trait_impl() { FILE: src/tools/mcp/stdio_transport.rs type StdioMcpTransport (line 25) | pub struct StdioMcpTransport { method spawn (line 43) | pub async fn spawn( method send (line 116) | async fn send( method shutdown (line 131) | async fn shutdown(&self) -> Result<(), ToolError> { method supports_http_features (line 157) | fn supports_http_features(&self) -> bool { function test_spawn_nonexistent_command_fails (line 167) | async fn test_spawn_nonexistent_command_fails() { function test_spawn_and_shutdown (line 186) | async fn test_spawn_and_shutdown() { function test_send_timeout_on_non_jsonrpc_server (line 198) | async fn test_send_timeout_on_non_jsonrpc_server() { FILE: src/tools/mcp/transport.rs type McpTransport (line 22) | pub trait McpTransport: Send + Sync { method send (line 27) | async fn send( method shutdown (line 34) | async fn shutdown(&self) -> Result<(), ToolError>; method supports_http_features (line 37) | fn supports_http_features(&self) -> bool { function write_jsonrpc_line (line 45) | pub async fn write_jsonrpc_line( function spawn_jsonrpc_reader (line 76) | pub fn spawn_jsonrpc_reader( function stream_transport_send (line 129) | pub(crate) async fn stream_transport_send( function test_write_jsonrpc_line_serializes_and_flushes (line 199) | async fn test_write_jsonrpc_line_serializes_and_flushes() { function test_spawn_jsonrpc_reader_dispatches_response (line 222) | async fn test_spawn_jsonrpc_reader_dispatches_response() { function test_spawn_jsonrpc_reader_skips_invalid_lines (line 251) | async fn test_spawn_jsonrpc_reader_skips_invalid_lines() { function test_notification_does_not_resolve_pending_id_zero (line 276) | async fn test_notification_does_not_resolve_pending_id_zero() { FILE: src/tools/mcp/unix_transport.rs type UnixMcpTransport (line 26) | pub struct UnixMcpTransport { method connect (line 41) | pub async fn connect( method socket_path (line 76) | pub(crate) fn socket_path(&self) -> &Path { method server_name (line 82) | pub(crate) fn server_name(&self) -> &str { method send (line 89) | async fn send( method shutdown (line 104) | async fn shutdown(&self) -> Result<(), ToolError> { method supports_http_features (line 125) | fn supports_http_features(&self) -> bool { function test_connect_nonexistent_socket_fails (line 137) | async fn test_connect_nonexistent_socket_fails() { function test_round_trip_via_unix_socket (line 152) | async fn test_round_trip_via_unix_socket() { function test_shutdown_is_idempotent (line 215) | async fn test_shutdown_is_idempotent() { FILE: src/tools/rate_limiter.rs constant MINUTE_SECS (line 27) | const MINUTE_SECS: u64 = 60; constant HOUR_SECS (line 28) | const HOUR_SECS: u64 = 3600; type RateLimitResult (line 32) | pub enum RateLimitResult { method is_allowed (line 50) | pub fn is_allowed(&self) -> bool { type LimitType (line 57) | pub enum LimitType { method fmt (line 63) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type WindowState (line 73) | struct WindowState { method new (line 79) | fn new() -> Self { method maybe_reset (line 87) | fn maybe_reset(&mut self, window_duration: Duration) { method time_until_reset (line 95) | fn time_until_reset(&self, window_duration: Duration) -> Duration { type ToolRateLimitState (line 107) | struct ToolRateLimitState { method new (line 113) | fn new() -> Self { type RateLimiter (line 126) | pub struct RateLimiter { method new (line 132) | pub fn new() -> Self { method check_internal (line 139) | async fn check_internal( method check_and_record (line 191) | pub async fn check_and_record( method check (line 201) | pub async fn check( method get_usage (line 211) | pub async fn get_usage(&self, user_id: &str, tool_name: &str) -> Optio... method clear (line 220) | pub async fn clear(&self, user_id: &str, tool_name: &str) { method clear_all (line 226) | pub async fn clear_all(&self) { method default (line 232) | fn default() -> Self { type RateLimitError (line 240) | pub struct RateLimitError { function from (line 246) | fn from(result: RateLimitResult) -> Self { function test_allowed_within_limits (line 266) | async fn test_allowed_within_limits() { function test_minute_limit_exceeded (line 285) | async fn test_minute_limit_exceeded() { function test_hour_limit_exceeded (line 309) | async fn test_hour_limit_exceeded() { function test_user_isolation (line 329) | async fn test_user_isolation() { function test_tool_isolation (line 345) | async fn test_tool_isolation() { function test_get_usage (line 361) | async fn test_get_usage() { function test_clear (line 374) | async fn test_clear() { function test_read_only_tools_have_no_config (line 389) | async fn test_read_only_tools_have_no_config() { FILE: src/tools/redaction.rs constant REDACTED (line 3) | const REDACTED: &str = "[REDACTED]"; constant SENSITIVE_EXACT (line 4) | const SENSITIVE_EXACT: &[&str] = &[ constant SENSITIVE_PARTS (line 26) | const SENSITIVE_PARTS: &[&str] = &[ constant TOKEN_PARTS (line 36) | const TOKEN_PARTS: &[&str] = &["token", "jwt"]; constant KEY_PARTS (line 37) | const KEY_PARTS: &[&str] = &["key"]; constant CONTEXT_PARTS (line 38) | const CONTEXT_PARTS: &[&str] = &[ function split_camel_case_key_parts (line 56) | fn split_camel_case_key_parts(key: &str) -> Vec { function tokenize_key_parts (line 87) | fn tokenize_key_parts(key: &str) -> Vec { function has_exact (line 101) | fn has_exact(parts: &[String], candidates: &[&str]) -> bool { function has_candidate_or_numbered_variant (line 107) | fn has_candidate_or_numbered_variant(parts: &[String], candidates: &[&st... function has_contextual_suffix (line 121) | fn has_contextual_suffix(parts: &[String], candidates: &[&str]) -> bool { function is_sensitive_key (line 132) | fn is_sensitive_key(key: &str) -> bool { function redact_in_place (line 162) | fn redact_in_place(value: &mut Value) { function redact_object (line 174) | fn redact_object(map: &mut Map) { function redact_sensitive_json (line 184) | pub fn redact_sensitive_json(value: &Value) -> Value { function redacts_exact_sensitive_keys (line 195) | fn redacts_exact_sensitive_keys() { function redacts_nested_sensitive_keys (line 212) | fn redacts_nested_sensitive_keys() { function does_not_over_redact_common_non_sensitive_keys (line 226) | fn does_not_over_redact_common_non_sensitive_keys() { function still_redacts_expected_token_keys (line 235) | fn still_redacts_expected_token_keys() { function redacts_lowercase_digit_suffix_segments (line 246) | fn redacts_lowercase_digit_suffix_segments() { FILE: src/tools/registry.rs constant PROTECTED_TOOL_NAMES (line 38) | const PROTECTED_TOOL_NAMES: &[&str] = &[ type ToolRegistry (line 84) | pub struct ToolRegistry { method tool_definition (line 99) | fn tool_definition(tool: &Arc) -> ToolDefinition { method new (line 109) | pub fn new() -> Self { method with_credentials (line 121) | pub fn with_credentials( method credential_registry (line 132) | pub fn credential_registry(&self) -> Option<&Arc &RateLimiter { method register (line 142) | pub async fn register(&self, tool: Arc) { method register_sync (line 158) | pub fn register_sync(&self, tool: Arc) { method unregister (line 170) | pub async fn unregister(&self, name: &str) -> Option> { method get (line 175) | pub async fn get(&self, name: &str) -> Option> { method has (line 181) | pub async fn has(&self, name: &str) -> bool { method list (line 186) | pub async fn list(&self) -> Vec { method retain_only (line 193) | pub async fn retain_only(&self, names: &[&str]) { method count (line 203) | pub fn count(&self) -> usize { method all (line 208) | pub async fn all(&self) -> Vec> { method builtin_tool_names (line 213) | pub async fn builtin_tool_names(&self) -> std::collections::HashSet Vec { method tool_definitions_for (line 231) | pub async fn tool_definitions_for(&self, names: &[&str]) -> Vec) { method register_orchestrator_tools (line 270) | pub fn register_orchestrator_tools(&self) { method register_container_tools (line 279) | pub fn register_container_tools(&self) { method tool_definitions_for_domain (line 284) | pub async fn tool_definitions_for_domain(&self, domain: ToolDomain) ->... method tool_definitions_excluding (line 298) | pub async fn tool_definitions_excluding(&self, deny: &[&str]) -> Vec) { method register_job_tools (line 357) | pub fn register_job_tools( method register_secrets_tools (line 423) | pub fn register_secrets_tools( method register_extension_tools (line 436) | pub fn register_extension_tools(&self, manager: Arc) { method register_skill_tools (line 451) | pub fn register_skill_tools( method register_routine_tools (line 473) | pub fn register_routine_tools( method register_message_tools (line 505) | pub async fn register_message_tools( method set_message_tool_context (line 530) | pub async fn set_message_tool_context(&self, channel: Option, ... method register_image_tools (line 540) | pub fn register_image_tools( method register_vision_tools (line 565) | pub fn register_vision_tools( method register_builder_tool (line 588) | pub async fn register_builder_tool( method register_wasm (line 630) | pub async fn register_wasm(&self, reg: WasmToolRegistration<'_>) -> Re... method register_wasm_from_storage (line 699) | pub async fn register_wasm_from_storage( method fmt (line 785) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type WasmRegistrationError (line 748) | pub enum WasmRegistrationError { type WasmToolRegistration (line 757) | pub struct WasmToolRegistration<'a> { method default (line 779) | fn default() -> Self { function test_register_and_get (line 799) | async fn test_register_and_get() { function test_list_tools (line 809) | async fn test_list_tools() { function test_tool_definitions (line 818) | async fn test_tool_definitions() { function test_tool_definitions_use_tool_schema (line 828) | async fn test_tool_definitions_use_tool_schema() { function test_builtin_tool_cannot_be_shadowed (line 893) | async fn test_builtin_tool_cannot_be_shadowed() { function test_builtin_tool_names_include_non_protected_sync_tools (line 943) | async fn test_builtin_tool_names_include_non_protected_sync_tools() { function concurrent_register_and_read_no_panic (line 974) | async fn concurrent_register_and_read_no_panic() { function test_tool_definitions_sorted_alphabetically (line 1012) | async fn test_tool_definitions_sorted_alphabetically() { function test_retain_only_filters_tools (line 1058) | async fn test_retain_only_filters_tools() { function test_retain_only_empty_is_noop (line 1071) | async fn test_retain_only_empty_is_noop() { FILE: src/tools/schema_validator.rs function validate_strict_schema (line 33) | pub fn validate_strict_schema( function check_object_schema (line 46) | fn check_object_schema(schema: &serde_json::Value, path: &str) -> Vec bool { type ApprovalContext (line 36) | pub enum ApprovalContext { method autonomous (line 47) | pub fn autonomous() -> Self { method autonomous_with_tools (line 54) | pub fn autonomous_with_tools(tools: impl IntoIterator) ... method is_blocked (line 61) | pub fn is_blocked(&self, tool_name: &str, _requirement: ApprovalRequir... method is_blocked_or_default (line 70) | pub fn is_blocked_or_default( type ToolRateLimitConfig (line 88) | pub struct ToolRateLimitConfig { method new (line 97) | pub fn new(requests_per_minute: u32, requests_per_hour: u32) -> Self { method default (line 107) | fn default() -> Self { type ToolDomain (line 120) | pub enum ToolDomain { type ToolError (line 129) | pub enum ToolError { type ToolOutput (line 154) | pub struct ToolOutput { method success (line 168) | pub fn success(result: serde_json::Value, duration: Duration) -> Self { method text (line 178) | pub fn text(text: impl Into, duration: Duration) -> Self { method with_cost (line 188) | pub fn with_cost(mut self, cost: Decimal) -> Self { method with_raw (line 194) | pub fn with_raw(mut self, raw: impl Into) -> Self { type ToolSchema (line 202) | pub struct ToolSchema { method new (line 210) | pub fn new(name: impl Into, description: impl Into) ->... method with_parameters (line 223) | pub fn with_parameters(mut self, parameters: serde_json::Value) -> Self { type ToolDiscoverySummary (line 231) | pub struct ToolDiscoverySummary { type Tool (line 244) | pub trait Tool: Send + Sync { method name (line 246) | fn name(&self) -> &str; method description (line 249) | fn description(&self) -> &str; method parameters_schema (line 252) | fn parameters_schema(&self) -> serde_json::Value; method execute (line 255) | async fn execute( method estimated_cost (line 262) | fn estimated_cost(&self, _params: &serde_json::Value) -> Option Option bool { method requires_approval (line 285) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRe... method execution_timeout (line 292) | fn execution_timeout(&self) -> Duration { method domain (line 302) | fn domain(&self) -> ToolDomain { method sensitive_params (line 319) | fn sensitive_params(&self) -> &[&str] { method rate_limit_config (line 335) | fn rate_limit_config(&self) -> Option { method webhook_capability (line 343) | fn webhook_capability(&self) -> Option serde_json::Value { method discovery_summary (line 362) | fn discovery_summary(&self) -> Option { method schema (line 367) | fn schema(&self) -> ToolSchema { method name (line 556) | fn name(&self) -> &str { method description (line 560) | fn description(&self) -> &str { method parameters_schema (line 564) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 577) | async fn execute( method requires_sanitization (line 587) | fn requires_sanitization(&self) -> bool { function require_str (line 391) | pub fn require_str<'a>(params: &'a serde_json::Value, name: &str) -> Res... function require_param (line 401) | pub fn require_param<'a>( function redact_params (line 419) | pub fn redact_params(params: &serde_json::Value, sensitive: &[&str]) -> ... constant MAX_SCHEMA_DEPTH (line 463) | const MAX_SCHEMA_DEPTH: usize = 16; function validate_tool_schema (line 465) | pub fn validate_tool_schema(schema: &serde_json::Value, path: &str) -> V... function validate_tool_schema_inner (line 469) | fn validate_tool_schema_inner(schema: &serde_json::Value, path: &str, de... type EchoTool (line 552) | pub struct EchoTool; function test_echo_tool (line 593) | async fn test_echo_tool() { function test_tool_schema (line 606) | fn test_tool_schema() { function test_execution_timeout_default (line 615) | fn test_execution_timeout_default() { function test_require_str_present (line 621) | fn test_require_str_present() { function test_require_str_missing (line 627) | fn test_require_str_missing() { function test_require_str_wrong_type (line 634) | fn test_require_str_wrong_type() { function test_require_param_present (line 641) | fn test_require_param_present() { function test_require_param_missing (line 650) | fn test_require_param_missing() { function test_requires_approval_default (line 657) | fn test_requires_approval_default() { function test_redact_params_replaces_sensitive_key (line 670) | fn test_redact_params_replaces_sensitive_key() { function test_redact_params_empty_sensitive_is_noop (line 680) | fn test_redact_params_empty_sensitive_is_noop() { function test_redact_params_missing_key_is_noop (line 687) | fn test_redact_params_missing_key_is_noop() { function test_redact_params_non_object_is_passthrough (line 694) | fn test_redact_params_non_object_is_passthrough() { function test_validate_schema_valid (line 701) | fn test_validate_schema_valid() { function test_validate_schema_missing_type (line 714) | fn test_validate_schema_missing_type() { function test_validate_schema_wrong_type (line 726) | fn test_validate_schema_wrong_type() { function test_validate_schema_required_not_in_properties (line 736) | fn test_validate_schema_required_not_in_properties() { function test_validate_schema_nested_object (line 750) | fn test_validate_schema_nested_object() { function test_validate_schema_array_missing_items (line 770) | fn test_validate_schema_array_missing_items() { function test_validate_schema_array_with_items_ok (line 783) | fn test_validate_schema_array_with_items_ok() { function test_validate_schema_freeform_property_allowed (line 798) | fn test_validate_schema_freeform_property_allowed() { function test_validate_schema_nested_array_items_object (line 815) | fn test_validate_schema_nested_array_items_object() { function test_validate_schema_nested_array_items_object_bad (line 837) | fn test_validate_schema_nested_array_items_object_bad() { function test_validate_schema_depth_limit (line 863) | fn test_validate_schema_depth_limit() { function test_approval_context_autonomous_blocks_tools_not_in_scope (line 887) | fn test_approval_context_autonomous_blocks_tools_not_in_scope() { function test_approval_context_autonomous_with_tools_allows_registered_name (line 895) | fn test_approval_context_autonomous_with_tools_allows_registered_name() { function test_approval_context_blocks_never_when_not_in_scope (line 905) | fn test_approval_context_blocks_never_when_not_in_scope() { function test_is_blocked_or_default_with_none_uses_legacy (line 911) | fn test_is_blocked_or_default_with_none_uses_legacy() { function test_is_blocked_or_default_with_some_delegates (line 931) | fn test_is_blocked_or_default_with_some_delegates() { FILE: src/tools/wasm/allowlist.rs type AllowlistResult (line 24) | pub enum AllowlistResult { method is_allowed (line 32) | pub fn is_allowed(&self) -> bool { type DenyReason (line 39) | pub enum DenyReason { method fmt (line 55) | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { type AllowlistValidator (line 74) | pub struct AllowlistValidator { method new (line 82) | pub fn new(patterns: Vec) -> Self { method allow_http (line 90) | pub fn allow_http(mut self) -> Self { method validate (line 96) | pub fn validate(&self, url: &str, method: &str) -> AllowlistResult { method host_allowed (line 156) | pub fn host_allowed(&self, host: &str) -> bool { method allowed_hosts (line 161) | pub fn allowed_hosts(&self) -> Vec<&str> { type ParsedUrl (line 167) | struct ParsedUrl { function parse_url (line 174) | fn parse_url(url: &str) -> Result { function normalize_path (line 201) | fn normalize_path(path: &str) -> Result { function has_valid_percent_encoding (line 237) | fn has_valid_percent_encoding(segment: &str) -> bool { function validator_with_patterns (line 261) | fn validator_with_patterns() -> AllowlistValidator { function test_allowed_request (line 272) | fn test_allowed_request() { function test_denied_wrong_host (line 280) | fn test_denied_wrong_host() { function test_denied_wrong_path (line 294) | fn test_denied_wrong_path() { function test_denied_wrong_method (line 308) | fn test_denied_wrong_method() { function test_wildcard_host (line 323) | fn test_wildcard_host() { function test_require_https (line 334) | fn test_require_https() { function test_allow_http (line 348) | fn test_allow_http() { function test_empty_allowlist (line 356) | fn test_empty_allowlist() { function test_userinfo_rejected (line 370) | fn test_userinfo_rejected() { function test_invalid_url (line 385) | fn test_invalid_url() { function test_path_traversal_blocked (line 399) | fn test_path_traversal_blocked() { function test_normalize_path (line 429) | fn test_normalize_path() { function test_invalid_encoded_path_rejected (line 447) | fn test_invalid_encoded_path_rejected() { function test_encoded_separator_rejected (line 459) | fn test_encoded_separator_rejected() { function test_percent_encoding_validator (line 471) | fn test_percent_encoding_validator() { function test_url_with_port (line 481) | fn test_url_with_port() { function test_reject_url_with_userinfo (line 490) | fn test_reject_url_with_userinfo() { function test_reject_url_with_user_pass (line 506) | fn test_reject_url_with_user_pass() { FILE: src/tools/wasm/capabilities.rs type Capabilities (line 26) | pub struct Capabilities { method none (line 41) | pub fn none() -> Self { method with_workspace_read (line 46) | pub fn with_workspace_read(mut self, prefixes: Vec) -> Self { method with_http (line 55) | pub fn with_http(mut self, http: HttpCapability) -> Self { method with_tool_invoke (line 61) | pub fn with_tool_invoke(mut self, aliases: HashMap) ->... method with_secrets (line 70) | pub fn with_secrets(mut self, allowed: Vec) -> Self { type WorkspaceCapability (line 80) | pub struct WorkspaceCapability { method fmt (line 90) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type WorkspaceReader (line 99) | pub trait WorkspaceReader: Send + Sync { method read (line 100) | fn read(&self, path: &str) -> Option; type HttpCapability (line 105) | pub struct HttpCapability { method new (line 135) | pub fn new(allowlist: Vec) -> Self { method with_credential (line 143) | pub fn with_credential(mut self, name: impl Into, mapping: Cre... method with_rate_limit (line 149) | pub fn with_rate_limit(mut self, rate_limit: RateLimitConfig) -> Self { method with_timeout (line 155) | pub fn with_timeout(mut self, timeout: Duration) -> Self { method with_max_request_bytes (line 161) | pub fn with_max_request_bytes(mut self, bytes: usize) -> Self { method with_max_response_bytes (line 167) | pub fn with_max_response_bytes(mut self, bytes: usize) -> Self { method default (line 121) | fn default() -> Self { type EndpointPattern (line 175) | pub struct EndpointPattern { method host (line 186) | pub fn host(host: impl Into) -> Self { method with_path_prefix (line 195) | pub fn with_path_prefix(mut self, prefix: impl Into) -> Self { method with_methods (line 201) | pub fn with_methods(mut self, methods: Vec) -> Self { method matches (line 207) | pub fn matches(&self, url_host: &str, url_path: &str, method: &str) ->... method host_matches (line 236) | pub fn host_matches(&self, url_host: &str) -> bool { type ToolInvokeCapability (line 259) | pub struct ToolInvokeCapability { method new (line 269) | pub fn new(aliases: HashMap) -> Self { method resolve_alias (line 277) | pub fn resolve_alias(&self, alias: &str) -> Option<&str> { type SecretsCapability (line 284) | pub struct SecretsCapability { method is_allowed (line 292) | pub fn is_allowed(&self, name: &str) -> bool { type WebhookCapability (line 315) | pub struct WebhookCapability { function test_capabilities_default_is_none (line 337) | fn test_capabilities_default_is_none() { function test_endpoint_pattern_exact_host (line 347) | fn test_endpoint_pattern_exact_host() { function test_endpoint_pattern_wildcard_host (line 355) | fn test_endpoint_pattern_wildcard_host() { function test_endpoint_pattern_path_prefix (line 365) | fn test_endpoint_pattern_path_prefix() { function test_endpoint_pattern_methods (line 375) | fn test_endpoint_pattern_methods() { function test_secrets_capability_exact_match (line 386) | fn test_secrets_capability_exact_match() { function test_secrets_capability_glob (line 396) | fn test_secrets_capability_glob() { function test_capabilities_builder (line 407) | fn test_capabilities_builder() { FILE: src/tools/wasm/capabilities_schema.rs type CapabilitiesFile (line 43) | pub struct CapabilitiesFile { method from_json (line 111) | pub fn from_json(json: &str) -> Result { method from_bytes (line 118) | pub fn from_bytes(bytes: &[u8]) -> Result { method enforce_limits (line 125) | fn enforce_limits(&mut self) { constant MAX_NESTED_DEPTH (line 157) | const MAX_NESTED_DEPTH: usize = 8; method resolve_nested (line 159) | fn resolve_nested(self) -> Self { method resolve_nested_inner (line 163) | fn resolve_nested_inner(mut self, depth: usize) -> Self { method validate (line 190) | pub fn validate(&self, name: &str) { method to_capabilities (line 240) | pub fn to_capabilities(&self) -> Capabilities { constant MAX_DESCRIPTION_CHARS (line 105) | const MAX_DESCRIPTION_CHARS: usize = 4096; constant MAX_PARAMETERS_SCHEMA_BYTES (line 107) | const MAX_PARAMETERS_SCHEMA_BYTES: usize = 64 * 1024; type HttpCapabilitySchema (line 281) | pub struct HttpCapabilitySchema { method to_http_capability (line 308) | fn to_http_capability(&self) -> HttpCapability { type EndpointPatternSchema (line 344) | pub struct EndpointPatternSchema { method to_endpoint_pattern (line 358) | fn to_endpoint_pattern(&self) -> EndpointPattern { type CredentialMappingSchema (line 369) | pub struct CredentialMappingSchema { method to_credential_mapping (line 382) | fn to_credential_mapping(&self) -> CredentialMapping { type CredentialLocationSchema (line 394) | pub enum CredentialLocationSchema { method to_credential_location (line 417) | fn to_credential_location(&self) -> CredentialLocation { type RateLimitSchema (line 441) | pub struct RateLimitSchema { method to_rate_limit_config (line 460) | fn to_rate_limit_config(&self) -> RateLimitConfig { function default_requests_per_minute (line 451) | fn default_requests_per_minute() -> u32 { function default_requests_per_hour (line 455) | fn default_requests_per_hour() -> u32 { type SecretsCapabilitySchema (line 470) | pub struct SecretsCapabilitySchema { type ToolInvokeCapabilitySchema (line 478) | pub struct ToolInvokeCapabilitySchema { type WorkspaceCapabilitySchema (line 490) | pub struct WorkspaceCapabilitySchema { type WebhookCapabilitySchema (line 498) | pub struct WebhookCapabilitySchema { method to_webhook_capability (line 523) | fn to_webhook_capability(&self) -> WebhookCapability { type AuthCapabilitySchema (line 578) | pub struct AuthCapabilitySchema { type OAuthConfigSchema (line 623) | pub struct OAuthConfigSchema { function default_true (line 669) | fn default_true() -> bool { function default_access_token_field (line 673) | fn default_access_token_field() -> String { type ValidationEndpointSchema (line 679) | pub struct ValidationEndpointSchema { function default_method (line 697) | fn default_method() -> String { function default_success_status (line 701) | fn default_success_status() -> u16 { type ToolSetupSchema (line 707) | pub struct ToolSetupSchema { type ToolSecretSetupSchema (line 715) | pub struct ToolSecretSetupSchema { function test_parse_minimal (line 730) | fn test_parse_minimal() { function test_parse_http_allowlist (line 738) | fn test_parse_http_allowlist() { function test_parse_credentials (line 756) | fn test_parse_credentials() { function test_parse_custom_header_credential (line 780) | fn test_parse_custom_header_credential() { function test_parse_url_path_credential (line 807) | fn test_parse_url_path_credential() { function test_parse_secrets_capability (line 836) | fn test_parse_secrets_capability() { function test_parse_tool_invoke (line 849) | fn test_parse_tool_invoke() { function test_parse_workspace (line 874) | fn test_parse_workspace() { function test_parse_webhook_capability (line 887) | fn test_parse_webhook_capability() { function test_to_capabilities (line 909) | fn test_to_capabilities() { function test_full_slack_example (line 934) | fn test_full_slack_example() { function test_parse_auth_capability (line 966) | fn test_parse_auth_capability() { function test_parse_auth_minimal (line 998) | fn test_parse_auth_minimal() { function test_header_location_with_name_field (line 1015) | fn test_header_location_with_name_field() { function test_header_location_with_header_name_alias (line 1042) | fn test_header_location_with_header_name_alias() { function test_discord_capabilities_file_parses (line 1070) | fn test_discord_capabilities_file_parses() { function test_header_location_missing_name_fails (line 1114) | fn test_header_location_missing_name_fails() { function test_resolve_nested_outer_takes_precedence (line 1138) | fn test_resolve_nested_outer_takes_precedence() { function test_resolve_nested_doubly_nested (line 1160) | fn test_resolve_nested_doubly_nested() { function test_resolve_nested_all_fields_promoted (line 1181) | fn test_resolve_nested_all_fields_promoted() { function test_parse_tool_setup_schema (line 1208) | fn test_parse_tool_setup_schema() { function test_resolve_nested_setup_promoted (line 1236) | fn test_resolve_nested_setup_promoted() { function test_validate_setup_without_auth_warns (line 1257) | fn test_validate_setup_without_auth_warns() { function test_validate_manual_auth_missing_fields (line 1273) | fn test_validate_manual_auth_missing_fields() { function test_validate_clean_tool (line 1287) | fn test_validate_clean_tool() { function test_resolve_nested_empty_capabilities_noop (line 1311) | fn test_resolve_nested_empty_capabilities_noop() { function test_parse_description_and_parameters (line 1331) | fn test_parse_description_and_parameters() { function test_parse_description_only (line 1362) | fn test_parse_description_only() { function test_parse_without_description_or_parameters (line 1376) | fn test_parse_without_description_or_parameters() { function test_resolve_nested_description_promoted (line 1395) | fn test_resolve_nested_description_promoted() { function test_resolve_nested_outer_description_takes_precedence (line 1422) | fn test_resolve_nested_outer_description_takes_precedence() { function test_resolve_nested_depth_limit (line 1442) | fn test_resolve_nested_depth_limit() { function test_description_truncated_at_limit (line 1456) | fn test_description_truncated_at_limit() { function test_oversized_parameters_schema_dropped (line 1471) | fn test_oversized_parameters_schema_dropped() { FILE: src/tools/wasm/credential_injector.rs type InjectionError (line 34) | pub enum InjectionError { method from (line 52) | fn from(e: SecretError) -> Self { type SharedCredentialRegistry (line 68) | pub struct SharedCredentialRegistry { method new (line 74) | pub fn new() -> Self { method add_mappings (line 81) | pub fn add_mappings(&self, mappings: impl IntoIterator bool { method find_for_host (line 133) | pub fn find_for_host(&self, host: &str) -> Vec { method default (line 157) | fn default() -> Self { type InjectedCredentials (line 164) | pub struct InjectedCredentials { method empty (line 172) | pub fn empty() -> Self { method is_empty (line 179) | pub fn is_empty(&self) -> bool { type CredentialInjector (line 185) | pub struct CredentialInjector { method new (line 192) | pub fn new(mappings: HashMap, allowed_secre... method find_credentials_for_host (line 200) | pub fn find_credentials_for_host(&self, host: &str) -> Vec<&Credential... method inject (line 215) | pub async fn inject( method is_secret_allowed (line 256) | fn is_secret_allowed(&self, name: &str) -> bool { function inject_credential (line 274) | pub(crate) fn inject_credential( function host_matches_pattern (line 313) | pub(crate) fn host_matches_pattern(host: &str, pattern: &str) -> bool { function base64_encode (line 333) | fn base64_encode(input: &[u8]) -> String { function test_store (line 378) | fn test_store() -> InMemorySecretsStore { function test_host_matches_exact (line 383) | fn test_host_matches_exact() { function test_host_matches_wildcard (line 389) | fn test_host_matches_wildcard() { function test_base64_encode (line 396) | fn test_base64_encode() { function test_inject_bearer (line 402) | async fn test_inject_bearer() { function test_inject_custom_header (line 435) | async fn test_inject_custom_header() { function test_inject_basic_auth (line 468) | async fn test_inject_basic_auth() { function test_no_credentials_for_host (line 499) | async fn test_no_credentials_for_host() { function test_access_denied_for_secret (line 512) | async fn test_access_denied_for_secret() { function test_shared_registry_empty (line 541) | fn test_shared_registry_empty() { function test_shared_registry_add_and_find (line 548) | fn test_shared_registry_add_and_find() { function test_shared_registry_wildcard_host (line 564) | fn test_shared_registry_wildcard_host() { function test_shared_registry_multiple_adds (line 574) | fn test_shared_registry_multiple_adds() { function test_shared_registry_remove_mappings_for_secrets (line 584) | fn test_shared_registry_remove_mappings_for_secrets() { function test_shared_registry_remove_nonexistent_is_noop (line 605) | fn test_shared_registry_remove_nonexistent_is_noop() { function test_shared_registry_thread_safety (line 614) | fn test_shared_registry_thread_safety() { FILE: src/tools/wasm/error.rs type WasmError (line 7) | pub enum WasmError { method from (line 89) | fn from(e: std::io::Error) -> Self { function from (line 95) | fn from(e: WasmError) -> Self { function test_error_display (line 105) | fn test_error_display() { function test_conversion_to_tool_error (line 118) | fn test_conversion_to_tool_error() { function test_tool_returned_error_without_hint (line 130) | fn test_tool_returned_error_without_hint() { function test_tool_returned_error_with_hint (line 141) | fn test_tool_returned_error_with_hint() { FILE: src/tools/wasm/host.rs constant MAX_LOG_ENTRIES (line 31) | const MAX_LOG_ENTRIES: usize = 1000; constant MAX_LOG_MESSAGE_BYTES (line 34) | const MAX_LOG_MESSAGE_BYTES: usize = 4096; type LogLevel (line 38) | pub enum LogLevel { method fmt (line 47) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type LogEntry (line 60) | pub struct LogEntry { type HostState (line 70) | pub struct HostState { method fmt (line 88) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { method new (line 102) | pub fn new(capabilities: Capabilities) -> Self { method new_with_user (line 115) | pub fn new_with_user(capabilities: Capabilities, user_id: impl Into Self { method user_id (line 133) | pub fn user_id(&self) -> Option<&str> { method capabilities (line 138) | pub fn capabilities(&self) -> &Capabilities { method log (line 145) | pub fn log(&mut self, level: LogLevel, message: String) -> Result<(), ... method now_millis (line 185) | pub fn now_millis(&self) -> u64 { method workspace_read (line 193) | pub fn workspace_read(&self, path: &str) -> Result, Was... method take_logs (line 227) | pub fn take_logs(&mut self) -> Vec { method logs_dropped (line 232) | pub fn logs_dropped(&self) -> usize { method secret_exists (line 242) | pub fn secret_exists(&self, name: &str) -> bool { method check_http_allowed (line 255) | pub fn check_http_allowed(&self, url: &str, method: &str) -> Result<()... method check_tool_invoke_allowed (line 278) | pub fn check_tool_invoke_allowed(&self, alias: &str) -> Result Result<(), String> { method record_tool_invoke (line 320) | pub fn record_tool_invoke(&mut self) -> Result<(), String> { method http_request_count (line 335) | pub fn http_request_count(&self) -> u32 { method tool_invoke_count (line 340) | pub fn tool_invoke_count(&self) -> u32 { function validate_workspace_path (line 348) | fn validate_workspace_path(path: &str) -> Result<(), WasmError> { type MockReader (line 391) | struct MockReader { method read (line 396) | fn read(&self, _path: &str) -> Option { function test_logging_basic (line 402) | fn test_logging_basic() { function test_logging_rate_limit (line 415) | fn test_logging_rate_limit() { function test_logging_truncation (line 435) | fn test_logging_truncation() { function test_now_millis (line 447) | fn test_now_millis() { function test_workspace_read_no_capability (line 455) | fn test_workspace_read_no_capability() { function test_workspace_read_with_capability (line 462) | fn test_workspace_read_with_capability() { function test_workspace_read_prefix_restriction (line 481) | fn test_workspace_read_prefix_restriction() { function test_path_validation_blocks_traversal (line 506) | fn test_path_validation_blocks_traversal() { function test_path_validation_blocks_absolute (line 513) | fn test_path_validation_blocks_absolute() { function test_path_validation_blocks_null_bytes (line 519) | fn test_path_validation_blocks_null_bytes() { function test_path_validation_blocks_windows_paths (line 524) | fn test_path_validation_blocks_windows_paths() { function test_path_validation_allows_valid_paths (line 530) | fn test_path_validation_allows_valid_paths() { function test_secret_exists_no_capability (line 538) | fn test_secret_exists_no_capability() { function test_secret_exists_with_capability (line 544) | fn test_secret_exists_with_capability() { function test_http_request_rate_limit (line 566) | fn test_http_request_rate_limit() { function test_tool_invoke_rate_limit (line 584) | fn test_tool_invoke_rate_limit() { function test_new_with_user (line 602) | fn test_new_with_user() { FILE: src/tools/wasm/limits.rs constant DEFAULT_MEMORY_LIMIT (line 10) | pub const DEFAULT_MEMORY_LIMIT: u64 = 10 * 1024 * 1024; constant DEFAULT_FUEL_LIMIT (line 13) | pub const DEFAULT_FUEL_LIMIT: u64 = 10_000_000; constant DEFAULT_TIMEOUT (line 16) | pub const DEFAULT_TIMEOUT: Duration = Duration::from_secs(60); type ResourceLimits (line 20) | pub struct ResourceLimits { method with_memory (line 41) | pub fn with_memory(mut self, bytes: u64) -> Self { method with_fuel (line 47) | pub fn with_fuel(mut self, fuel: u64) -> Self { method with_timeout (line 53) | pub fn with_timeout(mut self, timeout: Duration) -> Self { method default (line 30) | fn default() -> Self { type WasmResourceLimiter (line 63) | pub struct WasmResourceLimiter { method new (line 79) | pub fn new(memory_limit: u64) -> Self { method memory_used (line 89) | pub fn memory_used(&self) -> u64 { method memory_limit (line 94) | pub fn memory_limit(&self) -> u64 { method memory_growing (line 100) | fn memory_growing( method table_growing (line 128) | fn table_growing( method instances (line 146) | fn instances(&self) -> usize { method tables (line 150) | fn tables(&self) -> usize { method memories (line 154) | fn memories(&self) -> usize { type FuelConfig (line 162) | pub struct FuelConfig { method disabled (line 180) | pub fn disabled() -> Self { method with_limit (line 188) | pub fn with_limit(fuel: u64) -> Self { method default (line 170) | fn default() -> Self { function test_default_limits (line 205) | fn test_default_limits() { function test_limits_builder (line 213) | fn test_limits_builder() { function test_resource_limiter_allows_growth_within_limit (line 225) | fn test_resource_limiter_allows_growth_within_limit() { function test_resource_limiter_denies_growth_beyond_limit (line 235) | fn test_resource_limiter_denies_growth_beyond_limit() { function test_fuel_config (line 244) | fn test_fuel_config() { FILE: src/tools/wasm/loader.rs type WasmLoadError (line 51) | pub enum WasmLoadError { type WasmToolLoader (line 81) | pub struct WasmToolLoader { method new (line 89) | pub fn new(runtime: Arc, registry: Arc)... method with_secrets_store (line 98) | pub fn with_secrets_store(mut self, store: Arc Result Option bool { method success_count (line 492) | pub fn success_count(&self) -> usize { method error_count (line 497) | pub fn error_count(&self) -> usize { constant CARGO_MANIFEST_DIR (line 503) | const CARGO_MANIFEST_DIR: &str = env!("CARGO_MANIFEST_DIR"); function resolve_wasm_target_dir (line 510) | pub fn resolve_wasm_target_dir(crate_dir: &Path) -> PathBuf { function wasm_artifact_path (line 524) | pub fn wasm_artifact_path(crate_dir: &Path, binary_name: &str) -> PathBuf { function tools_src_dir (line 535) | fn tools_src_dir() -> PathBuf { function discover_dev_tools (line 549) | pub async fn discover_dev_tools() -> Result Result super::WasmToolLoader { function test_tool_name_rejects_path_separators (line 999) | async fn test_tool_name_rejects_path_separators() { function test_tool_name_rejects_empty (line 1025) | async fn test_tool_name_rejects_empty() { function test_load_nonexistent_wasm_file (line 1043) | async fn test_load_nonexistent_wasm_file() { function test_load_invalid_wasm_bytes (line 1061) | async fn test_load_invalid_wasm_bytes() { function test_discover_skips_dotfiles (line 1087) | async fn test_discover_skips_dotfiles() { function test_discover_tools_ignores_subdirectories (line 1112) | async fn test_discover_tools_ignores_subdirectories() { function load_from_dir_returns_empty_when_dir_missing (line 1138) | async fn load_from_dir_returns_empty_when_dir_missing() { FILE: src/tools/wasm/mod.rs constant WIT_TOOL_VERSION (line 80) | pub const WIT_TOOL_VERSION: &str = "0.3.0"; constant WIT_CHANNEL_VERSION (line 83) | pub const WIT_CHANNEL_VERSION: &str = "0.3.0"; FILE: src/tools/wasm/runtime.rs constant EPOCH_TICK_INTERVAL (line 19) | pub const EPOCH_TICK_INTERVAL: Duration = Duration::from_millis(500); function enable_compilation_cache (line 30) | pub fn enable_compilation_cache( type WasmRuntimeConfig (line 75) | pub struct WasmRuntimeConfig { method for_testing (line 102) | pub fn for_testing() -> Self { method default (line 89) | fn default() -> Self { type PreparedModule (line 121) | pub struct PreparedModule { method component (line 138) | pub fn component(&self) -> &wasmtime::component::Component { method fmt (line 144) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type WasmToolRuntime (line 156) | pub struct WasmToolRuntime { method new (line 167) | pub fn new(config: WasmRuntimeConfig) -> Result { method engine (line 235) | pub fn engine(&self) -> &Engine { method config (line 240) | pub fn config(&self) -> &WasmRuntimeConfig { method prepare (line 248) | pub async fn prepare( method get (line 324) | pub async fn get(&self, name: &str) -> Option> { method remove (line 329) | pub async fn remove(&self, name: &str) -> Option> { method list (line 334) | pub async fn list(&self) -> Vec { method clear (line 339) | pub async fn clear(&self) { method fmt (line 345) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { function test_runtime_config_default (line 359) | fn test_runtime_config_default() { function test_runtime_config_for_testing (line 366) | fn test_runtime_config_for_testing() { function test_runtime_creation (line 373) | fn test_runtime_creation() { function test_module_cache_operations (line 381) | async fn test_module_cache_operations() { function test_prepared_module_limits (line 391) | fn test_prepared_module_limits() { function test_enable_compilation_cache_with_explicit_dir (line 406) | fn test_enable_compilation_cache_with_explicit_dir() { function test_enable_compilation_cache_label_isolation (line 434) | fn test_enable_compilation_cache_label_isolation() { function test_runtime_creation_without_tools_dir (line 464) | fn test_runtime_creation_without_tools_dir() { FILE: src/tools/wasm/storage.rs type TrustLevel (line 30) | pub enum TrustLevel { method fmt (line 40) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type Err (line 50) | type Err = String; method from_str (line 52) | fn from_str(s: &str) -> Result { type ToolStatus (line 64) | pub enum ToolStatus { method fmt (line 74) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type Err (line 84) | type Err = String; method from_str (line 86) | fn from_str(s: &str) -> Result { type StoredWasmTool (line 98) | pub struct StoredWasmTool { type StoredWasmToolWithBinary (line 115) | pub struct StoredWasmToolWithBinary { type StoredCapabilities (line 123) | pub struct StoredCapabilities { method to_capabilities (line 139) | pub fn to_capabilities(&self) -> Capabilities { type WasmStorageError (line 186) | pub enum WasmStorageError { type WasmToolStore (line 208) | pub trait WasmToolStore: Send + Sync { method store (line 210) | async fn store(&self, params: StoreToolParams) -> Result Result Result, Was... method update_status (line 232) | async fn update_status( method delete (line 240) | async fn delete(&self, user_id: &str, name: &str) -> Result Result Result Result, Was... method update_status (line 511) | async fn update_status( method delete (line 538) | async fn delete(&self, user_id: &str, name: &str) -> Result Result Result Result, Was... method update_status (line 882) | async fn update_status( method delete (line 906) | async fn delete(&self, user_id: &str, name: &str) -> Result Vec { function verify_binary_integrity (line 263) | pub fn verify_binary_integrity(binary: &[u8], expected_hash: &[u8]) -> b... type PostgresWasmToolStore (line 270) | pub struct PostgresWasmToolStore { method new (line 276) | pub fn new(pool: Pool) -> Self { function row_to_tool (line 558) | fn row_to_tool(row: &tokio_postgres::Row) -> Result) -> Self { method connect (line 597) | async fn connect(&self) -> Result { function libsql_wasm_opt_text (line 921) | fn libsql_wasm_opt_text(s: Option<&str>) -> libsql::Value { function libsql_wasm_parse_ts (line 929) | fn libsql_wasm_parse_ts(s: &str) -> Result, WasmStorageErr... function libsql_row_to_tool (line 950) | fn libsql_row_to_tool(row: &libsql::Row) -> Result Result String { method redact_credentials (line 153) | fn redact_credentials(&self, text: &str) -> String { method inject_host_credentials (line 172) | fn inject_host_credentials( method log (line 238) | fn log(&mut self, level: near::agent::host::LogLevel, message: String) { method now_millis (line 249) | fn now_millis(&mut self) -> u64 { method workspace_read (line 253) | fn workspace_read(&mut self, path: String) -> Option { method http_request (line 257) | fn http_request( method tool_invoke (line 441) | fn tool_invoke(&mut self, alias: String, _params_json: String) -> Resu... method secret_exists (line 451) | fn secret_exists(&mut self, name: String) -> bool { method ctx (line 224) | fn ctx(&mut self) -> &mut WasiCtx { method table (line 228) | fn table(&mut self) -> &mut ResourceTable { type WasmToolWrapper (line 459) | pub struct WasmToolWrapper { method new (line 553) | pub fn new( method with_description (line 571) | pub fn with_description(mut self, description: impl Into) -> S... method with_schema (line 577) | pub fn with_schema(mut self, schema: serde_json::Value) -> Self { method with_credentials (line 597) | pub fn with_credentials(mut self, credentials: HashMap... method with_secrets_store (line 607) | pub fn with_secrets_store(mut self, store: Arc Self { method limits (line 622) | pub fn limits(&self) -> &ResourceLimits { method add_host_functions (line 631) | fn add_host_functions(linker: &mut Linker) -> Result<(), Wa... method execute_sync (line 644) | fn execute_sync( method fmt (line 927) | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { type WasmToolSchemas (line 482) | struct WasmToolSchemas { method permissive_schema (line 496) | fn permissive_schema() -> serde_json::Value { method is_permissive_schema (line 504) | fn is_permissive_schema(schema: &serde_json::Value) -> bool { method typed_property_count (line 511) | fn typed_property_count(schema: &serde_json::Value) -> usize { method new (line 524) | fn new(discovery: serde_json::Value) -> Self { method with_override (line 531) | fn with_override(&self, schema: serde_json::Value) -> Self { method is_advertised_permissive (line 538) | fn is_advertised_permissive(&self) -> bool { method advertised (line 542) | fn advertised(&self) -> serde_json::Value { method discovery (line 546) | fn discovery(&self) -> serde_json::Value { function extract_wasm_metadata (line 747) | pub(super) fn extract_wasm_metadata( method name (line 795) | fn name(&self) -> &str { method description (line 799) | fn description(&self) -> &str { method parameters_schema (line 803) | fn parameters_schema(&self) -> serde_json::Value { method discovery_schema (line 807) | fn discovery_schema(&self) -> serde_json::Value { method schema (line 817) | fn schema(&self) -> crate::tools::tool::ToolSchema { method execute (line 833) | async fn execute( method requires_sanitization (line 911) | fn requires_sanitization(&self) -> bool { method estimated_duration (line 916) | fn estimated_duration(&self, _params: &serde_json::Value) -> Option Option Option { function reject_private_ip (line 1245) | fn reject_private_ip(url: &str) -> Result<(), String> { function is_private_ip (line 1302) | fn is_private_ip(ip: std::net::IpAddr) -> bool { function schema_contains_container_properties (line 1322) | fn schema_contains_container_properties(schema: &serde_json::Value) -> b... function schema_declares_type (line 1334) | fn schema_declares_type(schema: &serde_json::Value, expected: &str) -> b... function schema_is_typed_property (line 1354) | fn schema_is_typed_property(schema: &serde_json::Value) -> bool { function build_tool_usage_hint (line 1372) | fn build_tool_usage_hint(tool_name: &str, schema: &serde_json::Value) ->... type RecordingSecretsStore (line 1409) | struct RecordingSecretsStore { method new (line 1415) | fn new() -> Self { method decrypted_lookups (line 1422) | fn decrypted_lookups(&self) -> Vec<(String, String)> { method create (line 1429) | async fn create( method get (line 1437) | async fn get(&self, user_id: &str, name: &str) -> Result Result Result, SecretErro... method delete (line 1461) | async fn delete(&self, user_id: &str, name: &str) -> Result Result<(), SecretError> { method is_accessible (line 1469) | async fn is_accessible( function test_wrapper_creation (line 1482) | fn test_wrapper_creation() { function test_advertised_schema_stays_permissive_until_sidecar_override (line 1493) | async fn test_advertised_schema_stays_permissive_until_sidecar_override() { function test_capabilities_default (line 1571) | fn test_capabilities_default() { function test_extract_host_from_url (line 1580) | fn test_extract_host_from_url() { function test_inject_host_credentials_bearer (line 1613) | fn test_inject_host_credentials_bearer() { function test_inject_host_credentials_query_params (line 1655) | fn test_inject_host_credentials_query_params() { function test_redact_credentials_includes_host_credentials (line 1685) | fn test_redact_credentials_includes_host_credentials() { function test_resolve_host_credentials_no_store (line 1710) | async fn test_resolve_host_credentials_no_store() { function test_resolve_host_credentials_no_http_cap (line 1719) | async fn test_resolve_host_credentials_no_http_cap() { function test_resolve_host_credentials_bearer (line 1730) | async fn test_resolve_host_credentials_bearer() { function test_resolve_host_credentials_owner_scope_bearer (line 1777) | async fn test_resolve_host_credentials_owner_scope_bearer() { function test_execute_resolves_host_credentials_from_owner_scope_context (line 1824) | async fn test_execute_resolves_host_credentials_from_owner_scope_context... function test_resolve_host_credentials_missing_secret (line 1875) | async fn test_resolve_host_credentials_missing_secret() { function test_resolve_host_credentials_skips_refresh_when_not_expired (line 1908) | async fn test_resolve_host_credentials_skips_refresh_when_not_expired() { function test_resolve_host_credentials_skips_refresh_no_config (line 1967) | async fn test_resolve_host_credentials_skips_refresh_no_config() { function test_resolve_host_credentials_skips_refresh_no_expires_at (line 2012) | async fn test_resolve_host_credentials_skips_refresh_no_expires_at() { function test_is_private_ip_v4 (line 2069) | fn test_is_private_ip_v4() { function test_is_private_ip_v6 (line 2098) | fn test_is_private_ip_v6() { function test_reject_private_ip_loopback (line 2112) | fn test_reject_private_ip_loopback() { function test_reject_private_ip_internal (line 2119) | fn test_reject_private_ip_internal() { function test_reject_private_ip_public_ok (line 2125) | fn test_reject_private_ip_public_ok() { function test_untyped_override_preserves_extracted_discovery_schema (line 2132) | async fn test_untyped_override_preserves_extracted_discovery_schema() { function test_build_tool_usage_hint_detects_nullable_container_properties (line 2171) | fn test_build_tool_usage_hint_detects_nullable_container_properties() { function test_leak_scan_runs_before_credential_injection (line 2192) | fn test_leak_scan_runs_before_credential_injection() { function test_resolve_host_credentials_fallback_to_default_user (line 2241) | async fn test_resolve_host_credentials_fallback_to_default_user() { function test_capabilities_with_google_oauth (line 2287) | fn test_capabilities_with_google_oauth() -> Capabilities { function test_resolve_host_credentials_prefers_user_specific_over_default (line 2314) | async fn test_resolve_host_credentials_prefers_user_specific_over_defaul... function test_resolve_host_credentials_no_fallback_when_already_default (line 2353) | async fn test_resolve_host_credentials_no_fallback_when_already_default() { function test_resolve_host_credentials_missing_secret_warns (line 2380) | async fn test_resolve_host_credentials_missing_secret_warns() { FILE: src/tracing_fmt.rs function init_cli_tracing (line 28) | pub fn init_cli_tracing() { function init_worker_tracing (line 37) | pub fn init_worker_tracing() { constant TERMINAL_MAX_EVENT_BYTES (line 46) | const TERMINAL_MAX_EVENT_BYTES: usize = 500; type TruncatingStderr (line 55) | pub struct TruncatingStderr { method with_max_bytes (line 69) | fn with_max_bytes(max_bytes: usize) -> Self { type Writer (line 75) | type Writer = EventBuffer; method make_writer (line 77) | fn make_writer(&'a self) -> Self::Writer { method default (line 60) | fn default() -> Self { type EventBuffer (line 88) | pub struct EventBuffer { method write (line 97) | fn write(&mut self, data: &[u8]) -> io::Result { method flush (line 102) | fn flush(&mut self) -> io::Result<()> { function utf8_floor (line 112) | fn utf8_floor(bytes: &[u8], pos: usize) -> usize { method drop (line 123) | fn drop(&mut self) { function test_buffer (line 177) | fn test_buffer(max_bytes: usize) -> (EventBuffer, Arc>>) { function test_short_event_not_truncated (line 188) | fn test_short_event_not_truncated() { function test_long_event_truncated (line 198) | fn test_long_event_truncated() { function test_utf8_boundary_safe (line 218) | fn test_utf8_boundary_safe() { function test_utf8_floor_basic (line 251) | fn test_utf8_floor_basic() { function test_multiple_writes_accumulated (line 267) | fn test_multiple_writes_accumulated() { function test_empty_buffer_no_output (line 278) | fn test_empty_buffer_no_output() { function test_default_max_bytes (line 288) | fn test_default_max_bytes() { function test_custom_max_bytes (line 294) | fn test_custom_max_bytes() { function test_exactly_at_limit_not_truncated (line 300) | fn test_exactly_at_limit_not_truncated() { function test_one_over_limit_truncated (line 310) | fn test_one_over_limit_truncated() { function test_4byte_utf8_boundary (line 321) | fn test_4byte_utf8_boundary() { FILE: src/transcription/chat_completions.rs type ChatCompletionsTranscriptionProvider (line 20) | pub struct ChatCompletionsTranscriptionProvider { method new (line 29) | pub fn new(api_key: SecretString) -> Self { method with_base_url (line 50) | pub fn with_base_url(mut self, base_url: impl Into) -> Self { method with_model (line 56) | pub fn with_model(mut self, model: impl Into) -> Self { function audio_format_str (line 63) | fn audio_format_str(format: AudioFormat) -> &'static str { method transcribe (line 77) | async fn transcribe( function audio_format_str_maps_all_variants (line 162) | fn audio_format_str_maps_all_variants() { function rejects_empty_audio (line 173) | async fn rejects_empty_audio() { FILE: src/transcription/mod.rs type AudioFormat (line 17) | pub enum AudioFormat { method from_mime_type (line 29) | pub fn from_mime_type(mime: &str) -> Option { method extension (line 44) | pub fn extension(&self) -> &'static str { type TranscriptionError (line 59) | pub enum TranscriptionError { type TranscriptionProvider (line 72) | pub trait TranscriptionProvider: Send + Sync { method transcribe (line 74) | async fn transcribe( method transcribe (line 175) | async fn transcribe( type TranscriptionMiddleware (line 86) | pub struct TranscriptionMiddleware { method new (line 92) | pub fn new(provider: Box) -> Self { method process (line 101) | pub async fn process(&self, msg: &mut crate::channels::IncomingMessage) { type MockProvider (line 169) | struct MockProvider { function voice_attachment (line 187) | fn voice_attachment(data: Vec) -> IncomingAttachment { function middleware_transcribes_audio_attachment (line 203) | async fn middleware_transcribes_audio_attachment() { function middleware_skips_empty_audio_data (line 221) | async fn middleware_skips_empty_audio_data() { function middleware_skips_already_transcribed (line 236) | async fn middleware_skips_already_transcribed() { function middleware_preserves_existing_content (line 256) | async fn middleware_preserves_existing_content() { function audio_format_from_mime (line 274) | fn audio_format_from_mime() { FILE: src/transcription/openai.rs type OpenAiWhisperProvider (line 12) | pub struct OpenAiWhisperProvider { method new (line 21) | pub fn new(api_key: SecretString) -> Self { method with_base_url (line 42) | pub fn with_base_url(mut self, base_url: impl Into) -> Self { method with_model (line 53) | pub fn with_model(mut self, model: impl Into) -> Self { method transcribe (line 61) | async fn transcribe( FILE: src/tunnel/cloudflare.rs type CloudflareTunnel (line 13) | pub struct CloudflareTunnel { method new (line 20) | pub fn new(token: String) -> Self { method name (line 31) | fn name(&self) -> &str { method start (line 35) | async fn start(&self, local_host: &str, local_port: u16) -> Result Result<()> { method health_check (line 142) | async fn health_check(&self) -> bool { method public_url (line 147) | fn public_url(&self) -> Option { function constructor_stores_token (line 157) | fn constructor_stores_token() { function public_url_none_before_start (line 163) | fn public_url_none_before_start() { function stop_without_start_is_ok (line 168) | async fn stop_without_start_is_ok() { function health_false_before_start (line 173) | async fn health_false_before_start() { FILE: src/tunnel/custom.rs type CustomTunnel (line 24) | pub struct CustomTunnel { method new (line 33) | pub fn new( method name (line 50) | fn name(&self) -> &str { method start (line 54) | async fn start(&self, local_host: &str, local_port: u16) -> Result Result<()> { method health_check (line 141) | async fn health_check(&self) -> bool { method public_url (line 155) | fn public_url(&self) -> Option { function extract_url (line 161) | fn extract_url(line: &str) -> Option { function empty_command_returns_error (line 175) | async fn empty_command_returns_error() { function start_without_pattern_returns_local (line 188) | async fn start_without_pattern_returns_local() { function start_with_pattern_extracts_url (line 196) | async fn start_with_pattern_extracts_url() { function pattern_filters_non_matching_urls (line 208) | async fn pattern_filters_non_matching_urls() { function replaces_host_and_port_placeholders (line 223) | async fn replaces_host_and_port_placeholders() { function health_with_unreachable_url_is_false (line 235) | async fn health_with_unreachable_url_is_false() { function extract_url_finds_https (line 249) | fn extract_url_finds_https() { function extract_url_finds_http (line 257) | fn extract_url_finds_http() { function extract_url_none_when_absent (line 265) | fn extract_url_none_when_absent() { function stdout_drain_prevents_zombie (line 270) | async fn stdout_drain_prevents_zombie() { FILE: src/tunnel/mod.rs type SharedUrl (line 33) | pub(crate) type SharedUrl = Arc>>; function new_shared_url (line 35) | pub(crate) fn new_shared_url() -> SharedUrl { type Tunnel (line 46) | pub trait Tunnel: Send + Sync { method name (line 48) | fn name(&self) -> &str; method start (line 52) | async fn start(&self, local_host: &str, local_port: u16) -> Result Result<()>; method health_check (line 58) | async fn health_check(&self) -> bool; method public_url (line 61) | fn public_url(&self) -> Option; type TunnelProcess (line 67) | pub(crate) struct TunnelProcess { type SharedProcess (line 71) | pub(crate) type SharedProcess = Arc>>; function new_shared_process (line 73) | pub(crate) fn new_shared_process() -> SharedProcess { function kill_shared (line 78) | pub(crate) async fn kill_shared(proc: &SharedProcess) -> Result<()> { type CloudflareTunnelConfig (line 92) | pub struct CloudflareTunnelConfig { type TailscaleTunnelConfig (line 99) | pub struct TailscaleTunnelConfig { type NgrokTunnelConfig (line 108) | pub struct NgrokTunnelConfig { type CustomTunnelConfig (line 117) | pub struct CustomTunnelConfig { type TunnelProviderConfig (line 128) | pub struct TunnelProviderConfig { function create_tunnel (line 140) | pub fn create_tunnel(config: &TunnelProviderConfig) -> Result) -> Self { method name (line 33) | fn name(&self) -> &str { method start (line 37) | async fn start(&self, local_host: &str, local_port: u16) -> Result Result<()> { method health_check (line 143) | async fn health_check(&self) -> bool { method public_url (line 148) | fn public_url(&self) -> Option { function constructor_stores_domain (line 158) | fn constructor_stores_domain() { function public_url_none_before_start (line 164) | fn public_url_none_before_start() { function stop_without_start_is_ok (line 169) | async fn stop_without_start_is_ok() { function health_false_before_start (line 174) | async fn health_false_before_start() { FILE: src/tunnel/none.rs type NoneTunnel (line 8) | pub struct NoneTunnel; method name (line 12) | fn name(&self) -> &str { method start (line 16) | async fn start(&self, local_host: &str, local_port: u16) -> Result Result<()> { method health_check (line 24) | async fn health_check(&self) -> bool { method public_url (line 28) | fn public_url(&self) -> Option { function name_is_none (line 38) | fn name_is_none() { function start_returns_local_url (line 43) | async fn start_returns_local_url() { function stop_is_noop (line 49) | async fn stop_is_noop() { function health_is_always_true (line 54) | async fn health_is_always_true() { function public_url_is_always_none (line 59) | fn public_url_is_always_none() { FILE: src/tunnel/tailscale.rs type TailscaleTunnel (line 13) | pub struct TailscaleTunnel { method new (line 21) | pub fn new(funnel: bool, hostname: Option) -> Self { method name (line 33) | fn name(&self) -> &str { method start (line 37) | async fn start(&self, local_host: &str, local_port: u16) -> Result Result<()> { method health_check (line 121) | async fn health_check(&self) -> bool { method public_url (line 138) | fn public_url(&self) -> Option { function constructor_stores_hostname_and_mode (line 148) | fn constructor_stores_hostname_and_mode() { function public_url_none_before_start (line 155) | fn public_url_none_before_start() { function health_false_before_start (line 160) | async fn health_false_before_start() { function stop_without_start_is_ok (line 165) | async fn stop_without_start_is_ok() { FILE: src/util.rs function floor_char_boundary (line 8) | pub fn floor_char_boundary(s: &str, pos: usize) -> usize { function llm_signals_completion (line 24) | pub fn llm_signals_completion(response: &str) -> bool { function floor_char_boundary_at_valid_boundary (line 80) | fn floor_char_boundary_at_valid_boundary() { function floor_char_boundary_mid_multibyte_char (line 85) | fn floor_char_boundary_mid_multibyte_char() { function floor_char_boundary_past_end (line 92) | fn floor_char_boundary_past_end() { function floor_char_boundary_at_zero (line 97) | fn floor_char_boundary_at_zero() { function floor_char_boundary_empty_string (line 102) | fn floor_char_boundary_empty_string() { function signals_completion_positive (line 109) | fn signals_completion_positive() { function signals_completion_negative (line 136) | fn signals_completion_negative() { function signals_completion_no_bare_substrings (line 149) | fn signals_completion_no_bare_substrings() { function signals_completion_tool_output_injection (line 171) | fn signals_completion_tool_output_injection() { FILE: src/webhooks/mod.rs type RoutineEngineSlot (line 24) | pub type RoutineEngineSlot = Arc Router { function tool_webhook_health (line 72) | async fn tool_webhook_health( function tool_webhook_handler (line 94) | async fn tool_webhook_handler( function tool_webhook_with_rest_handler (line 105) | async fn tool_webhook_with_rest_handler( function tool_webhook_handler_inner (line 116) | async fn tool_webhook_handler_inner( function header_value (line 244) | fn header_value<'a>(headers: &'a HeaderMap, key: &str) -> Option<&'a str> { function validate_webhook_auth (line 249) | async fn validate_webhook_auth( type TestWebhookTool (line 378) | struct TestWebhookTool; type ProtectedWebhookTool (line 379) | struct ProtectedWebhookTool; type HmacWebhookTool (line 380) | struct HmacWebhookTool; type MisconfiguredWebhookTool (line 382) | struct MisconfiguredWebhookTool; method name (line 386) | fn name(&self) -> &str { method description (line 390) | fn description(&self) -> &str { method parameters_schema (line 394) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 398) | async fn execute( method name (line 412) | fn name(&self) -> &str { method description (line 416) | fn description(&self) -> &str { method parameters_schema (line 420) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 424) | async fn execute( method webhook_capability (line 435) | fn webhook_capability(&self) -> Option &str { method description (line 450) | fn description(&self) -> &str { method parameters_schema (line 454) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 458) | async fn execute( method webhook_capability (line 469) | fn webhook_capability(&self) -> Option &str { method description (line 485) | fn description(&self) -> &str { method parameters_schema (line 489) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 493) | async fn execute( method webhook_capability (line 504) | fn webhook_capability(&self) -> Option Result S... method orchestrator_url (line 144) | pub fn orchestrator_url(&self) -> &str { method url (line 148) | fn url(&self, path: &str) -> String { method get_json (line 153) | async fn get_json( method post_json (line 182) | async fn post_json( method get_job (line 213) | pub async fn get_job(&self) -> Result { method llm_complete (line 218) | pub async fn llm_complete( method llm_complete_with_tools (line 245) | pub async fn llm_complete_with_tools( method report_status (line 275) | pub async fn report_status(&self, update: &StatusUpdate) -> Result<(),... method post_event (line 300) | pub async fn post_event(&self, payload: &JobEventPayload) { method poll_prompt (line 332) | pub async fn poll_prompt(&self) -> Result, Work... method fetch_credentials (line 368) | pub async fn fetch_credentials(&self) -> Result Resu... type StatusUpdate (line 25) | pub struct StatusUpdate { type JobDescription (line 33) | pub struct JobDescription { type ProxyCompletionRequest (line 41) | pub struct ProxyCompletionRequest { type ProxyCompletionResponse (line 50) | pub struct ProxyCompletionResponse { type ProxyToolCompletionRequest (line 62) | pub struct ProxyToolCompletionRequest { type ProxyToolCompletionResponse (line 73) | pub struct ProxyToolCompletionResponse { type CompletionReport (line 87) | pub struct CompletionReport { type JobEventPayload (line 95) | pub struct JobEventPayload { type PromptResponse (line 102) | pub struct PromptResponse { type CredentialResponse (line 112) | pub struct CredentialResponse { function parse_finish_reason (line 411) | fn parse_finish_reason(s: &str) -> FinishReason { function test_url_construction (line 427) | fn test_url_construction() { function test_parse_finish_reason (line 444) | fn test_parse_finish_reason() { function test_credentials_url_construction (line 451) | fn test_credentials_url_construction() { function test_job_description_deserialization (line 468) | fn test_job_description_deserialization() { FILE: src/worker/claude_bridge.rs type ClaudeBridgeConfig (line 41) | pub struct ClaudeBridgeConfig { type ClaudeStreamEvent (line 62) | pub struct ClaudeStreamEvent { type MessageWrapper (line 99) | pub struct MessageWrapper { type ContentBlock (line 107) | pub struct ContentBlock { type ClaudeBridgeRuntime (line 131) | pub struct ClaudeBridgeRuntime { method new (line 140) | pub fn new(config: ClaudeBridgeConfig) -> Result { method write_permission_settings (line 154) | fn write_permission_settings(&self) -> Result<(), WorkerError> { method copy_auth_from_mount (line 183) | fn copy_auth_from_mount(&self) -> Result<(), WorkerError> { method run (line 208) | pub async fn run(&self) -> Result<(), WorkerError> { method run_claude_session (line 344) | async fn run_claude_session( method report_event (line 499) | async fn report_event(&self, event_type: &str, data: &serde_json::Valu... method poll_for_prompt (line 508) | async fn poll_for_prompt(&self) -> Result, Work... function build_permission_settings (line 517) | fn build_permission_settings(allowed_tools: &[String]) -> String { function stream_event_to_payloads (line 527) | fn stream_event_to_payloads(event: &ClaudeStreamEvent) -> Vec s... function truncate (line 695) | fn truncate(s: &str, max_len: usize) -> &str { function test_parse_system_event (line 713) | fn test_parse_system_event() { function test_parse_assistant_text_event (line 721) | fn test_parse_assistant_text_event() { function test_parse_assistant_tool_use_event (line 733) | fn test_parse_assistant_tool_use_event() { function test_parse_user_tool_result_event (line 744) | fn test_parse_user_tool_result_event() { function test_parse_result_event (line 754) | fn test_parse_result_event() { function test_parse_result_error_event (line 765) | fn test_parse_result_error_event() { function test_stream_event_to_payloads_system (line 773) | fn test_stream_event_to_payloads_system() { function test_stream_event_to_payloads_assistant_text (line 791) | fn test_stream_event_to_payloads_assistant_text() { function test_stream_event_to_payloads_assistant_tool_use (line 821) | fn test_stream_event_to_payloads_assistant_tool_use() { function test_stream_event_to_payloads_user_tool_result (line 851) | fn test_stream_event_to_payloads_user_tool_result() { function test_stream_event_to_payloads_result_success (line 881) | fn test_stream_event_to_payloads_result_success() { function test_stream_event_to_payloads_result_error (line 902) | fn test_stream_event_to_payloads_result_error() { function test_stream_event_to_payloads_unknown_type (line 919) | fn test_stream_event_to_payloads_unknown_type() { function test_claude_event_payload_serde (line 936) | fn test_claude_event_payload_serde() { function test_truncate (line 948) | fn test_truncate() { function test_build_permission_settings_default_tools (line 955) | fn test_build_permission_settings_default_tools() { function test_build_permission_settings_empty_tools (line 970) | fn test_build_permission_settings_empty_tools() { function test_build_permission_settings_is_valid_json (line 978) | fn test_build_permission_settings_is_valid_json() { function test_copy_dir_recursive (line 989) | fn test_copy_dir_recursive() { function test_copy_dir_recursive_empty_source (line 1013) | fn test_copy_dir_recursive_empty_source() { function test_copy_dir_recursive_skips_nonexistent_source (line 1022) | fn test_copy_dir_recursive_skips_nonexistent_source() { FILE: src/worker/container.rs type WorkerConfig (line 32) | pub struct WorkerConfig { method default (line 40) | fn default() -> Self { type WorkerRuntime (line 55) | pub struct WorkerRuntime { method new (line 72) | pub fn new(config: WorkerConfig) -> Result { method run (line 103) | pub async fn run(mut self) -> Result<(), WorkerError> { method post_event (line 283) | async fn post_event(&self, event_type: &str, data: serde_json::Value) { type ContainerDelegate (line 297) | struct ContainerDelegate { method post_event (line 310) | async fn post_event(&self, event_type: &str, data: serde_json::Value) { method poll_and_inject_prompt (line 321) | async fn poll_and_inject_prompt(&self, reason_ctx: &mut ReasoningConte... method check_signals (line 348) | async fn check_signals(&self) -> LoopSignal { method before_llm_call (line 353) | async fn before_llm_call( method call_llm (line 382) | async fn call_llm( method handle_text_response (line 395) | async fn handle_text_response( method execute_tool_calls (line 424) | async fn execute_tool_calls( method on_tool_intent_nudge (line 494) | async fn on_tool_intent_nudge(&self, text: &str, _reason_ctx: &mut Reaso... method after_iteration (line 506) | async fn after_iteration(&self, _iteration: usize) { function test_truncate_within_limit (line 517) | fn test_truncate_within_limit() { function test_truncate_at_limit (line 522) | fn test_truncate_at_limit() { function test_truncate_beyond_limit (line 527) | fn test_truncate_beyond_limit() { function test_truncate_multibyte_safe (line 533) | fn test_truncate_multibyte_safe() { FILE: src/worker/job.rs type WorkerDeps (line 42) | pub struct WorkerDeps { type Worker (line 62) | pub struct Worker { method new (line 74) | pub fn new(job_id: Uuid, deps: WorkerDeps) -> Self { method context_manager (line 79) | fn context_manager(&self) -> &Arc { method llm (line 83) | fn llm(&self) -> &Arc { method safety (line 88) | fn safety(&self) -> &Arc { method tools (line 92) | fn tools(&self) -> &Arc { method store (line 96) | fn store(&self) -> Option<&Arc> { method timeout (line 100) | fn timeout(&self) -> Duration { method use_planning (line 104) | fn use_planning(&self) -> bool { method persist_status (line 109) | fn persist_status(&self, status: JobState, reason: Option) { method log_event (line 125) | fn log_event(&self, event_type: &str, data: serde_json::Value) { method run (line 212) | pub async fn run(self, mut rx: mpsc::Receiver) -> Resul... method execution_loop (line 297) | async fn execution_loop( method execute_tools_parallel (line 411) | async fn execute_tools_parallel(&self, selections: &[ToolSelection]) -... method execute_tool_inner (line 475) | async fn execute_tool_inner( method process_tool_result_job (line 738) | async fn process_tool_result_job( method execute_plan (line 823) | async fn execute_plan( method execute_tool (line 933) | async fn execute_tool( method mark_completed (line 941) | async fn mark_completed(&self) -> Result<(), Error> { method mark_failed (line 970) | async fn mark_failed(&self, reason: &str) -> Result<(), Error> { method mark_stuck (line 998) | async fn mark_stuck(&self, reason: &str) -> Result<(), Error> { method build_fallback (line 1027) | async fn build_fallback(&self, reason: &str) -> Option { constant MAX_CONSECUTIVE_RATE_LIMITS (line 1090) | const MAX_CONSECUTIVE_RATE_LIMITS: usize = 10; function handle_rate_limit (line 1094) | async fn handle_rate_limit( method check_signals (line 1142) | async fn check_signals(&self) -> LoopSignal { method before_llm_call (line 1222) | async fn before_llm_call( method call_llm (line 1232) | async fn call_llm( method handle_text_response (line 1296) | async fn handle_text_response( method execute_tool_calls (line 1333) | async fn execute_tool_calls( method on_tool_intent_nudge (line 1391) | async fn on_tool_intent_nudge(&self, text: &str, _reason_ctx: &mut Reaso... method after_iteration (line 1402) | async fn after_iteration(&self, _iteration: usize) { function selections_to_tool_calls (line 1409) | fn selections_to_tool_calls(selections: &[ToolSelection]) -> Vec Self { type SlowTool (line 1448) | struct SlowTool { method name (line 1455) | fn name(&self) -> &str { method description (line 1458) | fn description(&self) -> &str { method parameters_schema (line 1461) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1464) | async fn execute( method requires_sanitization (line 1476) | fn requires_sanitization(&self) -> bool { type StubLlm (line 1482) | struct StubLlm; method model_name (line 1486) | fn model_name(&self) -> &str { method cost_per_token (line 1489) | fn cost_per_token(&self) -> (rust_decimal::Decimal, rust_decimal::Decima... method complete (line 1492) | async fn complete( method complete_with_tools (line 1498) | async fn complete_with_tools( function make_worker (line 1507) | async fn make_worker(tools: Vec>) -> Worker { function test_tool_selection_preserves_call_id (line 1537) | fn test_tool_selection_preserves_call_id() { function test_parallel_speedup (line 1558) | async fn test_parallel_speedup() { function test_result_ordering_preserved (line 1597) | async fn test_result_ordering_preserved() { function test_missing_tool_produces_error_not_panic (line 1647) | async fn test_missing_tool_produces_error_not_panic() { function test_mark_completed_twice_is_idempotent (line 1668) | async fn test_mark_completed_twice_is_idempotent() { function make_worker_with_approval (line 1709) | async fn make_worker_with_approval( type ApprovalTool (line 1742) | struct ApprovalTool; method name (line 1746) | fn name(&self) -> &str { method description (line 1749) | fn description(&self) -> &str { method parameters_schema (line 1752) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1755) | async fn execute( method requires_approval (line 1765) | fn requires_approval( method requires_sanitization (line 1771) | fn requires_sanitization(&self) -> bool { type AlwaysApprovalTool (line 1777) | struct AlwaysApprovalTool; method name (line 1781) | fn name(&self) -> &str { method description (line 1784) | fn description(&self) -> &str { method parameters_schema (line 1787) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 1790) | async fn execute( method requires_approval (line 1800) | fn requires_approval( method requires_sanitization (line 1806) | fn requires_sanitization(&self) -> bool { function test_approval_context_requires_explicit_allowed_tool_names (line 1812) | async fn test_approval_context_requires_explicit_allowed_tool_names() { function test_approval_context_blocks_always_unless_permitted (line 1840) | async fn test_approval_context_blocks_always_unless_permitted() { function test_approval_context_returns_structured_autonomous_unavailable_error (line 1873) | async fn test_approval_context_returns_structured_autonomous_unavailable... function test_token_budget_exceeded_fails_job (line 1892) | async fn test_token_budget_exceeded_fails_job() { function test_iteration_cap_marks_failed_not_stuck (line 1941) | async fn test_iteration_cap_marks_failed_not_stuck() { function test_selections_to_tool_calls_preserves_ids (line 1977) | fn test_selections_to_tool_calls_preserves_ids() { function test_reasoning_text_extraction_from_selections (line 2009) | fn test_reasoning_text_extraction_from_selections() { function test_reasoning_text_skips_empty_first_selection (line 2061) | fn test_reasoning_text_skips_empty_first_selection() { function test_store_fallback_in_metadata_roundtrip (line 2098) | fn test_store_fallback_in_metadata_roundtrip() { function test_store_fallback_handles_non_object_metadata (line 2119) | fn test_store_fallback_handles_non_object_metadata() { function test_store_fallback_none_is_noop (line 2136) | fn test_store_fallback_none_is_noop() { FILE: src/worker/mod.rs function run_worker (line 40) | pub async fn run_worker( function run_claude_bridge (line 67) | pub async fn run_claude_bridge( FILE: src/worker/proxy_llm.rs type ProxyLlmProvider (line 22) | pub struct ProxyLlmProvider { method new (line 28) | pub fn new(client: Arc, model_name: String) -> Self { method model_name (line 35) | fn model_name(&self) -> &str { method cost_per_token (line 39) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 44) | async fn complete(&self, request: CompletionRequest) -> Result Self { method with_overlap (line 38) | pub fn with_overlap(mut self, percent: f32) -> Self { method overlap_size (line 44) | fn overlap_size(&self) -> usize { method step_size (line 49) | fn step_size(&self) -> usize { method default (line 21) | fn default() -> Self { function chunk_document (line 69) | pub fn chunk_document(content: &str, config: ChunkConfig) -> Vec { function test_empty_content (line 122) | fn test_empty_content() { function test_small_content (line 129) | fn test_small_content() { function test_exact_chunk_size (line 139) | fn test_exact_chunk_size() { function test_chunking_with_overlap (line 149) | fn test_chunking_with_overlap() { function test_overlap_calculation (line 175) | fn test_overlap_calculation() { function test_min_chunk_size_merging (line 185) | fn test_min_chunk_size_merging() { FILE: src/workspace/document.rs constant MEMORY (line 13) | pub const MEMORY: &str = "MEMORY.md"; constant IDENTITY (line 15) | pub const IDENTITY: &str = "IDENTITY.md"; constant SOUL (line 17) | pub const SOUL: &str = "SOUL.md"; constant AGENTS (line 19) | pub const AGENTS: &str = "AGENTS.md"; constant USER (line 21) | pub const USER: &str = "USER.md"; constant HEARTBEAT (line 23) | pub const HEARTBEAT: &str = "HEARTBEAT.md"; constant README (line 25) | pub const README: &str = "README.md"; constant DAILY_DIR (line 27) | pub const DAILY_DIR: &str = "daily/"; constant CONTEXT_DIR (line 29) | pub const CONTEXT_DIR: &str = "context/"; constant TOOLS (line 31) | pub const TOOLS: &str = "TOOLS.md"; constant BOOTSTRAP (line 33) | pub const BOOTSTRAP: &str = "BOOTSTRAP.md"; constant PROFILE (line 35) | pub const PROFILE: &str = "context/profile.json"; constant ASSISTANT_DIRECTIVES (line 37) | pub const ASSISTANT_DIRECTIVES: &str = "context/assistant-directives.md"; type MemoryDocument (line 42) | pub struct MemoryDocument { method new (line 63) | pub fn new( method file_name (line 82) | pub fn file_name(&self) -> &str { method parent_dir (line 87) | pub fn parent_dir(&self) -> Option<&str> { method is_empty (line 93) | pub fn is_empty(&self) -> bool { method word_count (line 98) | pub fn word_count(&self) -> usize { method is_identity_document (line 103) | pub fn is_identity_document(&self) -> bool { type WorkspaceEntry (line 113) | pub struct WorkspaceEntry { method name (line 126) | pub fn name(&self) -> &str { type MemoryChunk (line 133) | pub struct MemoryChunk { method new (line 150) | pub fn new(document_id: Uuid, chunk_index: i32, content: impl Into) -> Self { function test_memory_document_new (line 173) | fn test_memory_document_new() { function test_memory_document_file_name (line 181) | fn test_memory_document_file_name() { function test_memory_document_parent_dir (line 187) | fn test_memory_document_parent_dir() { function test_memory_document_word_count (line 196) | fn test_memory_document_word_count() { function test_is_identity_document (line 205) | fn test_is_identity_document() { function test_workspace_entry_name (line 220) | fn test_workspace_entry_name() { FILE: src/workspace/embedding_cache.rs type EmbeddingCacheConfig (line 20) | pub struct EmbeddingCacheConfig { method default (line 31) | fn default() -> Self { type CacheEntry (line 38) | struct CacheEntry { type CachedEmbeddingProvider (line 48) | pub struct CachedEmbeddingProvider { method new (line 58) | pub fn new(inner: Arc, config: EmbeddingCacheCo... method len (line 76) | pub fn len(&self) -> usize { method is_empty (line 81) | pub fn is_empty(&self) -> bool { method clear (line 89) | pub fn clear(&self) { method cache_key (line 96) | fn cache_key(&self, text: &str) -> [u8; 32] { method evict_lru (line 108) | fn evict_lru(cache: &mut HashMap<[u8; 32], CacheEntry>, max_entries: u... method evict_k_oldest (line 127) | fn evict_k_oldest(cache: &mut HashMap<[u8; 32], CacheEntry>, k: usize) { method dimension (line 150) | fn dimension(&self) -> usize { method model_name (line 154) | fn model_name(&self) -> &str { method max_input_length (line 158) | fn max_input_length(&self) -> usize { method embed (line 162) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { method embed_batch (line 205) | async fn embed_batch(&self, texts: &[String]) -> Result>, E... type CountingMock (line 308) | struct CountingMock { method new (line 316) | fn new(dimension: usize, model: &str) -> Self { method embed_calls (line 325) | fn embed_calls(&self) -> u32 { method batch_calls (line 329) | fn batch_calls(&self) -> u32 { method dimension (line 336) | fn dimension(&self) -> usize { method model_name (line 339) | fn model_name(&self) -> &str { method max_input_length (line 342) | fn max_input_length(&self) -> usize { method embed (line 345) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { method embed_batch (line 351) | async fn embed_batch(&self, texts: &[String]) -> Result>, E... function cache_hit_avoids_inner_call (line 364) | async fn cache_hit_avoids_inner_call() { function cache_miss_calls_inner (line 380) | async fn cache_miss_calls_inner() { function cache_key_includes_model (line 392) | async fn cache_key_includes_model() { function lru_eviction (line 412) | async fn lru_eviction() { function embed_batch_partial_hits (line 432) | async fn embed_batch_partial_hits() { function batch_preserves_order (line 456) | async fn batch_preserves_order() { function batch_exceeding_capacity_respects_max_entries (line 478) | async fn batch_exceeding_capacity_respects_max_entries() { type FailThenSucceedMock (line 493) | struct FailThenSucceedMock { method new (line 500) | fn new(dimension: usize, fail_count: u32) -> Self { method dimension (line 511) | fn dimension(&self) -> usize { method model_name (line 514) | fn model_name(&self) -> &str { method max_input_length (line 517) | fn max_input_length(&self) -> usize { method embed (line 520) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { method embed_batch (line 532) | async fn embed_batch(&self, texts: &[String]) -> Result>, E... function error_does_not_pollute_cache (line 552) | async fn error_does_not_pollute_cache() { function embed_batch_empty_input (line 569) | async fn embed_batch_empty_input() { function embed_batch_all_misses (line 580) | async fn embed_batch_all_misses() { function zero_max_entries_clamped_to_one (line 599) | async fn zero_max_entries_clamped_to_one() { FILE: src/workspace/embeddings.rs type EmbeddingError (line 11) | pub enum EmbeddingError { method from (line 31) | fn from(e: reqwest::Error) -> Self { type EmbeddingProvider (line 38) | pub trait EmbeddingProvider: Send + Sync { method dimension (line 40) | fn dimension(&self) -> usize; method model_name (line 43) | fn model_name(&self) -> &str; method max_input_length (line 46) | fn max_input_length(&self) -> usize; method embed (line 49) | async fn embed(&self, text: &str) -> Result, EmbeddingError>; method embed_batch (line 54) | async fn embed_batch(&self, texts: &[String]) -> Result>,... method dimension (line 173) | fn dimension(&self) -> usize { method model_name (line 177) | fn model_name(&self) -> &str { method max_input_length (line 181) | fn max_input_length(&self) -> usize { method embed (line 187) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { method embed_batch (line 202) | async fn embed_batch(&self, texts: &[String]) -> Result>,... method dimension (line 305) | fn dimension(&self) -> usize { method model_name (line 309) | fn model_name(&self) -> &str { method max_input_length (line 313) | fn max_input_length(&self) -> usize { method embed (line 317) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { method embed_batch (line 332) | async fn embed_batch(&self, texts: &[String]) -> Result>,... method dimension (line 434) | fn dimension(&self) -> usize { method model_name (line 438) | fn model_name(&self) -> &str { method max_input_length (line 442) | fn max_input_length(&self) -> usize { method embed (line 447) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { method embed_batch (line 462) | async fn embed_batch(&self, texts: &[String]) -> Result>,... method dimension (line 523) | fn dimension(&self) -> usize { method model_name (line 527) | fn model_name(&self) -> &str { method max_input_length (line 531) | fn max_input_length(&self) -> usize { method embed (line 535) | async fn embed(&self, text: &str) -> Result, EmbeddingError> { constant OPENAI_API_BASE_URL (line 64) | const OPENAI_API_BASE_URL: &str = "https://api.openai.com"; type OpenAiEmbeddings (line 69) | pub struct OpenAiEmbeddings { method new (line 81) | pub fn new(api_key: impl Into) -> Self { method ada_002 (line 92) | pub fn ada_002(api_key: impl Into) -> Self { method large (line 103) | pub fn large(api_key: impl Into) -> Self { method with_model (line 114) | pub fn with_model( method with_base_url (line 132) | pub fn with_base_url(mut self, base_url: &str) -> Self { type OpenAiEmbeddingRequest (line 156) | struct OpenAiEmbeddingRequest<'a> { type OpenAiEmbeddingResponse (line 162) | struct OpenAiEmbeddingResponse { type OpenAiEmbeddingData (line 167) | struct OpenAiEmbeddingData { type NearAiEmbeddings (line 254) | pub struct NearAiEmbeddings { method new (line 266) | pub fn new( method with_model (line 280) | pub fn with_model(mut self, model: impl Into, dimension: usize... type NearAiEmbeddingRequest (line 288) | struct NearAiEmbeddingRequest<'a> { type NearAiEmbeddingResponse (line 294) | struct NearAiEmbeddingResponse { type NearAiEmbeddingData (line 299) | struct NearAiEmbeddingData { type OllamaEmbeddings (line 393) | pub struct OllamaEmbeddings { method new (line 404) | pub fn new(base_url: impl Into) -> Self { method with_model (line 414) | pub fn with_model(mut self, model: impl Into, dimension: usize... type OllamaEmbedRequest (line 422) | struct OllamaEmbedRequest<'a> { type OllamaEmbedResponse (line 428) | struct OllamaEmbedResponse { type MockEmbeddings (line 510) | pub struct MockEmbeddings { method new (line 516) | pub fn new(dimension: usize) -> Self { function test_mock_embeddings (line 568) | async fn test_mock_embeddings() { function test_mock_embeddings_deterministic (line 580) | async fn test_mock_embeddings_deterministic() { function test_mock_embeddings_batch (line 591) | async fn test_mock_embeddings_batch() { function test_openai_embeddings_config (line 606) | fn test_openai_embeddings_config() { function test_openai_with_base_url_valid (line 619) | fn test_openai_with_base_url_valid() { function test_openai_with_base_url_strips_trailing_slashes (line 626) | fn test_openai_with_base_url_strips_trailing_slashes() { function test_openai_with_base_url_http_scheme (line 633) | fn test_openai_with_base_url_http_scheme() { function test_openai_with_base_url_schemeless_prepends_https (line 639) | fn test_openai_with_base_url_schemeless_prepends_https() { FILE: src/workspace/hygiene.rs constant IDENTITY_PATHS (line 40) | const IDENTITY_PATHS: &[&str] = &[ function is_identity_path (line 57) | fn is_identity_path(path: &str) -> bool { type HygieneConfig (line 67) | pub struct HygieneConfig { method default (line 81) | fn default() -> Self { type HygieneState (line 94) | struct HygieneState { type HygieneReport (line 100) | pub struct HygieneReport { method had_work (line 111) | pub fn had_work(&self) -> bool { function run_if_due (line 124) | pub async fn run_if_due(workspace: &Workspace, config: &HygieneConfig) -... type RunningGuard (line 205) | struct RunningGuard; method drop (line 208) | fn drop(&mut self) { function cleanup_daily_logs (line 214) | async fn cleanup_daily_logs( function cleanup_conversation_docs (line 255) | async fn cleanup_conversation_docs( function state_path_dir (line 298) | fn state_path_dir(state_file: &std::path::Path) -> Option<&std::path::Pa... function load_state (line 302) | fn load_state(path: &std::path::Path) -> Option { function save_state (line 311) | fn save_state(path: &std::path::Path) { function default_config_is_reasonable (line 349) | fn default_config_is_reasonable() { function report_defaults_to_no_work (line 358) | fn report_defaults_to_no_work() { function report_had_work_when_deleted (line 365) | fn report_had_work_when_deleted() { function report_had_work_when_conversation_deleted (line 375) | fn report_had_work_when_conversation_deleted() { function is_identity_path_excludes_sacred_docs (line 385) | fn is_identity_path_excludes_sacred_docs() { function is_identity_path_case_insensitive (line 406) | fn is_identity_path_case_insensitive() { function is_identity_path_allows_normal_docs (line 435) | fn is_identity_path_allows_normal_docs() { function load_state_returns_none_for_missing_file (line 446) | fn load_state_returns_none_for_missing_file() { function save_and_load_state_roundtrip (line 451) | fn save_and_load_state_roundtrip() { function save_state_creates_parent_dirs (line 464) | fn save_state_creates_parent_dirs() { function save_state_is_atomic_no_tmp_left_behind (line 473) | fn save_state_is_atomic_no_tmp_left_behind() { function running_guard_prevents_reentry (line 491) | fn running_guard_prevents_reentry() { function create_test_db (line 537) | async fn create_test_db() -> (Arc, tempfile::Te... function create_workspace (line 551) | fn create_workspace(db: &Arc) -> Arc { function cleanup_daily_logs_preserves_identity_documents (line 556) | async fn cleanup_daily_logs_preserves_identity_documents() { function cleanup_conversation_docs_handles_empty_directory (line 597) | async fn cleanup_conversation_docs_handles_empty_directory() { function cleanup_respects_cadence_prevents_concurrent_runs (line 611) | async fn cleanup_respects_cadence_prevents_concurrent_runs() { function cleanup_reports_deletion_counts_correctly (line 640) | async fn cleanup_reports_deletion_counts_correctly() { FILE: src/workspace/mod.rs constant SYSTEM_PROMPT_FILES (line 76) | const SYSTEM_PROMPT_FILES: &[&str] = &[ function is_system_prompt_file (line 90) | fn is_system_prompt_file(path: &str) -> bool { function reject_if_injected (line 101) | fn reject_if_injected(path: &str, content: &str) -> Result<(), Workspace... type WorkspaceStorage (line 136) | enum WorkspaceStorage { method get_document_by_path (line 145) | async fn get_document_by_path( method get_document_by_id (line 158) | async fn get_document_by_id(&self, id: Uuid) -> Result Result<(),... method delete_document_by_path (line 193) | async fn delete_document_by_path( method list_directory (line 206) | async fn list_directory( method list_all_paths (line 219) | async fn list_all_paths( method delete_chunks (line 231) | async fn delete_chunks(&self, document_id: Uuid) -> Result<(), Workspa... method insert_chunk (line 239) | async fn insert_chunk( method update_chunk_embedding (line 259) | async fn update_chunk_embedding( method get_chunks_without_embeddings (line 271) | async fn get_chunks_without_embeddings( method hybrid_search (line 290) | async fn hybrid_search( constant HEARTBEAT_SEED (line 313) | const HEARTBEAT_SEED: &str = include_str!("seeds/HEARTBEAT.md"); constant TOOLS_SEED (line 316) | const TOOLS_SEED: &str = include_str!("seeds/TOOLS.md"); constant BOOTSTRAP_SEED (line 323) | const BOOTSTRAP_SEED: &str = include_str!("seeds/BOOTSTRAP.md"); type Workspace (line 330) | pub struct Workspace { method new (line 352) | pub fn new(user_id: impl Into, pool: Pool) -> Self { method new_with_db (line 367) | pub fn new_with_db(user_id: impl Into, db: Arc bool { method mark_bootstrap_completed (line 388) | pub fn mark_bootstrap_completed(&self) { method is_bootstrap_completed (line 394) | pub fn is_bootstrap_completed(&self) -> bool { method with_agent (line 400) | pub fn with_agent(mut self, agent_id: Uuid) -> Self { method with_embeddings (line 410) | pub fn with_embeddings(mut self, provider: Arc)... method with_embeddings_cached (line 419) | pub fn with_embeddings_cached( method with_embeddings_uncached (line 432) | pub fn with_embeddings_uncached(mut self, provider: Arc &str { method agent_id (line 453) | pub fn agent_id(&self) -> Option { method read (line 468) | pub async fn read(&self, path: &str) -> Result Result Result<(), Wo... method exists (line 530) | pub async fn exists(&self, path: &str) -> Result { method delete (line 546) | pub async fn delete(&self, path: &str) -> Result<(), WorkspaceError> { method list (line 569) | pub async fn list(&self, directory: &str) -> Result Result, WorkspaceError> { method memory (line 588) | pub async fn memory(&self) -> Result { method today_log (line 595) | pub async fn today_log(&self) -> Result { method daily_log (line 601) | pub async fn daily_log(&self, date: NaiveDate) -> Result Result, Work... method read_or_create (line 623) | async fn read_or_create(&self, path: &str) -> Result Result<(), Workspace... method append_daily_log (line 651) | pub async fn append_daily_log(&self, entry: &str) -> Result<(), Worksp... method append_daily_log_tz (line 660) | pub async fn append_daily_log_tz( method system_prompt (line 682) | pub async fn system_prompt(&self) -> Result { method system_prompt_for_context_tz (line 689) | pub async fn system_prompt_for_context_tz( method system_prompt_for_context (line 702) | pub async fn system_prompt_for_context( method system_prompt_for_context_inner (line 711) | async fn system_prompt_for_context_inner( method sync_profile_documents (line 933) | pub async fn sync_profile_documents(&self) -> Result Result<(), Work... method seed_if_empty (line 1132) | pub async fn seed_if_empty(&self) -> Result { method import_from_directory (line 1212) | pub async fn import_from_directory( method backfill_embeddings (line 1291) | pub async fn backfill_embeddings(&self) -> Result String { function merge_profile_section (line 988) | fn merge_profile_section(existing: &str, new_content: &str) -> String { function is_seed_template (line 1024) | fn is_seed_template(content: &str) -> bool { function is_profile_recent (line 1030) | fn is_profile_recent(updated_at: &str, max_days: i64) -> bool { function normalize_path (line 1330) | fn normalize_path(path: &str) -> String { function normalize_directory (line 1350) | fn normalize_directory(path: &str) -> String { function test_normalize_path (line 1360) | fn test_normalize_path() { function test_normalize_directory (line 1369) | fn test_normalize_directory() { function test_merge_replaces_existing_delimited_block (line 1379) | fn test_merge_replaces_existing_delimited_block() { function test_merge_preserves_user_content_outside_block (line 1391) | fn test_merge_preserves_user_content_outside_block() { function test_merge_appends_when_no_markers (line 1402) | fn test_merge_appends_when_no_markers() { function test_merge_migrates_old_auto_generated_header (line 1413) | fn test_merge_migrates_old_auto_generated_header() { function test_merge_migrates_seed_template (line 1424) | fn test_merge_migrates_seed_template() { function test_merge_end_marker_must_follow_begin (line 1434) | fn test_merge_end_marker_must_follow_begin() { function test_bootstrap_completed_default_false (line 1453) | fn test_bootstrap_completed_default_false() { function test_bootstrap_completed_mark_and_check (line 1460) | fn test_bootstrap_completed_mark_and_check() { function test_system_prompt_file_matching (line 1469) | fn test_system_prompt_file_matching() { function test_reject_if_injected_blocks_high_severity (line 1499) | fn test_reject_if_injected_blocks_high_severity() { function test_reject_if_injected_allows_clean_content (line 1511) | fn test_reject_if_injected_allows_clean_content() { function test_non_system_prompt_file_skips_scanning (line 1518) | fn test_non_system_prompt_file_skips_scanning() { function create_test_workspace (line 1530) | async fn create_test_workspace() -> (Workspace, tempfile::TempDir) { function seed_if_empty_ignores_empty_profile (line 1547) | async fn seed_if_empty_ignores_empty_profile() { function seed_if_empty_ignores_corrupted_profile (line 1573) | async fn seed_if_empty_ignores_corrupted_profile() { function seed_if_empty_skips_bootstrap_with_populated_profile (line 1591) | async fn seed_if_empty_skips_bootstrap_with_populated_profile() { FILE: src/workspace/repository.rs type Repository (line 18) | pub struct Repository { method new (line 24) | pub fn new(pool: Pool) -> Self { method conn (line 29) | async fn conn(&self) -> Result Result Result... method delete_document_by_path (line 154) | pub async fn delete_document_by_path( method list_directory (line 186) | pub async fn list_directory( method list_all_paths (line 219) | pub async fn list_all_paths( method list_documents (line 244) | pub async fn list_documents( method row_to_document (line 270) | fn row_to_document(&self, row: &tokio_postgres::Row) -> MemoryDocument { method delete_chunks (line 286) | pub async fn delete_chunks(&self, document_id: Uuid) -> Result<(), Wor... method insert_chunk (line 302) | pub async fn insert_chunk( method update_chunk_embedding (line 330) | pub async fn update_chunk_embedding( method get_chunks_without_embeddings (line 351) | pub async fn get_chunks_without_embeddings( method hybrid_search (line 392) | pub async fn hybrid_search( method fts_search (line 422) | async fn fts_search( method vector_search (line 464) | async fn vector_search( FILE: src/workspace/search.rs type FusionStrategy (line 20) | pub enum FusionStrategy { type SearchConfig (line 30) | pub struct SearchConfig { method with_limit (line 73) | pub fn with_limit(mut self, limit: usize) -> Self { method with_rrf_k (line 79) | pub fn with_rrf_k(mut self, k: u32) -> Self { method vector_only (line 85) | pub fn vector_only(mut self) -> Self { method fts_only (line 92) | pub fn fts_only(mut self) -> Self { method with_min_score (line 99) | pub fn with_min_score(mut self, score: f32) -> Self { method with_fusion_strategy (line 105) | pub fn with_fusion_strategy(mut self, strategy: FusionStrategy) -> Self { method with_fts_weight (line 113) | pub fn with_fts_weight(mut self, weight: f32) -> Self { method with_vector_weight (line 123) | pub fn with_vector_weight(mut self, weight: f32) -> Self { method default (line 56) | fn default() -> Self { type SearchResult (line 133) | pub struct SearchResult { method from_fts (line 152) | pub fn from_fts(&self) -> bool { method from_vector (line 157) | pub fn from_vector(&self) -> bool { method is_hybrid (line 162) | pub fn is_hybrid(&self) -> bool { type RankedResult (line 169) | pub struct RankedResult { function fuse_results (line 183) | pub fn fuse_results( function reciprocal_rank_fusion (line 208) | pub fn reciprocal_rank_fusion( function weighted_score_fusion (line 315) | pub fn weighted_score_fusion( function make_result (line 413) | fn make_result(chunk_id: Uuid, doc_id: Uuid, rank: u32) -> RankedResult { function make_result_with_path (line 423) | fn make_result_with_path(chunk_id: Uuid, doc_id: Uuid, path: &str, rank:... function test_rrf_propagates_document_path (line 434) | fn test_rrf_propagates_document_path() { function test_rrf_single_method (line 485) | fn test_rrf_single_method() { function test_rrf_hybrid_match_boosted (line 505) | fn test_rrf_hybrid_match_boosted() { function test_rrf_score_normalization (line 532) | fn test_rrf_score_normalization() { function test_rrf_min_score_filter (line 548) | fn test_rrf_min_score_filter() { function test_rrf_limit (line 573) | fn test_rrf_limit() { function test_rrf_k_parameter (line 587) | fn test_rrf_k_parameter() { function test_search_config_builders (line 612) | fn test_search_config_builders() { function test_weighted_fusion_basic (line 642) | fn test_weighted_fusion_basic() { function test_weighted_fusion_fts_boost (line 668) | fn test_weighted_fusion_fts_boost() { function test_weighted_fusion_single_source (line 693) | fn test_weighted_fusion_single_source() { function test_weight_setters_reject_invalid (line 715) | fn test_weight_setters_reject_invalid() { function test_fuse_results_dispatches_correctly (line 746) | fn test_fuse_results_dispatches_correctly() { function test_rrf_both_empty (line 772) | fn test_rrf_both_empty() { function test_rrf_fts_only_no_vector (line 779) | fn test_rrf_fts_only_no_vector() { function test_rrf_vector_only_no_fts (line 807) | fn test_rrf_vector_only_no_fts() { function test_rrf_duplicate_chunks_merged (line 835) | fn test_rrf_duplicate_chunks_merged() { function test_rrf_limit_zero_returns_empty (line 871) | fn test_rrf_limit_zero_returns_empty() { function test_rrf_min_score_one_filters_all (line 886) | fn test_rrf_min_score_one_filters_all() { function test_search_config_fts_only (line 915) | fn test_search_config_fts_only() { function test_search_config_vector_only (line 927) | fn test_search_config_vector_only() { FILE: tests/batch_query_tests.rs function create_test_db (line 19) | async fn create_test_db() -> (Arc, tempfile::TempDir) { function batch_query_empty_list (line 37) | async fn batch_query_empty_list() { function batch_query_single_routine (line 47) | async fn batch_query_single_routine() { function batch_query_multiple_routines_different_counts (line 114) | async fn batch_query_multiple_routines_different_counts() { function batch_query_missing_routines_default_to_zero (line 223) | async fn batch_query_missing_routines_default_to_zero() { function batch_query_only_counts_running_status (line 293) | async fn batch_query_only_counts_running_status() { function concurrent_limit_enforcement_with_batch_counts (line 374) | async fn concurrent_limit_enforcement_with_batch_counts() { FILE: tests/config_round_trip.rs constant TEST_OPENAI_API_KEY_LONG (line 18) | const TEST_OPENAI_API_KEY_LONG: &str = "sk-test-key-1234567890"; function read_env_map (line 21) | fn read_env_map(path: &std::path::Path) -> HashMap { function bootstrap_env_round_trips_llm_backend (line 31) | fn bootstrap_env_round_trips_llm_backend() { function bootstrap_env_round_trips_embedding_disabled (line 76) | fn bootstrap_env_round_trips_embedding_disabled() { function bootstrap_env_round_trips_onboard_completed (line 108) | fn bootstrap_env_round_trips_onboard_completed() { function bootstrap_env_round_trips_session_token_key (line 148) | fn bootstrap_env_round_trips_session_token_key() { function bootstrap_env_preserves_existing_values (line 192) | fn bootstrap_env_preserves_existing_values() { function bootstrap_env_handles_special_characters (line 267) | fn bootstrap_env_handles_special_characters() { FILE: tests/dispatched_routine_run_tests.rs function create_test_db (line 23) | async fn create_test_db() -> (Arc, tempfile::TempDir) { function make_routine (line 36) | fn make_routine(id: Uuid) -> Routine { function make_run (line 65) | fn make_run(routine_id: Uuid, job_id: Option) -> RoutineRun { function list_dispatched_returns_only_running_with_job_id (line 86) | async fn list_dispatched_returns_only_running_with_job_id() { function dispatched_run_with_completed_job_can_be_finalized (line 134) | async fn dispatched_run_with_completed_job_can_be_finalized() { function dispatched_run_with_failed_job (line 185) | async fn dispatched_run_with_failed_job() { function dispatched_run_with_active_job_stays_running (line 223) | async fn dispatched_run_with_active_job_stays_running() { function dispatched_run_orphan_detection (line 262) | async fn dispatched_run_orphan_detection() { function link_and_list_dispatched_run (line 318) | async fn link_and_list_dispatched_run() { FILE: tests/e2e/conftest.py function _latest_mtime (line 58) | def _latest_mtime(path: Path) -> float: function _binary_needs_rebuild (line 77) | def _binary_needs_rebuild(binary: Path) -> bool: function _find_free_port (line 94) | def _find_free_port() -> int: function _reserve_loopback_sockets (line 101) | def _reserve_loopback_sockets(count: int) -> list[socket.socket]: function ironclaw_binary (line 117) | def ironclaw_binary(): function server_ports (line 133) | def server_ports(): function mock_llm_server (line 148) | async def mock_llm_server(): function wasm_tools_dir (line 170) | def wasm_tools_dir(_wasm_build_symlinks): function _wasm_build_symlinks (line 186) | def _wasm_build_symlinks(): function ironclaw_server (line 216) | async def ironclaw_server( function http_channel_server (line 314) | async def http_channel_server(ironclaw_server, server_ports): function http_channel_server_without_secret (line 322) | async def http_channel_server_without_secret( function browser (line 413) | async def browser(ironclaw_server): function page (line 429) | async def page(ironclaw_server, browser): FILE: tests/e2e/helpers.py function wait_for_ready (line 124) | async def wait_for_ready(url: str, *, timeout: float = 60, interval: flo... function wait_for_port_line (line 139) | async def wait_for_port_line(process, pattern: str, *, timeout: float = ... function auth_headers (line 158) | def auth_headers() -> dict[str, str]: function api_get (line 163) | async def api_get(base_url: str, path: str, **kwargs) -> httpx.Response: function api_post (line 174) | async def api_post(base_url: str, path: str, **kwargs) -> httpx.Response: function signed_http_webhook_headers (line 185) | def signed_http_webhook_headers(body: bytes) -> dict[str, str]: FILE: tests/e2e/mock_llm.py function _last_user_content (line 94) | def _last_user_content(messages: list[dict]) -> str: function match_response (line 106) | def match_response(messages: list[dict]) -> str: function match_tool_call (line 114) | def match_tool_call(messages: list[dict], has_tools: bool) -> dict | None: function _extract_tool_name (line 125) | def _extract_tool_name(msg: dict) -> str: function _find_tool_result (line 138) | def _find_tool_result(messages: list[dict]) -> dict | None: function _make_base (line 161) | def _make_base(completion_id: str) -> dict: function _send_sse (line 166) | async def _send_sse(resp: web.StreamResponse, data: dict): function chat_completions (line 170) | async def chat_completions(request: web.Request) -> web.StreamResponse: function _text_response (line 200) | def _text_response(cid: str, text: str) -> web.Response: function _tool_call_response (line 210) | def _tool_call_response(cid: str, tc: dict) -> web.Response: function _stream_text (line 224) | async def _stream_text(request: web.Request, cid: str, text: str) -> web... function _stream_tool_call (line 242) | async def _stream_tool_call(request: web.Request, cid: str, tc: dict) ->... function oauth_exchange (line 267) | async def oauth_exchange(request: web.Request) -> web.Response: function models (line 293) | async def models(_request: web.Request) -> web.Response: function mcp_endpoint (line 308) | async def mcp_endpoint(request: web.Request) -> web.Response: function mcp_endpoint_400 (line 322) | async def mcp_endpoint_400(request: web.Request) -> web.Response: function _mcp_handle_authed (line 337) | async def _mcp_handle_authed(request: web.Request) -> web.Response: function mcp_protected_resource (line 370) | async def mcp_protected_resource(request: web.Request) -> web.Response: function mcp_auth_server_metadata (line 385) | async def mcp_auth_server_metadata(request: web.Request) -> web.Response: function mcp_oauth_register (line 401) | async def mcp_oauth_register(request: web.Request) -> web.Response: function mcp_oauth_token (line 411) | async def mcp_oauth_token(request: web.Request) -> web.Response: function main (line 422) | def main(): FILE: tests/e2e/scenarios/test_chat.py function test_send_message_and_receive_response (line 7) | async def test_send_message_and_receive_response(page): function test_multiple_messages (line 32) | async def test_multiple_messages(page): function test_empty_message_not_sent (line 63) | async def test_empty_message_not_sent(page): function test_copy_from_chat_forces_plain_text (line 79) | async def test_copy_from_chat_forces_plain_text(page): FILE: tests/e2e/scenarios/test_connection.py function test_page_loads_and_connects (line 7) | async def test_page_loads_and_connects(page): function test_tab_navigation (line 22) | async def test_tab_navigation(page): function test_auth_rejection (line 36) | async def test_auth_rejection(page, ironclaw_server): FILE: tests/e2e/scenarios/test_csp.py function test_no_csp_violations_on_load (line 11) | async def test_no_csp_violations_on_load(page): function test_no_inline_event_handlers_in_html (line 34) | async def test_no_inline_event_handlers_in_html(page): function test_no_js_errors_on_page_load (line 63) | async def test_no_js_errors_on_page_load(page): function test_buttons_still_functional_after_csp_migration (line 76) | async def test_buttons_still_functional_after_csp_migration(page): FILE: tests/e2e/scenarios/test_extension_oauth.py function _extract_state (line 24) | def _extract_state(auth_url: str) -> str: function _get_extension (line 34) | async def _get_extension(base_url, name): function _ensure_removed (line 43) | async def _ensure_removed(base_url, name): function test_oauth_install_gmail (line 53) | async def test_oauth_install_gmail(ironclaw_server): function test_oauth_configure_returns_auth_url (line 70) | async def test_oauth_configure_returns_auth_url(ironclaw_server): function test_oauth_activate_returns_auth_url (line 95) | async def test_oauth_activate_returns_auth_url(ironclaw_server): function test_oauth_callback_exchanges_token (line 113) | async def test_oauth_callback_exchanges_token(ironclaw_server): function test_oauth_callback_replay_rejected (line 152) | async def test_oauth_callback_replay_rejected(ironclaw_server): function test_oauth_callback_invalid_state (line 172) | async def test_oauth_callback_invalid_state(ironclaw_server): function test_oauth_extension_authenticated (line 188) | async def test_oauth_extension_authenticated(ironclaw_server): function test_oauth_tools_registered (line 200) | async def test_oauth_tools_registered(ironclaw_server): function test_remove_during_pending_oauth_invalidates_callback (line 214) | async def test_remove_during_pending_oauth_invalidates_callback(ironclaw... function test_cleanup_gmail (line 260) | async def test_cleanup_gmail(ironclaw_server): FILE: tests/e2e/scenarios/test_extensions.py function go_to_extensions (line 93) | async def go_to_extensions(page): function go_to_channels (line 112) | async def go_to_channels(page): function go_to_mcp (line 121) | async def go_to_mcp(page): function mock_ext_apis (line 133) | async def mock_ext_apis(page, *, installed=None, registry=None): function wait_for_toast (line 160) | async def wait_for_toast(page, text: str, *, timeout: int = 5000): function test_extensions_empty_tab_layout (line 167) | async def test_extensions_empty_tab_layout(page): function test_installed_wasm_tool_card_renders (line 182) | async def test_installed_wasm_tool_card_renders(page): function test_installed_wasm_tool_unauthed_state (line 201) | async def test_installed_wasm_tool_unauthed_state(page): function test_installed_wasm_tool_authed_shows_reconfigure_btn (line 216) | async def test_installed_wasm_tool_authed_shows_reconfigure_btn(page): function test_installed_mcp_server_active (line 233) | async def test_installed_mcp_server_active(page): function test_installed_mcp_server_inactive_shows_activate (line 245) | async def test_installed_mcp_server_inactive_shows_activate(page): function test_mcp_server_in_registry_not_installed (line 255) | async def test_mcp_server_in_registry_not_installed(page): function test_mcp_server_installed_auth_dot (line 267) | async def test_mcp_server_installed_auth_dot(page): function _load_wasm_channel (line 284) | async def _load_wasm_channel(page, activation_status, activation_error=N... function test_wasm_channel_setup_states (line 294) | async def test_wasm_channel_setup_states(page): function test_wasm_channel_pairing_state (line 303) | async def test_wasm_channel_pairing_state(page): function test_wasm_channel_active_state (line 310) | async def test_wasm_channel_active_state(page): function test_wasm_channel_failed_renders (line 318) | async def test_wasm_channel_failed_renders(page): function test_available_wasm_card_renders (line 331) | async def test_available_wasm_card_renders(page): function test_available_wasm_keywords_shown (line 344) | async def test_available_wasm_keywords_shown(page): function test_install_wasm_success (line 355) | async def test_install_wasm_success(page): function test_install_wasm_failure (line 403) | async def test_install_wasm_failure(page): function test_install_wasm_channel_triggers_configure (line 420) | async def test_install_wasm_channel_triggers_configure(page): function test_install_with_auth_url_opens_popup_and_shows_auth_prompt (line 447) | async def test_install_with_auth_url_opens_popup_and_shows_auth_prompt(p... function test_remove_installed_extension_confirmed (line 480) | async def test_remove_installed_extension_confirmed(page): function test_remove_cancelled_keeps_card (line 528) | async def test_remove_cancelled_keeps_card(page): function _open_configure_modal (line 546) | async def _open_configure_modal(page, secrets): function test_configure_modal_field_variants (line 558) | async def test_configure_modal_field_variants(page): function test_configure_modal_cancel_closes (line 589) | async def test_configure_modal_cancel_closes(page): function test_configure_modal_backdrop_click_closes (line 599) | async def test_configure_modal_backdrop_click_closes(page): function test_configure_modal_save_success (line 613) | async def test_configure_modal_save_success(page): function test_configure_modal_save_oauth (line 633) | async def test_configure_modal_save_oauth(page): function test_configure_modal_save_failure (line 666) | async def test_configure_modal_save_failure(page): function test_configure_modal_enter_key_submits (line 691) | async def test_configure_modal_enter_key_submits(page): function _show_auth_card (line 723) | async def _show_auth_card(page, **kwargs): function test_auth_card_token_only (line 730) | async def test_auth_card_token_only(page): function test_auth_card_with_oauth (line 743) | async def test_auth_card_with_oauth(page): function test_auth_card_with_setup_url (line 753) | async def test_auth_card_with_setup_url(page): function test_auth_card_submit_success (line 764) | async def test_auth_card_submit_success(page): function test_auth_card_submit_empty_noop (line 790) | async def test_auth_card_submit_empty_noop(page): function test_auth_card_submit_error (line 797) | async def test_auth_card_submit_error(page): function test_auth_card_cancel_removes_card (line 815) | async def test_auth_card_cancel_removes_card(page): function test_auth_card_replaces_existing_same_extension (line 827) | async def test_auth_card_replaces_existing_same_extension(page): function test_auth_card_for_different_extension_replaces_existing_prompt (line 837) | async def test_auth_card_for_different_extension_replaces_existing_promp... function test_auth_and_configure_helpers_escape_selector_sensitive_extension_names (line 847) | async def test_auth_and_configure_helpers_escape_selector_sensitive_exte... function test_auth_required_does_not_reopen_existing_configure_modal (line 876) | async def test_auth_required_does_not_reopen_existing_configure_modal(pa... function test_auth_completed_sse_dismisses_card (line 906) | async def test_auth_completed_sse_dismisses_card(page): function test_auth_completed_for_other_extension_keeps_configure_modal_open (line 922) | async def test_auth_completed_for_other_extension_keeps_configure_modal_... function test_auth_completed_failure_sse_shows_error_toast_and_reloads_extensions (line 948) | async def test_auth_completed_failure_sse_shows_error_toast_and_reloads_... function test_activate_mcp_server_success (line 999) | async def test_activate_mcp_server_success(page): function test_activate_awaiting_token_opens_configure (line 1024) | async def test_activate_awaiting_token_opens_configure(page): function test_activate_failure_shows_error_toast (line 1049) | async def test_activate_failure_shows_error_toast(page): function test_activate_with_auth_url_opens_popup_and_shows_auth_prompt (line 1066) | async def test_activate_with_auth_url_opens_popup_and_shows_auth_prompt(... function test_extensions_tab_reloads_on_revisit (line 1092) | async def test_extensions_tab_reloads_on_revisit(page): function test_ext_tools_null_does_not_crash (line 1135) | async def test_ext_tools_null_does_not_crash(page): function test_configure_modal_stays_open_on_save_failure (line 1154) | async def test_configure_modal_stays_open_on_save_failure(page): function test_oauth_url_injection_blocked (line 1189) | async def test_oauth_url_injection_blocked(page): FILE: tests/e2e/scenarios/test_html_injection.py function test_html_injection_sanitized (line 14) | async def test_html_injection_sanitized(page): function test_user_message_not_html_rendered (line 46) | async def test_user_message_not_html_rendered(page): function test_no_script_elements_after_injection (line 67) | async def test_no_script_elements_after_injection(page): FILE: tests/e2e/scenarios/test_mcp_auth_flow.py function _extract_state (line 26) | def _extract_state(auth_url: str) -> str: function _get_extension (line 34) | async def _get_extension(base_url, name): function _ensure_removed (line 43) | async def _ensure_removed(base_url, name): function test_mcp_install (line 53) | async def test_mcp_install(ironclaw_server, mock_llm_server): function test_mcp_activate_triggers_auth (line 76) | async def test_mcp_activate_triggers_auth(ironclaw_server): function test_mcp_oauth_callback (line 111) | async def test_mcp_oauth_callback(ironclaw_server): function test_mcp_authenticated_after_oauth (line 162) | async def test_mcp_authenticated_after_oauth(ironclaw_server): function test_mcp_tools_registered (line 172) | async def test_mcp_tools_registered(ironclaw_server): function test_mcp_auth_mode_cleared_llm_turn_fires (line 187) | async def test_mcp_auth_mode_cleared_llm_turn_fires(ironclaw_server, page): function test_mcp_400_activate_triggers_auth (line 222) | async def test_mcp_400_activate_triggers_auth(ironclaw_server, mock_llm_... function test_mcp_400_oauth_discovery_returns_auth_url (line 259) | async def test_mcp_400_oauth_discovery_returns_auth_url(ironclaw_server): function test_mcp_400_full_oauth_roundtrip (line 292) | async def test_mcp_400_full_oauth_roundtrip(ironclaw_server): function test_mcp_400_cleanup (line 345) | async def test_mcp_400_cleanup(ironclaw_server): function test_mcp_cleanup (line 355) | async def test_mcp_cleanup(ironclaw_server): FILE: tests/e2e/scenarios/test_oauth_credential_fallback.py function test_oauth_credential_injection_after_gmail_auth (line 19) | async def test_oauth_credential_injection_after_gmail_auth(ironclaw_serv... function test_tool_registry_lists_authenticated_extensions (line 68) | async def test_tool_registry_lists_authenticated_extensions(ironclaw_ser... function test_credential_fallback_documented_in_code (line 90) | async def test_credential_fallback_documented_in_code(ironclaw_server): FILE: tests/e2e/scenarios/test_owner_scope.py function _send_and_get_response (line 24) | async def _send_and_get_response( function _post_http_webhook (line 60) | async def _post_http_webhook( function _open_tab (line 95) | async def _open_tab(page, tab: str) -> None: function _wait_for_routine (line 104) | async def _wait_for_routine(base_url: str, name: str, timeout: float = 2... function _wait_for_http_thread (line 122) | async def _wait_for_http_thread(base_url: str, title_fragment: str, time... function _wait_for_pending_approval (line 139) | async def _wait_for_pending_approval( function _approve_pending_request (line 159) | async def _approve_pending_request(base_url: str, thread_id: str, reques... function _poll_sleep (line 178) | async def _poll_sleep() -> None: function test_http_channel_created_routine_is_visible_in_web_routines_tab (line 183) | async def test_http_channel_created_routine_is_visible_in_web_routines_tab( function test_web_created_routine_is_listed_from_http_channel_across_senders (line 208) | async def test_web_created_routine_is_listed_from_http_channel_across_se... function test_http_created_full_job_routine_is_visible_in_web_after_approval (line 242) | async def test_http_created_full_job_routine_is_visible_in_web_after_app... FILE: tests/e2e/scenarios/test_pairing.py function _headers (line 11) | def _headers(): function test_pairing_list_returns_empty_for_unknown_channel (line 15) | async def test_pairing_list_returns_empty_for_unknown_channel(ironclaw_s... function test_approve_invalid_code_rejected (line 38) | async def test_approve_invalid_code_rejected(ironclaw_server): function test_approve_empty_code_rejected (line 55) | async def test_approve_empty_code_rejected(ironclaw_server): function test_pairing_approve_requires_auth (line 71) | async def test_pairing_approve_requires_auth(ironclaw_server): FILE: tests/e2e/scenarios/test_routine_event_batch.py function _send_chat_message (line 13) | async def _send_chat_message(page, message: str) -> None: function _create_event_routine (line 35) | async def _create_event_routine( function _post_http_message (line 51) | async def _post_http_message( function _wait_for_routine (line 81) | async def _wait_for_routine(base_url: str, name: str, timeout: float = 2... function _get_routine_runs (line 98) | async def _get_routine_runs(base_url: str, routine_id: str) -> list[dict]: function _wait_for_run_count (line 110) | async def _wait_for_run_count( function _wait_for_completed_run (line 128) | async def _wait_for_completed_run( function test_create_event_trigger_routine (line 144) | async def test_create_event_trigger_routine(page, ironclaw_server): function test_event_trigger_fires_on_matching_message (line 160) | async def test_event_trigger_fires_on_matching_message( function test_event_trigger_skips_non_matching_message (line 192) | async def test_event_trigger_skips_non_matching_message( function test_multiple_routines_fire_on_matching_message (line 216) | async def test_multiple_routines_fire_on_matching_message( function test_channel_filter_applied_correctly (line 250) | async def test_channel_filter_applied_correctly( function test_routine_execution_history_is_available (line 290) | async def test_routine_execution_history_is_available( FILE: tests/e2e/scenarios/test_routine_oauth_credential_injection.py function test_routine_with_oauth_credentials_e2e (line 19) | async def test_routine_with_oauth_credentials_e2e(page, ironclaw_server): function test_routine_list_shows_oauth_tools_available (line 116) | async def test_routine_list_shows_oauth_tools_available(page, ironclaw_s... function test_oauth_token_accessible_across_execution_contexts (line 144) | async def test_oauth_token_accessible_across_execution_contexts(ironclaw... FILE: tests/e2e/scenarios/test_skills.py function go_to_skills (line 7) | async def go_to_skills(page): function test_skills_tab_visible (line 16) | async def test_skills_tab_visible(page): function test_skills_search (line 24) | async def test_skills_search(page): function test_skills_install_and_remove (line 43) | async def test_skills_install_and_remove(page): FILE: tests/e2e/scenarios/test_sse_reconnect.py function test_sse_status_shows_connected (line 7) | async def test_sse_status_shows_connected(page): function test_sse_reconnect_after_disconnect (line 15) | async def test_sse_reconnect_after_disconnect(page): function test_sse_reconnect_preserves_chat_history (line 39) | async def test_sse_reconnect_preserves_chat_history(page): FILE: tests/e2e/scenarios/test_telegram_hot_activation.py function go_to_channels (line 36) | async def go_to_channels(page): function _default_gateway_status_handler (line 49) | async def _default_gateway_status_handler(route): function mock_extension_lists (line 57) | async def mock_extension_lists(page, ext_handler, *, gateway_status_hand... function wait_for_toast (line 89) | async def wait_for_toast(page, text: str, *, timeout: int = 5000): function test_telegram_setup_modal_shows_bot_token_field (line 95) | async def test_telegram_setup_modal_shows_bot_token_field(page): function test_telegram_hot_activation_transitions_installed_to_active (line 139) | async def test_telegram_hot_activation_transitions_installed_to_active(p... FILE: tests/e2e/scenarios/test_telegram_token_validation.py function test_telegram_configure_modal_renders (line 45) | async def test_telegram_configure_modal_renders(page): function test_telegram_token_input_accepts_colon_format (line 89) | async def test_telegram_token_input_accepts_colon_format(page): function test_telegram_token_with_underscores_and_hyphens (line 132) | async def test_telegram_token_with_underscores_and_hyphens(page): FILE: tests/e2e/scenarios/test_tool_approval.py function test_approval_card_appears (line 15) | async def test_approval_card_appears(page): function test_approval_approve_disables_buttons (line 48) | async def test_approval_approve_disables_buttons(page): function test_approval_deny_shows_denied (line 79) | async def test_approval_deny_shows_denied(page): function test_approval_params_toggle (line 101) | async def test_approval_params_toggle(page): function test_waiting_for_approval_message_no_error_prefix (line 135) | async def test_waiting_for_approval_message_no_error_prefix(page): FILE: tests/e2e/scenarios/test_tool_execution.py function _send_and_get_response (line 11) | async def _send_and_get_response( function test_builtin_echo_tool (line 55) | async def test_builtin_echo_tool(page): function test_builtin_time_tool (line 69) | async def test_builtin_time_tool(page): function test_non_tool_message_still_works (line 83) | async def test_non_tool_message_still_works(page): FILE: tests/e2e/scenarios/test_wasm_lifecycle.py function _get_extension (line 18) | async def _get_extension(base_url, name): function _ensure_removed (line 27) | async def _ensure_removed(base_url, name): function _install_extension (line 34) | async def _install_extension(base_url, name): function extension_lifecycle_cleanup (line 49) | async def extension_lifecycle_cleanup(ironclaw_server): function web_search_installed (line 59) | async def web_search_installed(ironclaw_server, extension_lifecycle_clea... function web_search_configured (line 66) | async def web_search_configured(ironclaw_server, web_search_installed): function gmail_installed (line 82) | async def gmail_installed(ironclaw_server, extension_lifecycle_cleanup): function web_search_removed (line 89) | async def web_search_removed(ironclaw_server, web_search_configured): function web_search_reinstalled (line 101) | async def web_search_reinstalled(ironclaw_server, web_search_removed): function test_registry_lists_extensions (line 111) | async def test_registry_lists_extensions(ironclaw_server): function test_registry_entry_fields (line 122) | async def test_registry_entry_fields(ironclaw_server): function test_registry_installed_flag_false_initially (line 136) | async def test_registry_installed_flag_false_initially(ironclaw_server): function test_registry_search_filters (line 151) | async def test_registry_search_filters(ironclaw_server): function test_registry_search_no_match (line 162) | async def test_registry_search_no_match(ironclaw_server): function test_install_web_search (line 176) | async def test_install_web_search(web_search_installed): function test_installed_extension_fields (line 182) | async def test_installed_extension_fields(ironclaw_server, web_search_in... function test_installed_in_registry (line 191) | async def test_installed_in_registry(ironclaw_server, web_search_install... function test_setup_schema_has_secrets (line 200) | async def test_setup_schema_has_secrets(ironclaw_server, web_search_inst... function test_extension_not_authenticated_before_configure (line 214) | async def test_extension_not_authenticated_before_configure( function test_activate_before_configure_rejected (line 224) | async def test_activate_before_configure_rejected(ironclaw_server, web_s... function test_configure_rejects_unknown_secret (line 243) | async def test_configure_rejects_unknown_secret(ironclaw_server, web_sea... function test_configure_with_valid_secret (line 258) | async def test_configure_with_valid_secret(web_search_configured): function test_extension_active_after_configure (line 263) | async def test_extension_active_after_configure(ironclaw_server, web_sea... function test_setup_shows_provided (line 272) | async def test_setup_shows_provided(ironclaw_server, web_search_configur... function test_tools_registered_after_activate (line 281) | async def test_tools_registered_after_activate( function test_activate_already_active_idempotent (line 293) | async def test_activate_already_active_idempotent( function test_configure_empty_secret_skipped (line 307) | async def test_configure_empty_secret_skipped(ironclaw_server, web_searc... function test_install_gmail (line 330) | async def test_install_gmail(gmail_installed): function test_gmail_fields (line 335) | async def test_gmail_fields(ironclaw_server, gmail_installed): function test_both_extensions_listed (line 343) | async def test_both_extensions_listed( function test_gmail_setup_schema_auto_resolves (line 353) | async def test_gmail_setup_schema_auto_resolves(ironclaw_server, gmail_i... function test_remove_web_search (line 372) | async def test_remove_web_search(web_search_removed): function test_removed_not_in_extensions (line 377) | async def test_removed_not_in_extensions(ironclaw_server, web_search_rem... function test_removed_extension_not_listed (line 383) | async def test_removed_extension_not_listed(ironclaw_server, web_search_... function test_removed_not_in_registry_installed (line 393) | async def test_removed_not_in_registry_installed(ironclaw_server, web_se... function test_activate_after_remove_uses_replacement_bytes_not_cached_module (line 403) | async def test_activate_after_remove_uses_replacement_bytes_not_cached_m... function test_reinstall_after_remove (line 420) | async def test_reinstall_after_remove(ironclaw_server, web_search_reinst... function test_install_nonexistent (line 435) | async def test_install_nonexistent(ironclaw_server): function test_install_empty_name (line 449) | async def test_install_empty_name(ironclaw_server): function test_remove_noninstalled (line 463) | async def test_remove_noninstalled(ironclaw_server): function test_activate_noninstalled (line 474) | async def test_activate_noninstalled(ironclaw_server): function test_setup_noninstalled (line 485) | async def test_setup_noninstalled(ironclaw_server): function test_configure_noninstalled (line 492) | async def test_configure_noninstalled(ironclaw_server): function test_extensions_tab_shows_registry (line 509) | async def test_extensions_tab_shows_registry(page): FILE: tests/e2e/scenarios/test_webhook.py function compute_signature (line 13) | def compute_signature(secret: str, body: bytes) -> str: function _post_webhook (line 19) | async def _post_webhook( function test_webhook_requires_http_webhook_secret_configured (line 41) | async def test_webhook_requires_http_webhook_secret_configured( function test_webhook_hmac_signature_valid (line 57) | async def test_webhook_hmac_signature_valid(http_channel_server): function test_webhook_invalid_hmac_signature_rejected (line 72) | async def test_webhook_invalid_hmac_signature_rejected(http_channel_serv... function test_webhook_wrong_secret_rejected (line 87) | async def test_webhook_wrong_secret_rejected(http_channel_server): function test_webhook_missing_signature_header_rejected (line 99) | async def test_webhook_missing_signature_header_rejected(http_channel_se... function test_webhook_deprecated_body_secret_still_works (line 110) | async def test_webhook_deprecated_body_secret_still_works(http_channel_s... function test_webhook_header_takes_precedence_over_body_secret (line 124) | async def test_webhook_header_takes_precedence_over_body_secret(http_cha... function test_webhook_case_insensitive_header_lookup (line 136) | async def test_webhook_case_insensitive_header_lookup(http_channel_server): function test_webhook_wrong_content_type_rejected (line 156) | async def test_webhook_wrong_content_type_rejected(http_channel_server): function test_webhook_invalid_json_rejected (line 173) | async def test_webhook_invalid_json_rejected(http_channel_server): function test_webhook_message_queued_for_processing (line 192) | async def test_webhook_message_queued_for_processing(http_channel_server): FILE: tests/e2e_advanced_traces.rs constant FIXTURES (line 20) | const FIXTURES: &str = concat!( constant TIMEOUT (line 24) | const TIMEOUT: Duration = Duration::from_secs(30); function wait_for_routine_run (line 26) | async fn wait_for_routine_run( function multi_turn_memory_coherence (line 53) | async fn multi_turn_memory_coherence() { function user_steering (line 80) | async fn user_steering() { function tool_error_recovery (line 120) | async fn tool_error_recovery() { function long_tool_chain (line 165) | async fn long_tool_chain() { function workspace_semantic_search (line 230) | async fn workspace_semantic_search() { function iteration_limit_stops_runaway (line 265) | async fn iteration_limit_stops_runaway() { function routine_news_digest (line 302) | async fn routine_news_digest() { function routine_event_trigger_telegram_channel_fires (line 414) | async fn routine_event_trigger_telegram_channel_fires() { function routine_event_trigger_without_channel_filter_still_fires (line 490) | async fn routine_event_trigger_without_channel_filter_still_fires() { function prompt_injection_resilience (line 558) | async fn prompt_injection_resilience() { function mcp_extension_lifecycle (line 587) | async fn mcp_extension_lifecycle() { function bootstrap_greeting_fires (line 716) | async fn bootstrap_greeting_fires() { function bootstrap_onboarding_clears_bootstrap (line 750) | async fn bootstrap_onboarding_clears_bootstrap() { FILE: tests/e2e_attachments.rs constant FIXTURES (line 19) | const FIXTURES: &str = concat!( constant TIMEOUT (line 23) | const TIMEOUT: Duration = Duration::from_secs(15); function make_attachment (line 25) | fn make_attachment(kind: AttachmentKind) -> IncomingAttachment { function attachment_audio_transcript_reaches_llm (line 42) | async fn attachment_audio_transcript_reaches_llm() { function attachment_image_produces_content_parts (line 109) | async fn attachment_image_produces_content_parts() { function no_attachments_no_augmentation (line 179) | async fn no_attachments_no_augmentation() { FILE: tests/e2e_builtin_tool_coverage.rs function time_parse_and_diff (line 23) | async fn time_parse_and_diff() { function time_parse_invalid (line 58) | async fn time_parse_invalid() { function routine_create_list (line 97) | async fn routine_create_list() { function routine_update_delete (line 171) | async fn routine_update_delete() { function routine_manual_create (line 212) | async fn routine_manual_create() { function routine_history (line 253) | async fn routine_history() { function routine_system_event_emit (line 290) | async fn routine_system_event_emit() { function routine_create_grouped (line 373) | async fn routine_create_grouped() { function routine_system_event_emit_grouped (line 426) | async fn routine_system_event_emit_grouped() { function skill_install_routine_webhook_sim (line 490) | async fn skill_install_routine_webhook_sim() { function job_create_status (line 547) | async fn job_create_status() { function job_list_cancel (line 617) | async fn job_list_cancel() { function http_get_with_replay (line 659) | async fn http_get_with_replay() { function tool_info_discovery (line 696) | async fn tool_info_discovery() { FILE: tests/e2e_metrics_test.rs constant TEST_DIR (line 19) | const TEST_DIR: &str = "/tmp/ironclaw_metrics_test"; function setup_test_dir (line 21) | fn setup_test_dir() { function test_metrics_collected_from_text_trace (line 28) | async fn test_metrics_collected_from_text_trace() { function test_metrics_collected_from_tool_trace (line 92) | async fn test_metrics_collected_from_tool_trace() { function test_metrics_json_serialization (line 161) | async fn test_metrics_json_serialization() { function test_run_result_and_baseline_comparison (line 207) | async fn test_run_result_and_baseline_comparison() { function test_rig_metric_accessors (line 266) | async fn test_rig_metric_accessors() { FILE: tests/e2e_recorded_trace.rs function recorded_telegram_check (line 15) | async fn recorded_telegram_check() { function recorded_weather_sf (line 21) | async fn recorded_weather_sf() { function recorded_baseball_stats (line 28) | async fn recorded_baseball_stats() { FILE: tests/e2e_routine_heartbeat.rs constant OWNER_GATE_COUNT_SETTING_KEY (line 44) | const OWNER_GATE_COUNT_SETTING_KEY: &str = "tests.owner_gate_count"; type OwnerGateTool (line 46) | struct OwnerGateTool { method name (line 52) | fn name(&self) -> &str { method description (line 56) | fn description(&self) -> &str { method parameters_schema (line 60) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 67) | async fn execute( method requires_approval (line 96) | fn requires_approval(&self, _params: &serde_json::Value) -> ApprovalRequ... method requires_sanitization (line 100) | fn requires_sanitization(&self) -> bool { function create_test_db (line 106) | async fn create_test_db() -> (Arc, tempfile::TempDir) { function create_test_backend (line 112) | async fn create_test_backend() -> (Arc, tempfile::TempDir) { function create_workspace (line 125) | fn create_workspace(db: &Arc) -> Arc { function make_message (line 129) | fn make_message( function make_routine (line 143) | fn make_routine(name: &str, trigger: Trigger, prompt: &str) -> Routine { function make_full_job_routine (line 174) | fn make_full_job_routine(name: &str) -> Routine { function owner_gate_trace (line 203) | fn owner_gate_trace(include_completion: bool) -> LlmTrace { function owner_gate_lightweight_trace (line 237) | fn owner_gate_lightweight_trace() -> LlmTrace { function write_test_extension_wasm (line 268) | async fn write_test_extension_wasm(tools_dir: &Path, name: &str) { function make_test_extension_manager (line 277) | fn make_test_extension_manager( function setup_owner_gate_engine (line 306) | async fn setup_owner_gate_engine( function owner_gate_count (line 359) | async fn owner_gate_count(db: &Arc) -> i64 { function wait_for_run_completion (line 367) | async fn wait_for_run_completion( function wait_for_any_run_completion (line 392) | async fn wait_for_any_run_completion(db: &Arc, routine_id:... function cron_routine_fires (line 419) | async fn cron_routine_fires() { function event_trigger_matches (line 500) | async fn event_trigger_matches() { function event_trigger_respects_message_user_scope (line 597) | async fn event_trigger_respects_message_user_scope() { function system_event_trigger_matches_and_filters (line 704) | async fn system_event_trigger_matches_and_filters() { function routine_cooldown (line 846) | async fn routine_cooldown() { function heartbeat_findings (line 937) | async fn heartbeat_findings() { function heartbeat_empty_skip (line 999) | async fn heartbeat_empty_skip() { function setup_routine_mutation_test (line 1034) | async fn setup_routine_mutation_test() function toggle_disabling_event_routine_removes_from_cache (line 1082) | async fn toggle_disabling_event_routine_removes_from_cache() { function delete_event_routine_removes_from_cache (line 1121) | async fn delete_event_routine_removes_from_cache() { function full_job_max_concurrent_blocks_second_fire_while_first_active (line 1162) | async fn full_job_max_concurrent_blocks_second_fire_while_first_active() { function global_concurrency_counts_live_full_job_runs (line 1268) | async fn global_concurrency_counts_live_full_job_runs() { function lightweight_manual_routine_uses_active_owner_extension_tool (line 1371) | async fn lightweight_manual_routine_uses_active_owner_extension_tool() { function full_job_cron_routine_uses_active_owner_extension_tool (line 1405) | async fn full_job_cron_routine_uses_active_owner_extension_tool() { function lightweight_event_routine_uses_active_owner_extension_tool (line 1438) | async fn lightweight_event_routine_uses_active_owner_extension_tool() { function full_job_system_event_routine_uses_active_owner_extension_tool (line 1480) | async fn full_job_system_event_routine_uses_active_owner_extension_tool() { function full_job_blocks_without_active_owner_extension_tool (line 1522) | async fn full_job_blocks_without_active_owner_extension_tool() { function full_job_blocks_when_extension_belongs_to_another_owner (line 1562) | async fn full_job_blocks_when_extension_belongs_to_another_owner() { function legacy_full_job_permission_fields_are_ignored_and_removed_on_update (line 1602) | async fn legacy_full_job_permission_fields_are_ignored_and_removed_on_up... FILE: tests/e2e_safety_layer.rs function test_injection_patterns_sanitized (line 20) | async fn test_injection_patterns_sanitized() { function test_injection_patterns_pass_without_check (line 52) | async fn test_injection_patterns_pass_without_check() { FILE: tests/e2e_spot_checks.rs constant FIXTURES (line 18) | const FIXTURES: &str = concat!( constant TIMEOUT (line 22) | const TIMEOUT: Duration = Duration::from_secs(15); function spot_smoke_greeting (line 29) | async fn spot_smoke_greeting() { function spot_smoke_math (line 44) | async fn spot_smoke_math() { function spot_tool_echo (line 64) | async fn spot_tool_echo() { function spot_tool_json (line 80) | async fn spot_tool_json() { function spot_chain_write_read (line 100) | async fn spot_chain_write_read() { function spot_robust_no_tool (line 132) | async fn spot_robust_no_tool() { function spot_robust_correct_tool (line 148) | async fn spot_robust_correct_tool() { function spot_memory_save_recall (line 168) | async fn spot_memory_save_recall() { FILE: tests/e2e_status_events.rs function test_status_event_ordering (line 24) | async fn test_status_event_ordering() { function test_thinking_events_captured (line 126) | async fn test_thinking_events_captured() { FILE: tests/e2e_telegram_message_routing.rs type TelegramCaptures (line 29) | type TelegramCaptures = Arc>>; type RecordingTelegramChannel (line 31) | struct RecordingTelegramChannel { method new (line 36) | fn new() -> (Self, TelegramCaptures) { method name (line 49) | fn name(&self) -> &str { method start (line 53) | async fn start(&self) -> Result { method respond (line 58) | async fn respond( method send_status (line 70) | async fn send_status( method broadcast (line 78) | async fn broadcast( method health_check (line 90) | async fn health_check(&self) -> Result<(), ChannelError> { type Harness (line 95) | struct Harness { method store_telegram_owner_binding (line 105) | async fn store_telegram_owner_binding(&self, owner_id: i64) { method wait_for_telegram_broadcasts (line 118) | async fn wait_for_telegram_broadcasts( method drop (line 135) | fn drop(&mut self) { function build_harness (line 143) | async fn build_harness(trace: LlmTrace) -> Harness { function single_message_trace (line 249) | fn single_message_trace(arguments: serde_json::Value, final_text: &str) ... function telegram_message_tool_uses_bound_owner_target_when_target_omitted (line 281) | async fn telegram_message_tool_uses_bound_owner_target_when_target_omitt... function telegram_message_tool_prefers_explicit_target_over_bound_owner_target (line 325) | async fn telegram_message_tool_prefers_explicit_target_over_bound_owner_... FILE: tests/e2e_thread_id_isolation.rs function assert_safe_thread_rejection (line 19) | fn assert_safe_thread_rejection(response: &OutgoingResponse) { function forged_existing_foreign_thread_id_is_rejected_without_hydration_or_persistence (line 29) | async fn forged_existing_foreign_thread_id_is_rejected_without_hydration... function forged_nonexistent_thread_id_is_rejected_and_followup_request_still_works (line 121) | async fn forged_nonexistent_thread_id_is_rejected_and_followup_request_s... FILE: tests/e2e_thread_scheduling.rs function multi_turn_state (line 21) | async fn multi_turn_state() { function undo_redo_cycle (line 81) | async fn undo_redo_cycle() { function concurrent_dispatch (line 113) | async fn concurrent_dispatch() { FILE: tests/e2e_tool_coverage.rs constant TEST_DIR_BASE (line 17) | const TEST_DIR_BASE: &str = "/tmp/ironclaw_coverage_test"; function setup_test_dir (line 19) | fn setup_test_dir(suffix: &str) -> String { function test_json_operations (line 31) | async fn test_json_operations() { function test_shell_echo (line 72) | async fn test_shell_echo() { function test_list_dir (line 96) | async fn test_list_dir() { function test_apply_patch_chain (line 125) | async fn test_apply_patch_chain() { function test_memory_full_cycle (line 170) | async fn test_memory_full_cycle() { FILE: tests/e2e_tool_param_coercion.rs type SheetsWriteFixtureTool (line 27) | struct SheetsWriteFixtureTool; method name (line 31) | fn name(&self) -> &str { method description (line 35) | fn description(&self) -> &str { method parameters_schema (line 39) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 57) | async fn execute( method requires_sanitization (line 88) | fn requires_sanitization(&self) -> bool { type DocsBatchUpdateFixtureTool (line 93) | struct DocsBatchUpdateFixtureTool; method name (line 97) | fn name(&self) -> &str { method description (line 101) | fn description(&self) -> &str { method parameters_schema (line 105) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 139) | async fn execute( method requires_sanitization (line 185) | fn requires_sanitization(&self) -> bool { function e2e_normalizes_stringified_google_sheets_values (line 191) | async fn e2e_normalizes_stringified_google_sheets_values() { function e2e_normalizes_stringified_google_docs_requests (line 270) | async fn e2e_normalizes_stringified_google_docs_requests() { FILE: tests/e2e_trace_error_path.rs function test_tool_error_handled_gracefully (line 17) | async fn test_tool_error_handled_gracefully() { FILE: tests/e2e_trace_file_tools.rs constant TEST_DIR (line 15) | const TEST_DIR: &str = "/tmp/ironclaw_e2e_test"; constant TEST_FILE (line 16) | const TEST_FILE: &str = "/tmp/ironclaw_e2e_test/hello.txt"; constant EXPECTED_CONTENT (line 17) | const EXPECTED_CONTENT: &str = "Hello, E2E test!"; function setup_test_dir (line 19) | fn setup_test_dir() { function test_file_write_and_read_flow (line 25) | async fn test_file_write_and_read_flow() { FILE: tests/e2e_trace_memory.rs function test_memory_write_flow (line 17) | async fn test_memory_write_flow() { FILE: tests/e2e_worker_coverage.rs type StubRateLimitTool (line 26) | struct StubRateLimitTool; method name (line 30) | fn name(&self) -> &str { method description (line 33) | fn description(&self) -> &str { method parameters_schema (line 36) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 39) | async fn execute( function parallel_three_tools (line 53) | async fn parallel_three_tools() { function tool_error_feedback (line 93) | async fn tool_error_feedback() { function unknown_tool_name (line 146) | async fn unknown_tool_name() { function invalid_tool_params (line 186) | async fn invalid_tool_params() { function rate_limit_cascade (line 220) | async fn rate_limit_cascade() { function iteration_limit (line 261) | async fn iteration_limit() { function simple_echo_flow (line 299) | async fn simple_echo_flow() { FILE: tests/e2e_workspace_coverage.rs function write_chunk_search (line 21) | async fn write_chunk_search() { function multi_document_search (line 84) | async fn multi_document_search() { function hybrid_search_with_embeddings (line 126) | async fn hybrid_search_with_embeddings() { function directory_tree (line 165) | async fn directory_tree() { function document_lifecycle (line 219) | async fn document_lifecycle() { function identity_in_system_prompt (line 270) | async fn identity_in_system_prompt() { FILE: tests/gateway_workflow_integration.rs function gateway_workflow_harness_chat_and_webhook (line 28) | async fn gateway_workflow_harness_chat_and_webhook() { function routines_toggle_reenable_cron_recomputes_next_fire_at (line 158) | async fn routines_toggle_reenable_cron_recomputes_next_fire_at() { function routines_detail_omits_legacy_full_job_permission_surface (line 269) | async fn routines_detail_omits_legacy_full_job_permission_surface() { FILE: tests/heartbeat_integration.rs function test_heartbeat_end_to_end (line 23) | async fn test_heartbeat_end_to_end() { FILE: tests/html_to_markdown.rs type PageMetadata (line 11) | struct PageMetadata { function normalize (line 20) | fn normalize(s: &str) -> String { function normalize_smart_punctuation (line 29) | fn normalize_smart_punctuation(s: &str) -> String { function convert_test_pages_to_markdown (line 35) | fn convert_test_pages_to_markdown() { FILE: tests/import_openclaw.rs function test_import_stats_is_empty (line 11) | fn test_import_stats_is_empty() { function test_import_stats_total_imported (line 18) | fn test_import_stats_total_imported() { function test_import_error_display (line 34) | fn test_import_error_display() { function test_openclaw_config_construction (line 43) | fn test_openclaw_config_construction() { function test_memory_chunk_construction (line 56) | fn test_memory_chunk_construction() { FILE: tests/import_openclaw_comprehensive.rs function create_synthetic_openclaw_dir (line 15) | fn create_synthetic_openclaw_dir() -> Result<(TempDir, PathBuf), Box Result<(TempDir, PathBuf), Bo... function create_full_agent_db (line 71) | async fn create_full_agent_db(db_path: &PathBuf) -> Result<(), Box Result<(TempDir, PathBuf), Box Result<(TempDir, PathBuf), Box Result<(), Box ironclaw::config::DatabaseCo... function test_crypto (line 32) | fn test_crypto() -> Arc { function connect_with_handles_returns_db_and_libsql_handle (line 43) | async fn connect_with_handles_returns_db_and_libsql_handle() { function connect_from_config_produces_working_db (line 68) | async fn connect_from_config_produces_working_db() { function secrets_store_from_handles_round_trips (line 88) | async fn secrets_store_from_handles_round_trips() { function db_create_secrets_store_standalone_round_trips (line 120) | async fn db_create_secrets_store_standalone_round_trips() { function both_secrets_factories_produce_compatible_stores (line 151) | async fn both_secrets_factories_produce_compatible_stores() { function extension_manager_with_process_manager_constructs (line 190) | async fn extension_manager_with_process_manager_constructs() { function database_handles_default_is_empty (line 229) | fn database_handles_default_is_empty() { FILE: tests/openai_compat_integration.rs constant AUTH_TOKEN (line 21) | const AUTH_TOKEN: &str = "test-openai-token"; type MockLlmState (line 28) | struct MockLlmState { type MockLlmProvider (line 33) | struct MockLlmProvider { method new (line 38) | fn new(state: Arc) -> Self { method model_name (line 45) | fn model_name(&self) -> &str { method cost_per_token (line 49) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 53) | async fn complete(&self, req: CompletionRequest) -> Result Result, LlmError> { type FixedModelProvider (line 125) | struct FixedModelProvider { method new (line 130) | fn new(model: &'static str) -> Self { method model_name (line 137) | fn model_name(&self) -> &str { method cost_per_token (line 141) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 145) | async fn complete(&self, _req: CompletionRequest) -> Result) -> String { function start_test_server (line 180) | async fn start_test_server() -> (SocketAddr, Arc, Arc reqwest::Client { function test_chat_completions_basic (line 240) | async fn test_chat_completions_basic() { function test_chat_completions_with_system_message (line 281) | async fn test_chat_completions_with_system_message() { function test_chat_completions_with_tools (line 308) | async fn test_chat_completions_with_tools() { function test_chat_completions_streaming (line 354) | async fn test_chat_completions_streaming() { function test_chat_completions_empty_messages (line 430) | async fn test_chat_completions_empty_messages() { function test_chat_completions_model_override (line 451) | async fn test_chat_completions_model_override() { function test_chat_completions_uses_effective_model_when_override_ignored (line 475) | async fn test_chat_completions_uses_effective_model_when_override_ignore... function test_chat_completions_streaming_uses_effective_model_when_override_ignored (line 497) | async fn test_chat_completions_streaming_uses_effective_model_when_overr... function test_chat_completions_model_too_long (line 524) | async fn test_chat_completions_model_too_long() { function test_chat_completions_model_with_control_chars (line 560) | async fn test_chat_completions_model_with_control_chars() { function test_chat_completions_model_with_surrounding_whitespace (line 596) | async fn test_chat_completions_model_with_surrounding_whitespace() { function test_chat_completions_no_auth (line 631) | async fn test_chat_completions_no_auth() { function test_models_endpoint (line 650) | async fn test_models_endpoint() { function test_models_no_auth (line 673) | async fn test_models_no_auth() { function test_no_llm_provider_returns_503 (line 682) | async fn test_no_llm_provider_returns_503() { function test_chat_completions_body_too_large (line 733) | async fn test_chat_completions_body_too_large() { FILE: tests/pairing_integration.rs function test_store (line 10) | fn test_store() -> (PairingStore, TempDir) { function test_pairing_flow_unknown_user_to_approved (line 17) | fn test_pairing_flow_unknown_user_to_approved() { function test_pairing_flow_cli_approve (line 76) | fn test_pairing_flow_cli_approve() { function test_pairing_reject_invalid_code (line 98) | fn test_pairing_reject_invalid_code() { function test_pairing_multiple_channels_isolated (line 116) | fn test_pairing_multiple_channels_isolated() { FILE: tests/provider_chaos.rs type FlakeyProvider (line 33) | struct FlakeyProvider { method new (line 41) | fn new(failures: u32, response: impl Into) -> Self { method with_name (line 50) | fn with_name(mut self, name: impl Into) -> Self { method calls (line 55) | fn calls(&self) -> u32 { method model_name (line 62) | fn model_name(&self) -> &str { method cost_per_token (line 66) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 70) | async fn complete(&self, _request: CompletionRequest) -> Result) -> Self { method model_name (line 139) | fn model_name(&self) -> &str { method cost_per_token (line 143) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 147) | async fn complete(&self, _request: CompletionRequest) -> Result) -> Self { method calls (line 177) | fn calls(&self) -> u32 { method model_name (line 184) | fn model_name(&self) -> &str { method cost_per_token (line 188) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 192) | async fn complete(&self, _request: CompletionRequest) -> Result, response: impl Into) -> Self { method calls (line 237) | fn calls(&self) -> u32 { method model_name (line 244) | fn model_name(&self) -> &str { method cost_per_token (line 248) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 252) | async fn complete(&self, _request: CompletionRequest) -> Result CompletionRequest { function make_tool_request (line 289) | fn make_tool_request() -> ToolCompletionRequest { function test_flakey_provider_eventually_succeeds (line 298) | async fn test_flakey_provider_eventually_succeeds() { function test_flakey_provider_exhausts_retries (line 321) | async fn test_flakey_provider_exhausts_retries() { function test_hanging_provider_times_out (line 337) | async fn test_hanging_provider_times_out() { function test_hanging_provider_behind_circuit_breaker_times_out (line 352) | async fn test_hanging_provider_behind_circuit_breaker_times_out() { function test_hanging_provider_complete_with_tools_times_out (line 374) | async fn test_hanging_provider_complete_with_tools_times_out() { function test_garbage_provider_returns_error_or_empty (line 391) | async fn test_garbage_provider_returns_error_or_empty() { function test_garbage_provider_not_retried (line 430) | async fn test_garbage_provider_not_retried() { function test_circuit_breaker_trips_and_recovers (line 448) | async fn test_circuit_breaker_trips_and_recovers() { function test_failover_chain_under_chaos (line 528) | async fn test_failover_chain_under_chaos() { function test_failover_cooldown_with_flakey_provider (line 568) | async fn test_failover_cooldown_with_flakey_provider() { function test_failover_three_provider_cascade (line 610) | async fn test_failover_three_provider_cascade() { function test_failover_non_transient_stops_chain (line 637) | async fn test_failover_non_transient_stops_chain() { function test_retry_plus_circuit_breaker_integration (line 692) | async fn test_retry_plus_circuit_breaker_integration() { function test_full_chain_retry_failover_circuit_breaker (line 724) | async fn test_full_chain_retry_failover_circuit_breaker() { function test_garbage_through_full_chain (line 762) | async fn test_garbage_through_full_chain() { FILE: tests/relay_integration.rs function start_server (line 16) | async fn start_server(app: Router) -> String { function test_client (line 25) | fn test_client(base_url: &str) -> RelayClient { function test_get_signing_secret_returns_decoded_bytes (line 37) | async fn test_get_signing_secret_returns_decoded_bytes() { function test_get_signing_secret_404_returns_error (line 56) | async fn test_get_signing_secret_404_returns_error() { function test_get_signing_secret_invalid_hex_returns_protocol_error (line 70) | async fn test_get_signing_secret_invalid_hex_returns_protocol_error() { function test_get_signing_secret_wrong_length_returns_protocol_error (line 88) | async fn test_get_signing_secret_wrong_length_returns_protocol_error() { type ProxyQuery (line 112) | struct ProxyQuery { function test_proxy_provider_sends_correct_payload (line 117) | async fn test_proxy_provider_sends_correct_payload() { function test_list_connections (line 147) | async fn test_list_connections() { function test_bearer_token_sent_in_header (line 170) | async fn test_bearer_token_sent_in_header() { function test_relay_client_new_succeeds (line 191) | fn test_relay_client_new_succeeds() { function test_channel_event_missing_fields_detected (line 203) | fn test_channel_event_missing_fields_detected() { FILE: tests/sighup_reload_integration.rs function test_sighup_config_reload_address_change (line 15) | async fn test_sighup_config_reload_address_change() { function test_sighup_secret_update_zero_downtime (line 75) | async fn test_sighup_secret_update_zero_downtime() { function test_sighup_rollback_on_address_bind_failure (line 127) | async fn test_sighup_rollback_on_address_bind_failure() { FILE: tests/support/assertions.rs function assert_response_contains (line 13) | pub fn assert_response_contains(response: &str, needles: &[&str]) { function assert_response_matches (line 24) | pub fn assert_response_matches(response: &str, pattern: &str) { function assert_tools_used (line 33) | pub fn assert_tools_used(started: &[String], expected: &[&str]) { function assert_tools_not_used (line 43) | pub fn assert_tools_not_used(started: &[String], forbidden: &[&str]) { function assert_max_tool_calls (line 53) | pub fn assert_max_tool_calls(started: &[String], max: usize) { function assert_all_tools_succeeded (line 62) | pub fn assert_all_tools_succeeded(completed: &[(String, bool)]) { function assert_tool_succeeded (line 75) | pub fn assert_tool_succeeded(completed: &[(String, bool)], tool_name: &s... function assert_response_not_contains (line 86) | pub fn assert_response_not_contains(response: &str, forbidden: &[&str]) { function assert_tool_order (line 102) | pub fn assert_tool_order(started: &[String], expected: &[&str]) { function verify_expects (line 126) | pub fn verify_expects( FILE: tests/support/cleanup.rs type PathKind (line 4) | enum PathKind { type CleanupGuard (line 11) | pub struct CleanupGuard { method new (line 17) | pub fn new() -> Self { method file (line 22) | pub fn file(mut self, path: impl Into) -> Self { method dir (line 28) | pub fn dir(mut self, path: impl Into) -> Self { method drop (line 35) | fn drop(&mut self) { FILE: tests/support/gateway_workflow_harness.rs type MockGithubWebhookTool (line 32) | struct MockGithubWebhookTool; method name (line 36) | fn name(&self) -> &str { method description (line 40) | fn description(&self) -> &str { method parameters_schema (line 44) | fn parameters_schema(&self) -> serde_json::Value { method execute (line 48) | async fn execute( method webhook_capability (line 91) | fn webhook_capability(&self) -> Option S... method base_url (line 358) | pub fn base_url(&self) -> String { method webhook_base_url (line 362) | pub fn webhook_base_url(&self) -> String { method create_thread (line 366) | pub async fn create_thread(&self) -> String { method send_chat (line 385) | pub async fn send_chat(&self, thread_id: &str, content: &str) { method history (line 398) | pub async fn history(&self, thread_id: &str) -> serde_json::Value { method wait_for_turns (line 415) | pub async fn wait_for_turns( method list_routines (line 437) | pub async fn list_routines(&self) -> serde_json::Value { method routine_by_name (line 451) | pub async fn routine_by_name(&self, name: &str) -> Option serde_json::Value { method github_webhook (line 480) | pub async fn github_webhook( method shutdown (line 500) | pub async fn shutdown(mut self) { method drop (line 523) | fn drop(&mut self) { FILE: tests/support/instrumented_llm.rs type LlmCallRecord (line 23) | pub struct LlmCallRecord { type InstrumentedLlm (line 31) | pub struct InstrumentedLlm { method new (line 40) | pub fn new(inner: Arc) -> Self { method call_count (line 50) | pub fn call_count(&self) -> u32 { method total_input_tokens (line 54) | pub fn total_input_tokens(&self) -> u32 { method total_output_tokens (line 58) | pub fn total_output_tokens(&self) -> u32 { method estimated_cost_usd (line 62) | pub fn estimated_cost_usd(&self) -> f64 { method records (line 71) | pub async fn records(&self) -> Vec { method record_call (line 75) | async fn record_call( method model_name (line 99) | fn model_name(&self) -> &str { method cost_per_token (line 103) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 107) | async fn complete(&self, request: CompletionRequest) -> Result Result, LlmError> { method model_metadata (line 146) | async fn model_metadata(&self) -> Result { method effective_model_name (line 150) | fn effective_model_name(&self, requested_model: Option<&str>) -> String { method active_model_name (line 154) | fn active_model_name(&self) -> String { method set_model (line 158) | fn set_model(&self, model: &str) -> Result<(), LlmError> { method calculate_cost (line 162) | fn calculate_cost(&self, input_tokens: u32, output_tokens: u32) -> Decim... FILE: tests/support/metrics.rs type TraceMetrics (line 16) | pub struct TraceMetrics { method total_tool_calls (line 39) | pub fn total_tool_calls(&self) -> usize { method failed_tool_calls (line 44) | pub fn failed_tool_calls(&self) -> usize { method total_tool_time_ms (line 49) | pub fn total_tool_time_ms(&self) -> u64 { type ToolInvocation (line 56) | pub struct ToolInvocation { type TurnMetrics (line 71) | pub struct TurnMetrics { type ScenarioResult (line 93) | pub struct ScenarioResult { type RunResult (line 116) | pub struct RunResult { method from_scenarios (line 137) | pub fn from_scenarios(run_id: impl Into, scenarios: Vec String { method shutdown (line 51) | pub async fn shutdown(mut self) { method drop (line 62) | fn drop(&mut self) { type MockState (line 73) | struct MockState { type McpToolDef (line 86) | struct McpToolDef { function start_mock_mcp_server (line 97) | pub async fn start_mock_mcp_server(tool_responses: Vec... function handle_protected_resource (line 168) | async fn handle_protected_resource(State(state): State>) ... function handle_auth_server_metadata (line 176) | async fn handle_auth_server_metadata(State(state): State>... function handle_register (line 191) | async fn handle_register() -> impl IntoResponse { function handle_authorize (line 207) | async fn handle_authorize() -> impl IntoResponse { function handle_token (line 216) | async fn handle_token() -> impl IntoResponse { type JsonRpcRequest (line 228) | struct JsonRpcRequest { function handle_mcp (line 236) | async fn handle_mcp( FILE: tests/support/mock_openai_server.rs type MockOpenAiRule (line 16) | pub struct MockOpenAiRule { method on_user_contains (line 22) | pub fn on_user_contains(contains: impl Into, response: MockOpe... type MockOpenAiResponse (line 31) | pub enum MockOpenAiResponse { type MockToolCall (line 38) | pub struct MockToolCall { method new (line 45) | pub fn new(id: impl Into, name: impl Into, arguments: ... type MockOpenAiServerBuilder (line 55) | pub struct MockOpenAiServerBuilder { method new (line 62) | pub fn new() -> Self { method with_models (line 69) | pub fn with_models(mut self, models: Vec) -> Self { method with_rule (line 74) | pub fn with_rule(mut self, rule: MockOpenAiRule) -> Self { method with_default_response (line 79) | pub fn with_default_response(mut self, response: MockOpenAiResponse) -... method start (line 84) | pub async fn start(self) -> MockOpenAiServer { type MockOpenAiServer (line 123) | pub struct MockOpenAiServer { method base_url (line 131) | pub fn base_url(&self) -> String { method openai_base_url (line 135) | pub fn openai_base_url(&self) -> String { method requests (line 139) | pub async fn requests(&self) -> Vec { method shutdown (line 143) | pub async fn shutdown(mut self) { method drop (line 154) | fn drop(&mut self) { type MockOpenAiState (line 164) | struct MockOpenAiState { function models_handler (line 172) | async fn models_handler(State(state): State>) -> Js... function chat_completions_handler (line 183) | async fn chat_completions_handler( FILE: tests/support/test_channel.rs type TestChannel (line 27) | pub struct TestChannel { method new (line 55) | pub fn new() -> Self { method with_user_id (line 60) | pub fn with_user_id(user_id: impl Into) -> Self { method with_name (line 79) | pub fn with_name(mut self, name: impl Into) -> Self { method signal_shutdown (line 85) | pub fn signal_shutdown(&self) { method take_ready_rx (line 93) | pub async fn take_ready_rx(&self) -> Option> { method send_message (line 98) | pub async fn send_message(&self, content: &str) { method send_incoming (line 104) | pub async fn send_incoming(&self, msg: IncomingMessage) { method send_message_in_thread (line 109) | pub async fn send_message_in_thread(&self, content: &str, thread_id: &... method captured_responses (line 118) | pub fn captured_responses(&self) -> Vec { method wait_for_responses (line 130) | pub async fn wait_for_responses(&self, n: usize, timeout: Duration) ->... method captured_status_events (line 152) | pub fn captured_status_events(&self) -> Vec { method tool_calls_started (line 160) | pub fn tool_calls_started(&self) -> Vec { method tool_calls_completed (line 171) | pub fn tool_calls_completed(&self) -> Vec<(String, bool)> { method tool_results (line 182) | pub fn tool_results(&self) -> Vec<(String, String)> { method tool_timings (line 195) | pub fn tool_timings(&self) -> Vec<(String, u64)> { method clear (line 203) | pub async fn clear(&self) { type TestChannelHandle (line 221) | pub struct TestChannelHandle { method new (line 228) | pub fn new(inner: Arc) -> Self { method with_name (line 236) | pub fn with_name(inner: Arc, name: impl Into) -> ... method name (line 246) | fn name(&self) -> &str { method start (line 250) | async fn start(&self) -> Result { method respond (line 254) | async fn respond( method send_status (line 262) | async fn send_status( method broadcast (line 270) | async fn broadcast( method health_check (line 278) | async fn health_check(&self) -> Result<(), ChannelError> { method conversation_context (line 282) | fn conversation_context(&self, metadata: &serde_json::Value) -> HashMap<... method name (line 293) | fn name(&self) -> &str { method start (line 297) | async fn start(&self) -> Result { method respond (line 318) | async fn respond( method send_status (line 327) | async fn send_status( method broadcast (line 358) | async fn broadcast( method health_check (line 367) | async fn health_check(&self) -> Result<(), ChannelError> { method conversation_context (line 371) | fn conversation_context(&self, _metadata: &serde_json::Value) -> HashMap... FILE: tests/support/test_rig.rs type TestRig (line 33) | pub struct TestRig { method send_message (line 63) | pub async fn send_message(&self, content: &str) { method send_incoming (line 68) | pub async fn send_incoming(&self, msg: ironclaw::channels::IncomingMes... method captured_llm_requests (line 75) | pub fn captured_llm_requests(&self) -> Vec Option<&Arc... method tool_calls_started (line 93) | pub fn tool_calls_started(&self) -> Vec { method tool_calls_completed (line 98) | pub fn tool_calls_completed(&self) -> Vec<(String, bool)> { method tool_results (line 103) | pub fn tool_results(&self) -> Vec<(String, String)> { method tool_timings (line 108) | pub fn tool_timings(&self) -> Vec<(String, u64)> { method captured_status_events (line 113) | pub fn captured_status_events(&self) -> Vec { method clear (line 118) | pub async fn clear(&self) { method llm_call_count (line 123) | pub fn llm_call_count(&self) -> u32 { method total_input_tokens (line 128) | pub fn total_input_tokens(&self) -> u32 { method total_output_tokens (line 133) | pub fn total_output_tokens(&self) -> u32 { method estimated_cost_usd (line 138) | pub fn estimated_cost_usd(&self) -> f64 { method elapsed_ms (line 143) | pub fn elapsed_ms(&self) -> u64 { method collect_metrics (line 151) | pub async fn collect_metrics(&self) -> TraceMetrics { method run_trace (line 214) | pub async fn run_trace( method run_and_verify_trace (line 236) | pub async fn run_and_verify_trace( method verify_trace_expects (line 287) | pub fn verify_trace_expects(&self, trace: &LlmTrace, responses: &[Outg... method shutdown (line 324) | pub fn shutdown(mut self) { method database (line 748) | pub fn database(&self) -> &Arc { method workspace (line 754) | pub fn workspace(&self) -> Option<&Arc> { method trace_llm (line 760) | pub fn trace_llm(&self) -> Option<&Arc> { method has_safety_warnings (line 765) | pub fn has_safety_warnings(&self) -> bool { method drop (line 333) | fn drop(&mut self) { type TestRigBuilder (line 347) | pub struct TestRigBuilder { method new (line 362) | pub fn new() -> Self { method with_trace (line 378) | pub fn with_trace(mut self, trace: LlmTrace) -> Self { method with_llm (line 384) | pub fn with_llm(mut self, llm: Arc) -> Self { method with_max_tool_iterations (line 390) | pub fn with_max_tool_iterations(mut self, n: usize) -> Self { method with_extra_tools (line 396) | pub fn with_extra_tools(mut self, tools: Vec>) -> Self { method with_injection_check (line 406) | pub fn with_injection_check(mut self, enable: bool) -> Self { method with_auto_approve_tools (line 412) | pub fn with_auto_approve_tools(mut self, enable: bool) -> Self { method with_skills (line 418) | pub fn with_skills(mut self) -> Self { method with_routines (line 426) | pub fn with_routines(mut self) -> Self { method with_bootstrap (line 432) | pub fn with_bootstrap(mut self) -> Self { method with_http_exchanges (line 441) | pub fn with_http_exchanges(mut self, exchanges: Vec) -> ... method build (line 453) | pub async fn build(self) -> TestRig { method default (line 740) | fn default() -> Self { function run_recorded_trace (line 780) | pub async fn run_recorded_trace(filename: &str) { FILE: tests/support/trace_llm.rs type TraceTurn (line 36) | pub struct TraceTurn { type LlmTrace (line 53) | pub struct LlmTrace { method deserialize (line 143) | fn deserialize(deserializer: D) -> Result method new (line 201) | pub fn new(model_name: impl Into, turns: Vec) -> Se... method single_turn (line 213) | pub fn single_turn( method from_file (line 233) | pub fn from_file(path: impl AsRef) -> Result Vec<&TraceStep> { type TraceExpects (line 77) | pub struct TraceExpects { method is_empty (line 112) | pub fn is_empty(&self) -> bool { type RawLlmTrace (line 128) | struct RawLlmTrace { type TraceLlm (line 265) | pub struct TraceLlm { method from_trace (line 276) | pub fn from_trace(trace: LlmTrace) -> Self { method from_file (line 288) | pub fn from_file(path: impl AsRef) -> Result usize { method hint_mismatches (line 299) | pub fn hint_mismatches(&self) -> usize { method captured_requests (line 304) | pub fn captured_requests(&self) -> Vec> { method next_step (line 318) | fn next_step(&self, messages: &[ChatMessage]) -> Result std::borrow::Cow<'_, str> { method substitute_templates (line 449) | fn substitute_templates( method model_name (line 499) | fn model_name(&self) -> &str { method cost_per_token (line 503) | fn cost_per_token(&self) -> (Decimal, Decimal) { method complete (line 507) | async fn complete(&self, request: CompletionRequest) -> Result Tr... function tool_calls_step (line 359) | fn tool_calls_step(calls: Vec, input: u32, output: u32) -... function simple_tool_call (line 371) | fn simple_tool_call(name: &str) -> TraceToolCall { function make_request (line 379) | fn make_request(user_msg: &str) -> ToolCompletionRequest { function make_completion_request (line 383) | fn make_completion_request(user_msg: &str) -> CompletionRequest { function replays_text_response (line 388) | async fn replays_text_response() { function replays_tool_calls (line 404) | async fn replays_tool_calls() { function advances_through_steps (line 435) | async fn advances_through_steps() { function errors_when_exhausted (line 464) | async fn errors_when_exhausted() { function validates_request_hints (line 483) | async fn validates_request_hints() { function hint_mismatch_warns_but_continues (line 512) | async fn hint_mismatch_warns_but_continues() { function from_json_file (line 541) | async fn from_json_file() { function complete_text_step (line 561) | async fn complete_text_step() { function complete_skips_tool_calls_step (line 574) | async fn complete_skips_tool_calls_step() { function captured_requests (line 600) | async fn captured_requests() { function deserialize_flat_steps_as_single_turn (line 623) | fn deserialize_flat_steps_as_single_turn() { function deserialize_turns_format (line 634) | fn deserialize_turns_format() { function multi_turn (line 650) | async fn multi_turn() { function rig_builds_and_runs (line 696) | async fn rig_builds_and_runs() { FILE: tests/telegram_auth_integration.rs function telegram_wasm_path (line 49) | fn telegram_wasm_path() -> std::path::PathBuf { function create_test_runtime (line 78) | fn create_test_runtime() -> Arc { function load_telegram_module (line 84) | async fn load_telegram_module( function create_telegram_channel (line 104) | async fn create_telegram_channel( function create_telegram_channel_with_store (line 111) | async fn create_telegram_channel_with_store( function build_telegram_update (line 132) | fn build_telegram_update( function test_group_message_unauthorized_user_blocked_with_allowlist (line 163) | async fn test_group_message_unauthorized_user_blocked_with_allowlist() { function test_group_message_authorized_user_allowed (line 216) | async fn test_group_message_authorized_user_allowed() { function test_private_message_with_owner_id_set_uses_guest_pairing_flow (line 264) | async fn test_private_message_with_owner_id_set_uses_guest_pairing_flow() { function test_private_messages_use_chat_id_as_thread_scope (line 312) | async fn test_private_messages_use_chat_id_as_thread_scope() { function test_private_message_without_owner_id_with_pairing_policy (line 368) | async fn test_private_message_without_owner_id_with_pairing_policy() { function test_open_dm_policy_allows_all_users (line 409) | async fn test_open_dm_policy_allows_all_users() { function test_bot_mention_detection_case_insensitive (line 454) | async fn test_bot_mention_detection_case_insensitive() { FILE: tests/tool_schema_validation.rs function all_core_builtin_tool_schemas_are_valid (line 20) | async fn all_core_builtin_tool_schemas_are_valid() { function core_registration_covers_expected_tools (line 54) | async fn core_registration_covers_expected_tools() { function json_tool_freeform_data_field_is_valid (line 83) | fn json_tool_freeform_data_field_is_valid() { function http_tool_headers_array_is_valid (line 103) | fn http_tool_headers_array_is_valid() { function time_tool_schema_is_valid (line 127) | fn time_tool_schema_is_valid() { function shell_tool_schema_is_valid (line 135) | fn shell_tool_schema_is_valid() { function all_core_tools_work_in_multi_thread_runtime (line 146) | async fn all_core_tools_work_in_multi_thread_runtime() { FILE: tests/trace_format.rs function all_user_input_steps (line 13) | fn all_user_input_steps() { function backward_compat_no_memory_snapshot (line 29) | fn backward_compat_no_memory_snapshot() { function expects_deserialization (line 52) | fn expects_deserialization() { function expects_default_empty (line 100) | fn expects_default_empty() { function per_turn_expects (line 120) | fn per_turn_expects() { function trace_expects_is_empty (line 152) | fn trace_expects_is_empty() { function recorded_multi_turn_splits_at_user_input (line 159) | fn recorded_multi_turn_splits_at_user_input() { function steps_before_first_user_input_get_placeholder (line 179) | fn steps_before_first_user_input_get_placeholder() { FILE: tests/wasm_channel_integration.rs function create_test_runtime (line 21) | fn create_test_runtime() -> Arc { function create_test_channel (line 27) | fn create_test_channel( function test_register_and_route_channel (line 57) | async fn test_register_and_route_channel() { function test_secret_validation (line 89) | async fn test_secret_validation() { function test_unregister_channel (line 122) | async fn test_unregister_channel() { function test_multiple_channels (line 152) | async fn test_multiple_channels() { function test_channel_start_and_shutdown (line 196) | async fn test_channel_start_and_shutdown() { function test_channel_http_callback (line 215) | async fn test_channel_http_callback() { function test_discover_channels_empty_dir (line 247) | async fn test_discover_channels_empty_dir() { function test_discover_channels_with_wasm_files (line 258) | async fn test_discover_channels_with_wasm_files() { function test_discover_channels_with_capabilities (line 275) | async fn test_discover_channels_with_capabilities() { function test_discover_channels_ignores_non_wasm (line 305) | async fn test_discover_channels_ignores_non_wasm() { function test_capabilities_path_validation (line 327) | fn test_capabilities_path_validation() { function test_capabilities_workspace_prefix (line 338) | fn test_capabilities_workspace_prefix() { function test_capabilities_workspace_path_validation (line 349) | fn test_capabilities_workspace_path_validation() { function test_capabilities_poll_interval_validation (line 363) | fn test_capabilities_poll_interval_validation() { function test_emit_rate_limit_config (line 387) | fn test_emit_rate_limit_config() { function test_emit_message_basic (line 403) | fn test_emit_message_basic() { function test_emit_message_with_metadata (line 422) | fn test_emit_message_with_metadata() { function test_emit_rate_limiting (line 440) | fn test_emit_rate_limiting() { FILE: tests/wit_compat.rs type TestStoreData (line 19) | struct TestStoreData { method new (line 25) | fn new() -> Self { method ctx (line 34) | fn ctx(&mut self) -> &mut WasiCtx { method table (line 38) | fn table(&mut self) -> &mut ResourceTable { type ExtensionKind (line 45) | enum ExtensionKind { type DiscoveredExtension (line 51) | struct DiscoveredExtension { function find_wasm_artifact (line 59) | fn find_wasm_artifact(source_dir: &Path, crate_name: &str) -> Option Vec { function compile_component (line 157) | fn compile_component( function stub_shared_host_functions (line 167) | fn stub_shared_host_functions( function instantiate_tool_component (line 203) | fn instantiate_tool_component( function instantiate_channel_component (line 243) | fn instantiate_channel_component( function create_engine (line 329) | fn create_engine() -> wasmtime::Engine { function wit_compat_tool_components_compile_and_instantiate (line 337) | fn wit_compat_tool_components_compile_and_instantiate() { function wit_compat_channel_components_compile_and_instantiate (line 398) | fn wit_compat_channel_components_compile_and_instantiate() { function wit_compat_all_registry_extensions_have_source (line 459) | fn wit_compat_all_registry_extensions_have_source() { function wit_files_contain_version_annotation (line 504) | fn wit_files_contain_version_annotation() { function wit_version_constants_match_wit_files (line 520) | fn wit_version_constants_match_wit_files() { FILE: tests/workspace_integration.rs function get_pool (line 11) | fn get_pool() -> deadpool_postgres::Pool { function try_connect (line 26) | async fn try_connect(pool: &deadpool_postgres::Pool) -> Option<()> { function cleanup_user (line 36) | async fn cleanup_user(pool: &deadpool_postgres::Pool, user_id: &str) { function test_workspace_write_and_read (line 47) | async fn test_workspace_write_and_read() { function test_workspace_append (line 75) | async fn test_workspace_append() { function test_workspace_nested_paths (line 105) | async fn test_workspace_nested_paths() { function test_workspace_delete (line 153) | async fn test_workspace_delete() { function test_workspace_memory_operations (line 180) | async fn test_workspace_memory_operations() { function test_workspace_daily_log (line 211) | async fn test_workspace_daily_log() { function test_workspace_fts_search (line 240) | async fn test_workspace_fts_search() { function test_workspace_hybrid_search_with_mock_embeddings (line 301) | async fn test_workspace_hybrid_search_with_mock_embeddings() { function test_workspace_list_all (line 343) | async fn test_workspace_list_all() { function test_workspace_system_prompt (line 371) | async fn test_workspace_system_prompt() { FILE: tests/ws_gateway_integration.rs constant AUTH_TOKEN (line 28) | const AUTH_TOKEN: &str = "test-token-12345"; constant TIMEOUT (line 29) | const TIMEOUT: Duration = Duration::from_secs(5); function start_test_server (line 33) | async fn start_test_server() -> ( function connect_ws (line 77) | async fn connect_ws( function recv_text (line 94) | async fn recv_text( function test_ws_ping_pong (line 113) | async fn test_ws_ping_pong() { function test_ws_message_reaches_agent (line 130) | async fn test_ws_message_reaches_agent() { function test_ws_broadcast_event_received (line 153) | async fn test_ws_broadcast_event_received() { function test_ws_thinking_event (line 177) | async fn test_ws_thinking_event() { function test_ws_connection_tracking (line 197) | async fn test_ws_connection_tracking() { function test_ws_invalid_message_returns_error (line 225) | async fn test_ws_invalid_message_returns_error() { function test_ws_unknown_type_returns_error (line 247) | async fn test_ws_unknown_type_returns_error() { function test_gateway_status_endpoint (line 264) | async fn test_gateway_status_endpoint() { function test_ws_no_auth_rejected (line 288) | async fn test_ws_no_auth_rejected() { function test_ws_multiple_events_in_sequence (line 301) | async fn test_ws_multiple_events_in_sequence() { function test_session_lock_not_held_during_api_operations (line 356) | async fn test_session_lock_not_held_during_api_operations() { FILE: tools-src/github/src/lib.rs constant MAX_TEXT_LENGTH (line 25) | const MAX_TEXT_LENGTH: usize = 65536; function validate_input_length (line 28) | fn validate_input_length(s: &str, field_name: &str) -> Result<(), String> { function url_encode_path (line 40) | fn url_encode_path(s: &str) -> String { function url_encode_query (line 59) | fn url_encode_query(s: &str) -> String { function validate_path_segment (line 65) | fn validate_path_segment(s: &str) -> bool { type GitHubTool (line 69) | struct GitHubTool; method execute (line 244) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 257) | fn schema() -> String { method description (line 261) | fn description() -> String { type GitHubAction (line 73) | enum GitHubAction { type GitHubWebhookRequest (line 223) | struct GitHubWebhookRequest { type ToolWebhookResponse (line 231) | struct ToolWebhookResponse { type SystemEventIntent (line 237) | struct SystemEventIntent { function execute_inner (line 270) | fn execute_inner(params: &str) -> Result { function get_github_token (line 420) | fn get_github_token() -> Result { function github_request (line 431) | fn github_request(method: &str, path: &str, body: Option) -> Res... function get_repo (line 525) | fn get_repo(owner: &str, repo: &str) -> Result { function list_issues (line 538) | fn list_issues( function create_issue (line 565) | fn create_issue( function get_issue (line 595) | fn get_issue(owner: &str, repo: &str, issue_number: u32) -> Result Result Re... function create_pr_review (line 747) | fn create_pr_review( function list_pull_request_comments (line 780) | fn list_pull_request_comments( function reply_pull_request_comment (line 803) | fn reply_pull_request_comment( function get_pull_request_reviews (line 823) | fn get_pull_request_reviews( function get_combined_status (line 846) | fn get_combined_status(owner: &str, repo: &str, r#ref: &str) -> Result, limit: Option) -> ... function get_file_content (line 919) | fn get_file_content( function trigger_workflow (line 967) | fn trigger_workflow( function get_workflow_runs (line 1007) | fn get_workflow_runs( function header_value (line 1044) | fn header_value<'a>(headers: &'a HashMap, key: &str) -> ... function handle_webhook (line 1052) | fn handle_webhook(webhook: GitHubWebhookRequest) -> Result String { function github_enriched_payload (line 1105) | fn github_enriched_payload( constant SCHEMA (line 1277) | const SCHEMA: &str = r#"{ function test_url_encode_path (line 1494) | fn test_url_encode_path() { function test_validate_path_segment (line 1501) | fn test_validate_path_segment() { function test_header_value_case_insensitive (line 1510) | fn test_header_value_case_insensitive() { function test_input_length_validation (line 1520) | fn test_input_length_validation() { function test_github_event_type_normalization (line 1528) | fn test_github_event_type_normalization() { function test_github_enriched_payload_extracts_common_fields (line 1553) | fn test_github_enriched_payload_extracts_common_fields() { function test_enriched_payload_pr_number_from_issue_comment (line 1591) | fn test_enriched_payload_pr_number_from_issue_comment() { function test_handle_webhook_requires_event_header (line 1615) | fn test_handle_webhook_requires_event_header() { function test_handle_webhook_emits_event_intent (line 1625) | fn test_handle_webhook_emits_event_intent() { FILE: tools-src/gmail/src/api.rs constant GMAIL_API_BASE (line 10) | const GMAIL_API_BASE: &str = "https://gmail.googleapis.com/gmail/v1/user... function api_call (line 13) | fn api_call(method: &str, path: &str, body: Option<&str>) -> Result String { function extract_body (line 65) | fn extract_body(payload: &serde_json::Value) -> String { function parse_message (line 111) | fn parse_message(v: &serde_json::Value) -> Message { function list_messages (line 145) | pub fn list_messages( function get_message (line 216) | pub fn get_message(message_id: &str) -> Result { function build_raw_email (line 226) | fn build_raw_email( function send_message (line 261) | pub fn send_message( function create_draft (line 291) | pub fn create_draft( function reply_to_message (line 315) | pub fn reply_to_message( function trash_message (line 375) | pub fn trash_message(message_id: &str) -> Result { constant BASE64URL_CHARS (line 387) | const BASE64URL_CHARS: &[u8; 64] = function base64url_encode (line 391) | fn base64url_encode(input: &[u8]) -> String { function base64url_decode (line 416) | fn base64url_decode(input: &str) -> Option { function url_encode (line 450) | fn url_encode(s: &str) -> String { constant HEX (line 467) | const HEX: [u8; 16] = *b"0123456789ABCDEF"; FILE: tools-src/gmail/src/lib.rs type GmailTool (line 36) | struct GmailTool; method execute (line 39) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 52) | fn schema() -> String { method description (line 110) | fn description() -> String { function execute_inner (line 120) | fn execute_inner(params: &str) -> Result { FILE: tools-src/gmail/src/types.rs type GmailAction (line 8) | pub enum GmailAction { function default_max_results (line 80) | fn default_max_results() -> u32 { type MessageSummary (line 86) | pub struct MessageSummary { type Message (line 100) | pub struct Message { type ListMessagesResult (line 117) | pub struct ListMessagesResult { type SendResult (line 126) | pub struct SendResult { type DraftResult (line 134) | pub struct DraftResult { type TrashResult (line 141) | pub struct TrashResult { FILE: tools-src/google-calendar/src/api.rs constant CALENDAR_API_BASE (line 10) | const CALENDAR_API_BASE: &str = "https://www.googleapis.com/calendar/v3"; function api_call (line 13) | fn api_call(method: &str, path: &str, body: Option<&str>) -> Result Event { function parse_event_time (line 77) | fn parse_event_time(v: &serde_json::Value) -> EventTime { function list_events (line 86) | pub fn list_events( function get_event (line 131) | pub fn get_event(calendar_id: &str, event_id: &str) -> Result { function create_event (line 162) | pub fn create_event(p: &CreateEventParams<'_>) -> Result { function update_event (line 235) | pub fn update_event(p: &UpdateEventParams<'_>) -> Result Result String { constant HEX (line 325) | const HEX: [u8; 16] = *b"0123456789ABCDEF"; FILE: tools-src/google-calendar/src/lib.rs type GoogleCalendarTool (line 35) | struct GoogleCalendarTool; method execute (line 38) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 51) | fn schema() -> String { method description (line 129) | fn description() -> String { function execute_inner (line 139) | fn execute_inner(params: &str) -> Result { FILE: tools-src/google-calendar/src/types.rs type GoogleCalendarAction (line 8) | pub enum GoogleCalendarAction { function default_calendar_id (line 117) | fn default_calendar_id() -> String { function default_max_results (line 121) | fn default_max_results() -> u32 { type Event (line 127) | pub struct Event { type EventTime (line 147) | pub struct EventTime { type Attendee (line 158) | pub struct Attendee { type Organizer (line 168) | pub struct Organizer { type ListEventsResult (line 176) | pub struct ListEventsResult { type EventResult (line 184) | pub struct EventResult { type DeleteResult (line 190) | pub struct DeleteResult { FILE: tools-src/google-docs/src/api.rs constant DOCS_API_BASE (line 10) | const DOCS_API_BASE: &str = "https://docs.googleapis.com/v1/documents"; function api_call (line 13) | fn api_call(method: &str, path: &str, body: Option<&str>) -> Result String { function create_document (line 73) | pub fn create_document(title: &str) -> Result Result Result Option { type FormatTextOptions (line 309) | pub struct FormatTextOptions<'a> { function format_text (line 324) | pub fn format_text(opts: FormatTextOptions<'_>) -> Result String { constant HEX (line 521) | const HEX: [u8; 16] = *b"0123456789ABCDEF"; FILE: tools-src/google-docs/src/lib.rs type GoogleDocsTool (line 57) | struct GoogleDocsTool; method execute (line 60) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 73) | fn schema() -> String { method description (line 195) | fn description() -> String { function execute_inner (line 209) | fn execute_inner(params: &str) -> Result { FILE: tools-src/google-docs/src/types.rs type GoogleDocsAction (line 8) | pub enum GoogleDocsAction { function default_insert_index (line 158) | fn default_insert_index() -> i64 { function default_true (line 162) | fn default_true() -> bool { function default_bullet_preset (line 166) | fn default_bullet_preset() -> String { type CreateDocumentResult (line 172) | pub struct CreateDocumentResult { type DocumentMetadata (line 179) | pub struct DocumentMetadata { type DocumentNamedRange (line 190) | pub struct DocumentNamedRange { type ReadContentResult (line 199) | pub struct ReadContentResult { type UpdateResult (line 207) | pub struct UpdateResult { type ReplaceResult (line 214) | pub struct ReplaceResult { type BatchUpdateResult (line 222) | pub struct BatchUpdateResult { FILE: tools-src/google-drive/src/api.rs constant DRIVE_API_BASE (line 10) | const DRIVE_API_BASE: &str = "https://www.googleapis.com/drive/v3"; constant UPLOAD_API_BASE (line 11) | const UPLOAD_API_BASE: &str = "https://www.googleapis.com/upload/drive/v3"; constant FILE_FIELDS (line 14) | const FILE_FIELDS: &str = "id,name,mimeType,description,size,createdTime... function api_call (line 19) | fn api_call(method: &str, path: &str, body: Option<&str>) -> Result Result, String> { function parse_file (line 73) | fn parse_file(v: &serde_json::Value) -> DriveFile { function list_files (line 113) | pub fn list_files( function get_file (line 159) | pub fn get_file(file_id: &str) -> Result { function download_file (line 175) | pub fn download_file( function upload_file (line 219) | pub fn upload_file( function update_file (line 286) | pub fn update_file( function create_folder (line 339) | pub fn create_folder( function delete_file (line 368) | pub fn delete_file(file_id: &str) -> Result { function trash_file (line 379) | pub fn trash_file(file_id: &str) -> Result { function share_file (line 396) | pub fn share_file( function list_permissions (line 430) | pub fn list_permissions(file_id: &str) -> Result Result Result String { constant HEX (line 514) | const HEX: [u8; 16] = *b"0123456789ABCDEF"; FILE: tools-src/google-drive/src/lib.rs type GoogleDriveTool (line 45) | struct GoogleDriveTool; method execute (line 48) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 61) | fn schema() -> String { method description (line 158) | fn description() -> String { function execute_inner (line 170) | fn execute_inner(params: &str) -> Result { FILE: tools-src/google-drive/src/types.rs type GoogleDriveAction (line 8) | pub enum GoogleDriveAction { function default_page_size (line 148) | fn default_page_size() -> u32 { function default_corpora (line 152) | fn default_corpora() -> String { function default_mime_type (line 156) | fn default_mime_type() -> String { function default_role (line 160) | fn default_role() -> String { type DriveFile (line 166) | pub struct DriveFile { type Owner (line 195) | pub struct Owner { type Permission (line 203) | pub struct Permission { type SharedDrive (line 216) | pub struct SharedDrive { type ListFilesResult (line 223) | pub struct ListFilesResult { type FileResult (line 231) | pub struct FileResult { type DownloadResult (line 237) | pub struct DownloadResult { type DeleteResult (line 246) | pub struct DeleteResult { type ShareResult (line 253) | pub struct ShareResult { type ListPermissionsResult (line 261) | pub struct ListPermissionsResult { type ListSharedDrivesResult (line 267) | pub struct ListSharedDrivesResult { FILE: tools-src/google-sheets/src/api.rs constant SHEETS_API_BASE (line 10) | const SHEETS_API_BASE: &str = "https://sheets.googleapis.com/v4/spreadsh... function api_call (line 13) | fn api_call(method: &str, path: &str, body: Option<&str>) -> Result SheetInfo { function parse_named_range (line 64) | fn parse_named_range(v: &serde_json::Value) -> NamedRange { function format_grid_range (line 75) | fn format_grid_range(v: &serde_json::Value) -> String { function create_spreadsheet (line 88) | pub fn create_spreadsheet( function get_spreadsheet (line 126) | pub fn get_spreadsheet(spreadsheet_id: &str) -> Result Result Result Result Result Option { type FormatOptions (line 410) | pub struct FormatOptions<'a> { function format_cells (line 428) | pub fn format_cells(opts: FormatOptions<'_>) -> Result String { constant HEX (line 530) | const HEX: [u8; 16] = *b"0123456789ABCDEF"; FILE: tools-src/google-sheets/src/lib.rs type GoogleSheetsTool (line 53) | struct GoogleSheetsTool; method execute (line 56) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 69) | fn schema() -> String { method description (line 171) | fn description() -> String { function execute_inner (line 184) | fn execute_inner(params: &str) -> Result { FILE: tools-src/google-sheets/src/types.rs type GoogleSheetsAction (line 8) | pub enum GoogleSheetsAction { function default_value_input_option (line 141) | fn default_value_input_option() -> String { type SheetInfo (line 147) | pub struct SheetInfo { type NamedRange (line 157) | pub struct NamedRange { type CreateSpreadsheetResult (line 165) | pub struct CreateSpreadsheetResult { type SpreadsheetMetadata (line 174) | pub struct SpreadsheetMetadata { type ValuesResult (line 185) | pub struct ValuesResult { type BatchValuesResult (line 192) | pub struct BatchValuesResult { type UpdateResult (line 198) | pub struct UpdateResult { type ClearResult (line 207) | pub struct ClearResult { type AddSheetResult (line 213) | pub struct AddSheetResult { type SheetOperationResult (line 219) | pub struct SheetOperationResult { type FormatResult (line 226) | pub struct FormatResult { FILE: tools-src/google-slides/src/api.rs constant SLIDES_API_BASE (line 10) | const SLIDES_API_BASE: &str = "https://slides.googleapis.com/v1/presenta... function api_call (line 13) | fn api_call(method: &str, path: &str, body: Option<&str>) -> Result Option { function parse_element (line 81) | fn parse_element(el: &serde_json::Value) -> ElementInfo { function create_presentation (line 113) | pub fn create_presentation(title: &str) -> Result Result Result f64 { function create_shape (line 328) | pub fn create_shape( function insert_image (line 372) | pub fn insert_image( function parse_hex_color (line 416) | fn parse_hex_color(hex: &str) -> Option { type FormatTextOptions (line 436) | pub struct FormatTextOptions<'a> { function format_text (line 450) | pub fn format_text(opts: FormatTextOptions<'_>) -> Result String { constant HEX (line 619) | const HEX: [u8; 16] = *b"0123456789ABCDEF"; FILE: tools-src/google-slides/src/lib.rs type GoogleSlidesTool (line 62) | struct GoogleSlidesTool; method execute (line 65) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 78) | fn schema() -> String { method description (line 204) | fn description() -> String { function execute_inner (line 219) | fn execute_inner(params: &str) -> Result { FILE: tools-src/google-slides/src/types.rs type GoogleSlidesAction (line 8) | pub enum GoogleSlidesAction { function default_layout (line 198) | fn default_layout() -> String { function default_true (line 202) | fn default_true() -> bool { function default_shape_type (line 206) | fn default_shape_type() -> String { type SlideInfo (line 212) | pub struct SlideInfo { type ElementInfo (line 221) | pub struct ElementInfo { type CreatePresentationResult (line 232) | pub struct CreatePresentationResult { type PresentationMetadata (line 239) | pub struct PresentationMetadata { type ThumbnailResult (line 249) | pub struct ThumbnailResult { type UpdateResult (line 257) | pub struct UpdateResult { type ReplaceResult (line 265) | pub struct ReplaceResult { type BatchUpdateResult (line 272) | pub struct BatchUpdateResult { FILE: tools-src/llm-context/src/lib.rs constant BRAVE_LLM_CONTEXT_ENDPOINT (line 26) | const BRAVE_LLM_CONTEXT_ENDPOINT: &str = "https://api.search.brave.com/r... constant MAX_QUERY_LEN (line 29) | const MAX_QUERY_LEN: usize = 400; constant MAX_QUERY_WORDS (line 30) | const MAX_QUERY_WORDS: usize = 50; constant MIN_COUNT (line 31) | const MIN_COUNT: u32 = 1; constant MAX_COUNT (line 32) | const MAX_COUNT: u32 = 50; constant DEFAULT_COUNT (line 33) | const DEFAULT_COUNT: u32 = 20; constant MIN_TOKENS (line 34) | const MIN_TOKENS: u32 = 1024; constant MAX_TOKENS (line 35) | const MAX_TOKENS: u32 = 32768; constant DEFAULT_MAX_TOKENS (line 36) | const DEFAULT_MAX_TOKENS: u32 = 8192; constant MIN_URLS (line 37) | const MIN_URLS: u32 = 1; constant MAX_URLS (line 38) | const MAX_URLS: u32 = 50; constant DEFAULT_MAX_URLS (line 39) | const DEFAULT_MAX_URLS: u32 = 20; constant MIN_SNIPPETS (line 40) | const MIN_SNIPPETS: u32 = 1; constant MAX_SNIPPETS (line 41) | const MAX_SNIPPETS: u32 = 100; constant DEFAULT_MAX_SNIPPETS (line 42) | const DEFAULT_MAX_SNIPPETS: u32 = 50; constant MIN_TOKENS_PER_URL (line 43) | const MIN_TOKENS_PER_URL: u32 = 512; constant MAX_TOKENS_PER_URL (line 44) | const MAX_TOKENS_PER_URL: u32 = 8192; constant DEFAULT_MAX_TOKENS_PER_URL (line 45) | const DEFAULT_MAX_TOKENS_PER_URL: u32 = 4096; constant MIN_SNIPPETS_PER_URL (line 46) | const MIN_SNIPPETS_PER_URL: u32 = 1; constant MAX_SNIPPETS_PER_URL (line 47) | const MAX_SNIPPETS_PER_URL: u32 = 100; constant DEFAULT_SNIPPETS_PER_URL (line 48) | const DEFAULT_SNIPPETS_PER_URL: u32 = 50; constant MAX_RETRIES (line 49) | const MAX_RETRIES: u32 = 3; constant VALID_THRESHOLD_MODES (line 52) | const VALID_THRESHOLD_MODES: [&str; 4] = ["strict", "balanced", "lenient... type LlmContextTool (line 54) | struct LlmContextTool; method execute (line 57) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 70) | fn schema() -> String { method description (line 74) | fn description() -> String { type LlmContextParams (line 88) | struct LlmContextParams { type BraveLlmContextResponse (line 122) | struct BraveLlmContextResponse { type Grounding (line 129) | struct Grounding { type GenericEntry (line 140) | struct GenericEntry { type PoiMapEntry (line 148) | struct PoiMapEntry { function validate_params (line 156) | fn validate_params(params: &LlmContextParams) -> Result<(), String> { function execute_inner (line 231) | fn execute_inner(params: &str) -> Result { function preflight_check (line 246) | fn preflight_check() -> Result<(), String> { function call_brave_api (line 260) | fn call_brave_api(params: &LlmContextParams) -> Result { function format_output (line 303) | fn format_output(query: &str, response: BraveLlmContextResponse) -> Resu... function build_request_body (line 369) | fn build_request_body(params: &LlmContextParams) -> Result, Stri... function build_request_headers (line 441) | fn build_request_headers(params: &LlmContextParams) -> serde_json::Value { function build_entry_json (line 476) | fn build_entry_json( function poi_map_entry_to_json (line 515) | fn poi_map_entry_to_json( function extract_hostname (line 527) | fn extract_hostname(url: &str) -> Option { function is_valid_lang_code (line 541) | fn is_valid_lang_code(s: &str) -> bool { function is_valid_country_code (line 546) | fn is_valid_country_code(s: &str) -> bool { function is_valid_threshold_mode (line 551) | fn is_valid_threshold_mode(s: &str) -> bool { function is_valid_goggles_value (line 556) | fn is_valid_goggles_value(v: &serde_json::Value) -> bool { constant SCHEMA (line 569) | const SCHEMA: &str = r#"{ function test_extract_hostname (line 680) | fn test_extract_hostname() { function test_is_valid_lang_code (line 705) | fn test_is_valid_lang_code() { function test_is_valid_country_code (line 712) | fn test_is_valid_country_code() { function test_is_valid_threshold_mode (line 719) | fn test_is_valid_threshold_mode() { function params_minimal (line 727) | fn params_minimal() -> LlmContextParams { function test_validate_params_accepts_minimal (line 735) | fn test_validate_params_accepts_minimal() { function test_validate_params_rejects_invalid (line 741) | fn test_validate_params_rejects_invalid() { function test_build_request_body_minimal (line 795) | fn test_build_request_body_minimal() { function test_build_request_body_full (line 811) | fn test_build_request_body_full() { function test_build_request_headers_with_location (line 846) | fn test_build_request_headers_with_location() { function test_build_request_headers_no_location (line 892) | fn test_build_request_headers_no_location() { function test_build_request_body_with_goggles_string (line 910) | fn test_build_request_body_with_goggles_string() { function test_build_request_body_with_goggles_array (line 927) | fn test_build_request_body_with_goggles_array() { function test_is_valid_goggles_value (line 944) | fn test_is_valid_goggles_value() { function test_parse_response (line 960) | fn test_parse_response() { function test_parse_response_with_poi_and_map (line 994) | fn test_parse_response_with_poi_and_map() { function test_poi_map_entry_to_json (line 1032) | fn test_poi_map_entry_to_json() { function test_build_request_body_clamps_below_min (line 1064) | fn test_build_request_body_clamps_below_min() { function test_build_request_body_clamps_above_max (line 1101) | fn test_build_request_body_clamps_above_max() { function test_build_entry_json_missing_source (line 1138) | fn test_build_entry_json_missing_source() { function test_build_entry_json_with_name (line 1155) | fn test_build_entry_json_with_name() { function test_parse_empty_grounding_response (line 1168) | fn test_parse_empty_grounding_response() { function test_parse_empty_generic_array (line 1176) | fn test_parse_empty_generic_array() { function test_format_output_empty_response (line 1183) | fn test_format_output_empty_response() { function test_format_output_with_generic_entries (line 1199) | fn test_format_output_with_generic_entries() { function test_format_output_with_poi_and_map (line 1236) | fn test_format_output_with_poi_and_map() { function test_schema_is_valid_json_and_matches_constants (line 1263) | fn test_schema_is_valid_json_and_matches_constants() { function test_validate_params_trimmed_query_within_limit (line 1321) | fn test_validate_params_trimmed_query_within_limit() { function test_validate_params_trimmed_query_over_limit (line 1331) | fn test_validate_params_trimmed_query_over_limit() { FILE: tools-src/slack/src/api.rs constant SLACK_API_BASE (line 10) | const SLACK_API_BASE: &str = "https://slack.com/api"; function url_encode (line 13) | fn url_encode(s: &str) -> String { function slack_api_call (line 31) | fn slack_api_call(method: &str, endpoint: &str, body: Option<&str>) -> R... function send_message (line 62) | pub fn send_message( function list_channels (line 100) | pub fn list_channels(limit: u32) -> Result { function get_channel_history (line 136) | pub fn get_channel_history(channel: &str, limit: u32) -> Result Result { FILE: tools-src/slack/src/lib.rs type SlackTool (line 39) | struct SlackTool; method execute (line 42) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 55) | fn schema() -> String { method description (line 98) | fn description() -> String { function execute_inner (line 108) | fn execute_inner(params: &str) -> Result { FILE: tools-src/slack/src/types.rs type SlackAction (line 8) | pub enum SlackAction { function default_limit (line 53) | fn default_limit() -> u32 { function default_history_limit (line 57) | fn default_history_limit() -> u32 { type SendMessageResult (line 63) | pub struct SendMessageResult { type MessageInfo (line 73) | pub struct MessageInfo { type Channel (line 82) | pub struct Channel { type ListChannelsResult (line 95) | pub struct ListChannelsResult { type ChannelHistoryResult (line 102) | pub struct ChannelHistoryResult { type HistoryMessage (line 109) | pub struct HistoryMessage { type PostReactionResult (line 120) | pub struct PostReactionResult { type UserInfo (line 126) | pub struct UserInfo { type GetUserInfoResult (line 137) | pub struct GetUserInfoResult { FILE: tools-src/telegram/src/api.rs constant LAYER (line 15) | const LAYER: i32 = 185; function wrap_init_connection (line 21) | fn wrap_init_connection(session: &Session, inner_bytes: Vec) -> Vec<... function make_mtp (line 43) | fn make_mtp(session: &Session) -> Result { function rpc_call (line 52) | fn rpc_call( function send_code (line 71) | pub fn send_code(session: &mut Session) -> Result { function sign_in (line 129) | pub fn sign_in(session: &mut Session, code: &str) -> Result Result Result { function get_contacts (line 262) | pub fn get_contacts(session: &Session) -> Result { function get_chats (line 292) | pub fn get_chats(session: &Session, limit: i32) -> Result { function get_messages (line 313) | pub fn get_messages( function send_message (line 342) | pub fn send_message(session: &Session, chat_id: i64, text: &str) -> Resu... function forward_message (line 392) | pub fn forward_message( function delete_messages (line 441) | pub fn delete_messages( function search_messages (line 460) | pub fn search_messages( function get_updates (line 514) | pub fn get_updates(session: &Session) -> Result { function format_user_auth (line 547) | fn format_user_auth(user: &tl::enums::User) -> String { function resolve_peer (line 577) | fn resolve_peer(chat_id: i64) -> tl::enums::InputPeer { function extract_chats_from_dialogs (line 598) | fn extract_chats_from_dialogs(dialogs: &tl::enums::messages::Dialogs) ->... function chat_to_info (line 608) | fn chat_to_info(chat: &tl::enums::Chat) -> Option { function extract_messages (line 638) | fn extract_messages(msgs: &tl::enums::messages::Messages) -> Vec Option { function peer_id (line 669) | fn peer_id(peer: &tl::enums::Peer) -> Option { function peer_id_value (line 673) | fn peer_id_value(peer: &tl::enums::Peer) -> i64 { function extract_updates_from_diff (line 681) | fn extract_updates_from_diff(diff: &tl::enums::updates::Difference) -> V... function extract_update_list (line 695) | fn extract_update_list(messages: &[tl::enums::Message]) -> Vec Result<(), String> { FILE: tools-src/telegram/src/lib.rs type TelegramTool (line 61) | struct TelegramTool; method execute (line 64) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 77) | fn schema() -> String { method description (line 81) | fn description() -> String { function execute_inner (line 92) | fn execute_inner(params: &str) -> Result { function with_session (line 135) | fn with_session(f: impl FnOnce(&Session) -> Result) -> R... function execute_login (line 155) | fn execute_login(phone_number: &str) -> Result { function execute_submit_code (line 188) | fn execute_submit_code(code: &str) -> Result { function execute_submit_2fa (line 202) | fn execute_submit_2fa(password: &str) -> Result { function get_api_id (line 216) | fn get_api_id() -> Result { function get_api_hash (line 233) | fn get_api_hash() -> Result { constant SCHEMA (line 248) | const SCHEMA: &str = r#"{ FILE: tools-src/telegram/src/session.rs type Session (line 9) | pub struct Session { method new (line 35) | pub fn new(api_id: i32, api_hash: String, dc_id: u8) -> Self { method auth_key_bytes (line 50) | pub fn auth_key_bytes(&self) -> Result<[u8; 256], String> { method set_auth_key (line 64) | pub fn set_auth_key(&mut self, key: &[u8; 256]) { function load_session (line 70) | pub fn load_session() -> Option { function session_to_json (line 76) | pub fn session_to_json(session: &Session) -> Result { function hex_encode (line 82) | fn hex_encode(bytes: &[u8]) -> String { function hex_decode (line 92) | fn hex_decode(s: &str) -> Result, String> { function hex_val (line 106) | fn hex_val(b: u8) -> Result { function hex_roundtrip (line 120) | fn hex_roundtrip() { function session_serialization (line 129) | fn session_serialization() { FILE: tools-src/telegram/src/transport.rs constant DC_NAMES (line 8) | const DC_NAMES: &[&str] = &["", "pluto", "venus", "aurora", "vesta", "fl... function dc_url (line 11) | pub fn dc_url(dc_id: u8) -> Result { function post_plain (line 23) | pub fn post_plain(dc_id: u8, request: &R) -> Result Result, String> { function truncate (line 107) | fn truncate(s: &str, max: usize) -> &str { function dc_url_valid (line 120) | fn dc_url_valid() { function dc_url_invalid (line 127) | fn dc_url_invalid() { FILE: tools-src/telegram/src/types.rs type TelegramAction (line 8) | pub enum TelegramAction { function default_chat_limit (line 95) | fn default_chat_limit() -> i32 { function default_message_limit (line 99) | fn default_message_limit() -> i32 { type LoginResult (line 109) | pub struct LoginResult { type AuthResult (line 119) | pub struct AuthResult { type UserInfo (line 129) | pub struct UserInfo { type ChatInfo (line 142) | pub struct ChatInfo { type MessageInfo (line 154) | pub struct MessageInfo { type SendResult (line 167) | pub struct SendResult { type ForwardResult (line 174) | pub struct ForwardResult { type DeleteResult (line 180) | pub struct DeleteResult { type UpdateInfo (line 186) | pub struct UpdateInfo { FILE: tools-src/web-search/src/lib.rs constant BRAVE_SEARCH_ENDPOINT (line 19) | const BRAVE_SEARCH_ENDPOINT: &str = "https://api.search.brave.com/res/v1... constant MAX_COUNT (line 20) | const MAX_COUNT: u32 = 20; constant DEFAULT_COUNT (line 21) | const DEFAULT_COUNT: u32 = 5; constant MAX_RETRIES (line 22) | const MAX_RETRIES: u32 = 3; type WebSearchTool (line 24) | struct WebSearchTool; method execute (line 27) | fn execute(req: exports::near::agent::tool::Request) -> exports::near:... method schema (line 40) | fn schema() -> String { method description (line 44) | fn description() -> String { type SearchParams (line 54) | struct SearchParams { type BraveSearchResponse (line 64) | struct BraveSearchResponse { type BraveWebResults (line 69) | struct BraveWebResults { type BraveSearchResult (line 74) | struct BraveSearchResult { function execute_inner (line 81) | fn execute_inner(params: &str) -> Result { function build_search_url (line 218) | fn build_search_url(query: &str, count: u32, params: &SearchParams) -> S... function url_encode (line 243) | fn url_encode(s: &str) -> String { function extract_hostname (line 262) | fn extract_hostname(url: &str) -> Option { function is_valid_lang_code (line 276) | fn is_valid_lang_code(s: &str) -> bool { function is_valid_country_code (line 281) | fn is_valid_country_code(s: &str) -> bool { function is_valid_ui_lang (line 286) | fn is_valid_ui_lang(s: &str) -> bool { function is_valid_freshness (line 296) | fn is_valid_freshness(s: &str) -> bool { function is_valid_date_range (line 301) | fn is_valid_date_range(s: &str) -> bool { function is_date_like (line 310) | fn is_date_like(s: &str) -> bool { constant SCHEMA (line 319) | const SCHEMA: &str = r#"{ function test_url_encode (line 361) | fn test_url_encode() { function test_extract_hostname (line 368) | fn test_extract_hostname() { function test_is_valid_lang_code (line 385) | fn test_is_valid_lang_code() { function test_is_valid_country_code (line 394) | fn test_is_valid_country_code() { function test_is_valid_ui_lang (line 402) | fn test_is_valid_ui_lang() { function test_is_valid_freshness (line 411) | fn test_is_valid_freshness() { function test_is_date_like (line 422) | fn test_is_date_like() { function test_build_search_url_minimal (line 431) | fn test_build_search_url_minimal() { function test_build_search_url_full (line 448) | fn test_build_search_url_full() { function test_url_encode_multibyte (line 467) | fn test_url_encode_multibyte() { function test_extract_hostname_empty (line 473) | fn test_extract_hostname_empty() {