40 lines
1.3 KiB
Markdown
40 lines
1.3 KiB
Markdown
# Architecture
|
|
|
|
`docforge` is split into four horizontal layers. Everything flows top to
|
|
bottom through the CLI.
|
|
|
|
## Loaders → Models
|
|
|
|
The `docforge/loaders` package wraps `griffe` to extract modules, functions,
|
|
classes, and Google-style docstring sections. Loaded data is normalized into
|
|
the object model under `docforge/models` (`Project`, `Module`, `DocObject`).
|
|
|
|
## Navigation
|
|
|
|
`docforge/nav` parses `docforge.nav.yml` specs (`NavSpec`, `Resolver`, and the
|
|
MkDocs nav emitter) and, since the wiki kind, derives wiki navigation from the
|
|
file structure via `build_wiki_nav`.
|
|
|
|
## Renderers
|
|
|
|
`docforge/renderers` turn model data into artifacts:
|
|
|
|
- `MkDocsRenderer` → `docs/lib/**` reference markdown
|
|
- `MCPRenderer` → `docs/mcp/**` structured documentation
|
|
|
|
## Servers
|
|
|
|
`docforge/servers` serves generated artifacts over live protocols:
|
|
|
|
- `MCPServer` → serves a pre-generated `docs/mcp/**` bundle through MCP
|
|
resources (`docs://index`, `docs://nav`, `docs://modules/{module}`)
|
|
|
|
## CLI
|
|
|
|
`docforge/cli` wires it all together:
|
|
|
|
- `commands.py` — the `build` command and its `--mkdocs` / `--api` / `--wiki`
|
|
/ `--mcp` modes
|
|
- `mkdocs_utils.py` — per-kind config generation (`docs/mkdocs.{lib,api,wiki}.yml`)
|
|
with navigation re-rooted to each kind's `docs_dir`
|
|
- `api_utils.py` — OpenAPI loading and API docs generation |