loomemDokumentacja
Dokumentacja

Dokumentacja API

Adres bazowy: http://localhost:3030 (lub adres wdrożonej instancji)

Uwierzytelnianie: gdy zmienna środowiskowa wskazana przez server.auth_token_env (domyślnie LOOMEM_AUTH_TOKEN) zawiera niepusty klucz API, wysyłaj Authorization: Bearer <token> do chronionych punktów końcowych, w tym /v1, /api, /admin i /mcp. /health, punkty wykrywania OAuth i ścieżki /oauth/* oraz statyczny panel znajdują się poza warstwą Bearer; punkty OAuth stosują własne kontrole protokołu. Bez klucza chronione punkty końcowe przyjmują żądania z uprawnieniami administratora. Serwer odmawia nasłuchiwania poza interfejsem lokalnym bez klucza, chyba że jawnie ustawiono LOOMEM_ALLOW_UNAUTH=1.

Gdy nie podano stream, dane są odczytywane i zapisywane w domyślnym strumieniu __user_default__.


Przechowywanie

POST /v1/store

Zapisz fragment pamięci.

Żądanie:

{
  "content": "User prefers dark mode in all tools",
  "stream": "100",
  "level": 0,
  "metadata": { "source": "user-stated" },
  "user_id": "alice",
  "app_id": "claude"
}
Pole Typ Wymagane Domyślnie Opis
content string tak — Tekst pamięci (1–1 mln znaków)
stream string nie __user_default__ Identyfikator przestrzeni nazw
level int nie 0 Poziom pamięci (0 = surowy, 1 = skonsolidowany)
metadata object nie null Własne metadane JSON
user_id string nie null Identyfikator twórcy
app_id string nie null Identyfikator aplikacji

Odpowiedź:

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "stored"
}

Efekty uboczne: - Oczyszczanie przed zapisem (usuwanie HTML, wykrywanie wstrzyknięć instrukcji) - Redakcja danych osobowych (telefony, e-maile, PESEL, słowa z listy blokad) - Ekstrakcja encji (słownik i kolejka LLM) - Generowanie embeddingów (kolejka asynchroniczna) - Indeksowanie Tantivy - Uzupełnianie grafu (w obrębie strumienia) - Obliczanie zaskoczenia (korekta ważności) - Wykrywanie sprzeczności z istniejącymi wspomnieniami

Ekstrakcja wiedzy z pełnych transkrypcji rozmów za pomocą LLM jest dostępna przez narzędzie memory_ingest MCP — zobacz Opis narzędzi MCP.


POST /v1/search

Wyszukiwanie hybrydowe we wszystkich poziomach pamięci.

Żądanie:

{
  "query": "What IDE does the user prefer?",
  "top_k": 5,
  "stream": "100",
  "date_from": "2026-01-01",
  "date_to": "2026-04-03",
  "trace": true,
  "dry_run": false
}
Pole Typ Wymagane Domyślnie Opis
query string tak — Zapytanie wyszukiwania
top_k int nie 10 Maksymalna liczba wyników
stream string nie __user_default__ Filtr przestrzeni nazw
streams string[] nie null Wyszukiwanie w wielu przestrzeniach nazw
date_from string nie null Dolna granica daty ISO
date_to string nie null Górna granica daty ISO
entity string nie null Filtr według nazwy encji
trace bool nie false Dołącz informacje śledzenia diagnostycznego
dry_run bool nie false Pomiń automatyczne zwiększenie ważności i śledzenie dostępu
valid_at int (sekundy Unix) nie null Dwuczasowe wyszukiwanie historyczne: zwróć tylko fragmenty, których przedział [valid_from, valid_until] obejmuje ten znacznik czasu. Otwarte granice (None) są nieograniczone po danej stronie.
include_superseded bool nie false Uwzględnij starsze wersje
fact_type string nie null Filtr: preference, project, fact
subject string nie null Filtr według encji będącej podmiotem
min_confidence f64 nie null Minimalna pewność ekstrakcji

Odpowiedź:

{
  "results": [
    {
      "chunk_id": "abc-123",
      "content": "User switched from VSCode to Cursor (reason: speed)",
      "score_final": 0.87,
      "trace_info": {
        "level": "L1",
        "source": "consolidation",
        "is_latest": true,
        "created_at": 1743638400,
        "memory_type": "static",
        "importance": 1.2,
        "access_count": 3,
        "version": 2,
        "superseded_by": null
      }
    }
  ],
  "trace_metadata": {
    "total_results_before_topk": 42,
    "dedup_removed": 3,
    "search_latency_us": 1200,
    "query_complexity": "medium"
  }
}

Obiekt evidence (eksperymentalny, opcjonalny): gdy [search] evidence_fields = true w config.toml, każdy wynik (świeży lub z pamięci podręcznej) zawiera dodatkowy klucz evidence. Przy wyłączonej fladze klucz jest całkowicie pomijany, więc domyślne odpowiedzi się nie zmieniają. Obiekt ma dokładnie siedem kluczy, wszystkie są zawsze obecne; nieznana wartość to null, nigdy data zastępcza.

"evidence": {
  "author": "user",
  "conversation_date": "2026-04-02",
  "event_date": "2026-03-26",
  "event_date_provenance": "resolved",
  "source_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "byte_start": 0,
  "byte_end": 142
}
Klucz Typ Opis
author string? Znormalizowana rola autora: user, assistant, system lub tool. Każda inna wartość (imię i nazwisko, dowolny tekst) to null
conversation_date string? Data rozmowy (YYYY-MM-DD), w zapisanej postaci
event_date string? Data opisanego zdarzenia (YYYY-MM-DD), w postaci uzyskanej z ekstrakcji. Zwracane są tylko poprawne kalendarzowo daty ISO
event_date_provenance string? resolved gdy silnik zapisał wskazówkę czasową, na podstawie której ustalono datę, unknown w przeciwnym razie; null dokładnie wtedy, gdy event_date wynosi null. explicit jest zarezerwowane i obecnie nie jest zwracane
source_id string? Kanoniczny fragment źródłowy, z którego wycięto lub wyekstrahowano tę pamięć
byte_start, byte_end int? Zakres bajtów fragmentu wewnątrz źródła (zobacz [fragments]); oba pola są ustawione albo oba mają wartość null

Odrzucenia na etapach (żądania ze śledzeniem): przy trace: true, trace_metadata zawiera także rejections — jeden wpis dla każdego kandydata usuniętego między etapami po rankingu objętymi śledzeniem — obok istniejących migawek etapów evidence. stage oznacza pierwszy etap, na którym nie ma danego identyfikatora (after_soft_delete, after_filters_and_dedup lub response); reason przyjmuje jedną z wartości soft_deleted, event_date_out_of_range, bitemporal_out_of_range, superseded, extraction_meta_missing, fact_type_filter, subject_filter, min_confidence, content_prefix_dedup, aggregation_subject_dedup, source_agent_filter, truncated_top_k, operation_finalization. Migawka response jest zapisywana po finalizacji operacji i końcowej kontroli daty zdarzenia, więc jej identyfikatory i kolejność odpowiadają zwróconym wynikom wyszukiwania. Rekord przywrócony do końcowej odpowiedzi nie jest wymieniany jako odrzucony; operation_finalization oznacza wynik główny wyparty przez politykę operacji. Nazwy czterech etapów evidence i ich kolejność pozostają bez zmian. Przycinanie MCP według max_context_tokens następuje po etapach objętych śledzeniem, więc usunięty w ten sposób wynik nie jest tu wymieniany.

"trace_metadata": {
  "rejections": [
    { "chunk_id": "def-456", "stage": "after_filters_and_dedup", "reason": "superseded" },
    { "chunk_id": "ghi-789", "stage": "response", "reason": "truncated_top_k" }
  ]
}

POST /v1/context-pack

Pakowanie kontekstu do umieszczenia w prompcie systemowym. Składa okno kontekstu z profilu, istotnych wspomnień i ostatniej aktywności w ramach limitu tokenów.

Żądanie:

{
  "query": "working on dashboard project",
  "stream": "100",
  "budget_tokens": 2000,
  "sections": ["profile", "relevant", "recent"]
}
Pole Typ Domyślnie Opis
query string null Temat przewodni
stream string __user_default__ Przestrzeń nazw
budget_tokens int 4000 Maksymalna liczba tokenów w odpowiedzi
sections string[] wszystkie Sekcje do uwzględnienia

Podział budżetu tokenów między sekcje: - profile: 20% budżetu - relevant: 50% budżetu - recent: 30% budżetu

Odpowiedź:

{
  "context": "## Profile\nUser is a software engineer...\n\n## Relevant\n...\n\n## Recent\n...",
  "sources": [
    { "chunk_id": "abc-123", "score": 0.87, "section": "relevant" }
  ],
  "total_tokens": 1856,
  "sections_included": ["profile", "relevant", "recent"],
  "sections_truncated": []
}

Zarządzanie pamięcią

POST /v1/delete

Usuń jeden fragment według identyfikatora.

{ "id": "abc-123" }

Odpowiedź: { "status": "deleted", "id": "abc-123" }

DELETE /api/memories/{id}

Usuwanie zgodne z REST. Opcjonalny parametr zapytania ?ns=<namespace>.

Odpowiedź: { "deleted": true, "id": "abc-123" }

GET /api/memories/{id}

Zwraca jeden element pamięci (id, content, layer, confidence, decay, event_date, created_at, category, entity_ids, version, is_latest, superseded_by, source_stream, source, source_agent). Dla nieznanych lub miękko usuniętych identyfikatorów zwraca 404; osoby bez uprawnień administratora mogą czytać tylko fragmenty we własnym strumieniu.

Gdy [search] evidence_fields = true, element zawiera również taki sam dodatkowy obiekt evidence jak wynik /v1/search (zobacz powyżej). Punkt końcowy listy w panelu go nie zawiera.


POST /v1/purge-namespace

Usuń wszystkie fragmenty w strumieniu.

{
  "stream": "100",
  "dry_run": true,
  "confirmed": false
}

Odpowiedź:

{
  "status": "ok",
  "stream": "100",
  "dry_run": true,
  "deleted_count": 42,
  "deleted_ids": ["abc-123", "def-456", "..."]
}

Ustaw dry_run: false i confirmed: true, aby faktycznie usunąć dane.


Graf

GET /v1/graph/entity/{name}?stream={stream_id}

Pobierz węzeł encji wraz z krawędziami i odwołaniami do fragmentów. Wymaga parametru stream — graf jest izolowany w obrębie strumienia.

{
  "entity": {
    "id": "ent-123",
    "name": "Cursor",
    "type": "TECHNOLOGY",
    "aliases": ["cursor IDE"],
    "chunk_count": 2
  },
  "neighbors": [
    { "entity": "Alice", "entity_type": "PERSON", "relation": "uses", "direction": "incoming" }
  ],
  "chunk_ids": ["abc-123", "def-456"]
}

GET /v1/graph/stats

{
  "total_entities": 42,
  "total_edges": 87,
  "avg_chunks_per_entity": 3.2
}

POST /v1/build-graph

Odbuduj graf encji ze wszystkich zapisanych encji. Przydatne po wsadowym zapisie.

POST /v1/extract-entities

Uruchom uzupełnianie ekstrakcji encji przez LLM dla fragmentów, w których jej brakuje. Operacja działa asynchronicznie.


Synteza

Historia wersji fragmentu jest dostępna przez narzędzie memory_history MCP; zsyntetyzowany profil użytkownika przez narzędzie memory_profile MCP. Zobacz Opis narzędzi MCP.

GET /v1/generate-memory-md

Wygeneruj propozycję MEMORY.md na podstawie najwyżej ocenionych fragmentów.

{
  "proposal": "# Memory\n\n## Identity\n- Software engineer...\n\n## Preferences\n...",
  "metadata": { "chunks_considered": 200, "sections": 15 }
}

Konsolidacja i utrzymanie

POST /v1/dream

Uruchom konsolidację dream w bieżącym strumieniu.

{
  "stream": "100",
  "chunks_processed": 50,
  "groups_found": 12,
  "facts_merged": 8,
  "contradictions_resolved": 2,
  "cost_usd": 0.04,
  "duration_ms": 3200
}

Analiza jakości pamięci jest dostępna przez narzędzie memory_reflect MCP.

POST /v1/boost

Zwiększ ważność fragmentu do 1,5.

{ "id": "abc-123" }

POST /v1/embed-missing

Uzupełnij embeddingi fragmentów, które ich nie mają.

{
  "status": "ok",
  "total_missing": 15,
  "embedded": 15,
  "failed": 0
}

POST /v1/retag-all

Ponownie wyodrębnij encje we wszystkich fragmentach.

POST /v1/score-all

Ponownie oblicz oceny ważności wszystkich fragmentów na podstawie podobieństwa embeddingów.

POST /v1/re-embed-all

Ponownie wygeneruj wszystkie embeddingi (przydatne przy zmianie dostawcy).

POST /v1/reset-importance

Przywróć wartości domyślne wszystkim skumulowanym automatycznym zwiększeniom ważności.

POST /v1/reset-backfill

Wyczyść znaczniki ekstrakcji encji przez LLM, aby umożliwić ponowne przetworzenie.


Administracja

GET /v1/status

Stan silnika i statystyki.

{
  "status": "ok",
  "uptime_secs": 86400,
  "config_summary": {
    "vector_enabled": true,
    "tantivy_enabled": true,
    "scheduler_enabled": true,
    "rocksdb_keys": 311,
    "tantivy_docs": 115,
    "embeddings_count": 112
  }
}

GET /v1/namespaces

{
  "namespaces": {
    "personal": "100",
    "work": "110"
  }
}

GET /v1/whoami

Zwraca kontekst uwierzytelnienia bieżącego klienta (aktywny strumień, rolę i dostępne strumienie).

GET /health

Kontrola dostępności. Uwierzytelnianie nie jest wymagane.

{ "status": "ok" }

Pamięć kontekstowa

POST /v1/ambient zwraca niewielki zestaw fragmentów pamięci zawierających fakty, ograniczony budżetem tokenów, do umieszczenia w kontekście agenta na początku tury. Zobacz kontrakt punktu końcowego ambient.


Procesy działające w tle

POST /admin/workers/pause

Wstrzymaj wszystkie procesy działające w tle (konsolidację, wygaszanie, kompaktowanie, kopie zapasowe, grupowanie, usuwanie i statystyki). Przydatne podczas ewaluacji wymagających niezmiennej bazy danych.

Wymaga tokenu administratora.

Odpowiedź:

{
  "paused": true,
  "message": "All workers paused"
}

POST /admin/workers/resume

Wznów wszystkie procesy działające w tle.

Odpowiedź:

{
  "paused": false,
  "message": "All workers resumed"
}

GET /admin/workers/status

Sprawdź, czy procesy są wstrzymane.

Odpowiedź:

{
  "paused": false
}

Stan wstrzymania nie jest zachowywany po restarcie serwera — procesy uruchamiają się automatycznie przy starcie.


Punkt końcowy MCP

POST /mcp

Punkt końcowy MCP JSON-RPC 2.0. Korzystają z niego Claude Desktop, konektory claude.ai i inne klienty MCP. Serwer identyfikuje się jako loomem-memory.

Zobacz Opis narzędzi MCP aby poznać dostępne narzędzia memory_*.

Punkty końcowe OAuth

Do autoryzacji zdalnego konektora MCP:

POST  /oauth/register      Dynamic Client Registration (RFC 7591)
GET   /oauth/authorize      Authorization page (user enters API key)
POST  /oauth/authorize      Submit authorization
POST  /oauth/token          Exchange code for access token
Loomem · Apache-2.0Edytuj na GitHubie