tasq/node_modules/agentdb/simulation/MIGRATION-STATUS.md

6.1 KiB

AgentDB v2 Controller Migration Status

Date: 2025-11-30 Status: ⚠️ PARTIAL - In Progress


Completed Migrations

ReflexionMemory

  • GraphDatabaseAdapter support added
  • Detection pattern: 'storeEpisode' in this.graphBackend
  • Specialized methods: storeEpisode(), searchSimilarEpisodes()
  • SQLite fallback maintained
  • 3/4 working scenarios use this

Status: PRODUCTION READY


⚠️ Partial Migrations

CausalMemoryGraph

  • GraphDatabaseAdapter import added
  • Constructor updated to accept graphBackend parameter
  • Detection pattern: 'createCausalEdge' in this.graphBackend
  • addCausalEdge() method migrated
  • ⚠️ ID mapping issue: Episode IDs from storeEpisode return numeric IDs, but graph edges need full string node IDs
  • ⚠️ Scenarios fail with: Entity episode-{id} not found in hypergraph

Blockers:

  1. Need to track full node ID strings (e.g., "episode-89667068432584530")
  2. ReflexionMemory returns numeric IDs but doesn't expose string IDs
  3. Options:
    • Modify ReflexionMemory to return both numeric and string IDs
    • Create ID mapping service
    • Store full node IDs in scenario state

Affected Scenarios:

  • strange-loops (blocked)
  • causal-reasoning (blocked)

Status: ⚠️ BLOCKED - Needs ID Resolution


Not Started

SkillLibrary

  • No migration started
  • Still uses this.db.prepare() SQLite APIs
  • Needs GraphDatabaseAdapter support

Affected Scenarios:

  • skill-evolution (blocked)
  • multi-agent-swarm (blocked)

Status: NOT STARTED


📊 Current Scenario Status

Scenario Controller Dependencies Status Blocker
lean-agentic-swarm None Working -
reflexion-learning ReflexionMemory Working -
voting-system-consensus ReflexionMemory Working -
stock-market-emergence ReflexionMemory Working -
strange-loops ReflexionMemory, CausalMemoryGraph ⚠️ Blocked ID mapping
causal-reasoning ReflexionMemory, CausalMemoryGraph ⚠️ Blocked ID mapping
skill-evolution SkillLibrary Blocked No migration
multi-agent-swarm SkillLibrary Blocked No migration
graph-traversal Direct graph APIs Unknown Not tested

Working: 4/9 (44%) Blocked by ID Mapping: 2/9 (22%) Blocked by No Migration: 2/9 (22%) Unknown: 1/9 (11%)


🔧 Solutions for ID Mapping Issue

Modify ReflexionMemory to return both IDs:

interface EpisodeResult {
  numericId: number;  // For backward compatibility
  nodeId: string;     // Full graph node ID
}

async storeEpisode(episode: Episode): Promise<EpisodeResult> {
  if (this.graphBackend && 'storeEpisode' in this.graphBackend) {
    const nodeId = await graphAdapter.storeEpisode({...}, taskEmbedding);
    return {
      numericId: parseInt(nodeId.split('-').pop() || '0', 36),
      nodeId: nodeId  // Keep full ID
    };
  }
  // ...
}

Pros: Clean, explicit, type-safe Cons: Breaking change to API

Option 2: ID Mapping Service

Create a service to track node ID mappings:

class NodeIdMapper {
  private map = new Map<number, string>();

  register(numericId: number, nodeId: string): void {
    this.map.set(numericId, nodeId);
  }

  getNodeId(numericId: number): string {
    return this.map.get(numericId) || `episode-${numericId}`;
  }
}

Pros: Non-breaking, easy to add Cons: Extra state management

Option 3: Store Full IDs in Scenarios

Scenarios track their own node IDs:

const episodeIds = new Map<number, string>();
const numericId = await reflexion.storeEpisode(episode);
const nodeId = `episode-${Date.now()}${Math.random()}`;  // Reconstruct
episodeIds.set(numericId, nodeId);

Pros: Minimal changes to controllers Cons: Fragile, scenarios need extra logic


📋 Next Steps

Immediate (Unblock Scenarios)

  1. Implement Option 1 or 2 to resolve ID mapping
  2. Test strange-loops and causal-reasoning
  3. Migrate SkillLibrary (same pattern as CausalMemoryGraph)
  4. Test skill-evolution and multi-agent-swarm
  5. Test graph-traversal to identify issues

Short-term (Complete v2 Migration)

  1. Update all controllers to use GraphDatabaseAdapter
  2. Remove SQLite fallback after verification
  3. Optimize graph queries for performance
  4. Add comprehensive tests for all controllers

Long-term (Advanced Features)

  1. Implement advanced graph traversal
  2. Add multi-hop causal reasoning
  3. Integrate LLM for causal mechanism generation
  4. Build visualization tools for graph exploration

🎯 Recommendation

Priority: Implement Option 2 (ID Mapping Service) for minimal disruption

// Add to db-unified.ts
export class NodeIdMapper {
  private static instance: NodeIdMapper;
  private map = new Map<number, string>();

  static getInstance(): NodeIdMapper {
    if (!this.instance) {
      this.instance = new NodeIdMapper();
    }
    return this.instance;
  }

  register(numericId: number, nodeId: string): void {
    this.map.set(numericId, nodeId);
  }

  getNodeId(numericId: number): string | undefined {
    return this.map.get(numericId);
  }
}

Implementation:

  1. Update ReflexionMemory to register IDs when storing episodes
  2. Update CausalMemoryGraph to look up full node IDs before creating edges
  3. Test with strange-loops scenario
  4. Roll out to other scenarios

Estimated Time: 30-60 minutes


📈 Progress Tracking

  • Analyze controller dependencies
  • Migrate ReflexionMemory
  • Test ReflexionMemory with scenarios
  • Start CausalMemoryGraph migration
  • Resolve ID mapping issue
  • Complete CausalMemoryGraph migration
  • Migrate SkillLibrary
  • Test all scenarios
  • Remove SQLite fallback
  • Production deployment

Progress: 4/10 (40%)


Created: 2025-11-30 System: AgentDB v2.0.0 Working Scenarios: 4/9 (44%) Blocked Scenarios: 5/9 (56%) Next Action: Implement ID Mapping Service