@danielsimonjr/memoryjs 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # MemoryJS
2
2
 
3
- [![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](https://github.com/danielsimonjr/memoryjs)
3
+ [![Version](https://img.shields.io/badge/version-1.2.0-blue.svg)](https://github.com/danielsimonjr/memoryjs)
4
4
  [![NPM](https://img.shields.io/npm/v/@danielsimonjr/memoryjs.svg)](https://www.npmjs.com/package/@danielsimonjr/memoryjs)
5
5
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)
7
7
 
8
8
  A **TypeScript knowledge graph library** for managing entities, relations, and observations with **advanced search capabilities**, **hierarchical organization**, and **multiple storage backends**.
9
9
 
10
- > **Core library** powering [@danielsimonjr/memory-mcp](https://www.npmjs.com/package/@danielsimonjr/memory-mcp). Provides 73 TypeScript files, ~29K lines of code, dual storage backends (JSONL/SQLite), and sophisticated search algorithms including BM25, TF-IDF, fuzzy, semantic, and hybrid search.
10
+ > **Core library** powering [@danielsimonjr/memory-mcp](https://www.npmjs.com/package/@danielsimonjr/memory-mcp). Provides **93 TypeScript files**, **~41K lines of code**, dual storage backends (JSONL/SQLite), sophisticated search algorithms (BM25, TF-IDF, fuzzy, semantic, hybrid), and a complete **Agent Memory System** for AI agents.
11
11
 
12
12
  ## Table of Contents
13
13
 
@@ -18,6 +18,7 @@ A **TypeScript knowledge graph library** for managing entities, relations, and o
18
18
  - [Storage Options](#storage-options)
19
19
  - [Search Capabilities](#search-capabilities)
20
20
  - [Graph Algorithms](#graph-algorithms)
21
+ - [Agent Memory System](#agent-memory-system)
21
22
  - [API Reference](#api-reference)
22
23
  - [Configuration](#configuration)
23
24
  - [Development](#development)
@@ -50,14 +51,15 @@ A **TypeScript knowledge graph library** for managing entities, relations, and o
50
51
 
51
52
  | Module | Files | Key Components |
52
53
  |--------|-------|----------------|
54
+ | `agent/` | 19 | AgentMemoryManager, SessionManager, DecayEngine, WorkingMemoryManager |
53
55
  | `core/` | 12 | EntityManager, GraphStorage, SQLiteStorage, TransactionManager |
54
56
  | `search/` | 29 | SearchManager, BM25Search, HybridScorer, VectorStore, QueryPlanner |
55
57
  | `features/` | 9 | IOManager, ArchiveManager, CompressionManager, StreamingExporter |
56
58
  | `utils/` | 18 | BatchProcessor, CompressedCache, WorkerPoolManager, MemoryMonitor |
57
- | `types/` | 2 | Entity, Relation, KnowledgeGraph interfaces |
59
+ | `types/` | 3 | Entity, Relation, AgentEntity, SessionEntity interfaces |
58
60
  | `workers/` | 2 | Levenshtein distance calculations |
59
61
 
60
- **Total:** 73 TypeScript files | ~29,000 lines of code | 558 exports
62
+ **Total:** 93 TypeScript files | ~41,000 lines of code | 657 exports | 91 classes | 216 interfaces
61
63
 
62
64
  ## Installation
63
65
 
@@ -353,6 +355,110 @@ await ctx.graphTraversal.dfs('startNode', (node) => {
353
355
  });
354
356
  ```
355
357
 
358
+ ## Agent Memory System
359
+
360
+ A complete memory system for AI agents with working memory, episodic memory, decay mechanisms, and multi-agent support.
361
+
362
+ ### Key Components
363
+
364
+ | Component | Description |
365
+ |-----------|-------------|
366
+ | **AgentMemoryManager** | Unified facade for all agent memory operations |
367
+ | **SessionManager** | Session lifecycle management |
368
+ | **WorkingMemoryManager** | Short-term memory with promotion to long-term |
369
+ | **EpisodicMemoryManager** | Timeline-based episodic memory |
370
+ | **DecayEngine** | Time-based memory importance decay |
371
+ | **SalienceEngine** | Context-aware memory scoring |
372
+ | **MultiAgentMemoryManager** | Shared memory with visibility controls |
373
+ | **ConflictResolver** | Resolution strategies for concurrent updates |
374
+
375
+ ### Quick Start
376
+
377
+ ```typescript
378
+ import { ManagerContext } from '@danielsimonjr/memoryjs';
379
+
380
+ const ctx = new ManagerContext('./memory.jsonl');
381
+ const agent = ctx.agentMemory();
382
+
383
+ // Start a session
384
+ const session = await agent.startSession({ agentId: 'my-agent' });
385
+
386
+ // Add working memory
387
+ await agent.addWorkingMemory({
388
+ sessionId: session.name,
389
+ content: 'User prefers dark mode',
390
+ importance: 7
391
+ });
392
+
393
+ // Create episodic memory
394
+ await agent.createEpisode('Completed onboarding flow', {
395
+ sessionId: session.name,
396
+ importance: 8
397
+ });
398
+
399
+ // Retrieve context for LLM prompt
400
+ const context = await agent.retrieveForContext({
401
+ maxTokens: 2000,
402
+ includeEpisodic: true
403
+ });
404
+
405
+ // End session
406
+ await agent.endSession(session.name);
407
+ ```
408
+
409
+ ### Memory Types
410
+
411
+ ```typescript
412
+ type MemoryType = 'working' | 'episodic' | 'semantic' | 'procedural';
413
+ ```
414
+
415
+ - **Working Memory**: Short-term, session-scoped memories that may be promoted
416
+ - **Episodic Memory**: Timeline-based event memories with temporal ordering
417
+ - **Semantic Memory**: Long-term factual knowledge
418
+ - **Procedural Memory**: Learned behaviors and patterns
419
+
420
+ ### Decay System
421
+
422
+ Memories naturally decay over time unless reinforced:
423
+
424
+ ```typescript
425
+ // Configure decay behavior
426
+ const agent = ctx.agentMemory({
427
+ decay: {
428
+ halfLifeHours: 168, // 1 week half-life
429
+ minImportance: 0.1 // Never fully forget
430
+ },
431
+ enableAutoDecay: true
432
+ });
433
+
434
+ // Reinforce important memories
435
+ await agent.confirmMemory('memory_name', 0.1); // Boost confidence
436
+ await agent.promoteMemory('memory_name', 'episodic'); // Promote to long-term
437
+ ```
438
+
439
+ ### Multi-Agent Support
440
+
441
+ ```typescript
442
+ // Register agents
443
+ agent.registerAgent('agent_1', {
444
+ name: 'Research Agent',
445
+ type: 'llm',
446
+ trustLevel: 0.8,
447
+ capabilities: ['read', 'write']
448
+ });
449
+
450
+ // Create memories with visibility controls
451
+ await agent.addWorkingMemory({
452
+ sessionId: session.name,
453
+ content: 'Shared insight',
454
+ visibility: 'shared', // 'private' | 'shared' | 'public'
455
+ ownerAgentId: 'agent_1'
456
+ });
457
+
458
+ // Cross-agent search
459
+ const results = await agent.searchCrossAgent('agent_2', 'query');
460
+ ```
461
+
356
462
  ## API Reference
357
463
 
358
464
  ### EntityManager
@@ -472,8 +578,18 @@ npm run typecheck # Type checking without emit
472
578
 
473
579
  ```
474
580
  memoryjs/
475
- ├── src/ # Source (73 TypeScript files)
581
+ ├── src/ # Source (93 TypeScript files)
476
582
  │ ├── index.ts # Entry point
583
+ │ ├── agent/ # Agent Memory System (19 files)
584
+ │ │ ├── AgentMemoryManager.ts # Unified facade
585
+ │ │ ├── SessionManager.ts # Session lifecycle
586
+ │ │ ├── WorkingMemoryManager.ts # Working memory
587
+ │ │ ├── EpisodicMemoryManager.ts # Episodic memory
588
+ │ │ ├── DecayEngine.ts # Memory decay
589
+ │ │ ├── SalienceEngine.ts # Context scoring
590
+ │ │ ├── MultiAgentMemoryManager.ts # Multi-agent support
591
+ │ │ ├── ConflictResolver.ts # Conflict resolution
592
+ │ │ └── ...
477
593
  │ ├── core/ # Core managers (12 files)
478
594
  │ │ ├── ManagerContext.ts # Context holder (lazy init)
479
595
  │ │ ├── EntityManager.ts # Entity CRUD + hierarchy
@@ -497,10 +613,10 @@ memoryjs/
497
613
  │ │ ├── ArchiveManager.ts # Entity archival
498
614
  │ │ ├── CompressionManager.ts # Duplicate detection
499
615
  │ │ └── ...
500
- │ ├── types/ # TypeScript definitions (2 files)
616
+ │ ├── types/ # TypeScript definitions (3 files)
501
617
  │ ├── utils/ # Shared utilities (18 files)
502
618
  │ └── workers/ # Worker pool (2 files)
503
- ├── tests/ # Test suite
619
+ ├── tests/ # Test suite (3600+ tests)
504
620
  │ ├── unit/ # Unit tests
505
621
  │ ├── integration/ # Integration tests
506
622
  │ └── performance/ # Benchmarks
package/dist/index.cjs CHANGED
@@ -1971,7 +1971,6 @@ function getPaginationMeta(totalCount, offset = 0, limit = SEARCH_LIMITS.DEFAULT
1971
1971
  // src/utils/entityUtils.ts
1972
1972
  var import_fs2 = require("fs");
1973
1973
  var import_path = __toESM(require("path"), 1);
1974
- var import_url = require("url");
1975
1974
  function fnv1aHash(text) {
1976
1975
  let hash = 2166136261;
1977
1976
  for (let i = 0; i < text.length; i++) {
@@ -2232,20 +2231,13 @@ function validateFilePath(filePath, baseDir = process.cwd()) {
2232
2231
  }
2233
2232
  return finalNormalized;
2234
2233
  }
2235
- var defaultMemoryPath = import_path.default.join(
2236
- import_path.default.dirname((0, import_url.fileURLToPath)(importMetaUrl)),
2237
- "../../memory.jsonl"
2238
- );
2234
+ var defaultMemoryPath = import_path.default.join(process.cwd(), "memory.jsonl");
2239
2235
  async function ensureMemoryFilePath() {
2240
2236
  if (process.env.MEMORY_FILE_PATH) {
2241
- const baseDir = import_path.default.dirname((0, import_url.fileURLToPath)(importMetaUrl)) + "/../";
2242
- const validatedPath = validateFilePath(process.env.MEMORY_FILE_PATH, baseDir);
2237
+ const validatedPath = validateFilePath(process.env.MEMORY_FILE_PATH, process.cwd());
2243
2238
  return validatedPath;
2244
2239
  }
2245
- const oldMemoryPath = import_path.default.join(
2246
- import_path.default.dirname((0, import_url.fileURLToPath)(importMetaUrl)),
2247
- "../../memory.json"
2248
- );
2240
+ const oldMemoryPath = import_path.default.join(process.cwd(), "memory.json");
2249
2241
  const newMemoryPath = defaultMemoryPath;
2250
2242
  try {
2251
2243
  await import_fs2.promises.access(oldMemoryPath);
@@ -10141,7 +10133,7 @@ var BooleanSearch = class {
10141
10133
 
10142
10134
  // src/search/FuzzySearch.ts
10143
10135
  var import_workerpool4 = __toESM(require("@danielsimonjr/workerpool"), 1);
10144
- var import_url2 = require("url");
10136
+ var import_url = require("url");
10145
10137
  var import_path3 = require("path");
10146
10138
  var DEFAULT_FUZZY_THRESHOLD = 0.7;
10147
10139
  var FUZZY_CACHE_MAX_SIZE = 100;
@@ -10153,7 +10145,7 @@ var FuzzySearch = class {
10153
10145
  this.storage = storage;
10154
10146
  this.useWorkerPool = options.useWorkerPool ?? true;
10155
10147
  const currentFileUrl = importMetaUrl;
10156
- const currentDir = (0, import_path3.dirname)((0, import_url2.fileURLToPath)(currentFileUrl));
10148
+ const currentDir = (0, import_path3.dirname)((0, import_url.fileURLToPath)(currentFileUrl));
10157
10149
  const isRunningFromSrc = currentDir.includes(`${import_path3.sep}src${import_path3.sep}`);
10158
10150
  if (isRunningFromSrc) {
10159
10151
  const projectRoot = (0, import_path3.join)(currentDir, "..", "..");