All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Functional convergence: Defined ScholarAIO as an All-in-One academic harness for agents. All-in-One now means one coherent workflow for evidence, persistent context, tools, outputs, and verification; it does not mean bundling every scientific package or expanding into a general autoresearch or multi-agent platform.
- 2.x public contract: Documented the stable CLI, configuration, runtime-layout, skill-discovery, persistent-data, and published Python API surfaces, together with a deprecation policy for the 2.x line.
- Bounded integration gate: New third-party integrations must demonstrate a core academic need, avoid duplicating agent-native or existing capabilities, isolate optional dependencies, pass a fixed-corpus or end-to-end smoke, and fail with an actionable fallback.
- Durable product strategy: Added the repository-root
STRATEGY.mdas the product-scope anchor for future planning and implementation work. - 2.0 upgrade guide: Added a no-migration path for 1.4/1.5 users, the explicit migration path for older runtimes, and replacements for removed or narrowed surfaces.
- EndNote-style Library WebUI workflows (#114): Added canonical one-click BibTeX copy, separate inline and operating-system PDF actions, composable title/author/year/journal/type/DOI filters, and explicit Metadata/Keyword/Semantic/Unified search modes with stable ranked results and actionable index/vector diagnostics. Native PDF launch is stable-ID-only and anti-CSRF protected, bridges WSL PDFs into the Windows default application, automatically becomes a client download for remote deployments, and falls back to downloading if a native launch fails.
- Persistent WSL PDF editing (#121): Added stable Windows-side edit mirrors with validated automatic reconciliation back to canonical WSL library PDFs and bounded recovery copies.
- Repository knowledge map (#112): Added a published
docs/DESIGN.mdknowledge map and focused documentation indexes for agent navigation, while keeping maintenance plans, validation records, and audit notes out of the published MkDocs surface. - Automated cross-project agent setup (#111): Added
scholaraio setup agentpreview, apply, and check workflows for shell runtime wiring, Codex/OpenClaw skill discovery, Claude Code plugin instructions, and project-local wrappers for Qwen, Cursor, Cline, Windsurf, and GitHub Copilot. - Nature workflow bridge skill (#107): Added a ScholarAIO
nature-workflowbridge skill that routes Nature Portfolio writing and figure workflows to the upstreamnature-skillsrepository when installed, keeps ScholarAIO-native fallbacks explicit, documents the install and quick-start path, and includes deterministic plus product-demo fixtures that generate reviewable manuscript, figure, slide, and QA artifacts.
- Optional MinerU cloud dependency: Moved
mineru-open-apiout of the mandatory base install into the dedicatedmineru-cloudextra. The cloud parser remains supported, but users who only search existing libraries or use local PDF parsers no longer receive a provider-specific executable package. A clean-wheel CI smoke now verifies that the base package installs and starts without that external CLI. - Host-native skill routing (#127): Shared skills now request capabilities instead of hard-coding one agent host, prefer the active agent's native browsing and artifact abilities when appropriate, and keep local CLI fallbacks explicit. Oversized document instructions were split into focused references and the skill harness now enforces progressive disclosure.
- Scientific-tool onboarding: Existing
toolrefworkflows remain supported, but onboarding now starts with the 2.x integration gate and explicitly prefers external recipes or sidecars when a proposal does not belong in the core academic harness. - Paper2Any installation contract (#127): Setup and documentation now follow the current upstream base and paper requirement files, fail closed when the checkout shape is unsupported, and keep Paper2Any an optional sidecar.
- Semantic-filter independence (#116): Decoupled semantic-search metadata filtering from the FTS index so vector workflows do not require unrelated keyword-index state.
- Cross-platform PDF delivery (#118, #119): Made local, WSL, headless, systemd, and remote WebUI PDF actions reflect what the host can actually do, including reliable Windows launcher discovery and client-download fallback.
- Windows Unicode stdio fallback (#126; original report and patch #124): Prevented localized CLI output from crashing on legacy Windows console, file, or pipe encodings by relaxing only the affected stream error handlers, while preserving non-Windows behavior and explicit
PYTHONIOENCODINGsettings. - Windows setup-check console compatibility (#113): Replaced non-cp1252 status symbols in the default English
setup checkoutput so Windows consoles no longer raiseUnicodeEncodeErrorduring final verification. - Webextract Markdown table-cell cleanup (#110): Sanitized malformed block-level code fences emitted inside
qt-web-extractortable cells before HTTP/MCP extraction results reachwebextractand ingest consumers, while preserving standalone fenced code blocks and pipe characters inside code-cell content.
- Default external web-search surface: Removed the implicitly matched
websearchskill, CLI command, default MCP registration, setup check, configuration template, and cross-skill routes. Live discovery now uses the host agent's native web search;webextractremains narrowly scoped to rendered content andingest-linkpersistence. - Empty
drawpackage extra (#127): Removed the dependency-freescholaraio[draw]extra and unowned package recommendations. Diagram source generation remains available, while Graphviz and Inkscape stay explicit system tools.
- Line-addressable evidence chunk search (#35): Added
scholaraio index --chunksandscholaraio search --chunkso agents can build a paper-section chunk index frompaper.md/meta.json["toc"]and retrieve source snippets with paper IDs, section titles, line ranges, and normal search filters such as--year,--journal, and--type. - Rights-respecting publisher PDF fetch (#98, #99): Added native
scholaraio fetch-pdfsupport for DOI, landing-page URL, direct PDF URL, or title locators, plus--directcampus-network mode, safe temporary/single-file--ingesthandoff, and selected/all-library canonical PDF refetch for already ingested papers. - Read-only local library WebUI: Added
scholaraio gui, a packaged local WebUI for browsing the main paper library and proceedings child papers with live refresh, filters, metadata/quality inspection, Markdown-rendered abstracts/conclusions, local-only math rendering, and inline PDF preview/fullscreen controls. - Graphviz DOT/SVG diagram workflow: Added the Graphviz diagram guide, linked it from the draw skill and writing/CLI docs, and expanded
setup checkto reportGraphviz dotandInkscapewith actionable install guidance for SVG rendering and Beamer insertion. - Paper2Any MCP sidecar integration: Added
scholaraio paper2anysetup, serve, status, and smoke commands, a lightweight MCP sidecar for Paper2Any conversion workflows, configuration and setup diagnostics for the extension checkout and backend API key, and user/agent documentation for running the sidecar from ScholarAIO.
- English CLI and service messages: Migrated user-facing CLI help, status output, warnings, and service error messages from Chinese to English, and updated the corresponding regression tests so ScholarAIO no longer preserves Chinese compatibility for these message strings.
- Paper PDF preservation during ingest and repair: Kept original PDFs beside
paper.mdin the canonical paper directory, using the paper directory stem for the PDF filename, avoided overwriting an existing curated PDF when a duplicate DOI path only needs to restore missing Markdown, and madeattach-pdfrefuse to replace an existing canonical PDF unless--forceis supplied. - Local WebUI robustness and privacy: Hardened the WebUI against malformed metadata, stale async list/detail responses, full-library re-audits on every poll, non-ASCII PDF filenames, large PDF buffering, stale PDF toolbar state, stale type filters, and remote runtime script loading.
- Diagram CLI output noise: Stopped service-layer diagram generation logs from reusing the user-facing
Generated:prefix, sodiagram --from-textreports the generated artifact only once. - Local MinerU batch image assets: Saved images returned by the local MinerU API into per-PDF
<pdf_stem>_images/directories and rewrote Markdown references accordingly, preventingcmd_batchruns that share one output directory from overwriting generic image names such asimage_1.png.
- Fresh-layout runtime and one-command upgrade: Standardized the current runtime layout under
data/libraries/,data/spool/,data/state/, andworkspace/_system/, and addedscholaraio migrate upgrade --migration-id <id> --confirmas the release-grade path from supported old roots to the fresh layout. - Migration finalization safety gates: Hardened
migrate finalizewith journaledverify -> cleanup -> verify, workspacerefs/papers.jsonmigration, system-output migration intoworkspace/_system/, and archival cleanup for both populated and empty legacy roots. - Canonical package architecture: Completed the package split into
core,providers,stores,projects,services, andinterfaces, keepingscholaraio.clias the published entrypoint while moving implementation code into canonical namespaces. - Webtools MCP support: Added generic MCP transport support for external webtools, including
GUILessBingSearch(search_bing) andqt-web-extractor(fetch_url) while keeping HTTP transport available for hosts that need it. - Release validation evidence: Added release validation reports that cross-check current behavior against
origin/main,v1.3.1, actual CLI canaries, migration rehearsal evidence, and docs/skill alignment. - Guided single-paper reading workflow: Added the
paper-guided-readingskill plus the companiondocs/writing-guide/paper-reading-framework.mdso agents can start from fuzzy intent, confirm one target paper, perform structured deep reading, and persist reusable findings intonotes.md - Incremental metadata scrub workflow: Added the
scrubskill for post-enrich metadata cleanup of low-quality paper records, plus reusable.scrubbedmarker helpers inpapers.pyand conservative scrub-suspect detection helpers inaudit.py - Rsync backup workflow (#54): Added typed
backupconfiguration, thescholaraio.backupmodule,scholaraio backup list/run, and thebackupskill so ScholarAIO data can be synced to named remote targets through rsync instead of hand-written shell commands - macOS semantic-search smoke workflow: Added a dedicated GitHub Actions job on
macos-14to exercise thesentence-transformers->faiss-cpusemantic-search stack and run targeted regression tests for vector-search paths - Academic writing router (#55): Added the
academic-writingskill as a stable top-level entry point that routes users by deliverable and writing stage instead of forcing them to guess among multiple writing skills - Deliverable-first writing workflows (#55): Added lightweight
posterandtechnical-reportskills so conference posters, poster-style summaries, topic reports, and research briefings are first-class workflows rather than implicit combinations of lower-level skills - Writing workflow regression coverage: Added tests for skill frontmatter validity, router references, approximate host-style skill selection, and 11 rounds of documentation-alignment checks across docs, agent instructions, and marketplace metadata
- Rendered web URL ingestion (#52): Added the native
scholaraio ingest-linkCLI,ingest-linkskill, andsources.webtoolsconnector flow so webpages and online PDFs can be ingested through an externalqt-web-extractordaemon while preserving provenance fields such assource_url,source_type,extracted_at, andextraction_method - References-only metadata refresh:
scholaraio refetchcan now backfill structuredreferencesfor DOI-bearing papers, with--references-only/--refs-onlyto target only papers whose references are still empty and a Semantic Scholar -> Crossref fallback chain when one source has no usable references
- Diagram IR rendering robustness:
diagram --from-irnow accepts commonsource/targetedge aliases in addition to the canonicalfrom/tokeys, and reports malformed edges as clean CLI errors instead of tracebacks. - Fresh-layout docs and agent entries: Slimmed agent entry docs into lightweight navigation surfaces, moved deeper runtime guidance into
docs/guide/agent-reference.md, and aligned README, CLI docs, skills, and setup docs around explicit migration instead of implicit legacy runtime reads. - Skill metadata and routing docs: Normalized active project skill frontmatter to the cross-agent
name+descriptionshape, made descriptions trigger-focused, refreshed the skill harness validator, and fixed router wording that could steal explicit review-response requests. - Runtime-layout migration correctness: Fixed migration verification against real migrated libraries, empty legacy root cleanup, workspace output migration, and recovery/finalization edge cases found during repeated live CLI rehearsals.
- CLI namespace refactor coverage: Moved command handlers and shared CLI helpers under
scholaraio.interfaces.cli.*, keeping command behavior stable while removing implementation dependence on root-level facade modules. - Webtools runtime robustness: Hardened MCP/HTTP webtools configuration, command output, service error handling, and real local service canaries for
websearch,webextract, andingest-link. - Topic and search edge cases: Fixed offline topic CLI validation and search-result citation formatting for legacy scalar
citation_countvalues. - Writing-skill discovery alignment: Synchronized
academic-writing,docs/guide/writing.md,README.md,README_CN.md,docs/index.md,AGENTS.md,AGENTS_CN.md,CLAUDE.md, andclawhub.yamlsopaper-guided-readingis discoverable consistently across router, docs, agent instructions, and marketplace metadata - Audit title matching and type-aware skips:
auditnow compares metadata titles against title-like candidates from the first 80 lines ofpaper.md, honorstitle_translated, keepsmissing_doi/missing_journalwarnings active whenpaper_typeis blank, and skips front-matter-driventitle_mismatchfalse positives for dissertation and document-like records - Backup runtime robustness:
scholaraio backup runnow reports missingrsyncexecutables as controlled CLI errors, shell-quotes the displayed rsync command preview, defaults full-data backups to the saferdefaultrsync mode instead of append-only behavior, forces SSH batch mode so runs fail fast instead of hanging on interactive authentication or host-key prompts, supports aconfig.local.yamlpassword fallback for password-only hosts, and prints concrete setup guidance when authentication or host trust is not ready yet - macOS semantic/unified search crash (#65): main-library and explore semantic search now embed and normalize the query before loading or searching FAISS indexes, avoiding a known
faiss/sentence-transformersimport-order segfault pattern on macOS while preserving existing ranking behavior - Academic writing docs alignment (#55): Synchronized
docs/guide/writing.md,README.md,README_CN.md,docs/index.md,AGENTS.md,AGENTS_CN.md,CLAUDE.md, andclawhub.yamlaround a router-first writing model so poster/report workflows and the academic-writing entry point are discoverable consistently across user and agent surfaces ingest-linkreliability and isolation (#52): URL ingest now preserves extractor PDF autodetect unless--pdfis explicitly requested, isolates both temporary inboxes from the real library, skips only failed URLs in multi-link batches, keeps warning-bearing extractions with usable text, retries transient extraction failures with exponential backoff, and avoids overlong fallback filenames for title-less URLs- Scrub workflow edge cases (#51):
shownow surfaces the stable UUID for partially corrupted records, direct-directoryrepairgenerates a UUID when recovering markdown-only papers, collision-suffixed directory names no longer get renumbered again byrename, and the scrub skill docs now distinguishinvalid_metadatarecords from normalshow-first review paths
- Legacy runtime auto-detection as normal behavior: Fresh-layout accessors no longer auto-open old runtime roots such as
data/papers/,data/explore/,data/proceedings/, ordata/inbox*; those paths are migration inputs handled byscholaraio migrate upgrade. - Legacy root-level public facades: Removed obsolete public facade modules such as
scholaraio.index,scholaraio.workspace, andscholaraio.translate; new code imports canonical namespaces directly.
- Qwen agent support: Added
.qwen/skillssymlink to.claude/skills/so Qwen-based agents can discover ScholarAIO skills out of the box - Qwen project context: Added
.qwen/QWEN.mdso Qwen Code has a repository-native project context file instead of relying onAGENTS.md/CLAUDE.md - Cursor native project rules: Added
.cursor/rules/scholaraio.mdcas the primary Cursor integration path, withAGENTS.mdas the shared multi-agent instruction source and.cursorruleskept only as a legacy fallback - OpenAI-compatible embedding backend support: Added
embed.providerconfig withlocal/openai-compat/noneoptions; cloud API supports configurableapi_base,api_key,api_timeout,batch_size, andmax_retries;provider=nonedisables embeddings gracefully and falls back to keyword-only search
- Cursor compatibility CI coverage: Added regression coverage to keep the Cursor rule wrapper lightweight and explicitly MCP-free
- Proceedings routing test stability: Tests no longer assume the first
data/proceedingsentry is a proceedings volume directory, avoiding CI-only failures whenproceedings.dbsorts before real volume folders - Unified search transparency:
usearchandfsearchnow print an explicit message when semantic retrieval is unavailable and the command degrades to keyword-only search - Zhipu GLM OpenAI-compatible chat routing (#60):
call_llm()now mapsopen.bigmodel.cn/api/paasto the correct/v4/chat/completionsendpoint instead of incorrectly forcing/v1/chat/completions
- AI-for-Science foundation: ScholarAIO v1.3.0 pushes the project beyond a paper-centric research terminal toward an AI-for-Science runtime. Added five lightweight scientific-computing domains for agents: Quantum ESPRESSO, LAMMPS, GROMACS, OpenFOAM, and bioinformatics
- Versioned scientific tool docs via
toolref: Addedscholaraio toolref fetch/list/show/search/useplus the top-levelscholaraio.toolreffacade so agents can query exact official interfaces at runtime instead of guessing parameters from memory. Current indexed coverage includes Quantum ESPRESSO, LAMMPS, GROMACS, OpenFOAM, and curated bioinformatics tools - Extensible onboarding for new scientific software: Added a dedicated scientific-tool onboarding workflow so ScholarAIO can keep incorporating user-requested tools through official-doc ingestion,
toolrefintegration, lightweight skill design, and end-to-end CLI verification, rather than being limited to the five tools already onboarded - Toolref-first scientific runtime design: Aligned tool-specific scientific skills around a clear separation of concerns: papers and notes hold scientific context, skills hold workflow and judgment, and
toolrefholds exact interface details. This keeps skills lightweight while letting agents stay grounded in both literature and tool docs - Semantic Scholar API key support: Configure
ingest.s2_api_key(or env varS2_API_KEY) to authenticate Semantic Scholar requests, increasing rate limits from 100 req/5min (public) to 1 req/s (authenticated); polite delay automatically reduced from 3s to 1s when key is present - PDF parser benchmark harness: Added
scholaraio/ingest/parser_matrix_benchmark.pyplus tests for comparing Docling / MinerU / PyMuPDF parser runs and configuration matrices - Parser-aware setup guidance:
scholaraio setupand the setup skill now explain MinerU vs Docling selection, provide official deployment links, note that MinerU tokens formineru-open-apiare free to apply for, and warn agent users about sandbox/network mis-detection - Insights analytics module coverage:
scholaraio.insightsnow owns reusable behavior-analysis helpers, with dedicated tests plus CLI smoke coverage forscholaraio insights
- PDF parser fallback flow: Batch conversion and
attach-pdfnow follow the same MinerU → fallback behavior as the main ingest path; fallback assets are preserved; unsupported parser options from the previous broader design were removed so the active chain matches the current MinerU / Docling / PyMuPDF strategy - MinerU cloud backend + chunking limits: All MinerU cloud ingest entrypoints now use the
mineru-open-api/ ModelScope-backed path instead of the old raw API flow, and cloud chunk planning now respects both the 600-page and 200MB single-file limits with size-aware chunk estimation - Proceedings ingest routing: Regular
data/inbox/items no longer auto-route intodata/proceedings/; proceedings now enter that workflow only through the dedicateddata/inbox-proceedings/inbox, and misclassified real-library proceedings shells were cleaned back into normal paper ingest - Setup robustness for agents:
setup/setup checkno longer fail hard whenmetrics.dbis locked, parser recommendations honor an already-configured MinerU token before network probing, and interactive prompts treat EOF as empty input so agent-driven stdin does not crash the wizard - Docs consistency: README, README_CN, AGENTS, and CLAUDE now describe the current parser stack and setup behavior consistently
- arXiv ingest edge cases:
scholaraio.sources.arxivno longer makesbs4a transitive hard dependency for normal metadata flows, and old-style arXiv IDs likehep-th/9901001now create parent directories correctly during PDF download - Scientific runtime docs compatibility: toolref runtime behavior, scientific skills, and published setup/docs metadata now match the refactored
toolreffacade and current public CLI/package surface - Optional dependency guidance: missing-dependency messages and
setup checkpoint Python dependencies toscholaraio[import],scholaraio[pdf], andscholaraio[office]; Graphviz and Inkscape remain explicit system-tool checks instead of a dependency-freedrawextra - Translate / enrich CLI feedback and recovery:
translatenow reports chunk-level progress, persists per-chunk state in.translate_{lang}/, resumes unfinished work safely, and avoids writing fake success output when every chunk fails;enrich-tocnow reports start/success/failure with extracted TOC counts for single-paper runs - Workspace removal and refetch status accuracy:
ws removenow falls back to exact workspacedir_namematching when registry lookup misses, andrefetchno longer reports spurious updates when API enrichment returns no authoritative data
- MCP server: Removed
scholaraio/mcp_server.py(1585 lines, 32 tools) and thescholaraio-mcpentry point. All agent interactions now go through CLI + skills, which are agent-agnostic and supported across Claude Code, Codex, Cursor, Windsurf, Cline, and GitHub Copilot. The[mcp]optional dependency group has also been removed.
- Agent analysis notes (T2): Per-paper
notes.mdfor persistent cross-session analysis notes;shownow auto-displays existing notes,show --append-notesappends new notes, andloader.load_notes()/loader.append_notes()expose the workflow in Python - Context management guidance: Workspace skill and 4 academic writing skills updated with
notes.mdread/write workflow and large-content delegation guidance for subagent-heavy analysis
- Zotero LaTeX filename too long (#32): Titles containing LaTeX math (e.g.
$\mathrm{La}{\mathrm{BH}}_8$) or HTML/MathML entities now get properly cleaned before directory naming; added 255-byte filename length limit as safety net
- Patent literature management: New
data/inbox-patent/inbox for patent documents; automatic publication number extraction (CN/US/EP/WO/JP/KR/DE/FR/GB/TW/IN/AU + more formats); deduplication by publication number;paper_type: patentauto-tagging;publication_numberfield inPaperMetadataandpapers_registry - Paper translation (
translateCLI + skill): LLM-based markdown translation preserving LaTeX formulas, code blocks, and images; language detection heuristic; configurable defaults (config.yamltranslatesection) with per-call--lang/--forceoverride; single paper and batch modes;show --langto view translated versions;pipeline --steps translatefor batch processing - Federated search (
fsearchCLI +federated_searchMCP tool): search across main library, explore silos (explore:NAME/explore:*), and arXiv in a single command; arXiv results annotated with "已入库" when DOI matches the main library - arXiv source module (
sources/arxiv.py): shared Atom API client usingdefusedxmlfor safe XML parsing - Insights analytics (
scholaraio insights): behavior dashboard showing top search keywords, most-read papers, weekly reading trend, semantic neighbor recommendations, and active workspaces with paper counts - Metrics recording for search/read:
search,usearch,vsearch, andshowcommands now record events tometrics.dbfor behavior analysis MetricsStore.query_distinct_names(): efficient distinct-name query with supporting(category, name)index, used by insights recommendations- Skill YAML front matter: all 26 skills now carry standardized
version/author/license/tagsmetadata; newinsightsanddocumentskills added - clawhub.yaml: marketplace manifest listing all available skills for discovery
explore fetch --limit: cap the number of papers fetched from OpenAlex (useful for quick sampling)attach-pdf --dry-run: preview whatattach-pdfwill do without actually running MinerU conversiondocument inspect(scholaraio document inspect <file>): inspect Office documents (DOCX/PPTX/XLSX) showing structure, layout, content preview, and overflow warnings; newdocument.pymodule withinspect_pptx/inspect_docx/inspect_xlsxfunctions- Office format ingest:
inbox-doc/now accepts.docx,.xlsx,.pptxfiles; newstep_office_convertpipeline step converts them to Markdown via MarkItDown before ingestion - RIS export:
export risoutputs RIS format compatible with Zotero, Endnote, and Mendeley (zero dependencies) - Markdown reference list export:
export markdowngenerates formatted reference lists with configurable citation styles (APA, Vancouver, Chicago, MLA); supports ordered/unordered lists - DOCX export:
export docxconverts any Markdown content to a Word.docxfile, supporting headings, paragraphs, tables, lists, code blocks, and bold/italic text - Citation styles module (
citation_styles.py): manages built-in (APA/Vancouver/Chicago/MLA) and custom citation formats; custom styles loaded fromdata/citation_styles/*.pywith path-traversal protection - draw skill (
.claude/skills/draw/): generate diagrams (Mermaid flowcharts, sequence diagrams, ER diagrams, Gantt charts, mind maps) and vector graphics (cli-anything-inkscape); outputs toworkspace/figures/ [office]optional dependency group:markitdown[docx,pptx,xlsx]+python-docx
-
Chicago citation format: empty authors list no longer causes
IndexError; condition reordered to checknot authorsfirst (consistent with APA/Vancouver) -
Federated search DOI annotation:
WHERE doi IN (...)replaced withWHERE LOWER(doi) IN (...)incli.py, preventing false negatives when stored DOIs have different casing -
insights --daysvalidation: replacedargs.days or 30with explicitdays <= 0check;--days 0or negative values now produce a clear error instead of silently defaulting to 30 -
CLI error messages and output text unified to Chinese
-
citation_styles:show_style(),list_styles(),get_formatter()error messages Chinese-ified; Google-style docstrings added -
Translation same-language skip: language detection now recognizes common German/French/Spanish inputs, avoiding unnecessary same-language translation calls for supported targets
- Workspace batch add:
ws addnow supports--search "<query>",--topic <id>, and--allflags for bulk paper addition, with--limit/--year/--journal/--typefilter support (--topremains a compatibility alias) - PDF optional dependency:
pymupdfdeclared inpyproject.tomlas[pdf]extra (included in[full]), fixing undeclared dependency for long PDF splitting - Subagent information tiers: T1/T2/T3 architecture documented in CLAUDE.md and AGENTS.md for structured context management
- MCP
build_topics:nr_topics=0now correctly maps to"auto"(automatic topic merging/reduction) instead ofNone(no reduction); added-1as explicit "no reduction" value
- PDF ingestion via MinerU (local API /
mineru-open-apicloud CLI), with auto-splitting for long PDFs (>100 pages) - Three inboxes: regular papers (
inbox/), theses (inbox-thesis/), general documents (inbox-doc/) - DOI-based deduplication; unresolved papers held in
pending/for manual review - Metadata extraction with 4 modes: regex, auto (regex + LLM fallback), robust (regex + LLM cross-check), llm
- API-based metadata enrichment (Crossref, Semantic Scholar, OpenAlex)
- L1–L4 layered content loading (metadata → abstract → conclusion → full text)
- FTS5 full-text search index
- FAISS semantic search with Qwen3-Embedding-0.6B, GPU-adaptive batch profiling
- Unified search with Reciprocal Rank Fusion (RRF) combining keyword + semantic results
- Author search and top-cited paper ranking
- BibTeX export with year/journal filtering
- Data quality audit with structured issue reports and LLM-assisted repair
- BERTopic topic modeling with 6 HTML visualizations (hierarchy, 2D map, barchart, heatmap, term rank, topics over time)
- Citation graph queries (references, citing papers, shared references)
- Citation count fetching from Semantic Scholar / OpenAlex APIs
- Workspace management for organizing paper subsets (search, export within workspace)
- Table of contents (TOC) extraction via LLM
- Conclusion (L3) extraction via LLM, with skip logic for non-article types (thesis, book, document, etc.)
- Abstract backfill via LLM for papers missing abstracts
- Concurrent LLM calls for batch enrichment (configurable worker count)
- Multi-dimensional OpenAlex exploration (ISSN, concept, topic, author, institution, source type, year range, min citations)
- Isolated explore datasets (
data/explore/<name>/) with independent FTS5 + FAISS + BERTopic - Explore-specific unified/semantic/keyword search
- Endnote import (XML and RIS formats)
- Zotero import (Web API and local SQLite)
- PDF attachment to existing papers
- BibTeX export with filtering by year, journal, or paper IDs
- Multi-LLM backend support: OpenAI-compatible (DeepSeek/OpenAI/vLLM/Ollama), Anthropic (Claude), Google (Gemini)
- API key resolution: config → environment variable → vendor-specific env vars
- LLM token usage and API call timing via MetricsStore
- GPU-adaptive batch embedding with automatic profiling and OOM fallback
- 22 Claude Code skills following AgentSkills.io open standard
- MCP server with 31 tools
- CLI with 29 subcommands (
scholaraio --help) - Multi-agent compatibility: AGENTS.md, .cursorrules, .windsurfrules, .clinerules, .github/copilot-instructions.md
- Claude Code plugin packaging (
.claude-plugin/plugin.json,marketplace.json) - SessionStart hook for auto-installing dependencies in plugin mode
- Global config fallback (
~/.scholaraio/) for plugin usage outside the project repo
- Bilingual setup wizard (EN/ZH) with environment diagnostics
- Code quality toolchain: ruff linter/formatter, mypy type checking, pre-commit hooks
- CI workflow: lint, typecheck, test matrix (Python 3.10–3.12)
- Contract-level test suite (36 tests across 6 modules)
- Community governance: CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md
- GitHub issue/PR templates (bug report, feature request)
- CITATION.cff for academic citation
- MkDocs documentation site with API reference (mkdocstrings)
- Release workflow for PyPI publishing (trusted OIDC)