{
  "interval": {
    "intervalStart": "2026-01-14T00:00:00.000Z",
    "intervalEnd": "2026-01-15T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-01-14 to 2026-01-15, elizaos/eliza had 1 new PRs (0 merged), 2 new issues, and 5 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7jNLxv",
      "title": "\"Reflection evaluator fails with 'Entity not found' - UPDATE_CONTACT requires entity initialization\"",
      "author": "thewoweffect",
      "number": 6364,
      "repository": "elizaos/eliza",
      "body": "\nVersion: 1.7.1\nError: UPDATE_CONTACT fails with \"Entity not found\"\nCause: ensureConnection() is not called before saving facts\nLogs: afterSplice values + \"No ownership data found for world\"\nProposed fix: // V reflection.ts před UPDATE_CONTACT\nawait runtime.ensureConnection({\n  entityId, roomId, userName, name, worldId, source\n});\n",
      "createdAt": "2026-01-14T07:10:02Z",
      "closedAt": null,
      "state": "OPEN",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs7jR8Nh",
      "title": "AI Agent Payment Implementation Guide - Circle + Coinbase APIs",
      "author": "tdnupe3",
      "number": 6365,
      "repository": "elizaos/eliza",
      "body": "# AI Agent Payment Implementation Guide\n\nHi! I see you're building innovative AI agent systems. I created a comprehensive guide on autonomous AI agent payments using Circle + Coinbase APIs - based on our live marketplace with 25+ active wallets processing real USDC.\n\n## Complete Guide Covers:\n- 🏦 Circle Developer Controlled Wallets integration\n- ⛓️ Multi-chain payment processing (Ethereum, Base, Polygon)  \n- 📡 Agent-to-agent communication via XMTP\n- 🔒 Security patterns for autonomous payments\n- 💰 Revenue sharing systems (85% agent, 15% platform)\n- 🤖 Coinbase AgentKit integration patterns\n\n## Technical Implementation Details:\n- Production-tested with 25+ active USDC wallets\n- Multi-chain wallet management best practices\n- Agent wallet security and key management\n- Real-time balance tracking and notifications\n- Automated fee calculation and collection\n\n**$10 Implementation Guide:** https://coinrailz.com/report\n\n**Live Demo:** Working payment system processing real transactions\n\nWould love to contribute to this project or get your thoughts on the implementation patterns! The guide is based on our production system, not theory.\n\n---\n*This is about a technical implementation guide for autonomous payments in AI agent systems. If this isn't relevant to your project, feel free to close this issue.*",
      "createdAt": "2026-01-14T13:03:23Z",
      "closedAt": null,
      "state": "OPEN",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs69N1vf",
      "title": "refactor(plugin-sql): extract domain stores from BaseDrizzleAdapter",
      "author": "standujar",
      "number": 6366,
      "body": "Refactors `BaseDrizzleAdapter` (~3,900 lines) into composable domain stores. This improves maintainability, testability, and separation of concerns without changing the public API.\r\n\r\n## Changes\r\n\r\n### New Domain Stores (`src/stores/`)\r\n\r\n| Store | Responsibility | Methods |\r\n|-------|----------------|---------|\r\n| `AgentStore` | Agent CRUD operations | get, getAll, create, update, delete, count |\r\n| `MemoryStore` | Memory & embeddings | get, getById, getByIds, create, update, delete, search, count |\r\n| `RoomStore` | Room management | getByIds, getByWorld, create, update, delete |\r\n| `ParticipantStore` | Room participants | getRoomsForEntity, add, remove, getForRoom, isParticipant, userState |\r\n| `EntityStore` | Entity management | getByIds, getForRoom, create, update, delete, getByNames, searchByName |\r\n| `ComponentStore` | ECS components | get, getAll, create, update, delete |\r\n| `RelationshipStore` | Entity relationships | create, update, get, getAll |\r\n| `CacheStore` | Key-value cache | get, set, delete |\r\n| `WorldStore` | World management | create, get, getAll, update, delete |\r\n| `TaskStore` | Task management | create, getByParams, getByName, get, update, delete |\r\n| `LogStore` | Logging & summaries | create, getMany, getAgentRunSummaries, delete |\r\n| `MessagingStore` | Servers, channels, messages | createServer, getServers, createChannel, getChannels, createMessage, getMessages, participants |\r\n\r\n### Architecture\r\n\r\n```\r\nBaseDrizzleAdapter\r\n    │\r\n    ├── initStores()  ───────────────────────────────┐\r\n    │                                                │\r\n    │   ┌─────────────────────────────────────────┐  │\r\n    │   │           StoreContext                  │◄─┘\r\n    │   │  • getDb()                              │\r\n    │   │  • withRetry()                          │\r\n    │   │  • withIsolationContext()               │\r\n    │   │  • agentId                              │\r\n    │   │  • getEmbeddingDimension()              │\r\n    │   └─────────────────────────────────────────┘\r\n    │                   │\r\n    │         ┌─────────┴─────────┐\r\n    │         ▼                   ▼\r\n    │   ┌──────────┐       ┌──────────┐\r\n    │   │  Store1  │  ...  │  StoreN  │\r\n    │   └──────────┘       └──────────┘\r\n    │\r\n    └── Public methods delegate to stores\r\n```\r\n\r\n### Key Design Decisions\r\n\r\n1. **Shared Context**: All stores receive a `StoreContext` with database access, retry logic, and RLS isolation\r\n\r\n2. **No API Changes**: All public methods remain identical - only internal implementation refactored\r\n\r\n## Impact\r\n\r\n- **Lines reduced**: `base.ts` from ~3,900 to ~1,350 lines (~65% reduction)\r\n- **Files added**: 13 new files in `src/stores/`\r\n- **Public API**: No changes\r\n- **Tests**: All 160 unit + all integration tests pass (PGLite + PostgreSQL)\r\n\r\n## Testing\r\n\r\n```bash\r\n# Unit tests\r\nbun run test:unit        # 160 pass\r\n\r\n# Integration tests (PGLite)\r\nbun run test:integration # All pass\r\n\r\n# Integration tests (PostgreSQL)\r\nbun run test:integration:postgres # All pass (including RLS tests)\r\n```\r\n\r\n## Migration\r\n\r\nNo migration needed - this is a pure refactoring with no public API changes.\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\n\n- Refactors monolithic `BaseDrizzleAdapter` class (~3,900 lines) into 11 focused domain stores in `packages/plugin-sql/src/stores/` to improve maintainability and testability while preserving the exact same public API\n- Introduces `StoreContext` pattern that provides shared database access, retry logic, and Row Level Security isolation to all domain stores, maintaining consistency across the codebase\n- Implements comprehensive CRUD operations across stores for agents, memories, rooms, participants, entities, components, relationships, caching, worlds, tasks, and logging\n\n<h3>Important Files Changed</h3>\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/plugin-sql/src/base.ts | Refactored from ~3,900 to ~1,350 lines by extracting domain logic into stores and adding delegation methods |\n| packages/plugin-sql/src/stores/memory.store.ts | New store handling memory CRUD, vector embeddings, and similarity search operations |\n| packages/plugin-sql/src/stores/entity.store.ts | New store for entity management including component aggregation and name-based searching |\n| packages/plugin-sql/src/stores/log.store.ts | New store with complex agent run summaries and JSON sanitization for logging operations |\n\n<h3>Confidence score: 4/5</h3>\n\n\n- This is a well-executed refactoring with comprehensive testing and minimal risk due to preserved public API\n- Score lowered due to minor issues: unused parameter in TaskStore.getAll(), missing agent ID filter in TaskStore.delete(), and complex field mapping logic in RelationshipStore that could be simplified\n- No files require special attention - the refactoring successfully maintains API compatibility while improving code organization\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant Client as \"Client\"\n    participant Adapter as \"BaseDrizzleAdapter\"\n    participant StoreContext as \"StoreContext\"\n    participant MemoryStore as \"MemoryStore\"\n    participant Manager as \"ConnectionManager\"\n    participant DB as \"Database\"\n\n    Note over Client,DB: Memory Search Flow (Primary Happy Path)\n\n    Client->>Adapter: searchMemoriesByEmbedding(embedding, params)\n    \n    Adapter->>Adapter: withDatabase(() => operation())\n    \n    Adapter->>MemoryStore: searchByEmbedding(embedding, params)\n    \n    MemoryStore->>StoreContext: withRetry(() => operation())\n    \n    StoreContext->>MemoryStore: Execute operation\n    \n    MemoryStore->>StoreContext: getDb()\n    StoreContext->>MemoryStore: Return database instance\n    \n    MemoryStore->>DB: Execute cosine distance query with conditions\n    DB-->>MemoryStore: Return matching memories with similarity scores\n    \n    MemoryStore->>MemoryStore: Transform results to Memory objects\n    MemoryStore-->>StoreContext: Return transformed memories\n    StoreContext-->>Adapter: Return memories\n    Adapter-->>Client: Return Memory[]\n\n    Note over Client,DB: Memory Creation Flow\n\n    Client->>Adapter: createMemory(memory, tableName)\n    \n    Adapter->>Adapter: withDatabase(() => operation())\n    \n    Adapter->>MemoryStore: create(memory, tableName)\n    \n    MemoryStore->>StoreContext: withIsolationContext(entityId, callback)\n    \n    StoreContext->>Manager: withIsolationContext(entityId, callback)\n    Manager->>DB: Set RLS context for entity\n    Manager->>MemoryStore: Execute callback with transaction\n    \n    MemoryStore->>DB: Insert memory record\n    MemoryStore->>MemoryStore: upsertEmbedding(tx, memoryId, embedding)\n    MemoryStore->>DB: Insert/Update embedding record\n    \n    DB-->>MemoryStore: Return inserted memory ID\n    MemoryStore-->>StoreContext: Return memory ID\n    StoreContext-->>Adapter: Return memory ID\n    Adapter-->>Client: Return UUID\n\n    Note over Client,DB: Agent Operations Flow\n\n    Client->>Adapter: getAgent(agentId)\n    \n    Adapter->>Adapter: withDatabase(() => operation())\n    \n    Adapter->>AgentStore: get(agentId)\n    \n    AgentStore->>StoreContext: withRetry(() => operation())\n    \n    AgentStore->>StoreContext: getDb()\n    StoreContext->>AgentStore: Return database instance\n    \n    AgentStore->>DB: SELECT from agents WHERE id = agentId\n    DB-->>AgentStore: Return agent record\n    \n    AgentStore->>AgentStore: Transform to Agent object\n    AgentStore-->>Adapter: Return Agent\n    Adapter-->>Client: Return Agent\n```\n\n<!-- greptile_other_comments_section -->\n\n<details><summary><h3>Context used (3)</h3></summary>\n\n- Context from `dashboard` - CLAUDE.md ([source](https://app.greptile.com/review/custom-context?memory=8ef4c9a3-e221-4aef-8556-8c9b88bf6bbb))\n- Context from `dashboard` - .cursorrules ([source](https://app.greptile.com/review/custom-context?memory=00074882-001f-44b1-89c4-859ed3656db9))\n- Context from `dashboard` - AGENTS.md ([source](https://app.greptile.com/review/custom-context?memory=51febe90-8918-4f18-be1f-d43bb68d696c))\n</details>\n\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-01-14T18:18:05Z",
      "mergedAt": "2026-01-16T17:22:26Z",
      "additions": 3205,
      "deletions": 3002
    }
  ],
  "codeChanges": {
    "additions": 0,
    "deletions": 0,
    "files": 0,
    "commitCount": 11
  },
  "completedItems": [],
  "topContributors": [
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 48.7437738965761,
      "prScore": 43.5437738965761,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 15.809437912434099,
      "prScore": 15.6094379124341,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 9,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 9,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "thewoweffect",
      "avatarUrl": "https://avatars.githubusercontent.com/u/113222443?u=cb21d15b0ce815d0f68167f2eca236aad6c64598&v=4",
      "totalScore": 2.3000000000000003,
      "prScore": 0,
      "issueScore": 2.1,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "tdnupe3",
      "avatarUrl": "https://avatars.githubusercontent.com/u/25161668?u=94680b6bcbcfce954c7a9dd09d667a3919953041&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    }
  ],
  "newPRs": 1,
  "mergedPRs": 0,
  "newIssues": 2,
  "closedIssues": 0,
  "activeContributors": 5
}