← Back to Plugins
Tools

Longterm Memory

zealot00 By zealot00 👁 10 views ▲ 0 votes

OpenClaw Context Engine plugin for long-term memory management with narrative facts and entity tracking

GitHub

Install

npm install openclaw-longterm-memory-plugin

Configuration Example

{
  "plugins": {
    "slots": {
      "contextEngine": "longterm-memory"
    }
  },
  "pluginsConfig": {
    "longterm-memory": {
      "memoryConsoleUrl": "http://localhost:3000",
      "apiToken": "your-token",
      "maxNarrativeFacts": 5,
      "entityConfidenceThreshold": 0.7,
      "autoReflectInterval": 3600
    }
  }
}

README

# openclaw-longterm-memory-plugin

OpenClaw Context Engine ๆ’ไปถ๏ผŒๆไพ›ๅขžๅผบ็š„้•ฟๆœŸ่ฎฐๅฟ†็ฎก็†่ƒฝๅŠ›ใ€‚

## ๅŠŸ่ƒฝ็‰นๆ€ง

### ๆ ธๅฟƒๅŠŸ่ƒฝ

| ๅŠŸ่ƒฝ | ๆ่ฟฐ | ไผ˜ๅ…ˆ็บง |
|------|------|--------|
| Narrative Fact ๅญ˜ๅ‚จ | ๅญ˜ๅ‚จๅ’Œๆฃ€็ดขๅ™ไบ‹ๆ€งไบ‹ๅฎž | P0 |
| Entity ่ฟฝ่ธช | ๅฎžไฝ“็ฎก็†ๅ’Œไฟกๅฟƒๅบฆ่ฟฝ่ธช | P0 |
| Context ๅขžๅผบ | ๅœจไธŠไธ‹ๆ–‡็ป„่ฃ…ๆ—ถๆณจๅ…ฅ็›ธๅ…ณไบ‹ๅฎž | P0 |
| ๅ‘้‡ๆœ็ดข | ๅŸบไบŽ embedding ็š„่ฏญไน‰ๆฃ€็ดข | P1 |
| Reflect ๅฎšๆ—ถไปปๅŠก | ่‡ชๅŠจๆ›ดๆ–ฐๅฎžไฝ“ไฟกๅฟƒๅบฆ | P2 |
| ๅ›ž้€€ๆœบๅˆถ | API ๅคฑ่ดฅๆ—ถไผ˜้›…้™็บง | P2 |

### ๅทฅไฝœๅŽŸ็†

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   OpenClaw Gateway                          โ”‚
โ”‚                                                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚          LongtermMemoryEngine (Context Engine)      โ”‚   โ”‚
โ”‚  โ”‚                                                      โ”‚   โ”‚
โ”‚  โ”‚  1. bootstrap()    โ†’ ๅˆๅง‹ๅŒ–ไผš่ฏ                     โ”‚   โ”‚
โ”‚  โ”‚  2. ingest()       โ†’ ๆ‘„ๅ…ฅๆถˆๆฏ                       โ”‚   โ”‚
โ”‚  โ”‚  3. assemble()     โ†’ ็ป„่ฃ…ไธŠไธ‹ๆ–‡ + ๆณจๅ…ฅไบ‹ๅฎž           โ”‚   โ”‚
โ”‚  โ”‚  4. compact()      โ†’ ๅง”ๆ‰˜็ป™ legacy                  โ”‚   โ”‚
โ”‚  โ”‚  5. dispose()      โ†’ ๆธ…็†่ต„ๆบ                       โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                              โ”‚
                              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Memory Console                           โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ Narrative   โ”‚  โ”‚   Entity    โ”‚  โ”‚    Memory      โ”‚   โ”‚
โ”‚  โ”‚   Facts    โ”‚  โ”‚   Store     โ”‚  โ”‚    Store       โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

## ๅฎ‰่ฃ…

```bash
npm install openclaw-longterm-memory-plugin
```

## ้…็ฝฎ

ๅœจ `openclaw.json` ไธญ้…็ฝฎ๏ผš

```json
{
  "plugins": {
    "slots": {
      "contextEngine": "longterm-memory"
    }
  },
  "pluginsConfig": {
    "longterm-memory": {
      "memoryConsoleUrl": "http://localhost:3000",
      "apiToken": "your-token",
      "maxNarrativeFacts": 5,
      "entityConfidenceThreshold": 0.7,
      "autoReflectInterval": 3600
    }
  }
}
```

### ้…็ฝฎๅ‚ๆ•ฐ

| ๅ‚ๆ•ฐ | ็ฑปๅž‹ | ้ป˜่ฎคๅ€ผ | ๆ่ฟฐ |
|------|------|--------|------|
| `memoryConsoleUrl` | string | `http://localhost:3000` | Memory Console API ๅœฐๅ€ |
| `apiToken` | string | - | API ่ฎค่ฏ Token |
| `maxNarrativeFacts` | number | `5` | ๆฏๆฌกไธŠไธ‹ๆ–‡ๆณจๅ…ฅ็š„ๆœ€ๅคงไบ‹ๅฎžๆ•ฐ |
| `entityConfidenceThreshold` | number | `0.7` | ๅฎžไฝ“ไฟกๅฟƒๅบฆ้˜ˆๅ€ผ |
| `autoReflectInterval` | number | `3600` | Reflect ไปปๅŠก้—ด้š”๏ผˆ็ง’๏ผ‰ |

