Metadata-Version: 2.4
Name: whitemagic
Version: 26.0.4
Summary: Legacy Gen-1 Python generation of WhiteMagic (v26, retired) — not the current product. The current WhiteMagic is the Rust v9 line: https://www.whitemagic.dev
Author: WhiteMagic Contributors
License-Expression: MIT
Project-URL: Homepage, https://www.whitemagic.dev
Project-URL: Migration, https://www.whitemagic.dev/whitemagic/guide
Project-URL: Documentation, https://github.com/lbailey94/whitemagic/blob/main/docs/QUICKSTART.md
Project-URL: Repository, https://github.com/lbailey94/whitemagic
Project-URL: Changelog, https://github.com/lbailey94/whitemagic/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/lbailey94/whitemagic/issues
Keywords: whitemagic,legacy,deprecated,python,memory,mcp
Classifier: Development Status :: 7 - Inactive
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: click>=8.1.7
Requires-Dist: numpy>=1.24.0
Requires-Dist: pydantic<3.0.0,>=2.0.0
Requires-Dist: pyyaml>=6.0.0
Provides-Extra: embeddings
Requires-Dist: sentence-transformers>=2.2.0; extra == "embeddings"
Requires-Dist: torch<3.0.0,>=2.0.0; extra == "embeddings"
Requires-Dist: scipy>=1.10.0; extra == "embeddings"
Requires-Dist: faiss-cpu>=1.7.4; extra == "embeddings"
Provides-Extra: terminal
Provides-Extra: cli
Requires-Dist: rich>=13.0.0; extra == "cli"
Provides-Extra: tui
Requires-Dist: textual>=0.50.0; extra == "tui"
Provides-Extra: mcp
Requires-Dist: fastmcp>=0.4.1; extra == "mcp"
Requires-Dist: fastembed>=0.2.0; extra == "mcp"
Provides-Extra: api
Requires-Dist: fastapi>=0.104.0; extra == "api"
Requires-Dist: uvicorn[standard]>=0.24.0; extra == "api"
Requires-Dist: python-multipart>=0.0.6; extra == "api"
Requires-Dist: email-validator>=2.0.0; extra == "api"
Requires-Dist: httpx>=0.25.0; extra == "api"
Provides-Extra: db
Requires-Dist: sqlalchemy>=2.0.0; extra == "db"
Requires-Dist: aiosqlite>=0.19.0; extra == "db"
Requires-Dist: asyncpg>=0.29.0; extra == "db"
Requires-Dist: alembic>=1.13.0; extra == "db"
Provides-Extra: encrypt
Requires-Dist: sqlcipher3>=0.5.0; extra == "encrypt"
Provides-Extra: cache
Requires-Dist: redis>=5.0.1; extra == "cache"
Provides-Extra: net
Requires-Dist: aiohttp>=3.9.0; extra == "net"
Requires-Dist: websockets>=12.0; extra == "net"
Requires-Dist: aiofiles>=23.2.1; extra == "net"
Requires-Dist: requests>=2.31.0; extra == "net"
Requires-Dist: urllib3<3.0.0,>=2.0.0; extra == "net"
Requires-Dist: chardet>=5.0.0; extra == "net"
Provides-Extra: openai
Requires-Dist: openai>=1.3.0; extra == "openai"
Requires-Dist: tiktoken>=0.5.0; extra == "openai"
Provides-Extra: auth
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == "auth"
Provides-Extra: trust
Requires-Dist: xrpl-py>=3.0.0; extra == "trust"
Requires-Dist: PyNaCl>=1.5.0; extra == "trust"
Provides-Extra: numeric
Requires-Dist: numpy>=1.24.0; extra == "numeric"
Requires-Dist: scipy>=1.10.0; extra == "numeric"
Provides-Extra: graph
Requires-Dist: networkx>=3.0; extra == "graph"
Provides-Extra: search
Requires-Dist: whitemagic[numeric]; extra == "search"
Requires-Dist: hnswlib>=0.8.0; extra == "search"
Provides-Extra: viz
Requires-Dist: whitemagic[numeric]; extra == "viz"
Requires-Dist: umap-learn>=0.5.0; extra == "viz"
Requires-Dist: scikit-learn>=1.3.0; extra == "viz"
Provides-Extra: opt
Requires-Dist: cvxpy>=1.4.0; extra == "opt"
Provides-Extra: offline
Requires-Dist: whitemagic[embeddings]; extra == "offline"
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
Requires-Dist: whitemagic[mcp]; extra == "dev"
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
Requires-Dist: pytest-timeout>=2.2.0; extra == "dev"
Requires-Dist: pytest-xdist>=3.5.0; extra == "dev"
Requires-Dist: flaky>=3.7.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: isort>=5.13.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.6; extra == "dev"
Requires-Dist: maturin>=1.3.0; extra == "dev"
Requires-Dist: nbconvert>=7.16.6; extra == "dev"
Requires-Dist: fastmcp>=0.4.1; extra == "dev"
Provides-Extra: watcher
Requires-Dist: watchdog>=3.0.0; extra == "watcher"
Provides-Extra: vision
Requires-Dist: opencv-python>=4.8.0; extra == "vision"
Requires-Dist: pytesseract>=0.3.10; extra == "vision"
Requires-Dist: Pillow>=10.0.0; extra == "vision"
Provides-Extra: dashboard
Requires-Dist: flask>=3.0.0; extra == "dashboard"
Requires-Dist: flask-cors>=4.0.0; extra == "dashboard"
Provides-Extra: heavy
Requires-Dist: sentence-transformers>=2.2.0; extra == "heavy"
Requires-Dist: torch<3.0.0,>=2.0.0; extra == "heavy"
Requires-Dist: scipy>=1.10.0; extra == "heavy"
Requires-Dist: faiss-cpu>=1.7.4; extra == "heavy"
Requires-Dist: numpy>=1.24.0; extra == "heavy"
Requires-Dist: networkx>=3.0; extra == "heavy"
Requires-Dist: hnswlib>=0.8.0; extra == "heavy"
Requires-Dist: umap-learn>=0.5.0; extra == "heavy"
Requires-Dist: scikit-learn>=1.3.0; extra == "heavy"
Provides-Extra: langchain
Requires-Dist: langchain>=0.1.0; extra == "langchain"
Provides-Extra: crewai
Requires-Dist: crewai>=0.1.0; extra == "crewai"
Provides-Extra: autogen
Requires-Dist: autogen-agentchat>=0.2.0; extra == "autogen"
Provides-Extra: pydantic-ai
Requires-Dist: pydantic-ai>=0.0.1; extra == "pydantic-ai"
Provides-Extra: adapters
Requires-Dist: langchain>=0.1.0; extra == "adapters"
Requires-Dist: crewai>=0.1.0; extra == "adapters"
Provides-Extra: lite
Requires-Dist: click>=8.1.7; extra == "lite"
Requires-Dist: pydantic<3.0.0,>=2.0.0; extra == "lite"
Requires-Dist: pyyaml>=6.0.0; extra == "lite"
Requires-Dist: fastmcp>=0.4.1; extra == "lite"
Requires-Dist: rich>=13.0.0; extra == "lite"
Provides-Extra: core
Requires-Dist: click>=8.1.7; extra == "core"
Requires-Dist: pydantic<3.0.0,>=2.0.0; extra == "core"
Requires-Dist: pyyaml>=6.0.0; extra == "core"
Requires-Dist: fastmcp>=0.4.1; extra == "core"
Requires-Dist: rich>=13.0.0; extra == "core"
Requires-Dist: sqlalchemy>=2.0.0; extra == "core"
Requires-Dist: aiosqlite>=0.19.0; extra == "core"
Requires-Dist: asyncpg>=0.29.0; extra == "core"
Requires-Dist: alembic>=1.13.0; extra == "core"
Requires-Dist: aiohttp>=3.9.0; extra == "core"
Requires-Dist: websockets>=12.0; extra == "core"
Requires-Dist: aiofiles>=23.2.1; extra == "core"
Requires-Dist: requests>=2.31.0; extra == "core"
Requires-Dist: urllib3<3.0.0,>=2.0.0; extra == "core"
Requires-Dist: chardet>=5.0.0; extra == "core"
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == "core"
Requires-Dist: xrpl-py>=3.0.0; extra == "core"
Requires-Dist: PyNaCl>=1.5.0; extra == "core"
Provides-Extra: heavy-tier
Requires-Dist: click>=8.1.7; extra == "heavy-tier"
Requires-Dist: pydantic<3.0.0,>=2.0.0; extra == "heavy-tier"
Requires-Dist: pyyaml>=6.0.0; extra == "heavy-tier"
Requires-Dist: fastmcp>=0.4.1; extra == "heavy-tier"
Requires-Dist: rich>=13.0.0; extra == "heavy-tier"
Requires-Dist: sqlalchemy>=2.0.0; extra == "heavy-tier"
Requires-Dist: aiosqlite>=0.19.0; extra == "heavy-tier"
Requires-Dist: asyncpg>=0.29.0; extra == "heavy-tier"
Requires-Dist: alembic>=1.13.0; extra == "heavy-tier"
Requires-Dist: aiohttp>=3.9.0; extra == "heavy-tier"
Requires-Dist: websockets>=12.0; extra == "heavy-tier"
Requires-Dist: aiofiles>=23.2.1; extra == "heavy-tier"
Requires-Dist: requests>=2.31.0; extra == "heavy-tier"
Requires-Dist: urllib3<3.0.0,>=2.0.0; extra == "heavy-tier"
Requires-Dist: chardet>=5.0.0; extra == "heavy-tier"
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == "heavy-tier"
Requires-Dist: xrpl-py>=3.0.0; extra == "heavy-tier"
Requires-Dist: PyNaCl>=1.5.0; extra == "heavy-tier"
Requires-Dist: sentence-transformers>=2.2.0; extra == "heavy-tier"
Requires-Dist: torch<3.0.0,>=2.0.0; extra == "heavy-tier"
Requires-Dist: scipy>=1.10.0; extra == "heavy-tier"
Requires-Dist: faiss-cpu>=1.7.4; extra == "heavy-tier"
Requires-Dist: numpy>=1.24.0; extra == "heavy-tier"
Requires-Dist: networkx>=3.0; extra == "heavy-tier"
Requires-Dist: hnswlib>=0.8.0; extra == "heavy-tier"
Requires-Dist: umap-learn>=0.5.0; extra == "heavy-tier"
Requires-Dist: scikit-learn>=1.3.0; extra == "heavy-tier"
Provides-Extra: full
Requires-Dist: aiosqlite>=0.19.0; extra == "full"
Requires-Dist: aiofiles>=23.2.1; extra == "full"
Requires-Dist: aiohttp>=3.9.0; extra == "full"
Requires-Dist: alembic>=1.13.0; extra == "full"
Requires-Dist: asyncpg>=0.29.0; extra == "full"
Requires-Dist: black>=23.0.0; extra == "full"
Requires-Dist: chardet>=5.0.0; extra == "full"
Requires-Dist: cvxpy>=1.4.0; extra == "full"
Requires-Dist: email-validator>=2.0.0; extra == "full"
Requires-Dist: faiss-cpu>=1.7.4; extra == "full"
Requires-Dist: fastapi>=0.104.0; extra == "full"
Requires-Dist: fastmcp>=0.4.1; extra == "full"
Requires-Dist: flask>=3.0.0; extra == "full"
Requires-Dist: flask-cors>=4.0.0; extra == "full"
Requires-Dist: httpx>=0.25.0; extra == "full"
Requires-Dist: isort>=5.13.0; extra == "full"
Requires-Dist: maturin>=1.3.0; extra == "full"
Requires-Dist: mypy>=1.0.0; extra == "full"
Requires-Dist: nbconvert>=7.16.6; extra == "full"
Requires-Dist: numpy>=1.24.0; extra == "full"
Requires-Dist: opencv-python>=4.8.0; extra == "full"
Requires-Dist: openai>=1.3.0; extra == "full"
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == "full"
Requires-Dist: Pillow>=10.0.0; extra == "full"
Requires-Dist: pytest>=7.0.0; extra == "full"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "full"
Requires-Dist: pytest-cov>=4.1.0; extra == "full"
Requires-Dist: pytest-timeout>=2.2.0; extra == "full"
Requires-Dist: pytesseract>=0.3.10; extra == "full"
Requires-Dist: redis>=5.0.1; extra == "full"
Requires-Dist: requests>=2.31.0; extra == "full"
Requires-Dist: rich>=13.0.0; extra == "full"
Requires-Dist: ruff>=0.1.6; extra == "full"
Requires-Dist: scipy>=1.10.0; extra == "full"
Requires-Dist: sentence-transformers>=2.2.0; extra == "full"
Requires-Dist: sqlalchemy>=2.0.0; extra == "full"
Requires-Dist: textual>=0.50.0; extra == "full"
Requires-Dist: tiktoken>=0.5.0; extra == "full"
Requires-Dist: torch<3.0.0,>=2.0.0; extra == "full"
Requires-Dist: urllib3<3.0.0,>=2.0.0; extra == "full"
Requires-Dist: uvicorn[standard]>=0.24.0; extra == "full"
Requires-Dist: watchdog>=3.0.0; extra == "full"
Requires-Dist: websockets>=12.0; extra == "full"
Requires-Dist: python-multipart>=0.0.6; extra == "full"
Requires-Dist: networkx>=3.0; extra == "full"
Requires-Dist: hnswlib>=0.8.0; extra == "full"
Requires-Dist: umap-learn>=0.5.0; extra == "full"
Requires-Dist: scikit-learn>=1.3.0; extra == "full"

