Skip to content

TypeScript API Reference

Main class for the cognitive memory system.

import { CognitiveMemory } from "cognitive-memory";
new CognitiveMemory(options: {
adapter: MemoryAdapter;
embeddingProvider: EmbeddingProvider;
userId: string;
config?: Partial<CognitiveMemoryConfig>;
})
ParameterTypeRequiredDescription
adapterMemoryAdapterYesStorage backend
embeddingProviderEmbeddingProviderYesEmbedding function
userIdstringYesUser/agent ID for scoping
configPartial<CognitiveMemoryConfig>NoOverride defaults

store(input: MemoryInput): Promise<string>

Section titled “store(input: MemoryInput): Promise<string>”

Store a new memory. Generates embedding, initializes cognitive metadata.

const id = await mem.store({
content: "User is allergic to peanuts",
memoryType: "semantic", // default: "semantic"
importance: 0.9, // default: config.defaultImportance
stability: 0.3, // default: config.defaultStability
metadata: { source: "chat" }, // optional
});

Returns the created memory ID.

retrieve(query: RetrievalQuery): Promise<SearchResponse>

Section titled “retrieve(query: RetrievalQuery): Promise<SearchResponse>”

Retrieve memories relevant to a query. Combines semantic similarity with retention weighting. Includes associative expansion by default.

const response = await mem.retrieve({
query: "what is the user allergic to?",
limit: 5, // default: 5
minRetention: 0.2, // default: config.minRetention
memoryTypes: ["semantic"], // optional filter
includeAssociations: true, // default: true
trace: false, // default: false
});
const results = response.results;
ParameterTypeDefaultDescription
tracebooleanfalseWhen true, the response includes a trace field with scoring breakdown and pipeline timing details

Returns a SearchResponse object containing a results array of ScoredMemory objects sorted by finalScore descending, and an optional trace field when tracing is enabled.

Side effects: strengthens retrieved memories (access count, stability, last accessed) and co-retrieval associations.

Get a memory by ID. Strengthens the memory on access.

const memory = await mem.get("abc-123");

queryMemories(filters: MemoryFilters): Promise<Memory[]>

Section titled “queryMemories(filters: MemoryFilters): Promise<Memory[]>”

Query memories with filters. Strengthens returned memories.

const memories = await mem.queryMemories({
memoryTypes: ["semantic", "episodic"],
minRetention: 0.5,
minImportance: 0.3,
limit: 20,
});

update(id: string, content: string): Promise<void>

Section titled “update(id: string, content: string): Promise<void>”

Update a memory’s content. Regenerates the embedding.

await mem.update("abc-123", "User moved from Portland to Seattle");

consolidate(): Promise<ConsolidationResult>

Section titled “consolidate(): Promise<ConsolidationResult>”

Run the consolidation process: identify fading memories, compress similar ones, clean up stale data.

const result = await mem.consolidate();
console.log(`Decayed: ${result.decayed.length}`);
console.log(`Compressed: ${result.compressed.length} groups`);
console.log(`Promotion candidates: ${result.promotionCandidates.length}`);
console.log(`Deleted: ${result.deleted}`);

Recompute and persist retention scores for all user memories. Useful before consolidation.

await mem.refreshRetentionScores();

link(sourceId: string, targetId: string, strength?: number): Promise<void>

Section titled “link(sourceId: string, targetId: string, strength?: number): Promise<void>”

Create or strengthen a link between two memories.

await mem.link("abc-123", "def-456", 0.7); // default strength: 0.5

interface Memory {
id: string;
userId: string;
content: string;
embedding: number[];
memoryType: MemoryType; // "episodic" | "semantic" | "procedural"
importance: number; // 0.0-1.0
stability: number; // 0.0-1.0
accessCount: number;
lastAccessed: number; // timestamp (ms)
retention: number; // 0.0-1.0 (cached)
createdAt: number; // timestamp (ms)
updatedAt: number; // timestamp (ms)
metadata?: Record<string, unknown>;
}
interface MemoryInput {
content: string;
memoryType?: MemoryType; // default: "semantic"
importance?: number; // default: config.defaultImportance
stability?: number; // default: config.defaultStability
metadata?: Record<string, unknown>;
}
interface RetrievalQuery {
query: string;
limit?: number; // default: 5
minRetention?: number; // default: config.minRetention
memoryTypes?: MemoryType[];
includeAssociations?: boolean; // default: true
trace?: boolean; // default: false
}
interface SearchResponse {
results: ScoredMemory[];
trace?: SearchTrace; // present when trace=true
}
interface SearchTrace {
stages: StageTrace[];
totalMs: number;
totalTokens: number; // sum of all prompt + completion tokens across stages
}
interface StageTrace {
name: string;
candidateCount: number;
survivorCount: number;
durationMs: number;
promptTokens: number; // LLM prompt tokens used (0 for non-LLM stages)
completionTokens: number; // LLM completion tokens used (0 for non-LLM stages)
}
interface ScoredMemory extends Memory {
relevanceScore: number; // cosine similarity
finalScore: number; // relevance * retention
}
interface MemoryLink {
sourceId: string;
targetId: string;
strength: number; // 0.0-1.0
createdAt: number;
updatedAt: number;
}
interface ConsolidationResult {
decayed: Array<{ id: string; retention: number }>;
compressed: Array<{
summaryId: string;
originalIds: string[];
count: number;
}>;
promotionCandidates: Array<{
id: string;
stability: number;
accessCount: number;
}>;
deleted: number;
}
interface CognitiveMemoryConfig {
userId: string;
defaultImportance?: number; // default: 0.5
defaultStability?: number; // default: 0.3
minRetention?: number; // default: 0.2
decayRates?: {
episodic?: number; // default: 30 (days)
semantic?: number; // default: 90 (days)
procedural?: number; // default: Infinity
};
}
interface EmbeddingProvider {
embed(text: string): Promise<number[]>;
}
interface MemoryFilters {
userId?: string;
memoryTypes?: MemoryType[];
minRetention?: number;
minImportance?: number;
createdAfter?: number; // timestamp
createdBefore?: number; // timestamp
limit?: number;
offset?: number;
}

import {
calculateRetention,
updateStability,
cosineSimilarity,
scoreImportance,
categorizeMemoryType,
extractTopics,
normalizeVector,
euclideanDistance,
BASE_DECAY_RATES,
} from "cognitive-memory";

calculateRetention(params: DecayParameters): number

Section titled “calculateRetention(params: DecayParameters): number”

Compute current retention for a memory.

updateStability(currentStability: number, daysSinceLastAccess: number): number

Section titled “updateStability(currentStability: number, daysSinceLastAccess: number): number”

Compute new stability after retrieval (spaced repetition).

cosineSimilarity(a: number[], b: number[]): number

Section titled “cosineSimilarity(a: number[], b: number[]): number”

Compute cosine similarity between two vectors.

Heuristic importance scoring based on text content.

categorizeMemoryType(text: string): MemoryType

Section titled “categorizeMemoryType(text: string): MemoryType”

Heuristic memory type classification.

extractTopics(text: string, maxTopics?: number): string[]

Section titled “extractTopics(text: string, maxTopics?: number): string[]”

Extract topic keywords from text.


import { InMemoryAdapter, MemoryAdapter } from "cognitive-memory";
import { PostgresAdapter } from "cognitive-memory/adapters/postgres";
import { JsonlAdapter } from "cognitive-memory/adapters/jsonl";

See Adapter specification for the full interface.