Skip to content

Releases: O0000-code/paper-search-pro

v2.3.0

Choose a tag to compare

@O0000-code O0000-code released this 14 Jul 05:45

v2.3.0

Native-Chinese literature search, routing by judgment instead of keywords, and an agent-mode rebuild — while an English run that doesn't use the new features renders byte-for-byte as before, with still no new hard dependencies.


🇨🇳 Native-Chinese search (the headline)

Chinese queries now retrieve Chinese literature directly, not a translated-to-English approximation.

  • Two new self-contained sources — pure HTTP, no login, no scraping of closed databases:
    • NSSD (国家哲学社会科学文献中心) for social sciences & humanities — including CSSCI flagships like 《经济研究》 that the international open sources index zero of.
    • yiigle (中华医学期刊全文数据库) for medicine — native-Chinese titles + abstracts + DOIs largely absent from OpenAlex / CrossRef / PubMed.
  • One control: search_language: auto | en | zh | both. A Chinese query is no longer force-translated to English; the skill asks once (and can remember your default). NSSD/yiigle route automatically by discipline; OpenAlex stays the multilingual baseline (it's not "the English source").
  • Honest boundary: closed databases (CNKI / 万方 / 维普) are deliberately not scraped, for compliance — so the skill tells you when a topic (e.g. CNKI-exclusive psychology journals like 《心理学报》) needs a manual CNKI follow-up, rather than pretending full coverage.

🧭 Routing by judgment, not keywords

  • Source routing is reframed from "keyword X → enable source Y" to the agent judging the query's domain — keyword lists are now calibration examples, not triggers.
  • AI / CS queries default to Semantic Scholar as the primary engine (measured: OpenAlex has no clean record for landmark papers like Attention Is All You Need, and undercounts 2025 citations by 20–250×). Transient --primary-source for headless callers; needs an SS key, else it stays on OpenAlex.

🤖 Agent mode: a recipe, not a black box

agent_mode.md is rebuilt around one principle: the deterministic heuristic is a floor, not a ceiling. The calling agent — being an LLM — is guided to do relevance / domain / language judgment inline to reach the same quality as the human 14-step path (the RCS rubric is handed over; saturation-iteration and citation-chasing are spelled out). New flags: --lang, --with-nssd / --with-yiigle, --primary-source, plus a structured meta.language block.

🛠 Under the hood

  • Fixed a latent journal-rank bug: the federated resolver dropped issn, so the CAS/JCR/SJR ISSN-join was annotating ~0 papers — now merged and serialized (all sources benefit).
  • Chinese-native title / authors are preserved when a record collides on DOI with an English OpenAlex record.
  • CJK 2-gram coverage so the headless relevance floor is query-grounded for Chinese too.

✅ Quality

A 4-dimension expert review + an independent Codex code review surfaced 6 P1s — all fixed and re-reviewed to a clean pass — then a blind end-to-end test on four real research tasks confirmed NSSD returns 《经济研究》, yiigle returns 中华系列 medicine, routing is correct, and the honest coverage disclosure emerges on its own.

Compatibility

  • No behavior change to an English run that doesn't use the new features — byte-for-byte identical.
  • No new hard dependencies; Chinese partition/source data is never bundled.

Full changelog: v2.2.0...v2.3.0

v2.2.0

Choose a tag to compare

@O0000-code O0000-code released this 04 Jul 06:19

v2.2.0

The biggest feature drop since v2.1 — journal partitions in the report, a switchable primary source, a headless mode for agent-to-agent use, plus two reliability fixes. The human 14-step workflow is unchanged when the new capabilities aren't used, and there are no new hard dependencies.


✨ Journal partitions — 中科院 / JCR / SJR

Every paper is now tagged with its journal tier across three systems:

  • On each card / row — a quiet single badge (your preferred platform).
  • In the detail panel — the full three-platform breakdown (中科院 tier + Top, JCR quartile + impact factor, SJR quartile) with source attribution.
  • In the toolbar — a zone filter to keep only Q1 / ≥Q2 / ≥Q3 (or 一区 / ≥二区 for 中科院). Ask in natural language ("只要一区二区的", "Q1 only") and the request is parsed as a filter, not a search term.

Partition tables are fetched at runtime from public mirrors — never bundled — and attributed; only JCR's figure is labelled an impact factor.

🔀 Primary source — by preference, and by fallback

Two independent capabilities from one setting:

  • Pick your primary. OpenAlex is the default; set Semantic Scholar as the primary source instead when its corpus or field coverage suits your topic better.
  • Automatic quota fallback. When the active primary runs low on its daily quota (or starts erroring), the run continues on the other source rather than stopping — a depleted key degrades gracefully instead of halting the search.

🤖 Headless mode for agents

When the consumer is another agent rather than a person, scripts/agent_search.py runs the deterministic core in a single command and returns one structured JSON envelope — deduped, relevance-scored, saturation-checked, partition-annotated — with no HTML and no classification SubAgents. Same search discipline, machine-readable output.

🛠 Reliability

  • prisma_s_logger no longer crashes on the documented single-dict curve.json (it silently dropped the snapshot and left coverage at 0). — thanks to @MatrixA (#2)
  • rcs_parser now applies RCS scores from batches keyed by canonical_key, not just entity.paper_id — previously those scores were silently discarded. — @MatrixA (#2), extended here to the raw-response path.
  • Regression tests added for both.

Compatibility

  • No behavior change to a run that doesn't use partitions / source-switching / headless mode — the report renders byte-for-byte as before.
  • No new hard dependencies.

Full changelog: v2.1.2...v2.2.0

v2.1.2 — Cross-agent install + OpenAlex API key requirement

Choose a tag to compare

@O0000-code O0000-code released this 29 May 07:19

Patch release — cross-agent install + OpenAlex API key requirement

Three changes since v2.1.1. The OpenAlex item is the one that may require action on existing setups; the rest are additive or behavior fixes. The search pipeline, helper scripts, RCS rubric, and output structure are unchanged — Claude Code users see no difference in behavior.

1. ⚠️ OpenAlex now requires a free API key (action may be needed)

OpenAlex deprecated the mailto= polite pool on 2026-02-13; all API calls now require a free API key. A config that only set openalex_email will stop working against live OpenAlex.

What to do: grab a free key at https://openalex.org/settings/api (instant, no approval) and set openalex_api_key in ~/.paper-search-pro/config.yaml. The free tier is $1/day ≈ 10k list calls / 1k searches — a Standard-tier run uses ~200 calls, so this is plenty. Setup docs, config template, verification scripts, and READMEs all updated to reflect the new requirement; openalex_email is kept as a deprecated/ignored field for backward-compatible configs.

2. Cross-agent install support via $PSP_HOME

The Skill claimed to work on "Claude Code, Codex, any SKILL.md agent," but 22 hardcoded ~/.claude/skills/paper-search-pro paths meant it only really ran under Claude Code. Every invocation now uses $PSP_HOME, resolved once in STEP 0 via a three-layer chain:

  1. Explicit injection — the agent substitutes the SKILL.md directory it was given
  2. Env varCLAUDE_SKILL_DIR / CODEBUDDY_SKILL_DIR
  3. Filesystem fallback — walks known install locations: ~/.claude/skills, ~/.codex/skills, ~/.agents/skills, ~/.config/opencode/skills, ~/.codeium/windsurf/skills, ~/.config/goose/skills, ~/.cline/skills, ~/.roo/skills, ~/.copilot/skills, plus project-local equivalents

Classifier SubAgent prompts (STEP 6) now pass the expanded absolute rubric path, since each SubAgent runs in its own shell where $PSP_HOME isn't exported. READMEs list the per-agent install paths up front.

3. Japanese / Korean queries route to the English UI (not Chinese)

The old detector sent every CJK character to the Chinese UI — so a Japanese or Korean query produced a Chinese interface, friendly to neither audience. New logic checks hiragana/katakana (U+3041–U+30FF) first → English; then CJK Unified Ideographs → Chinese; Korean Hangul and everything else → English (the international default). Paper titles / abstracts / authors are never translated regardless — only the report UI chrome.

Verification

Both changes were checked by two read-only subagent test passes: the $PSP_HOME resolver behaves correctly across all four scenarios (explicit / env var / fallback / not-found), the language regex routes six representative queries correctly (including the previously-misrouted kanji+hiragana mix 東京大学の最新研究 → EN), all 25 bash blocks pass bash -n, and no hardcoded install paths remain outside legitimate fallback lists and prose examples.

What's NOT changed

  • Search pipeline, tier logic, saturation curve, citation chasing — untouched
  • Python helper behavior, RCS rubric content, PRISMA-S logger — untouched
  • Output file structure (HTML / MD / BibTeX / RIS / CSV / PRISMA-S log) — unchanged
  • Claude Code user experience — $PSP_HOME auto-resolves to ~/.claude/skills/paper-search-pro exactly as before

v2.1.1 — Safari print compatibility fixes

Choose a tag to compare

@O0000-code O0000-code released this 27 May 17:26

Patch release — Safari print rendering fixes

This release improves print fidelity, especially for Safari users, with three coordinated @media print improvements. Screen view is byte-identical to v2.1.0 across all changes — every rule lives inside @media print.

1. Safari-only hero zoom compensation

Safari WebKit silently ignores @page { size: 1240px 1754px } (WebKit Bug #250685, MDN BCD #28626) and falls back to A4 default. The SwissTop hero (designed at maxWidth: 1240) was printing 1.57x larger physically than Chrome's equivalent.

Fix: A new safari-detect.ts module UA-tags <html> with .is-safari at load. A scoped print rule then uses width: 1240px !important; zoom: 0.64 to force layout at design width and visually scale down — restoring physical parity with Chrome without touching any font, padding, or grid primitive in SwissTop.

2. Paper list left-edge alignment in print

Section names (FOUNDATIONAL / HIGH / ...) and #NN rank prefixes now sit flush at the container left edge, aligned vertically with FINDINGS / FILTER tabs above. Uses :has() (Safari 15.4+, Chrome 105+, Firefox 121+). The TierDot color bullet is hidden in print only; on-screen it remains as a visual hierarchy marker.

3. Browser-injected URL / title / date / page-number suppression

Added CSS Paged Media Module Level 3 §6 @top-* / @bottom-* margin-box content overrides. Result:

Browser Status
Chrome 105+ / Edge 105+ / Firefox 99+ 🟢 Auto-suppressed (zero user action)
Safari (all versions) 🟡 Untick "Print headers and footers" once in print dialog — Safari remembers per-host indefinitely

Safari WebKit doesn't honor margin-box content override yet, but its per-host setting persistence makes the one-time user action negligible.

Other

  • Pre-existing responsive @media (max-width: 860px) / (max-width: 480px) blocks now scoped to screen and ... so they don't accidentally fire in Chrome's narrower print viewport.

What's NOT changed

  • Search pipeline, helper scripts, RCS rubric, PRISMA-S logger, classifier prompt — all untouched
  • React component tree — only main.tsx adds a single detectSafari() call
  • Screen layout — byte-identical to v2.1.0 on every browser
  • Skill API, CLI flags, output file structure — all backwards-compatible

Upgrade

Re-install the Skill (or git pull if local clone) — no migration steps required.

Full Changelog: v2.1.0...v2.1.1

v2.1.0 — Initial release

Choose a tag to compare

@O0000-code O0000-code released this 24 May 10:09

Multi-source academic literature discovery as a Skill — for Claude Code, Codex, and any agent that loads the SKILL.md format.

Highlights

  • 14-step recipe in SKILL.md drives every run
  • Five sources with smart routing: OpenAlex (primary) · PubMed (medical / MeSH) · arXiv (preprint freshness) · Semantic Scholar (influential citations) · CrossRef (funder · license · CT#)
  • Four tiers: Quick (5–8 min) · Standard (10–17 min) · Deep (30–45 min) · Audit (2–3 hr)
  • Single-file HTML report — Shadcn aesthetic, three tabs (Findings · Methods · Audit), three hero layouts (Swiss · Editorial · Document), two list densities (Catalog · Index), responsive at 860 px, bilingual UI (EN / 中文 auto-selected from query language), Noto Sans SC inlined, fully offline
  • PRISMA-S 16-item disclosure log for reproducibility
  • No third-party LLM keys — your agent is the LLM; classification via parallel Inline SubAgents (up to 5 per round)
  • Exports: report.html · report.md · papers.csv · papers.bib (BibTeX) · papers.ris · papers.json · execution_log.json · summary.md

Live demo

https://o0000-code.github.io/paper-search-pro/

Install

git clone https://github.com/O0000-code/paper-search-pro.git \
  ~/.claude/skills/paper-search-pro

python3 -m pip install -r ~/.claude/skills/paper-search-pro/scripts/requirements.txt

Five free API keys (~15 min total) — see references/setup.md.

License

Apache License 2.0 — see LICENSE.txt · NOTICE.md · THIRD_PARTY.md.

Vendored from futurehouse/paper-qa (Apache 2.0).