SYMBOL INDEX (377 symbols across 32 files) FILE: scripts/generate_large_docs.py function generate_content (line 145) | def generate_content(doc_id: str, meta: dict) -> list: function generate_sections (line 178) | def generate_sections(doc_id: str, meta: dict) -> list: function create_pdf (line 507) | def create_pdf(doc_id: str, meta: dict, output_dir: str): function main (line 518) | def main(): FILE: scripts/generate_test_docs.py function create_pdf (line 709) | def create_pdf(filename: str, title: str, content: str): function main (line 746) | def main(): FILE: src/fs_explorer/agent.py class TokenUsage (line 52) | class TokenUsage: method add_api_call (line 70) | def add_api_call(self, prompt_tokens: int, completion_tokens: int) -> ... method add_tool_result (line 77) | def add_tool_result(self, result: str, tool_name: str) -> None: method _calculate_cost (line 88) | def _calculate_cost(self) -> tuple[float, float, float]: method summary (line 98) | def summary(self) -> str: class IndexContext (line 129) | class IndexContext: function set_search_flags (line 143) | def set_search_flags( function get_search_flags (line 152) | def get_search_flags() -> tuple[bool, bool]: function set_embedding_provider (line 157) | def set_embedding_provider(provider: EmbeddingProvider | None) -> None: function set_index_context (line 163) | def set_index_context(folder: str, db_path: str | None = None) -> None: function clear_index_context (line 178) | def clear_index_context() -> None: function _get_index_storage_and_corpus (line 189) | def _get_index_storage_and_corpus() -> tuple[ function _clean_excerpt (line 207) | def _clean_excerpt(text: str, max_chars: int = 320) -> str: function semantic_search (line 214) | def semantic_search(query: str, filters: str | None = None, limit: int =... function get_document (line 328) | def get_document(doc_id: str) -> str: function list_indexed_documents (line 348) | def list_indexed_documents() -> str: function _build_system_prompt (line 511) | def _build_system_prompt(enable_semantic: bool, enable_metadata: bool) -... class FsExplorerAgent (line 541) | class FsExplorerAgent: method __init__ (line 552) | def __init__(self, api_key: str | None = None) -> None: method configure_task (line 578) | def configure_task(self, task: str) -> None: method take_action (line 589) | async def take_action(self) -> tuple[Action, ActionType] | None: method call_tool (line 631) | def call_tool(self, tool_name: Tools, tool_input: dict[str, Any]) -> N... method reset (line 659) | def reset(self) -> None: FILE: src/fs_explorer/embeddings.py class EmbeddingProvider (line 21) | class EmbeddingProvider: method __init__ (line 24) | def __init__( method embed_texts (line 50) | def embed_texts( method embed_query (line 75) | def embed_query(self, query: str) -> list[float]: FILE: src/fs_explorer/exploration_trace.py function normalize_path (line 19) | def normalize_path(path: str, root_directory: str) -> str: function extract_cited_sources (line 26) | def extract_cited_sources(final_result: str | None) -> list[str]: class ExplorationTrace (line 44) | class ExplorationTrace: method record_tool_call (line 55) | def record_tool_call( method record_go_deeper (line 85) | def record_go_deeper(self, *, step_number: int, directory: str) -> None: method sorted_documents (line 90) | def sorted_documents(self) -> list[str]: FILE: src/fs_explorer/fs.py function clear_document_cache (line 43) | def clear_document_cache() -> None: function _get_cached_or_parse (line 48) | def _get_cached_or_parse(file_path: str) -> str: function describe_dir_content (line 78) | def describe_dir_content(directory: str) -> str: function read_file (line 123) | def read_file(file_path: str) -> str: function grep_file_content (line 140) | def grep_file_content(file_path: str, pattern: str) -> str: function glob_paths (line 166) | def glob_paths(directory: str, pattern: str) -> str: function preview_file (line 194) | def preview_file(file_path: str, max_chars: int = DEFAULT_PREVIEW_CHARS)... function parse_file (line 234) | def parse_file(file_path: str) -> str: function _preview_single_file (line 269) | def _preview_single_file(file_path: str, preview_chars: int) -> dict: function scan_folder (line 301) | def scan_folder( FILE: src/fs_explorer/index_config.py function resolve_db_path (line 15) | def resolve_db_path(override_path: str | None = None) -> str: FILE: src/fs_explorer/indexing/chunker.py class TextChunk (line 11) | class TextChunk: class SmartChunker (line 20) | class SmartChunker: method __init__ (line 27) | def __init__(self, chunk_size: int = 1500, overlap: int = 150) -> None: method chunk_text (line 38) | def chunk_text(self, text: str) -> list[TextChunk]: FILE: src/fs_explorer/indexing/metadata.py function _get_genai_client (line 215) | def _get_genai_client(api_key: str) -> Any: function auto_discover_profile (line 222) | def auto_discover_profile( function infer_document_type (line 297) | def infer_document_type(file_path: str) -> str: function default_langextract_profile (line 313) | def default_langextract_profile() -> dict[str, Any]: function normalize_langextract_profile (line 318) | def normalize_langextract_profile(profile: dict[str, Any] | None) -> dic... function langextract_schema_fields (line 464) | def langextract_schema_fields( function langextract_field_names (line 482) | def langextract_field_names(profile: dict[str, Any] | None = None) -> se... function ensure_langextract_schema_fields (line 487) | def ensure_langextract_schema_fields( function extract_metadata (line 530) | def extract_metadata( function _extract_langextract_metadata (line 593) | def _extract_langextract_metadata( function _schema_profile_if_present (line 660) | def _schema_profile_if_present(schema_def: dict[str, Any] | None) -> dic... function _resolve_langextract_profile (line 669) | def _resolve_langextract_profile( function _normalize_source_classes (line 679) | def _normalize_source_classes(raw_field: dict[str, Any]) -> list[str]: function _normalize_field_mode (line 701) | def _normalize_field_mode(mode_obj: Any, *, field_type: str) -> str: function _normalize_contains_any (line 720) | def _normalize_contains_any( function _profile_defaults (line 745) | def _profile_defaults(profile: dict[str, Any]) -> dict[str, Any]: function _default_field_value (line 752) | def _default_field_value(field: dict[str, Any]) -> Any: function _aggregate_profile_metadata (line 773) | def _aggregate_profile_metadata( function _runtime_field_value (line 820) | def _runtime_field_value( function _entity_field_value (line 837) | def _entity_field_value(*, field: dict[str, Any], matched_values: list[s... function _coerce_field_value (line 851) | def _coerce_field_value(*, value: Any, field_type: str) -> Any: function _langextract_examples (line 873) | def _langextract_examples(lx: Any) -> list[Any]: function _dedupe_preserve_order (line 927) | def _dedupe_preserve_order(values: list[str], *, max_items: int = 16) ->... function _safe_positive_int (line 944) | def _safe_positive_int(value: Any, *, minimum: int, field_name: str) -> ... function _safe_int_env (line 958) | def _safe_int_env(name: str, *, default: int, minimum: int) -> int: FILE: src/fs_explorer/indexing/pipeline.py class IndexingResult (line 34) | class IndexingResult: class IndexingPipeline (line 47) | class IndexingPipeline: method __init__ (line 50) | def __init__( method index_folder (line 62) | def index_folder( method _extract_metadata_batch (line 185) | def _extract_metadata_batch( method _resolve_schema (line 218) | def _resolve_schema( method _augment_schema_for_langextract (line 284) | def _augment_schema_for_langextract( method _schema_metadata_profile (line 331) | def _schema_metadata_profile( method _schema_field_names (line 342) | def _schema_field_names(schema_def: dict[str, Any]) -> set[str]: method _generate_and_store_embeddings (line 354) | def _generate_and_store_embeddings( method _iter_supported_files (line 381) | def _iter_supported_files(root: str) -> list[str]: method _sha256 (line 392) | def _sha256(content: str) -> str: method _is_parse_error (line 396) | def _is_parse_error(content: str) -> bool: FILE: src/fs_explorer/indexing/schema.py function _iter_supported_files (line 20) | def _iter_supported_files(folder: str) -> list[str]: class SchemaDiscovery (line 32) | class SchemaDiscovery: method discover_from_folder (line 35) | def discover_from_folder( FILE: src/fs_explorer/main.py function _load_metadata_profile (line 71) | def _load_metadata_profile(path_value: str | None) -> dict[str, Any] | N... function format_tool_panel (line 88) | def format_tool_panel(event: ToolCallEvent, step_number: int) -> Panel: function format_navigation_panel (line 136) | def format_navigation_panel(event: GoDeeperEvent, step_number: int) -> P... function print_workflow_header (line 155) | def print_workflow_header(console: Console, task: str, folder: str) -> N... function print_workflow_summary (line 178) | def print_workflow_summary( function run_workflow (line 257) | async def run_workflow( function main (line 447) | def main( function index_command (line 510) | def index_command( function query_command (line 622) | def query_command( function schema_discover_command (line 649) | def schema_discover_command( function schema_show_command (line 746) | def schema_show_command( FILE: src/fs_explorer/models.py class StopAction (line 37) | class StopAction(BaseModel): class AskHumanAction (line 50) | class AskHumanAction(BaseModel): class GoDeeperAction (line 63) | class GoDeeperAction(BaseModel): class ToolCallArg (line 76) | class ToolCallArg(BaseModel): class ToolCallAction (line 91) | class ToolCallAction(BaseModel): method to_fn_args (line 106) | def to_fn_args(self) -> dict[str, Any]: class Action (line 116) | class Action(BaseModel): method to_action_type (line 132) | def to_action_type(self) -> ActionType: FILE: src/fs_explorer/search/filters.py class MetadataFilter (line 16) | class MetadataFilter: method to_storage_dict (line 23) | def to_storage_dict(self) -> dict[str, Any]: class MetadataFilterParseError (line 31) | class MetadataFilterParseError(ValueError): function supported_filter_syntax (line 39) | def supported_filter_syntax() -> str: function parse_metadata_filters (line 49) | def parse_metadata_filters( function _parse_condition (line 65) | def _parse_condition(condition: str, *, allowed_fields: set[str] | None)... function _validate_field (line 109) | def _validate_field(field: str, *, allowed_fields: set[str] | None) -> N... function _split_conditions (line 119) | def _split_conditions(raw: str) -> list[str]: function _flush_part (line 185) | def _flush_part(parts: list[str], current: list[str]) -> None: function _parse_list_value (line 192) | def _parse_list_value(raw_value: str) -> list[str | bool | int | float]: function _parse_scalar_value (line 206) | def _parse_scalar_value(raw_value: str) -> str | bool | int | float: FILE: src/fs_explorer/search/query.py class SearchHit (line 18) | class SearchHit: class IndexedQueryEngine (line 32) | class IndexedQueryEngine: method __init__ (line 35) | def __init__( method search (line 43) | def search( method _parse_filters (line 108) | def _parse_filters( method _allowed_filter_fields (line 116) | def _allowed_filter_fields(self, *, corpus_id: str) -> set[str] | None: method _search_parallel (line 131) | def _search_parallel( method _semantic_query (line 157) | def _semantic_query( method _metadata_query (line 181) | def _metadata_query( method _acquire_query_storage (line 198) | def _acquire_query_storage(self) -> tuple[StorageBackend, Callable[[],... method _merge_and_rank (line 210) | def _merge_and_rank( FILE: src/fs_explorer/search/ranker.py class RankedDocument (line 11) | class RankedDocument: method combined_score (line 23) | def combined_score(self) -> float: method matched_by (line 29) | def matched_by(self) -> str: function rank_documents (line 37) | def rank_documents( FILE: src/fs_explorer/search/semantic.py class SemanticSearchEngine (line 16) | class SemanticSearchEngine: method __init__ (line 19) | def __init__( method search (line 27) | def search( FILE: src/fs_explorer/server.py function _get_corpus_lock (line 40) | def _get_corpus_lock(folder: str) -> asyncio.Lock: class TaskRequest (line 48) | class TaskRequest(BaseModel): class IndexRequest (line 57) | class IndexRequest(BaseModel): class AutoProfileRequest (line 69) | class AutoProfileRequest(BaseModel): class SearchRequest (line 75) | class SearchRequest(BaseModel): function get_ui (line 86) | async def get_ui(): function list_folders (line 97) | async def list_folders(path: str = "."): function index_status (line 134) | async def index_status(folder: str, db_path: str | None = None): function generate_auto_profile (line 192) | async def generate_auto_profile(request: AutoProfileRequest): function build_index (line 208) | async def build_index(request: IndexRequest): function search_index (line 264) | async def search_index(request: SearchRequest): function websocket_explore (line 321) | async def websocket_explore(websocket: WebSocket): function run_server (line 522) | def run_server(host: str = "127.0.0.1", port: int = 8000): FILE: src/fs_explorer/storage/base.py class ChunkRecord (line 12) | class ChunkRecord: class DocumentRecord (line 25) | class DocumentRecord: class SchemaRecord (line 40) | class SchemaRecord: class StorageBackend (line 51) | class StorageBackend(Protocol): method initialize (line 54) | def initialize(self) -> None: method get_or_create_corpus (line 57) | def get_or_create_corpus(self, root_path: str) -> str: method get_corpus_id (line 60) | def get_corpus_id(self, root_path: str) -> str | None: method upsert_document (line 63) | def upsert_document( method mark_deleted_missing_documents (line 68) | def mark_deleted_missing_documents( method list_documents (line 76) | def list_documents( method count_chunks (line 84) | def count_chunks(self, *, corpus_id: str) -> int: method search_chunks (line 87) | def search_chunks( method search_documents_by_metadata (line 96) | def search_documents_by_metadata( method get_document (line 105) | def get_document(self, *, doc_id: str) -> dict[str, Any] | None: method save_schema (line 108) | def save_schema( method list_schemas (line 118) | def list_schemas(self, *, corpus_id: str) -> list[SchemaRecord]: method get_schema_by_name (line 121) | def get_schema_by_name(self, *, corpus_id: str, name: str) -> SchemaRe... method get_active_schema (line 124) | def get_active_schema(self, *, corpus_id: str) -> SchemaRecord | None: method store_chunk_embeddings (line 127) | def store_chunk_embeddings( method search_chunks_semantic (line 135) | def search_chunks_semantic( method get_metadata_field_values (line 144) | def get_metadata_field_values( method has_embeddings (line 153) | def has_embeddings(self, *, corpus_id: str) -> bool: FILE: src/fs_explorer/storage/duckdb.py function _stable_id (line 18) | def _stable_id(prefix: str, value: str) -> str: function _query_terms (line 23) | def _query_terms(query: str, max_terms: int = 8) -> list[str]: class DuckDBStorage (line 37) | class DuckDBStorage: method __init__ (line 40) | def __init__( method close (line 59) | def close(self) -> None: method initialize (line 63) | def initialize(self) -> None: method _try_load_vss (line 126) | def _try_load_vss(self) -> None: method get_or_create_corpus (line 135) | def get_or_create_corpus(self, root_path: str) -> str: method get_corpus_id (line 154) | def get_corpus_id(self, root_path: str) -> str | None: method upsert_document (line 164) | def upsert_document( method mark_deleted_missing_documents (line 228) | def mark_deleted_missing_documents( method list_documents (line 268) | def list_documents( method count_chunks (line 299) | def count_chunks(self, *, corpus_id: str) -> int: method search_chunks (line 311) | def search_chunks( method search_documents_by_metadata (line 364) | def search_documents_by_metadata( method get_document (line 415) | def get_document(self, *, doc_id: str) -> dict[str, Any] | None: method save_schema (line 438) | def save_schema( method list_schemas (line 471) | def list_schemas(self, *, corpus_id: str) -> list[SchemaRecord]: method get_schema_by_name (line 483) | def get_schema_by_name(self, *, corpus_id: str, name: str) -> SchemaRe... method get_active_schema (line 497) | def get_active_schema(self, *, corpus_id: str) -> SchemaRecord | None: method make_document_id (line 513) | def make_document_id(corpus_id: str, relative_path: str) -> str: method make_chunk_id (line 517) | def make_chunk_id( method _row_to_schema_record (line 523) | def _row_to_schema_record(row: tuple[Any, ...]) -> SchemaRecord: method store_chunk_embeddings (line 533) | def store_chunk_embeddings( method search_chunks_semantic (line 554) | def search_chunks_semantic( method get_metadata_field_values (line 594) | def get_metadata_field_values( method has_embeddings (line 619) | def has_embeddings(self, *, corpus_id: str) -> bool: method create_hnsw_index (line 627) | def create_hnsw_index(self, *, corpus_id: str) -> bool: method _metadata_clause (line 649) | def _metadata_clause( FILE: src/fs_explorer/workflow.py function get_agent (line 34) | def get_agent() -> FsExplorerAgent: function reset_agent (line 43) | def reset_agent() -> None: class WorkflowState (line 48) | class WorkflowState(BaseModel): class InputEvent (line 59) | class InputEvent(StartEvent): class GoDeeperEvent (line 69) | class GoDeeperEvent(Event): class ToolCallEvent (line 76) | class ToolCallEvent(Event): class AskHumanEvent (line 84) | class AskHumanEvent(InputRequiredEvent): class HumanAnswerEvent (line 91) | class HumanAnswerEvent(HumanResponseEvent): class ExplorationEndEvent (line 97) | class ExplorationEndEvent(StopEvent): function _handle_action_result (line 108) | def _handle_action_result( function _process_agent_action (line 153) | async def _process_agent_action( class FsExplorerWorkflow (line 185) | class FsExplorerWorkflow(Workflow): method start_exploration (line 197) | async def start_exploration( method go_deeper_action (line 244) | async def go_deeper_action( method receive_human_answer (line 264) | async def receive_human_answer( method tool_call_action (line 282) | async def tool_call_action( FILE: tests/conftest.py class MockModels (line 19) | class MockModels: method generate_content (line 22) | async def generate_content(self, *args, **kwargs) -> GenerateContentRe... class MockAio (line 50) | class MockAio: method models (line 54) | def models(self) -> MockModels: class MockGenAIClient (line 59) | class MockGenAIClient: method __init__ (line 66) | def __init__(self, api_key: str, http_options: HttpOptions) -> None: method aio (line 71) | def aio(self) -> MockAio: FILE: tests/test_agent.py class TestAgentInitialization (line 23) | class TestAgentInitialization: method test_agent_init_with_env_key (line 27) | def test_agent_init_with_env_key(self) -> None: method test_agent_init_with_explicit_key (line 34) | def test_agent_init_with_explicit_key(self) -> None: method test_agent_init_without_key_raises (line 39) | def test_agent_init_without_key_raises(self) -> None: class TestAgentConfiguration (line 51) | class TestAgentConfiguration: method test_configure_task_adds_to_history (line 55) | def test_configure_task_adds_to_history(self) -> None: method test_multiple_configure_task_calls (line 65) | def test_multiple_configure_task_calls(self) -> None: class TestAgentActions (line 76) | class TestAgentActions: method test_take_action_returns_action (line 81) | async def test_take_action_returns_action(self) -> None: method test_reset_clears_history (line 101) | def test_reset_clears_history(self) -> None: class TestTokenUsage (line 113) | class TestTokenUsage: method test_add_api_call (line 116) | def test_add_api_call(self) -> None: method test_add_tool_result_parse_file (line 126) | def test_add_tool_result_parse_file(self) -> None: method test_add_tool_result_scan_folder (line 134) | def test_add_tool_result_scan_folder(self) -> None: method test_summary_format (line 143) | def test_summary_format(self) -> None: class TestSystemPrompt (line 156) | class TestSystemPrompt: method test_system_prompt_contains_tools (line 159) | def test_system_prompt_contains_tools(self) -> None: method test_system_prompt_contains_strategy (line 168) | def test_system_prompt_contains_strategy(self) -> None: method test_system_prompt_contains_index_tools (line 174) | def test_system_prompt_contains_index_tools(self) -> None: class TestSearchFlags (line 181) | class TestSearchFlags: method setup_method (line 184) | def setup_method(self) -> None: method teardown_method (line 187) | def teardown_method(self) -> None: method test_set_and_get_search_flags (line 190) | def test_set_and_get_search_flags(self) -> None: method test_clear_index_context_resets_flags (line 197) | def test_clear_index_context_resets_flags(self) -> None: method test_build_system_prompt_no_index (line 202) | def test_build_system_prompt_no_index(self) -> None: method test_build_system_prompt_semantic_only (line 206) | def test_build_system_prompt_semantic_only(self) -> None: method test_build_system_prompt_metadata_only (line 211) | def test_build_system_prompt_metadata_only(self) -> None: method test_build_system_prompt_both (line 216) | def test_build_system_prompt_both(self) -> None: method test_all_tools_always_available (line 221) | def test_all_tools_always_available(self) -> None: FILE: tests/test_cli_indexing.py function test_root_task_mode_remains_compatible (line 11) | def test_root_task_mode_remains_compatible(tmp_path: Path, monkeypatch) ... function test_query_command_enables_index_mode (line 40) | def test_query_command_enables_index_mode(tmp_path: Path, monkeypatch) -... function test_index_and_schema_commands (line 78) | def test_index_and_schema_commands(tmp_path: Path, monkeypatch) -> None: function test_index_command_with_metadata_forces_schema_discovery (line 109) | def test_index_command_with_metadata_forces_schema_discovery( function test_index_command_with_metadata_profile_path (line 161) | def test_index_command_with_metadata_profile_path( function test_index_command_with_embeddings_flag (line 232) | def test_index_command_with_embeddings_flag( function test_auto_index_env_var_enables_use_index (line 277) | def test_auto_index_env_var_enables_use_index( function test_auto_index_env_var_silent_fallback (line 316) | def test_auto_index_env_var_silent_fallback( FILE: tests/test_e2e.py function test_e2e (line 14) | async def test_e2e() -> None: FILE: tests/test_embeddings.py class _FakeEmbedding (line 20) | class _FakeEmbedding: class _FakeEmbedResult (line 25) | class _FakeEmbedResult: class _FakeModels (line 29) | class _FakeModels: method __init__ (line 32) | def __init__(self) -> None: method embed_content (line 35) | def embed_content( class _FakeClient (line 47) | class _FakeClient: method __init__ (line 48) | def __init__(self) -> None: function test_embed_texts_returns_correct_count (line 57) | def test_embed_texts_returns_correct_count() -> None: function test_embed_texts_uses_document_task_type (line 67) | def test_embed_texts_uses_document_task_type() -> None: function test_embed_query_uses_query_task_type (line 77) | def test_embed_query_uses_query_task_type() -> None: function test_embed_texts_batching (line 88) | def test_embed_texts_batching() -> None: function test_env_overrides (line 103) | def test_env_overrides(monkeypatch) -> None: function test_missing_api_key_raises (line 121) | def test_missing_api_key_raises(monkeypatch) -> None: function test_real_embedding_api (line 136) | def test_real_embedding_api() -> None: FILE: tests/test_exploration_trace.py function test_normalize_path_relative (line 12) | def test_normalize_path_relative() -> None: function test_normalize_path_absolute (line 17) | def test_normalize_path_absolute() -> None: function test_trace_records_steps_and_documents (line 22) | def test_trace_records_steps_and_documents() -> None: function test_trace_records_resolved_document_paths (line 47) | def test_trace_records_resolved_document_paths() -> None: function test_extract_cited_sources_ordered_unique (line 61) | def test_extract_cited_sources_ordered_unique() -> None: FILE: tests/test_fs.py class TestDescribeDirContent (line 21) | class TestDescribeDirContent: method test_valid_directory (line 24) | def test_valid_directory(self) -> None: method test_nonexistent_directory (line 32) | def test_nonexistent_directory(self) -> None: method test_directory_without_subfolders (line 37) | def test_directory_without_subfolders(self) -> None: class TestReadFile (line 45) | class TestReadFile: method test_valid_file (line 48) | def test_valid_file(self) -> None: method test_nonexistent_file (line 53) | def test_nonexistent_file(self) -> None: class TestGrepFileContent (line 59) | class TestGrepFileContent: method test_pattern_match (line 62) | def test_pattern_match(self) -> None: method test_no_match (line 68) | def test_no_match(self) -> None: method test_nonexistent_file (line 73) | def test_nonexistent_file(self) -> None: class TestGlobPaths (line 79) | class TestGlobPaths: method test_pattern_match (line 82) | def test_pattern_match(self) -> None: method test_no_match (line 89) | def test_no_match(self) -> None: method test_nonexistent_directory (line 94) | def test_nonexistent_directory(self) -> None: class TestDocumentParsing (line 100) | class TestDocumentParsing: method setup_method (line 103) | def setup_method(self) -> None: method test_parse_file_nonexistent (line 107) | def test_parse_file_nonexistent(self) -> None: method test_parse_file_unsupported_extension (line 112) | def test_parse_file_unsupported_extension(self) -> None: method test_preview_file_nonexistent (line 117) | def test_preview_file_nonexistent(self) -> None: method test_preview_file_unsupported_extension (line 122) | def test_preview_file_unsupported_extension(self) -> None: method test_parse_file_pdf (line 131) | def test_parse_file_pdf(self) -> None: method test_preview_file_pdf (line 144) | def test_preview_file_pdf(self) -> None: class TestScanFolder (line 154) | class TestScanFolder: method setup_method (line 157) | def setup_method(self) -> None: method test_nonexistent_directory (line 161) | def test_nonexistent_directory(self) -> None: method test_empty_directory (line 166) | def test_empty_directory(self) -> None: method test_scan_folder_with_documents (line 178) | def test_scan_folder_with_documents(self) -> None: class TestSupportedExtensions (line 186) | class TestSupportedExtensions: method test_supported_extensions_is_frozenset (line 189) | def test_supported_extensions_is_frozenset(self) -> None: method test_common_extensions_supported (line 193) | def test_common_extensions_supported(self) -> None: FILE: tests/test_indexing.py function test_smart_chunker_overlap (line 19) | def test_smart_chunker_overlap() -> None: function test_schema_discovery_from_folder (line 30) | def test_schema_discovery_from_folder(tmp_path: Path) -> None: function test_schema_discovery_with_langextract_fields (line 50) | def test_schema_discovery_with_langextract_fields(tmp_path: Path, monkey... function test_schema_discovery_with_custom_metadata_profile (line 74) | def test_schema_discovery_with_custom_metadata_profile(tmp_path: Path) -... function test_indexing_pipeline_indexes_and_marks_deleted (line 108) | def test_indexing_pipeline_indexes_and_marks_deleted( function test_indexing_pipeline_with_langextract_metadata (line 176) | def test_indexing_pipeline_with_langextract_metadata( function test_indexing_pipeline_reuses_saved_metadata_profile (line 241) | def test_indexing_pipeline_reuses_saved_metadata_profile( function test_auto_discover_profile_with_mock_llm (line 319) | def test_auto_discover_profile_with_mock_llm( function test_auto_discover_profile_falls_back_on_error (line 382) | def test_auto_discover_profile_falls_back_on_error( function test_auto_discover_profile_falls_back_without_api_key (line 411) | def test_auto_discover_profile_falls_back_without_api_key( function test_schema_discovery_uses_auto_profile_when_no_explicit_profile (line 435) | def test_schema_discovery_uses_auto_profile_when_no_explicit_profile( class _FakeEmbedding (line 495) | class _FakeEmbedding: class _FakeEmbedResult (line 500) | class _FakeEmbedResult: class _FakeEmbedModels (line 504) | class _FakeEmbedModels: method embed_content (line 505) | def embed_content( class _FakeEmbedClient (line 516) | class _FakeEmbedClient: method __init__ (line 517) | def __init__(self) -> None: function test_indexing_pipeline_with_embeddings (line 526) | def test_indexing_pipeline_with_embeddings( function test_indexing_pipeline_without_embeddings (line 553) | def test_indexing_pipeline_without_embeddings( function test_embedding_cascade_on_reindex (line 577) | def test_embedding_cascade_on_reindex( function test_extract_metadata_batch_returns_correct_metadata (line 612) | def test_extract_metadata_batch_returns_correct_metadata( function test_extract_metadata_batch_parallel_is_faster_than_sequential (line 659) | def test_extract_metadata_batch_parallel_is_faster_than_sequential( function test_parallel_and_sequential_produce_same_results (line 710) | def test_parallel_and_sequential_produce_same_results( FILE: tests/test_models.py function test_tool_call_action_to_tool_args (line 10) | def test_tool_call_action_to_tool_args() -> None: function test_action_to_action_type (line 24) | def test_action_to_action_type() -> None: FILE: tests/test_search.py function test_parse_metadata_filters_supports_scalar_and_list_values (line 22) | def test_parse_metadata_filters_supports_scalar_and_list_values() -> None: function test_parse_metadata_filters_rejects_unknown_schema_fields (line 40) | def test_parse_metadata_filters_rejects_unknown_schema_fields() -> None: function test_indexed_query_engine_unions_semantic_and_metadata_results (line 48) | def test_indexed_query_engine_unions_semantic_and_metadata_results( class _SlowStorage (line 86) | class _SlowStorage: method search_chunks (line 87) | def search_chunks(self, *, corpus_id: str, query: str, limit: int = 5)... method search_documents_by_metadata (line 100) | def search_documents_by_metadata(self, *, corpus_id: str, filters, lim... method get_active_schema (line 112) | def get_active_schema(self, *, corpus_id: str): # noqa: ARG002 function test_indexed_query_engine_executes_semantic_and_metadata_in_parallel (line 116) | def test_indexed_query_engine_executes_semantic_and_metadata_in_parallel... function test_search_enable_semantic_false_returns_only_metadata (line 132) | def test_search_enable_semantic_false_returns_only_metadata() -> None: function test_search_enable_metadata_false_returns_only_semantic (line 148) | def test_search_enable_metadata_false_returns_only_semantic() -> None: function test_search_both_disabled_returns_empty (line 164) | def test_search_both_disabled_returns_empty() -> None: class _FakeEmbedding (line 186) | class _FakeEmbedding: class _FakeEmbedResult (line 191) | class _FakeEmbedResult: class _FakeEmbedModels (line 195) | class _FakeEmbedModels: method embed_content (line 196) | def embed_content( class _FakeEmbedClient (line 208) | class _FakeEmbedClient: method __init__ (line 209) | def __init__(self) -> None: function test_vector_search_with_pre_stored_embeddings (line 218) | def test_vector_search_with_pre_stored_embeddings( function test_keyword_fallback_when_no_embeddings (line 254) | def test_keyword_fallback_when_no_embeddings( function test_get_metadata_field_values_returns_distinct_values (line 287) | def test_get_metadata_field_values_returns_distinct_values( function test_get_metadata_field_values_empty_corpus (line 319) | def test_get_metadata_field_values_empty_corpus(tmp_path: Path) -> None: function test_get_metadata_field_values_respects_max_distinct (line 330) | def test_get_metadata_field_values_respects_max_distinct( function test_semantic_search_includes_field_catalog_on_first_call (line 358) | def test_semantic_search_includes_field_catalog_on_first_call( function test_float_scoring_in_ranked_documents (line 393) | def test_float_scoring_in_ranked_documents() -> None: FILE: tests/test_server_search.py function indexed_corpus (line 18) | def indexed_corpus(tmp_path: Path, monkeypatch): function test_search_endpoint_returns_hits (line 37) | def test_search_endpoint_returns_hits(indexed_corpus) -> None: function test_search_endpoint_with_filters (line 57) | def test_search_endpoint_with_filters(indexed_corpus) -> None: function test_search_endpoint_missing_index (line 76) | def test_search_endpoint_missing_index(tmp_path: Path) -> None: function test_search_endpoint_invalid_folder (line 94) | def test_search_endpoint_invalid_folder() -> None: function test_index_status_not_indexed (line 112) | def test_index_status_not_indexed(tmp_path: Path) -> None: function test_index_status_after_indexing (line 128) | def test_index_status_after_indexing(indexed_corpus) -> None: function test_index_status_includes_schema_fields (line 146) | def test_index_status_includes_schema_fields(indexed_corpus) -> None: function test_auto_profile_endpoint (line 168) | def test_auto_profile_endpoint(tmp_path: Path) -> None: function test_auto_profile_invalid_folder (line 207) | def test_auto_profile_invalid_folder() -> None: