diff --git a/examples/literature-explorer/README.md b/examples/literature-explorer/README.md
index 7ecb44a..cb19697 100644
--- a/examples/literature-explorer/README.md
+++ b/examples/literature-explorer/README.md
@@ -42,6 +42,7 @@ The adapter exposes JSON-serializable methods suitable for a local web bridge:
- `expand_topic(...)`
- `extract_text(text, backend="heuristic")`
- `verify_strings(values, context="", limit=5)`
+- `support_claims(text, context="", limit=5, max_claims=8, min_claim_chars=90)`
- `verify_bibtex(bibtex_text, context="", limit=5)`
- `graph(seed_keys, relation_types=None, depth=1, review_status=None, missing_only=False)`
@@ -64,6 +65,7 @@ window.citegeist = {
expandTopic(topicSlug, opts) {},
extractText(text, opts) {},
verifyStrings(values, opts) {},
+ supportClaims(text, opts) {},
verifyBibtex(bibtexText, opts) {},
graph(seedKeys, opts) {}
}
@@ -122,6 +124,7 @@ This is sufficient to drive a demonstration app that can:
- preview or apply topic expansion;
- inspect one entry with BibTeX/provenance details;
- run rough-reference extraction and verification;
+- rank support-worthy claims in a prose excerpt and inspect suggested references;
- render local citation neighborhoods from `graph()` JSON payloads.
For a first demo, the strongest path is topic exploration rather than generic reference-manager behavior.
diff --git a/examples/literature-explorer/index.html b/examples/literature-explorer/index.html
index bd562c3..0ce0a76 100644
--- a/examples/literature-explorer/index.html
+++ b/examples/literature-explorer/index.html
@@ -839,6 +839,23 @@
"max_expanded_entries": 100,
"max_expand_seconds": 20
}
+}
+
+
+
+ POST
+ /api/call support_claims
+
+
Analyze a prose excerpt for support-worthy claims, rank them by needs_support_score, and return candidate references not already parsed from the excerpt.
+
{
+ "method": "support_claims",
+ "params": {
+ "text": "Movement may not be modeled at all, but simply assigned a cost value ...",
+ "context": "artificial life",
+ "limit": 5,
+ "max_claims": 5,
+ "min_claim_chars": 80
+ }
}
diff --git a/tests/test_app_server.py b/tests/test_app_server.py
index 2475264..482e317 100644
--- a/tests/test_app_server.py
+++ b/tests/test_app_server.py
@@ -2,6 +2,7 @@ from types import SimpleNamespace
from citegeist import BibliographyStore
from citegeist.app_api import LiteratureExplorerApi
+from citegeist.bibtex import BibEntry
from citegeist.bootstrap import BootstrapResult
from citegeist.app_server import (
LiteratureExplorerAppServer,
@@ -9,6 +10,7 @@ from citegeist.app_server import (
_request_is_authorized,
create_request_handler,
)
+from citegeist.verify import VerificationMatch, VerificationResult
class FakeBootstrapper:
@@ -29,6 +31,38 @@ class FakeBootstrapper:
]
+class FakeVerifier:
+ def verify_strings(self, values, context="", limit=5):
+ return []
+
+ def verify_string(self, value: str, context: str = "", limit: int = 5):
+ return VerificationResult(
+ query=value,
+ context=context,
+ status="high_confidence",
+ confidence=0.88,
+ entry=BibEntry(
+ entry_type="article",
+ citation_key="support2024",
+ fields={"title": "Support Paper", "year": "2024"},
+ ),
+ source_label="openalex:search:Support Paper",
+ alternates=[
+ VerificationMatch(
+ entry=BibEntry(
+ entry_type="article",
+ citation_key="alt2023",
+ fields={"title": "Alternate Support", "year": "2023"},
+ ),
+ score=0.66,
+ source_label="crossref:search:Alternate Support",
+ )
+ ],
+ input_type="string",
+ input_key=None,
+ )
+
+
def test_literature_explorer_app_server_dispatch_search():
store = BibliographyStore()
try:
@@ -138,6 +172,35 @@ def test_literature_explorer_app_server_dispatch_bootstrap_with_new_caps():
store.close()
+def test_literature_explorer_app_server_dispatch_support_claims():
+ store = BibliographyStore()
+ try:
+ server = LiteratureExplorerAppServer(LiteratureExplorerApi(store, verifier=FakeVerifier()))
+
+ payload = server.dispatch(
+ "support_claims",
+ {
+ "text": """
+Long claim text about agents evolving intelligent movement strategies in multiple computational settings without enough direct support [1].
+
+References
+
+[[1]]Earlier Cited Paper
+""",
+ "context": "artificial life",
+ "limit": 3,
+ "max_claims": 2,
+ "min_claim_chars": 40,
+ },
+ )
+
+ assert payload["context"] == "artificial life"
+ assert payload["suggestion_count"] == 1
+ assert payload["suggestions"][0]["suggested_references"][0]["citation_key"] == "support2024"
+ finally:
+ store.close()
+
+
def test_literature_explorer_http_handler_class_can_be_created():
store = BibliographyStore()
try: