Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
30ab2c5
fix(browser): reject sync Playwright inside event loops
jung233 Jul 17, 2026
598aca6
fix(container): install CloakBrowser and Chromium runtime dependencies
jung233 Jul 16, 2026
c49176b
fix(browser): force headless mode when no display is available
jung233 Jul 16, 2026
b0f0a44
feat(browser): provide persistent contexts for login sessions
jung233 Jul 16, 2026
07f9f26
fix(browser): enforce thread ownership and release driver resources
jung233 Jul 16, 2026
c0c1313
fix(browser): close login and cookie capture sessions deterministically
jung233 Jul 16, 2026
cfce925
Add missing is_suspicious_pdf and suspicious_pdf functions
jung233 Jun 26, 2026
87669e8
fix(pdf): close PyMuPDF documents after extraction
jung233 Jul 16, 2026
f86514c
fix(pdf): publish validated downloads atomically
jung233 Jul 16, 2026
828ecfb
fix(container): reap children and bound allocator arenas
jung233 Jul 16, 2026
4e942db
fix(auth): release institutional browser sessions
jung233 Jul 16, 2026
3f4d3d7
fix(publishers): close batch workers and browser handles
jung233 Jul 16, 2026
987d3de
fix(commands): close fetchers and CARSI clients on every path
jung233 Jul 16, 2026
267312d
fix(cli): honor persisted download source settings
jung233 Jul 16, 2026
b6d1481
Fix missing fastapi dependency for web UI
jung233 Jun 26, 2026
03a89ec
fix(packaging): include the web UI template in wheels
jung233 Jul 16, 2026
af893cd
fix(web): disable the Jinja template cache correctly
jung233 Jul 16, 2026
29469b1
fix(web): use the current TemplateResponse signature
jung233 Jul 16, 2026
2d4283b
Fix: cancel remaining threads immediately on success
jung233 Jun 26, 2026
422755b
Add SSE streaming download endpoint for real-time progress updates
jung233 Jun 26, 2026
6afed5e
Fix route conflict: remove duplicate /api/download/file endpoint
jung233 Jun 26, 2026
97379f6
Fix SSE real-time event streaming with asyncio.Queue
jung233 Jun 27, 2026
89cf3e8
Replace base64 file embedding with one-time token download in SSE
jung233 Jun 27, 2026
6e0a653
fix(sources): cancel losing races and drain workers
jung233 Jul 16, 2026
8e8c8bf
fix(web): cancel download tasks when clients disconnect
jung233 Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,19 @@ WORKDIR /app
COPY pyproject.toml .
COPY src ./src

RUN pip install --no-cache-dir ".[tor,instsci]"
RUN pip install --no-cache-dir ".[web,tor,cloakbrowser,instsci]"

FROM python:3.12-slim

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libglib2.0-0 libnss3 libnspr4 libdbus-1-3 \
libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 \
libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 \
libatspi2.0-0 libwayland-client0 tini \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
Expand All @@ -19,6 +28,9 @@ COPY pyproject.toml .
EXPOSE 8000

ENV SCANSCI_PDF_DATA_DIR=/data/paper-fetch
ENV CLOAKBROWSER_CACHE_DIR=/data/paper-fetch/browser-cache
ENV MCP_MODE=streamable_http
ENV MALLOC_ARENA_MAX=2

ENTRYPOINT ["tini", "--"]
CMD ["python", "-m", "scansci_pdf", "run", "--mode", "streamable_http"]
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ dependencies = [
"requests>=2.31",
"requests[socks]>=2.31",
"beautifulsoup4>=4.12",
"PyMuPDF>=1.24",
"mcp[cli]>=1.12",
"typer>=0.15",
"uvicorn>=0.34",
Expand Down Expand Up @@ -37,7 +38,7 @@ build-backend = "setuptools.build_meta"
where = ["src"]

[tool.setuptools.package-data]
scansci_pdf = ["data/*.json", "data/*.dat", "_core/*.pyd", "_core/*.so"]
scansci_pdf = ["data/*.json", "data/*.dat", "templates/*.html", "_core/*.pyd", "_core/*.so"]

[tool.pytest.ini_options]
testpaths = ["tests"]
Loading