# WhiteMagic 26.0.4 — legacy Python generation (retired)

> **This is the retired Gen-1 (Python) generation of WhiteMagic.** It stays
> installable and importable for pinned and legacy use, but it is **not the
> current product**. The current WhiteMagic is the **Rust v9 line**: a
> local-first memory and session-continuity server for AI agents, shipped as
> a single static binary behind one curated MCP surface.
>
> **Current WhiteMagic → https://www.whitemagic.dev** ·
> [Setup guide](https://www.whitemagic.dev/whitemagic/guide) ·
> [Releases](https://github.com/lbailey94/whitemagic/releases)

## If you arrived here looking for WhiteMagic

You are on the **legacy Python package** (`whitemagic` 26.x, Gen-1,
retired August 2026). Install the current line instead:

```bash
# one-line installer (Linux x86-64 install-gated; macOS and Windows binaries published)
curl -fsSL "https://www.whitemagic.dev/install.sh" | sh

# alternatives
npx whitemagic-mcp serve          # npm launcher
cargo install whitemagic          # crates.io
docker run -i lbailey94/whitemagic:9 serve
```

Then run `wm grimoire` to verify readiness and `wm connect --write` to wire
your MCP clients. The v9 line is one curated 9-tool MCP surface (`wm`,
`memory.*`, `session.*`) over a durable local store — not the 800+ tool
surface of this legacy generation.

## What this package still is

- The last Python implementation of WhiteMagic (Gen-1). It remains
  **installable and importable** so existing pins (`whitemagic==26.x`) and
  legacy scripts keep working.
- `pip install whitemagic[mcp]` still installs the legacy Python MCP server.
- **No new features, security fixes, or support are provided for this line.**
  It is frozen; existing behavior is preserved as-is.

## Migration notes

- **Python package → Rust binary.** The current line uses a different
  storage engine (LMDB + local indexes), so data migration from a Gen-1
  SQLite store is not automatic. Keep both installed side by side if you
  need the old data while starting fresh on v9.
- **The legacy `wm` console script was removed in 26.0.4** so a pip install
  cannot shadow the current `wm` binary. The legacy CLI entry point is
  `whitemagic`.
- Importing `whitemagic` emits a `DeprecationWarning`; the CLI prints a
  one-line notice on stderr. Set `WM_LEGACY_SUPPRESS=1` to silence both in
  test environments.

## Historical documentation

The 26.0.3 README (877 callable tools, 28 Gana meta-tools, 6D holographic
memory, 14 galaxies, Dharma governance, citta stream, MandalaOS
compartments, 7-language polyglot acceleration, Violet security pipeline)
described the Gen-1 feature set and is preserved in repository history:
<https://github.com/lbailey94/whitemagic>.

MIT licensed. Local-first. No telemetry.
