Metadata-Version: 2.4
Name: seren-meninges
Version: 0.0.1
Summary: The connective tissue of the Seren brain: shared token resolution, config, auth, version, and viewer shell.
License: GPL-3.0-or-later
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: pyyaml>=6
Requires-Dist: starlette>=0.37
Provides-Extra: keyring
Requires-Dist: keyring>=24; extra == "keyring"
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Dynamic: license-file

# SerenMeninges

The connective tissue of the Seren brain — the shared core for **SerenMemory**,
**SerenLoci**, and **SerenCorpusCallosum**. One installable package so the
things that *must* be identical across the three are identical by construction:

- **`resolve_token()`** — credentials resolution. Config holds a *pointer* to a
  secret (env var name, OS-keychain ref) or, as a deliberate escape hatch, an
  inline literal. Never the secret in plaintext unless you choose it.
- **`ServerConfig` / `TlsConfig`** + a lenient yaml/env loader.
- **`get_version()`** — the one version-getter.
- **`bearer_auth_middleware()`** — one constant-time bearer-auth implementation.
- **`render_shell()`** — the viewer's shared shell + design tokens (leaves keep
  their own tabs).

The governing rule: **core holds contracts and mechanisms, never anything
redesign-prone.** See [`../SPEC.md`](../SPEC.md) for the full design, the
inbound/outbound token symmetry, the version-coupling contract, and the
guardrail list of what deliberately stays in the leaf repos.

> Skeleton status: `credentials`, `version`, and `config` are real and
> smoke-tested; `auth` and `viewer` are real-shaped starting points to test
> during the build pass.

## License

GPL-3.0-or-later.
