| append_search_archive | Append an observation to a research archive |
| Article | Construct a normalized scholarly article |
| articles_to_bibtex | Render article records as BibTeX |
| articles_to_data_frame | Convert article records to a data frame |
| articles_to_ris | Render article records as RIS citations |
| article_metadata_timeline | Follow scholarly article metadata across archived searches |
| assess_article_quality | Evaluate structural quality of scholarly article metadata |
| compare_recent_archive_runs | Compare only the most recent archive observations |
| compare_search_archive_runs | Compare two selected archive observations |
| compare_search_history | Compare a chronological series of literature-search snapshots |
| compare_search_snapshots | Compare two literature-search snapshots conservatively |
| create_search_archive | Create an append-only research archive from a saved search |
| deduplicate_articles | Deduplicate and reconcile scholarly articles using exact DOI identity |
| enrich_articles_with_crossref | Fill missing article abstracts from Crossref |
| export_articles | Export article records to CSV, BibTeX, or RIS |
| fetch_all_from_scopus | Fetch all Scopus results through cursor pagination |
| fetch_from_crossref | Fetch one page of Crossref bibliographic search results |
| fetch_from_openalex | Request one page of OpenAlex works |
| fetch_from_scopus | Fetch one page of Scopus search results |
| get_abstracts_from_dois | Retrieve a batch of Crossref abstracts by DOI |
| get_abstract_from_doi | Retrieve an abstract from Crossref using its DOI |
| list_search_archive_runs | List research-archive runs without loading their saved RDS evidence |
| new_crossref_cache | Create a reusable in-memory Crossref abstract cache |
| new_search_plan | Create a reproducible multi-provider search plan |
| normalize_doi | Normalize DOI identifiers for equality comparisons |
| process_crossref_entries | Normalize raw Crossref works into Article objects |
| process_crossref_response | Normalize a Crossref works search response |
| process_openalex_entries | Normalize OpenAlex works as Article records |
| process_openalex_response | Normalize an OpenAlex search response |
| process_scopus_entries | Normalize raw Scopus search entries |
| process_scopus_response | Normalize a complete Scopus search response |
| read_search_archive | Inspect an existing append-only research archive |
| read_search_archive_run | Read a single research-archive observation |
| read_search_snapshot | Read and validate a previously saved search snapshot |
| reconstruct_openalex_abstract | Restore an OpenAlex abstract from its inverted index |
| recover_search_archive | Inspect and explicitly clean up interrupted archive staging directories |
| refresh_search_archive | Refresh an archive on demand and append the new search evidence |
| refresh_search_snapshot | Refresh a literature search and preserve its evidence |
| run_search_plan | Execute a search plan and capture a versioned evidence snapshot |
| save_search_snapshot | Persist a search snapshot without overwriting existing evidence |
| search_articles | Search Scopus, Crossref, and OpenAlex with provenance |
| search_crossref | Discover articles from Crossref without known DOIs |
| search_openalex | Discover scholarly articles from OpenAlex |
| search_snapshot_manifest | Summarize a scholarly search as a structured manifest |
| trace_archive_dois | Trace DOI observations across a research archive |
| verify_search_archive | Inspect checksums and interrupted writes in a research archive |
| write_search_history_report | Export an auditable search-history report to CSV files |
| write_search_manifest | Write a structured JSON search manifest |