Metadata-Version: 2.4
Name: ancestryllm
Version: 0.3.0
Summary: Local-first, privacy-preserving genealogy CLI with modular LLM providers.
Author: Justin Soderberg
License-Expression: MIT
Project-URL: Homepage, https://github.com/sodejm/AncestryLLM
Project-URL: Documentation, https://github.com/sodejm/AncestryLLM/wiki
Project-URL: Repository, https://github.com/sodejm/AncestryLLM
Project-URL: Issues, https://github.com/sodejm/AncestryLLM/issues
Project-URL: Changelog, https://github.com/sodejm/AncestryLLM/blob/main/CHANGELOG.md
Project-URL: Security, https://github.com/sodejm/AncestryLLM/security/policy
Keywords: cli,gedcom,genealogy,rootsmagic,privacy,llm
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Sociology :: Genealogy
Requires-Python: <3.15,>=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: alembic<2,>=1.18
Requires-Dist: httpx<1,>=0.28
Requires-Dist: jsonschema<4.27,>=4.25.1
Requires-Dist: keyring<26,>=25.7
Requires-Dist: platformdirs<5,>=4.5
Requires-Dist: prompt-toolkit<4,>=3.0.52
Requires-Dist: pydantic<3,>=2.12
Requires-Dist: python-dateutil<3,>=2.9
Requires-Dist: rapidfuzz<4,>=3.14
Requires-Dist: rich<16,>=15
Requires-Dist: sqlalchemy<3,>=2.0
Requires-Dist: sqlcipher3<0.7,>=0.6.2
Requires-Dist: sqlglot<31,>=28
Requires-Dist: tomli-w<2,>=1.2
Provides-Extra: ollama
Requires-Dist: ollama<1,>=0.6; extra == "ollama"
Provides-Extra: openai
Requires-Dist: openai<3,>=2.45; extra == "openai"
Provides-Extra: anthropic
Requires-Dist: anthropic<1,>=0.71; extra == "anthropic"
Provides-Extra: gemini
Requires-Dist: google-genai<3,>=2.12; extra == "gemini"
Provides-Extra: openrouter
Requires-Dist: openai<3,>=2.45; extra == "openrouter"
Provides-Extra: all-llm
Requires-Dist: anthropic<1,>=0.71; extra == "all-llm"
Requires-Dist: google-genai<3,>=2.12; extra == "all-llm"
Requires-Dist: ollama<1,>=0.6; extra == "all-llm"
Requires-Dist: openai<3,>=2.45; extra == "all-llm"
Provides-Extra: dev
Requires-Dist: build<2,>=1.3; extra == "dev"
Requires-Dist: check-wheel-contents<1,>=0.6.1; extra == "dev"
Requires-Dist: click<9,>=8.3.3; extra == "dev"
Requires-Dist: cyclonedx-bom<8,>=7.2; extra == "dev"
Requires-Dist: coverage[toml]<8,>=7.12; extra == "dev"
Requires-Dist: mypy<3,>=1.19; extra == "dev"
Requires-Dist: packaging<27,>=25; extra == "dev"
Requires-Dist: pip-audit<3,>=2.10; extra == "dev"
Requires-Dist: pre-commit<5,>=4.5; extra == "dev"
Requires-Dist: pytest<10,>=9; extra == "dev"
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
Requires-Dist: pytest-mock<4,>=3.15; extra == "dev"
Requires-Dist: ruff<1,>=0.15; extra == "dev"
Requires-Dist: setuptools<84,>=83; extra == "dev"
Requires-Dist: twine<7,>=6.2; extra == "dev"
Requires-Dist: types-python-dateutil<3,>=2.9; extra == "dev"
Requires-Dist: uv==0.12.0; extra == "dev"
Requires-Dist: wheel<1,>=0.45; extra == "dev"
Requires-Dist: zizmor==1.28.0; extra == "dev"
Dynamic: license-file

# AncestryLLM

