Loading...
No commits yet
Not committed History
Blame
__init__.py • 3.3 KB
#!/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 <command>
    - 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