Metadata-Version: 2.5
Name: nocturne-memory
Version: 0.1.12
Summary: NOCTURNE Memory Palace service
Project-URL: Homepage, https://github.com/Nate0-1999/nocturne
Project-URL: Source, https://github.com/Nate0-1999/nocturne-memory
Requires-Python: <3.13,>=3.12
Requires-Dist: alembic<2,>=1.13
Requires-Dist: asyncpg<1,>=0.29
Requires-Dist: fastapi<1,>=0.115
Requires-Dist: httpx<1,>=0.27
Requires-Dist: pgvector<1,>=0.3
Requires-Dist: pydantic-settings<3,>=2
Requires-Dist: pydantic<3,>=2
Requires-Dist: sqlalchemy[asyncio]<3,>=2
Requires-Dist: tiktoken<1,>=0.9
Requires-Dist: uvicorn[standard]<1,>=0.30
Provides-Extra: dev
Requires-Dist: pytest-asyncio<1,>=0.24; extra == 'dev'
Requires-Dist: pytest<9,>=8; extra == 'dev'
Requires-Dist: ruff<1,>=0.9; extra == 'dev'
Requires-Dist: testcontainers[postgres]<5,>=4.8; extra == 'dev'
Description-Content-Type: text/markdown

# nocturne-memory

`nocturne-memory` is NOCTURNE's Memory Palace service and migration package. It
is released in lockstep as a dependency of the public `nocturne-harness`
distribution.

The service owns the extraction consent boundary at `/v1/extractions` and
`/v1/approval-queue`. Pending units use the internal `candidate` lifecycle
state and are excluded from ordinary memory listing, search, and injection.
Queue decisions are append-only; approval enacts the proposed verdict through
revisioned head changes and typed lineage edges, while denial revision-
tombstones the candidate as rejected.

Injection treats memory room as a versioned share of the active model context
window. The share is a ceiling, not a quota: unused room remains available to
conversation, while pinned memories always inject and report any overflow in
the prepare allocation. Share and threshold join the ordinary replay learner
after 100 authentic, hygiene-filtered owner dispositions; every learned
generation remains proposed until the owner activates it.

New users should start at the [NOCTURNE quickstart](https://github.com/Nate0-1999/nocturne)
and install `nocturne-harness`; they do not need to install this package separately.
