Files
mempalace/website/reference/api-reference.md
T
Igor Lins e Silva 0cb9ee5c58 fix(website): correct false claims and stale numbers in live docs
- Landing: replace nonexistent `mempalace remember` CLI demo with real
  `mempalace mine ./notes`
- Landing: soften unverifiable absolutes ("forever available",
  "100% recall by design", "<50 ms", "90%+ compression",
  "two-thousand-year-old", "tens of thousands of entries")
- MCP tool count: 19 → 29 across mcp-integration, claude-code, openclaw,
  and modules; expand tool overview with Drawers, Tunnels, and System
  categories to match mcp_server.py
- Wake-up token range: ~170–900 → ~600–900 in cli/api-reference/python-api
  to match cli.py help text and concept docs
- Gemini CLI: move `--scope user` before target name and add `--`
  separator so `-m mempalace.mcp_server` isn't parsed as Gemini flags
2026-04-16 23:31:35 -03:00

247 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# API Reference
Comprehensive parameter-level documentation for all public Python APIs.
## `mempalace.searcher`
### `search(query, palace_path, wing=None, room=None, n_results=5)`
CLI-oriented search that prints results to stdout.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | `str` | — | Search query text |
| `palace_path` | `str` | — | Path to ChromaDB palace directory |
| `wing` | `str` | `None` | Filter by wing name |
| `room` | `str` | `None` | Filter by room name |
| `n_results` | `int` | `5` | Maximum number of results |
**Raises:** `SearchError` if palace not found or query fails.
---
### `search_memories(query, palace_path, wing=None, room=None, n_results=5) → dict`
Programmatic search returning a dict. Used by the MCP server.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | `str` | — | Search query text |
| `palace_path` | `str` | — | Path to ChromaDB palace directory |
| `wing` | `str` | `None` | Filter by wing name |
| `room` | `str` | `None` | Filter by room name |
| `n_results` | `int` | `5` | Maximum number of results |
**Returns:**
```python
{
"query": str,
"filters": {"wing": str | None, "room": str | None},
"results": [
{
"text": str, # verbatim drawer content
"wing": str, # wing name
"room": str, # room name
"source_file": str, # original file basename
"similarity": float, # 0.0 to 1.0
}
]
}
```
On error: `{"error": str, "hint": str}`
---
## `mempalace.layers`
### `class Layer0(identity_path=None)`
Identity layer (~50 tokens). Reads from `~/.mempalace/identity.txt`.
| Method | Returns | Description |
|--------|---------|-------------|
| `render()` | `str` | Identity text or default message |
| `token_estimate()` | `int` | Approximate token count (`len(text) // 4`) |
---
### `class Layer1(palace_path=None, wing=None)`
Essential story layer (~500800 tokens). Auto-generated from top drawers.
| Attribute | Type | Description |
|-----------|------|-------------|
| `MAX_DRAWERS` | `int` | Max moments in wake-up (15) |
| `MAX_CHARS` | `int` | Hard cap on L1 text (3200) |
| Method | Returns | Description |
|--------|---------|-------------|
| `generate()` | `str` | Compact L1 text grouped by room |
---
### `class Layer2(palace_path=None)`
On-demand retrieval layer (~200500 tokens per call).
| Method | Parameters | Returns |
|--------|-----------|---------|
| `retrieve(wing, room, n_results=10)` | Wing/room filters | Formatted drawer text |
---
### `class Layer3(palace_path=None)`
Deep semantic search layer (unlimited depth).
| Method | Parameters | Returns |
|--------|-----------|---------|
| `search(query, wing=None, room=None, n_results=5)` | Query + optional filters | Formatted result text |
| `search_raw(query, wing=None, room=None, n_results=5)` | Query + optional filters | List of result dicts |
---
### `class MemoryStack(palace_path=None, identity_path=None)`
Unified 4-layer interface.
| Method | Parameters | Returns | Description |
|--------|-----------|---------|-------------|
| `wake_up(wing=None)` | Optional wing | `str` | L0 + L1 context (~600900 tokens) |
| `recall(wing, room, n_results=10)` | Filters | `str` | L2 on-demand retrieval |
| `search(query, wing, room, n_results=5)` | Query + filters | `str` | L3 deep search |
| `status()` | — | `dict` | All layer status info |
---
## `mempalace.knowledge_graph`
### `class KnowledgeGraph(db_path=None)`
Default path: `~/.mempalace/knowledge_graph.sqlite3`
#### Write Methods
| Method | Parameters | Returns | Description |
|--------|-----------|---------|-------------|
| `add_entity(name, entity_type='unknown', properties=None)` | Name, type, props dict | `str` (entity ID) | Add or update entity node |
| `add_triple(subject, predicate, obj, valid_from, valid_to, confidence, source_closet, source_file)` | See below | `str` (triple ID) | Add relationship triple |
| `invalidate(subject, predicate, obj, ended=None)` | Entity names, end date | — | Mark relationship as ended |
**`add_triple` parameters:**
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `subject` | `str` | — | Source entity name |
| `predicate` | `str` | — | Relationship type |
| `obj` | `str` | — | Target entity name |
| `valid_from` | `str` | `None` | Start date (YYYY-MM-DD) |
| `valid_to` | `str` | `None` | End date |
| `confidence` | `float` | `1.0` | Confidence score 0.01.0 |
| `source_closet` | `str` | `None` | Link to verbatim memory |
| `source_file` | `str` | `None` | Original source file |
#### Query Methods
| Method | Parameters | Returns |
|--------|-----------|---------|
| `query_entity(name, as_of=None, direction='outgoing')` | Entity name, date filter, direction | `list[dict]` |
| `query_relationship(predicate, as_of=None)` | Relationship type, date filter | `list[dict]` |
| `timeline(entity_name=None)` | Optional entity filter | `list[dict]` |
| `stats()` | — | `dict` with entities, triples, predicates |
| `seed_from_entity_facts(entity_facts)` | Dict of entity facts | — |
**`query_entity` direction values:** `"outgoing"` (entity→?), `"incoming"` (?→entity), `"both"`
---
## `mempalace.palace_graph`
### `build_graph(col=None, config=None) → (nodes, edges)`
Build the palace graph from ChromaDB metadata.
**Returns:**
- `nodes`: `dict` of `{room: {wings: list, halls: list, count: int, dates: list}}`
- `edges`: `list` of `{room, wing_a, wing_b, hall, count}`
---
### `traverse(start_room, col=None, config=None, max_hops=2) → list`
BFS graph traversal from a room across wings.
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `start_room` | `str` | — | Room slug to start from |
| `max_hops` | `int` | `2` | Max connection depth |
**Returns:** `[{room, wings, halls, count, hop, connected_via}]` (max 50)
---
### `find_tunnels(wing_a=None, wing_b=None, col=None, config=None) → list`
Find rooms spanning multiple wings.
**Returns:** `[{room, wings, halls, count, recent}]` (max 50)
---
### `graph_stats(col=None, config=None) → dict`
**Returns:** `{total_rooms, tunnel_rooms, total_edges, rooms_per_wing, top_tunnels}`
---
## `mempalace.dialect`
### `class Dialect(entities=None, skip_names=None)`
| Parameter | Type | Description |
|-----------|------|-------------|
| `entities` | `dict[str, str]` | Full name → 3-letter code mapping |
| `skip_names` | `list[str]` | Names to skip (fictional characters, etc.) |
#### Class Methods
| Method | Parameters | Returns |
|--------|-----------|---------|
| `from_config(config_path)` | JSON file path | `Dialect` instance |
#### Instance Methods
| Method | Parameters | Returns | Description |
|--------|-----------|---------|-------------|
| `compress(text, metadata=None)` | Plain text + optional metadata dict | `str` | AAAK-formatted summary |
| `encode_entity(name)` | Entity name | `str \| None` | 3-letter entity code |
| `encode_emotions(emotions)` | List of emotion strings | `str` | Compact emotion codes |
| `compress_file(path, output=None)` | Zettel JSON path | `str` | Compress zettel file |
| `compress_all(dir, output=None)` | Zettel directory | `str` | Compress all zettels |
| `save_config(path)` | Output path | — | Save entity mappings |
| `compression_stats(original, compressed)` | Both texts | `dict` | Compression ratio stats |
#### Static Methods
| Method | Parameters | Returns |
|--------|-----------|---------|
| `count_tokens(text)` | Any text | `int` |
---
## `mempalace.config`
### `class MempalaceConfig()`
Reads from `~/.mempalace/config.json` and environment variables.
| Property | Type | Default | Description |
|----------|------|---------|-------------|
| `palace_path` | `str` | `~/.mempalace/palace` | ChromaDB storage path |
| `collection_name` | `str` | `mempalace_drawers` | ChromaDB collection name |
| Method | Description |
|--------|-------------|
| `init()` | Create config directory and default files |