{
  "interval": {
    "intervalStart": "2025-11-11T00:00:00.000Z",
    "intervalEnd": "2025-11-12T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-11-11 to 2025-11-12, elizaos/eliza had 1 new PRs (1 merged), 0 new issues, and 4 active contributors.",
  "topIssues": [],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6yifTM",
      "title": "fix: RLS (Row-Level Security) server_id validation checks blocking all users when RLS isolation is disabled.",
      "author": "standujar",
      "number": 6139,
      "body": "# Relates to\r\n\r\nFix for RLS (Row-Level Security) server_id validation checks blocking all users when RLS isolation is disabled.\r\n\r\nMaybe: https://github.com/elizaOS/eliza/issues/6138\r\n\r\n# Risks\r\n\r\n**Low**. Changes only affect RLS security checks in messaging API endpoints. When `ENABLE_RLS_ISOLATION=false` (default), validation is skipped for backward compatibility.\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nMakes RLS server_id validation checks conditional based on `ENABLE_RLS_ISOLATION` environment variable:\r\n- When `true`: Enforces strict server_id matching (multi-tenant isolation)\r\n- When `false`: Skips validation (backward compatible, no breaking changes)\r\n\r\n## What kind of change is this?\r\n\r\nBug fixes (non-breaking change which fixes an issue)\r\n\r\n# Documentation changes needed?\r\n\r\nMy changes do not require a change to the project documentation.\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\nReview the conditional RLS logic in:\r\n- [packages/server/src/api/messaging/core.ts](../packages/server/src/api/messaging/core.ts) (3 endpoints)\r\n- [packages/server/src/api/messaging/channels.ts](../packages/server/src/api/messaging/channels.ts) (2 endpoints)\r\n\r\n## Detailed testing steps\r\n\r\nRun test suite:\r\n```bash\r\nbun test packages/server/src/__tests__/rls-server.test.ts\r\nAll 44 tests pass, including new conditional validation tests for:\r\nPOST /submit\r\nPOST /action\r\nPATCH /action/:id\r\nPOST /central-channels/:channelId/messages\r\nPOST /central-channels\r\nTest coverage\r\n✅ RLS enabled + matching server_id → Accept\r\n✅ RLS enabled + mismatched server_id → Reject (403)\r\n✅ RLS disabled + any server_id → Accept\r\n✅ RLS undefined + any server_id → Accept",
      "repository": "elizaos/eliza",
      "createdAt": "2025-11-10T13:48:36Z",
      "mergedAt": "2025-11-11T17:37:59Z",
      "additions": 237,
      "deletions": 21
    },
    {
      "id": "PR_kwDOMT5cIs6yxEIL",
      "title": "fix: Add openrouter embedding option in CLI",
      "author": "Neysixx",
      "number": 6142,
      "body": "# Relates to\r\n\r\nImproves OpenRouter integration in ElizaOS CLI by adding native embedding support, eliminating the need for users to configure a separate embedding provider when using OpenRouter.\r\n\r\n# Risks\r\n\r\n**Low Risk** - Well-contained changes following existing patterns\r\n\r\n- **User Impact**: No breaking changes. Existing OpenRouter configurations continue to work unchanged.\r\n- **Test Coverage**: Unit tests updated to reflect new behavior (embedding support enabled for OpenRouter)\r\n- **Configuration**: Follows the same pattern as existing providers (OpenAI, Google, Ollama) for both interactive and non-interactive modes\r\n- **Validation**: Uses existing `isValidOpenRouterKey` function to validate API key format (`sk-or-` prefix)\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nThis PR adds comprehensive OpenRouter support for embeddings in the ElizaOS CLI:\r\n\r\n1. **Updates `hasEmbeddingSupport`** to include `'openrouter'` as a model with built-in embedding support\r\n2. **Adds OpenRouter to `getAvailableEmbeddingModels`** as a fallback option when the primary AI model doesn't support embeddings (e.g., Claude)\r\n3. **Implements setup configuration** in both `setupAIModelConfig` and `setupEmbeddingModelConfig` to handle:\r\n   - Interactive mode: Prompts users for OpenRouter API key\r\n   - Non-interactive mode: Writes placeholder configuration with helpful comments\r\n4. **Updates unit tests** to reflect that OpenRouter now has embedding support\r\n\r\n**Technical Details:**\r\n- Adds OpenRouter configuration with `OPENROUTER_API_KEY`, `OPENROUTER_EMBEDDING_MODEL`, and `OPENROUTER_EMBEDDING_DIMENSIONS`\r\n- Leverages OpenRouter's unified API access to multiple embedding models (including OpenAI's text-embedding-3-small)\r\n- Reuses existing `promptAndStoreOpenRouterKey` helper function from `get-config.ts`\r\n\r\n## What kind of change is this?\r\n\r\n- [x] Features (non-breaking change which adds functionality)\r\n- [x] Improvements (misc. changes to existing features)\r\n- [x] Updates (test updates to reflect new behavior)\r\n\r\n## Why are we doing this? Any context or related work?\r\n\r\n**Problem:**\r\n- ElizaOS requires embeddings for agent memory, semantic search, and knowledge base functionality\r\n- OpenRouter was only available as an AI text generation provider, not for embeddings\r\n- Users selecting OpenRouter for AI had to configure a second provider (OpenAI, Google, or Ollama) solely for embeddings\r\n\r\n**Solution:**\r\n- OpenRouter provides access to multiple embedding models through its unified API\r\n- This PR enables users to use a single OpenRouter API key for both text generation and embeddings\r\n- Reduces configuration complexity and API key management overhead\r\n\r\n# Documentation changes needed?\r\n\r\n- [x] My changes require a change to the project documentation.\r\n- [x] Documentation partially exists: The `.env` template in `packages/cli/src/utils/get-config.ts` already includes OpenRouter environment variables (lines 79-82)\r\n\r\n**Recommended documentation updates:**\r\n1. Add OpenRouter to the list of recommended providers supporting both AI + embeddings in README\r\n2. Document the three OpenRouter environment variables with example values:\r\n   - `OPENROUTER_API_KEY=sk-or-v1-...`\r\n   - `OPENROUTER_EMBEDDING_MODEL=openai/text-embedding-3-small`\r\n   - `OPENROUTER_EMBEDDING_DIMENSIONS=1536`\r\n3. Optional: Add migration note for existing users who can now simplify their configuration\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\n**Review Priority:**\r\n\r\n1. **Core logic changes** - `packages/cli/src/commands/create/utils/selection.ts`\r\n   - Line 50: `hasEmbeddingSupport` now includes `'openrouter'`\r\n   - Lines 140-144: OpenRouter added to `getAvailableEmbeddingModels`\r\n\r\n2. **Configuration setup** - `packages/cli/src/commands/create/actions/setup.ts`\r\n   - Lines 113-136: `setupAIModelConfig` OpenRouter case\r\n   - Lines 288-362: `setupEmbeddingModelConfig` OpenRouter case\r\n\r\n3. **Test updates** - `packages/cli/tests/unit/utils/selection.test.ts`\r\n   - Line 20: OpenRouter added to models with embedding support\r\n   - Lines 71-72: Correctly categorizes OpenRouter as having embeddings\r\n\r\n## Detailed testing steps\r\n\r\n### 1. Unit Tests ✅\r\n\r\n```bash\r\ncd packages/cli\r\nbun run test tests/unit/utils/selection.test.ts\r\n```\r\n\r\n**Expected:** All tests pass\r\n- ✅ `hasEmbeddingSupport('openrouter')` returns `true`\r\n- ✅ OpenRouter correctly identified as model with embedding support\r\n\r\n### 2. Interactive Mode - OpenRouter as Primary AI\r\n\r\n```bash\r\nelizaos create test-openrouter-primary\r\n# Select: OpenRouter as AI model\r\n# Expected: Should NOT be prompted for embedding model\r\n```\r\n\r\n**Verify:**\r\n- `.env` contains `OPENROUTER_API_KEY=`\r\n- User is prompted for OpenRouter API key interactively\r\n- No separate embedding model configuration is added\r\n\r\n### 3. Interactive Mode - OpenRouter as Embedding Fallback\r\n\r\n```bash\r\nelizaos create test-claude-openrouter\r\n# Select: Claude as AI model\r\n# Select: OpenRouter as embedding model\r\n```\r\n\r\n**Verify:**\r\n- `.env` contains `ANTHROPIC_API_KEY=`\r\n- `.env` contains `OPENROUTER_API_KEY=`\r\n- `.env` contains `OPENROUTER_EMBEDDING_MODEL=` and `OPENROUTER_EMBEDDING_DIMENSIONS=`\r\n\r\n### 4. Non-Interactive Mode\r\n\r\n```bash\r\nelizaos create test-noninteractive --ai-model openrouter --non-interactive\r\n```\r\n\r\n**Verify:**\r\n- `.env` created with placeholder: `OPENROUTER_API_KEY=your_openrouter_api_key_here`\r\n- Comment included: `# Get your API key from: https://openrouter.ai/keys`\r\n- Default embedding model and dimensions added\r\n\r\n### 5. Regression Testing - Other Providers\r\n\r\n```bash\r\n# Verify other providers still work correctly\r\nelizaos create test-openai --ai-model openai --non-interactive\r\nelizaos create test-ollama --ai-model local --non-interactive\r\nelizaos create test-google --ai-model google --non-interactive\r\n```\r\n\r\n**Expected:** All providers create projects successfully with correct `.env` configurations\r\n\r\n### 6. Optional: E2E Testing with Real API Key\r\n\r\n```bash\r\n# With a real OpenRouter API key\r\nexport OPENROUTER_API_KEY=sk-or-v1-xxx...\r\nexport OPENROUTER_EMBEDDING_MODEL=openai/text-embedding-3-small\r\nexport OPENROUTER_EMBEDDING_DIMENSIONS=1536\r\ncd packages/cli\r\nbun run test:e2e\r\n```\r\n\r\n## Discord username\r\n\r\n<!-- If applicable, add your Discord username here for contributor role -->\r\nneysixx",
      "repository": "elizaos/eliza",
      "createdAt": "2025-11-11T14:06:17Z",
      "mergedAt": null,
      "additions": 79,
      "deletions": 4
    }
  ],
  "codeChanges": {
    "additions": 237,
    "deletions": 21,
    "files": 4,
    "commitCount": 14
  },
  "completedItems": [
    {
      "title": "fix: RLS (Row-Level Security) server_id validation checks blocking all users when RLS isolation is disabled.",
      "prNumber": 6139,
      "type": "bugfix",
      "body": "# Relates to\r\n\r\nFix for RLS (Row-Level Security) server_id validation checks blocking all users when RLS isolation is disabled.\r\n\r\nMaybe: https://github.com/elizaOS/eliza/issues/6138\r\n\r\n# Risks\r\n\r\n**Low**. Changes only affect RLS security c",
      "files": [
        "packages/server/src/__tests__/rls-server.test.ts",
        "packages/server/src/api/messaging/channels.ts",
        "packages/server/src/api/messaging/core.ts",
        "packages/server/src/utils/rls-validation.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 43.71664395529749,
      "prScore": 43.71664395529749,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "rferrari",
      "avatarUrl": "https://avatars.githubusercontent.com/u/495887?u=5a56d90f584ffc1827bb301541076597dca9cb3e&v=4",
      "totalScore": 34.77887055267063,
      "prScore": 34.57887055267063,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "Neysixx",
      "avatarUrl": "https://avatars.githubusercontent.com/u/115616810?u=94c403172b4ffda30d6fc765f5997631fb7d1ef1&v=4",
      "totalScore": 22.861633597686627,
      "prScore": 22.861633597686627,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 13.740714505495397,
      "prScore": 13.740714505495397,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 4.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 4.5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "github-advanced-security",
      "avatarUrl": "https://avatars.githubusercontent.com/in/57789?v=4",
      "totalScore": 4.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 4.5,
      "commentScore": 0,
      "summary": null
    }
  ],
  "newPRs": 1,
  "mergedPRs": 1,
  "newIssues": 0,
  "closedIssues": 0,
  "activeContributors": 4
}