Metadata-Version: 2.4
Name: stigmem-node
Version: 0.9.0a1
Summary: Stigmem reference node — single-host production implementation
Author-email: Eidetic-Labs <oss@eidetic-labs.ai>
License: Apache-2.0
Requires-Python: >=3.11
Requires-Dist: canonicaljson>=2.0
Requires-Dist: fastapi>=0.115
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic-settings>=2.0
Requires-Dist: pydantic>=2.11
Requires-Dist: pyjwt[crypto]>=2.8
Requires-Dist: uvicorn[standard]>=0.34
Provides-Extra: conformance
Requires-Dist: pgvector>=0.2.0; extra == 'conformance'
Requires-Dist: psycopg2-binary>=2.9; extra == 'conformance'
Requires-Dist: pytest>=8.0; extra == 'conformance'
Provides-Extra: dev
Requires-Dist: httpx>=0.27; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Provides-Extra: embed-openai
Requires-Dist: openai>=1.0; extra == 'embed-openai'
Provides-Extra: encryption
Requires-Dist: argon2-cffi>=23.1; extra == 'encryption'
Provides-Extra: libsql
Requires-Dist: libsql-experimental>=0.0.1; extra == 'libsql'
Provides-Extra: observability
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.24; extra == 'observability'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.24; extra == 'observability'
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'observability'
Requires-Dist: prometheus-client>=0.20; extra == 'observability'
Provides-Extra: postgres
Requires-Dist: pgvector>=0.2.0; extra == 'postgres'
Requires-Dist: psycopg2-binary>=2.9; extra == 'postgres'
Provides-Extra: sqlcipher
Requires-Dist: sqlcipher3>=0.5.0; extra == 'sqlcipher'
Provides-Extra: sqlite-vec
Requires-Dist: sqlite-vec>=0.1.0; extra == 'sqlite-vec'
Description-Content-Type: text/markdown

# Stigmem Reference Node

Single-host Stigmem node implementing [spec v0.8-draft](../spec/stigmem-spec-v0.8-draft.md). Reference implementation.

## Quick start

```bash
# install
pip install .

# run (auth disabled, local db)
stigmem-node

# run with auth
STIGMEM_AUTH_REQUIRED=true STIGMEM_DB_PATH=./data/stigmem.db stigmem-node
```

Default port: **8765**. Override with `STIGMEM_PORT`.

## Configuration

All settings via environment variables (prefix `STIGMEM_`):

| Variable              | Default                  | Description |
|-----------------------|--------------------------|-------------|
| `STIGMEM_DB_PATH`      | `stigmem.db`              | SQLite file path |
| `STIGMEM_HOST`         | `0.0.0.0`                | Bind host |
| `STIGMEM_PORT`         | `8765`                   | Bind port |
| `STIGMEM_NODE_URL`     | `http://localhost:8765`  | Canonical URL for `/.well-known/stigmem` |
| `STIGMEM_AUTH_REQUIRED`| `false`                  | Enforce API-key auth |
| `STIGMEM_LOG_LEVEL`    | `info`                   | uvicorn log level |

## API

| Route | Description |
|-------|-------------|
| `POST /v1/facts` | Assert a fact (spec §5.1) |
| `GET /v1/facts` | Query facts (spec §5.2) |
| `GET /.well-known/stigmem` | Node metadata (spec §5.3) |
| `GET /healthz` | Health check |
| `GET /docs` | OpenAPI UI |

## Running tests

```bash
cd stigmem/node
pip install ".[dev]"
pytest
```

## Docker

```bash
docker build -t stigmem-node .
docker run -p 8765:8765 -v $(pwd)/data:/data stigmem-node
```
