Metadata-Version: 2.4
Name: tool-cv-corpus
Version: 0.2.0
Summary: Schema-driven, LLM-assisted engine that compiles a graph-of-atoms career corpus into job-targeted CVs, resumes, and cover letters.
Project-URL: Homepage, https://github.com/iam6ft7in/tool_cv_corpus
Project-URL: Documentation, https://iam6ft7in.github.io/tool_cv_corpus/
Project-URL: Issues, https://github.com/iam6ft7in/tool_cv_corpus/issues
Project-URL: Changelog, https://github.com/iam6ft7in/tool_cv_corpus/blob/main/CHANGELOG.md
Author: Anthony Riles
License: Apache-2.0
License-File: LICENSE
Keywords: career,cover-letter,cv,json-resume,llm,resume,typst
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business
Classifier: Topic :: Text Processing :: Markup
Requires-Python: >=3.12
Requires-Dist: anthropic>=0.34
Requires-Dist: httpx>=0.27
Requires-Dist: platformdirs>=4.2
Requires-Dist: pydantic>=2.7
Requires-Dist: python-frontmatter>=1.1
Requires-Dist: pyyaml>=6.0
Requires-Dist: rich>=13.7
Requires-Dist: typer>=0.12
Provides-Extra: all
Requires-Dist: jinja2>=3.1; extra == 'all'
Requires-Dist: pypdf>=4.2; extra == 'all'
Requires-Dist: python-docx>=1.1; extra == 'all'
Provides-Extra: docx
Requires-Dist: python-docx>=1.1; extra == 'docx'
Provides-Extra: jinja
Requires-Dist: jinja2>=3.1; extra == 'jinja'
Provides-Extra: pdf-extract
Requires-Dist: pypdf>=4.2; extra == 'pdf-extract'
Description-Content-Type: text/markdown

# tool_cv_corpus

Schema-driven, LLM-assisted engine that compiles a **graph-of-atoms**
career corpus into job-targeted CVs, resumes, and cover letters.

[![ci](https://github.com/iam6ft7in/tool_cv_corpus/actions/workflows/ci.yml/badge.svg)](https://github.com/iam6ft7in/tool_cv_corpus/actions/workflows/ci.yml)
[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)

## Why

Most resume tooling treats a CV as a document you edit. Every new
target becomes a rewrite, the sourcing behind each bullet gets lost,
and one-off prose mixes with data you wanted to re-use.

`tool_cv_corpus` inverts the model:

1. Your **corpus** is structured, sourced career data with provenance.
2. A **target** is a job posting you are applying to.
3. The engine **resolves** corpus against target, scores claims by
   fit, applies visibility rules, and emits a format-agnostic
   `RenderedResume`.
4. Pluggable **renderers** turn it into PDF (Typst), JSON Resume,
   DOCX, or HTML.

## Pipeline

```mermaid
flowchart LR
    LI[LinkedIn export] --> ING[ingesters]
    MD[Markdown + YAML] --> ING
    GH[GitHub profile] --> ING
    OR[ORCID] --> ING
    ING --> CORPUS[(corpus<br/>graph of atoms)]
    CORPUS --> LOAD[loader]
    TARGET[target] --> LOAD
    LOAD --> GEN[generator + LLM cache]
    GEN --> RR[RenderedResume<br/>intermediate]
    RR --> TYPST[typst -> PDF]
    RR --> JR[JSON Resume]
    RR --> DOCX[DOCX]
    RR --> HTML[HTML]
```

## Quick start

```bash
uv add tool-cv-corpus
cv-corpus doctor                       # verify install
cv-corpus init my_career               # scaffold a corpus
cv-corpus validate my_career           # run 11 checks
cv-corpus schema --out schemas/        # export JSON Schemas
```

Try the bundled synthetic example:

```bash
cv-corpus validate examples/corpus_jordan_taylor
```

## Entity kinds

`person`, `organization`, `role`, `project`, `achievement`, `skill`,
`education`, `publication`, `artifact`, `testimonial`,
`cover_letter_seed`, `target`, `source_doc`. Plus `Claim` records
layered on top for sourced assertions.

See [docs/architecture/schema.md](docs/architecture/schema.md) for
the design invariants.

## Plugins

Three entry-point groups discover renderers, ingesters, and LLM
providers at install time:

- `tool_cv_corpus.renderers` - `typst`, `json_resume`, `docx`, `html`
- `tool_cv_corpus.ingesters` - `markdown`, `linkedin_export`,
  `github_profile`, `orcid`
- `tool_cv_corpus.llm_providers` - `anthropic`, `openai` (stub)

Write your own: see
[docs/plugin_authoring/index.md](docs/plugin_authoring/index.md).

## Configuration

| Variable                 | Effect                                    |
|--------------------------|-------------------------------------------|
| `CV_CORPUS_SOURCE_STORE` | Override CAS root (default: platformdirs) |
| `CV_CORPUS_MODEL`        | Override default LLM model                |
| `ANTHROPIC_API_KEY`      | Anthropic provider auth                   |
| `OPENAI_API_KEY`         | OpenAI provider auth (stub)               |

## Status

Version 0.1.0 ships the schema, CLI surface, validator with 11
ordered checks, the default plugin set, CI matrix across
3 OS x 2 Python versions, and trusted-publishing release wiring.

The claim-scoring and target-aware generation phases are stubs;
contributions welcome.

## Contributing

Read [CONTRIBUTING.md](CONTRIBUTING.md) and
[code_of_conduct.md](code_of_conduct.md) first. Conventional commits
and SSH-signed commits are required for maintainers; contributors
can open PRs without signing and a maintainer will squash-merge.

## License

Apache 2.0. See [LICENSE](LICENSE).
