#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Timestamp: 2026-01-27 # File: src/scitex_writer/__init__.py """SciTeX Writer - LaTeX manuscript compilation system with MCP server. Four Interfaces: - Python API: import scitex_writer as sw - CLI: scitex-writer - GUI: scitex-writer gui (browser-based editor) - MCP: 38 tools for AI agents Modules: - claim: Traceable scientific assertions (stats, figures, citations) - compile: Compile manuscripts to PDF - export: Export manuscript for arXiv submission - migration: Import from / export to external platforms (Overleaf) - project: Clone, info, get_pdf - tables: List, add, remove, csv_to_latex - figures: List, add, remove, convert - bib: List, add, remove, merge - guidelines: IMRAD writing tips - prompts: AI2 Asta integration - gui: Browser-based editor (requires Flask) """ from importlib.metadata import PackageNotFoundError as _PackageNotFoundError from importlib.metadata import version as _version try: __version__ = _version("scitex-writer") except _PackageNotFoundError: # Fallback: parse pyproject.toml (single source of truth) from pathlib import Path as _Path _pyproject = _Path(__file__).parent.parent.parent / "pyproject.toml" __version__ = "0.0.0" if _pyproject.exists(): with open(_pyproject) as _f: for _line in _f: if _line.startswith("version"): __version__ = _line.split("=")[1].strip().strip('"') break # Import modules for convenient access from . import ( bib, claim, compile, export, figures, guidelines, migration, project, prompts, tables, update, ) from ._dataclasses import CompilationResult as _CompilationResult # noqa: F401 from ._dataclasses import ManuscriptTree as _ManuscriptTree # noqa: F401 from ._dataclasses import RevisionTree as _RevisionTree # noqa: F401 from ._dataclasses import SupplementaryTree as _SupplementaryTree # noqa: F401 from ._editor import gui from ._usage import get_usage as usage from .writer import Writer def ensure_workspace(project_dir, git_strategy="child", **kwargs): """Ensure writer workspace exists at {project_dir}/scitex/writer/. If the directory already exists, returns the path without modification. If not, clones the full scitex-writer template. Parameters ---------- project_dir : str or Path Root project directory. Writer workspace will be at ``{project_dir}/scitex/writer/``. git_strategy : str, optional Git initialization strategy ('child', 'parent', 'origin', None). **kwargs Forwarded to Writer constructor (branch, tag, etc.). Returns ------- pathlib.Path Path to the writer workspace directory. """ from pathlib import Path writer_path = Path(project_dir) / "scitex" / "writer" if writer_path.exists(): return writer_path Writer(str(writer_path), git_strategy=git_strategy, **kwargs) return writer_path __all__ = [ "__version__", "usage", # Modules "claim", "compile", "export", "project", "tables", "figures", "bib", "guidelines", "prompts", "migration", "update", # Writer class "Writer", "ensure_workspace", # GUI "gui", ] # EOF