## API

### Context Engine ๆŽฅๅฃ

```typescript
interface ContextEngine {
  readonly info: ContextEngineInfo;
  
  bootstrap(params: {
    sessionId: string;
    sessionKey?: string;
    sessionFile: string;
  }): Promise<BootstrapResult>;
  
  ingest(params: {
    sessionId: string;
    sessionKey?: string;
    message: AgentMessage;
    isHeartbeat?: boolean;
  }): Promise<IngestResult>;
  
  assemble(params: {
    sessionId: string;
    sessionKey?: string;
    messages: AgentMessage[];
    tokenBudget?: number;
  }): Promise<AssembleResult>;
  
  compact(params: {
    sessionId: string;
    sessionKey?: string;
    sessionFile: string;
    tokenBudget?: number;
    force?: boolean;
    customInstructions?: string;
  }): Promise<CompactResult>;
  
  dispose?(): Promise<void>;
}
```

### ๅฎขๆˆท็ซฏๆŽฅๅฃ

```typescript
interface MemoryConsoleClient {
  // Narrative Facts
  createNarrativeFact(fact: Omit<NarrativeFact, 'id'>): Promise<NarrativeFact>;
  searchNarrativeFacts(query: string, options?: SearchOptions): Promise<NarrativeFact[]>;
  
  // Entities
  createEntity(entity: Omit<Entity, 'id' | 'createdAt' | 'updatedAt'>): Promise<Entity>;
  getEntity(name: string): Promise<Entity | null>;
  updateEntity(id: string, updates: Partial<Entity>): Promise<Entity>;
  listEntities(): Promise<Entity[]>;
  
  // Generic Memory
  createMemory(memory: Omit<MemoryEntry, 'id'>): Promise<MemoryEntry>;
  searchMemories(query: string, options?: SearchOptions): Promise<MemoryEntry[]>;
}
```

### ๆ•ฐๆฎๆจกๅž‹

```typescript
type FactType = 'world' | 'experience' | 'opinion' | 'observation';

interface NarrativeFact {
  id: string;
  content: string;           // ไบ‹ๅฎžๅ†…ๅฎน
  entities: string[];        // ๅ…ณ่”ๅฎžไฝ“ๅ
  confidence: number;         // ไฟกๅฟƒๅบฆ 0-1
  factType: FactType;        // ไบ‹ๅฎž็ฑปๅž‹
  createdAt: Date;
  source?: string;           // ๆฅๆบ
  sessionId?: string;        // ไผš่ฏID
}

interface Entity {
  id: string;
  name: string;              // ๅฎžไฝ“ๅ๏ผˆๅ”ฏไธ€๏ผ‰
  description?: string;
  facts: string[];           // NarrativeFact IDs
  confidence: number;         // ไฟกๅฟƒๅบฆ 0-1
  lastReflected?: Date;      // ไธŠๆฌกๅๆ€ๆ—ถ้—ด
  createdAt: Date;
  updatedAt: Date;
}
```

## ๅผ€ๅ‘

### ่ฟ่กŒๆต‹่ฏ•

```bash
npm test
```

### ๆž„ๅปบ

```bash
npm run build
```

### ้กน็›ฎ็ป“ๆž„

```
src/
โ”œโ”€โ”€ index.ts                  # ๆ’ไปถๅ…ฅๅฃ
โ”œโ”€โ”€ engine.ts                 # Context Engine ๅฎž็Žฐ
โ”œโ”€โ”€ memory-console-client.ts  # HTTP ๅฎขๆˆท็ซฏ
โ””โ”€โ”€ types/
    โ”œโ”€โ”€ context-engine.ts    # ๆŽฅๅฃๅฎšไน‰
    โ””โ”€โ”€ index.ts             # ๅ†…้ƒจ็ฑปๅž‹

tests/
โ”œโ”€โ”€ engine.test.ts           # ๅผ•ๆ“Žๆต‹่ฏ•
โ”œโ”€โ”€ narrative-facts.test.ts # CRUD ๆต‹่ฏ•
โ”œโ”€โ”€ integration.test.ts       # ้›†ๆˆๆต‹่ฏ•
โ””โ”€โ”€ mocks/
    โ””โ”€โ”€ memory-console.ts    # Mock ๅฎขๆˆท็ซฏ
```

## ๅ›ž้€€ๆœบๅˆถ

ๅฝ“ Memory Console API ไธๅฏ็”จๆ—ถ๏ผš

1. **assemble** ไผšๆ•่Žทๅผ‚ๅธธๅนถ่ฟ”ๅ›ž็ฉบ facts
2. **compact** ๅง”ๆ‰˜็ป™ legacy ๅผ•ๆ“Ž
3. ไธๅฝฑๅ“ๆ ธๅฟƒไผš่ฏๅŠŸ่ƒฝ

## License

MIT
tools

Comments

Sign in to leave a comment

Loading comments...