AncestryLLM is a local-first platform for genealogy research tools. It combines
deterministic RootsMagic and GEDCOM workflows with optional, explicitly selected
LLM providers. The one-shot CLI and prompt-toolkit/Rich REPL are the only
implemented product surfaces in 0.3.0. They derive commands from the same
`CommandSpec` metadata and dispatch through the shared `CommandExecutor` into
transport-neutral application services. The accepted local Electron and private
FastAPI desktop architecture remains a later-roadmap adapter direction; it is
unshipped and is not a public API.

## Install and start

Python 3.12 through 3.14 and a working OS credential store are required. Install
the isolated command with [pipx](https://pipx.pypa.io/):

```bash
pipx install ancestryllm
ancestry --version
ancestry --help
```

Install every optional LLM provider with
`pipx install 'ancestryllm[all-llm]'`. Remote providers are never selected from
installed packages or environment keys: every cloud call still requires an
explicit profile and consent.

Run `ancestry` with no arguments for the prompt-toolkit/Rich interactive
console. It is the only supported interactive console; the
prompt stays responsive while background operations render live, sanitized
spinner or completed-unit progress above it. One-shot and JSON output never
emit terminal animation. The canonical command reference, examples, offline
defaults, and privacy rules are
in [the CLI guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/CLI.md);
see [the console guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/CONSOLE.md)
for interactive use and
[the file-ingress policy](https://github.com/sodejm/AncestryLLM/blob/main/docs/FILE_INGRESS.md)
for per-format input limits and stable rejection codes.

## Included modules

- `rootsmagic`: immutable, bounded SELECT/CTE queries and deterministic GEDCOM export.
- `gedcom`: merge, rooted subtree, quality analysis, incremental update, and rebase.
- `prompts`: immutable prompt revisions with declared variables and output schemas.
- `people`: curated research people, identifiers, facts, links, and provenance.
- `providers`: explicit Ollama, OpenAI, Anthropic, Gemini, and OpenRouter profiles.
- `ocr`: schema-validated extraction through the same provider boundary.
- `secrets`: no-echo OS-keyring management; values never appear in status output.

## Development

```bash
git clone https://github.com/sodejm/AncestryLLM.git
cd AncestryLLM
make setup
make test
make lint
make typecheck
make security
make sbom
```

`make setup` creates `.venv` and installs the checkout in editable mode with
locked development and provider dependencies. The equivalent manual command is
`.venv/bin/pip install --editable '.[all-llm,dev]'`; it is for contributors,
not end-user installation.

The dependency graph is locked in `uv.lock`. Never commit real family trees,
GEDCOM exports, databases, logs, reports, secrets, or research-person data.

Read [the architecture](https://github.com/sodejm/AncestryLLM/blob/main/ARCHITECTURE.md),
[desktop ADR](https://github.com/sodejm/AncestryLLM/blob/main/docs/ADR-0025-electron-fastapi-desktop.md),
[CLI guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/CLI.md),
[privacy and consent](https://github.com/sodejm/AncestryLLM/blob/main/docs/PRIVACY_AND_CONSENT.md),
[provider guide](https://github.com/sodejm/AncestryLLM/blob/main/docs/PROVIDERS.md),
[GEDCOM compatibility](https://github.com/sodejm/AncestryLLM/blob/main/docs/GEDCOM_COMPATIBILITY.md),
[encrypted backups](https://github.com/sodejm/AncestryLLM/blob/main/docs/ENCRYPTED_BACKUPS.md),
[bounded file ingress](https://github.com/sodejm/AncestryLLM/blob/main/docs/FILE_INGRESS.md),
and [threat model](https://github.com/sodejm/AncestryLLM/blob/main/docs/THREAT_MODEL.md).

Versioning follows [Semantic Versioning 2.0.0](https://semver.org/). The
[versioning policy](https://github.com/sodejm/AncestryLLM/blob/main/docs/VERSIONING.md)
defines the CLI contracts covered by a release.

## Interoperability status

Automated round-trip and preservation tests run in CI. Ancestry, Geni, and
MyHeritage imports must still be manually smoke-tested for each release; this
repository does not claim production interoperability until that checklist is
completed and recorded.
