{
  "interval": {
    "intervalStart": "2025-11-09T00:00:00.000Z",
    "intervalEnd": "2025-11-16T00:00:00.000Z",
    "intervalType": "week"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-11-09 to 2025-11-16, elizaos/eliza had 9 new PRs (5 merged), 10 new issues, and 15 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7XCsUe",
      "title": "Bug: Disabling Web UI blocks all endpoints",
      "author": "humuhimi",
      "number": 6138,
      "repository": "elizaos/eliza",
      "body": "",
      "createdAt": "2025-11-10T12:26:11Z",
      "closedAt": "2025-11-10T12:47:31Z",
      "state": "CLOSED",
      "commentCount": 2
    },
    {
      "id": "I_kwDOMT5cIs7V1IUp",
      "title": "Dashboard Redesign",
      "author": "borisudovicic",
      "number": 6119,
      "repository": "elizaos/eliza",
      "body": "* Rebuild “My Agents” dashboard using new Figma layout.\n* Add sidebar navigation (Agents + Settings only).\n* Implement agent list, filters, and overview metrics.\n* Integrate with Diogo’s new layout system.",
      "createdAt": "2025-11-04T17:05:41Z",
      "closedAt": "2025-11-14T13:35:29Z",
      "state": "CLOSED",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs7XJ6X_",
      "title": "Error      [E.v.A] MessageBusService: Error processing message via elizaOS.sendMessage() No handler found for delegate type: TEXT_LARGE",
      "author": "christophwallacher-web",
      "number": 6140,
      "repository": "elizaos/eliza",
      "body": "**Describe the bug**\n\nAgent dont answer on any questions\n\n**To Reproduce**\n\nstart from gitbash von windows\n\n**Expected behavior**\n\nagent should answer to all question like norma\n\n\n**Additional context**\n\n Warn       [MessageService] Updating response ID for room aea8a296-5161-09ee-9abc-3129a271ff2b from 466795e9-830c-4431-a973-cf9315978eef to a3d87c43-15f0-48e0-aa79-33f10306b33a\n Info       Using server ID: 00000000-0000-0000-0000-000000000000\n Info       No ownership data found for server 00000000-0000-0000-0000-000000000000, initializing empty role hierarchy\n Info       No settings state found for server 00000000-0000-0000-0000-000000000000\nerror is 45963 |     const modelKey = typeof modelType === \"string\" ? modelType : ModelType[modelType];\n45964 |     const promptContent = params?.prompt || params?.input || (Array.isArray(params?.messages) ? JSON.stringify(params.messages) : null);\n45965 |     const model = this.getModel(modelKey, provider);\n45966 |     if (!model) {\n45967 |       const errorMsg = `No handler found for delegate type: ${modelKey}`;\n45968 |       throw new Error(errorMsg);\n                        ^\nerror: No handler found for delegate type: TEXT_LARGE\n      at useModel (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:45968:17)\n      at useModel (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:45962:18)\n      at runSingleShotCore (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:43483:38)\n      at async processMessage (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:43165:126)\n\n Error      #E.v.A  [MessageService] Error in handleMessage: {\n  error: 45963 |     const modelKey = typeof modelType === \"string\" ? modelType : ModelType[modelType];\n45964 |     const promptContent = params?.prompt || params?.input || (Array.isArray(params?.messages) ? JSON.stringify(params.messages) : null);\n45965 |     const model = this.getModel(modelKey, provider);\n45966 |     if (!model) {\n45967 |       const errorMsg = `No handler found for delegate type: ${modelKey}`;\n45968 |       throw new Error(errorMsg);\n                        ^\nerror: No handler found for delegate type: TEXT_LARGE\n      at useModel (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:45968:17)\n      at useModel (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:45962:18)\n      at runSingleShotCore (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:43483:38)\n      at async processMessage (C:\\Users\\NOTE1\\eva\\node_modules\\@elizaos\\core\\dist\\node\\index.node.js:43165:126)\n,\n}\n Error      [E.v.A] MessageBusService: Error processing message via elizaOS.sendMessage() No handler found for delegate type: TEXT_LARGE\n\n",
      "createdAt": "2025-11-10T21:07:59Z",
      "closedAt": null,
      "state": "OPEN",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs7X8SO9",
      "title": "Migration",
      "author": "nikatuz8-cell",
      "number": 6149,
      "repository": "elizaos/eliza",
      "body": "Hello,\nI have AI16Z tokens currently held in my Phantom wallet. I am trying to swap them for the new ELIZAOS tokens via the official website/migration portal, but I am encountering issues and the process is failing.\nCould you please provide step-by-step instructions on how to properly migrate or swap these tokens directly from a personal wallet like Phantom?\nAny guidance or clarification would be greatly appreciated.\nThank you",
      "createdAt": "2025-11-13T21:32:55Z",
      "closedAt": "2025-11-14T13:35:58Z",
      "state": "CLOSED",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs7X7kCl",
      "title": "Plugin Submission: Coin Railz x402 Micropayment Services",
      "author": "tdnupe3",
      "number": 6148,
      "repository": "elizaos/eliza",
      "body": "## Plugin Submission Request\n\n**Repository:** https://github.com/tdnupe3/coinrailz-eliza-plugin  \n**Type:** x402 protocol infrastructure plugin  \n**Status:** Production-ready\n\n### Overview\nThis plugin adds x402 micropayment protocol support for ElizaOS agents, enabling autonomous payment for API services using USDC on Base mainnet.\n\n**Technical Capabilities:**\n- Multi-chain balance queries\n- Gas price monitoring across chains\n- Token price feeds and metadata\n- Smart contract analysis\n- Wallet risk scoring\n- DEX liquidity data\n- Transaction building utilities\n- Cross-chain bridging\n\n**Protocol:** x402 (HTTP 402 Payment Required) with Coinbase CDP facilitator  \n**Network:** Base mainnet  \n**Payment Token:** USDC\n\n### Technical Features\n✅ Full TypeScript implementation with type definitions  \n✅ Automatic x402 payment handling  \n✅ Coinbase CDP facilitator integration  \n✅ Comprehensive documentation\n\n### Installation\n```bash\nnpm install github:tdnupe3/coinrailz-eliza-plugin\n\nUsage\n\nimport { coinrailzPlugin } from 'coinrailz-eliza-plugin';\n\nconst agent = new Agent({\n  plugins: [coinrailzPlugin]\n});\n\nPlease review for inclusion in the ElizaOS plugin ecosystem.",
      "createdAt": "2025-11-13T20:29:18Z",
      "closedAt": null,
      "state": "OPEN",
      "commentCount": 1
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6zHHko",
      "title": "fix: plugin-mysql support, initPromise and other minor fixes",
      "author": "odilitime",
      "number": 6143,
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Adds conditional MySQL vs SQL plugin selection (with URL validation and MySQL no-op migrations), introduces runtime initPromise, updates mocks, and adds comprehensive tests.\n> \n> - **Server**:\n>   - **Database plugin selection**: Dynamically load `@elizaos/plugin-mysql` when `MYSQL_URL` is set; otherwise use `@elizaos/plugin-sql`.\n>   - **Utilities**: Add `validateAndLogMySQLUrl` and `MySQLNoOpMigrationService` for MySQL.\n>   - **RLS**: Enable only for PostgreSQL; skip/cleanup when using MySQL.\n>   - **DB ops**: Parameterized default server creation with dialect-specific upsert (`ON DUPLICATE KEY UPDATE` vs `ON CONFLICT`).\n>   - **Logging**: Trim verbose route-matching logs; minor try/catch cleanup.\n> - **CLI (Scenario)**:\n>   - Plugin selection prefers MySQL when `MYSQL_URL` or explicit plugin present; otherwise SQL.\n>   - Avoid loading both `plugin-sql` and `plugin-mysql`; only set `PGLITE_DATA_DIR` for SQL.\n> - **Core**:\n>   - Add `initPromise: Promise<void>` to `IAgentRuntime`.\n> - **Test Utils**:\n>   - Mock runtime gains pending `initPromise` with `resolveInit`/`rejectInit`; mocks migrated to `bun:test`.\n> - **Tests**:\n>   - New tests for scenario plugin selection, server MySQL compatibility/behavior, and runtime/mock `initPromise` semantics.\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 96c2b1df774f0e6c889e7ac22a33d9e03599c317. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added support for flexible database provider selection, allowing configuration with either MySQL or PostgreSQL through environment variables.\n\n* **Improvements**\n  * Updated security features to conditionally enable based on your database provider.\n  * Enhanced Content Security Policy configuration and database initialization flow.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-11-13T01:58:45Z",
      "mergedAt": null,
      "additions": 2015,
      "deletions": 369
    },
    {
      "id": "PR_kwDOMT5cIs6yoPHs",
      "title": "fix: load environment variables from process.env instead of .env file",
      "author": "standujar",
      "number": 6141,
      "body": "## Relates to\r\n\r\nFixes the issue where `runtime.getSetting(\"ANY_VARIABLES\")` returns `undefined` when environment variables are exported on the host (`export VAR=value`) instead of being defined in a `.env` file, causing agents to use incorrect configuration or fallback to defaults.\r\n\r\n## Risks\r\n\r\n**Low**\r\n\r\n## Background\r\n\r\n### What does this PR do?\r\n\r\nThis PR fixes environment variable loading to work correctly with exported shell variables, not just `.env` files:\r\n\r\n1. **Changes `loadSecretsNodeImpl()`** to read directly from `process.env` instead of re-reading the `.env` file\r\n2. **Creates centralized `loadEnvFile()`** function in `core/utils/environment.ts` for consistent `.env` file loading\r\n3. **Updates CLI and Server** to use the centralized function\r\n4. **Updates all tests** to reflect the new behavior\r\n\r\n### What kind of change is this?\r\n\r\n- ✅ **Bug fixes** (non-breaking change which fixes an issue)\r\n- ✅ **Improvements** (misc. changes to existing features)\r\n\r\n### Why are we doing this?\r\n\r\n#### Problem Discovered\r\n\r\nWhen running agents in environments where variables are exported directly on the host system (e.g., `export POSTGRES_URL=postgresql://...`), the variables were not accessible via `runtime.getSetting()`, even though they were correctly set in the environment.\r\n\r\n**Testing confirmed the issue**:\r\n- ✅ With `.env` file: Works\r\n- ❌ With `export POSTGRES_URL=...`: **Doesn't work**\r\n- ❌ With system environment variables: **Doesn't work**\r\n\r\nThis is problematic for:\r\n- Production deployments where secrets are managed via exported environment variables\r\n- Container orchestration systems (Docker, ECS, Kubernetes) that inject env vars\r\n- CI/CD pipelines that set variables programmatically\r\n- Development workflows that prefer `export` over `.env` files\r\n\r\n#### Root Cause\r\n\r\nThe `loadSecretsNodeImpl()` function in `packages/core/src/secrets.ts` was:\r\n1. **Only** reading the `.env` FILE directly using `fs.readFileSync()`\r\n2. Parsing it with `dotenv.parse()`\r\n3. Merging those parsed values into `character.settings`\r\n\r\nThis approach **completely ignored** `process.env`, which contains:\r\n- Variables loaded from `.env` by the CLI (via `dotenv.config()`)\r\n- **Exported shell variables** (`export FOO=bar`) ← **Main issue**\r\n- Container-injected environment variables\r\n- System environment variables\r\n\r\n**Why was this a problem?**\r\n\r\nWhen you run:\r\n```bash\r\nexport POSTGRES_URL=postgresql://production:5432/eliza\r\nbunx elizaos start --character=./characters/sample.json\r\n```\r\n\r\nThe variable is in `process.env`, but `loadSecretsNodeImpl()` was looking for a `.env` file instead. If no `.env` file existed, it would fail to load ANY environment variables, even though they were available in `process.env`.\r\n\r\n#### Solution\r\n\r\nThe fix reads `process.env` directly instead of re-reading the `.env` file\r\n\r\n**Why this works:**\r\n\r\n1. **When using `.env` files**: The CLI calls `dotenv.config()` which loads `.env` → `process.env`\r\n2. **When using exported variables**: Shell already puts them in `process.env`\r\n3. **When using container env vars**: Runtime injects them into `process.env`\r\n4. **Result**: `loadSecretsNodeImpl()` now sees ALL variables, regardless of source\r\n\r\n## Documentation changes needed?\r\n\r\n- ✅ My changes do not require a change to the project documentation.\r\n\r\nThe behavior is now more intuitive - environment variables work as expected from any source. No user-facing documentation changes needed.\r\n\r\n## Testing\r\n\r\n### Where should a reviewer start?\r\n\r\n1. Review the changes in [packages/core/src/secrets.ts](packages/core/src/secrets.ts:26-66) - the core fix\r\n2. Review [packages/core/src/utils/environment.ts](packages/core/src/utils/environment.ts:384-410) - centralized `loadEnvFile()`\r\n3. Check test updates in [packages/core/src/__tests__/secrets.test.ts](packages/core/src/__tests__/secrets.test.ts:76-190)\r\n4. Verify CLI integration in [packages/cli/src/commands/start/index.ts](packages/cli/src/commands/start/index.ts:38-46)\r\n5. Verify Server integration in [packages/server/src/index.ts](packages/server/src/index.ts:332)\r\n\r\n### Detailed testing steps\r\n\r\n#### Automated Tests\r\n\r\n```bash\r\ncd packages/core\r\nbun test\r\n\r\n# Results:\r\n# ✅ 675 pass\r\n# ❌ 0 fail\r\n# ⏭️ 4 skip\r\n```\r\n\r\nAll tests pass, including:\r\n- `secrets.test.ts` - 8 tests verifying environment variable loading\r\n- `settings.test.ts` - 49 tests verifying character settings merge\r\n- `environment.test.ts` - 29 tests verifying environment abstraction\r\n\r\n#### Manual Testing\r\n\r\n**Test 1: .env file (already working, should still work)**\r\n```bash\r\necho 'POSTGRES_URL=postgresql://localhost:5432/test' > .env\r\nbunx elizaos start --character=./characters/sample.json\r\n# ✅ Agent uses POSTGRES_URL from .env file\r\n```\r\n\r\n**Test 2: Exported environment variable (was broken, NOW FIXED)**\r\n```bash\r\n# Remove .env file to test pure exported variables\r\nrm -f .env\r\n\r\nexport POSTGRES_URL=postgresql://localhost:5432/test\r\nexport OPENAI_API_KEY=sk-test-key\r\nbunx elizaos start --character=./characters/sample.json\r\n\r\n# ✅ Agent now correctly reads exported variables (FIXED)\r\n# ✅ runtime.getSetting(\"POSTGRES_URL\") returns the correct value\r\n```\r\n\r\n**Test 3: Mixed approach (both .env and exports)**\r\n```bash\r\n# .env has some vars\r\necho 'POSTGRES_URL=postgresql://localhost:5432/test' > .env\r\n\r\n# Override with export (export should win because it's already in process.env)\r\nexport POSTGRES_URL=postgresql://production:5432/eliza\r\nbunx elizaos start --character=./characters/sample.json\r\n\r\n# ✅ Uses the exported value (not the .env value)\r\n```\r\n\r\n**Test 4: Server standalone (without CLI)**\r\n```typescript\r\nimport { AgentServer } from '@elizaos/server';\r\n\r\n// Set env var before importing\r\nprocess.env.POSTGRES_URL = 'postgresql://localhost:5432/test';\r\n\r\nconst server = new AgentServer();\r\nawait server.start({\r\n  port: 3000,\r\n  agents: [{ character: myCharacter }]\r\n});\r\n// ✅ Works because Server calls loadEnvFile() at initialization\r\n```\r\n\r\n## Environment Variable Loading Flow (After Fix)\r\n\r\n```\r\n┌─────────────────────────────────────────────────────────────┐\r\n│                     Deployment Context                       │\r\n└─────────────────────────────────────────────────────────────┘\r\n                              │\r\n                              ▼\r\n        ┌─────────────────────────────────────────────┐\r\n        │          Where do env vars come from?       │\r\n        └─────────────────────────────────────────────┘\r\n                              │\r\n           ┌──────────────────┼──────────────────┐\r\n           │                  │                  │\r\n           ▼                  ▼                  ▼\r\n    ┌──────────┐      ┌──────────┐      ┌──────────┐\r\n    │.env file │      │ export   │      │ System   │\r\n    │  (CLI)   │      │VAR=value │      │ env vars │\r\n    └──────────┘      └──────────┘      └──────────┘\r\n           │                  │                  │\r\n           │                  │                  │\r\n           └──────────────────┼──────────────────┘\r\n                              │\r\n                              ▼\r\n                       ┌─────────────┐\r\n                       │ process.env │ ← All sources merged here\r\n                       └─────────────┘\r\n                              │\r\n                              ▼\r\n                    ┌──────────────────┐\r\n                    │loadSecretsNodeImpl│ ← Reads process.env\r\n                    └──────────────────┘\r\n                              │\r\n                              ▼\r\n                  ┌────────────────────────┐\r\n                  │character.settings.secrets│\r\n                  └────────────────────────┘\r\n                              │\r\n                              ▼\r\n                      ┌──────────────┐\r\n                      │runtime.getSetting()│ ✅ Works!\r\n                      └──────────────┘\r\n```\r\n\r\n## Benefits\r\n\r\n1. ✅ **Exported variables work** - `export FOO=bar` is now accessible (main fix)\r\n2. ✅ **No `.env` file required** - Works in environments without `.env` files\r\n3. ✅ **Backward compatible** - `.env` files still work as before\r\n4. ✅ **Production-ready** - Secrets can be injected via environment, not files\r\n5. ✅ **Container-friendly** - Works with Docker, ECS, Kubernetes env injection\r\n6. ✅ **Simpler code** - No need to re-read `.env` file\r\n7. ✅ **Consistent behavior** - Works the same in all environments\r\n8. ✅ **Idempotent** - Safe to call `loadEnvFile()` multiple times",
      "repository": "elizaos/eliza",
      "createdAt": "2025-11-10T21:55:04Z",
      "mergedAt": "2025-11-12T11:03:00Z",
      "additions": 363,
      "deletions": 284
    },
    {
      "id": "PR_kwDOMT5cIs6xNLv_",
      "title": "feat: add ElizaOS reference to runtime",
      "author": "standujar",
      "number": 6111,
      "body": "<!-- Use this template by filling in information and copying and pasting relevant items out of the HTML comments. -->\r\n\r\n# Relates to\r\n\r\nRelates to #6095 - Unified messaging API\r\n\r\n# Risks\r\n\r\n**Low risk**\r\n\r\nThis change is non-breaking and fully backward compatible:\r\n- Adds optional `elizaOS?` property to runtime (existing code unaffected)\r\n- Only affects plugins that explicitly use `runtime.elizaOS`\r\n- Includes proper cleanup to prevent memory leaks\r\n- Well-tested with plugin-discord integration\r\n\r\nPotential areas affected:\r\n- Runtime lifecycle (addition of ElizaOS reference)\r\n- Memory management (cleanup in `stop()`)\r\n- Plugin development patterns (new unified API access)\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nThis PR enables plugins to access the unified messaging API (`elizaOS.sendMessage()`) introduced in #6095 by adding an optional reference to the ElizaOS instance in the runtime.\r\n\r\n**Key changes:**\r\n- Created `IElizaOS` interface for clean abstraction\r\n- Added `elizaOS?: IElizaOS` property to `IAgentRuntime`\r\n- Added `hasElizaOS()` type guard helper\r\n- ElizaOS auto-assigns itself to runtimes during registration\r\n- Added cleanup in `runtime.stop()` to prevent memory leaks\r\n\r\n**Benefits:**\r\n- Plugins can now use `runtime.elizaOS.sendMessage()` for standardized messaging\r\n- Type-safe access with `hasElizaOS()` guard\r\n- Auto-filling, connection management, SYNC/ASYNC modes\r\n- Clean architecture with no circular dependencies\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\r\n## Why are we doing this?\r\n\r\nThe unified messaging API (#6095) provides a standardized entry point for sending messages to agents, but plugins currently have no way to access it. They must use `messageService.handleMessage()` directly, which bypasses the benefits of the unified API (auto-filling, connection management, callbacks, etc.).\r\n\r\nThis PR solves that by giving the runtime a reference to its parent ElizaOS instance, allowing plugins to call `runtime.elizaOS.sendMessage()` when available, while maintaining a fallback for standalone mode.\r\n\r\n# Documentation changes needed?\r\n\r\n- [x] My changes require a change to the project documentation.\r\n- [ ] If documentation change is needed: I have updated the documentation accordingly.\r\n\r\n**Documentation needed:**\r\n- Plugin development guide should mention `runtime.elizaOS.sendMessage()` API\r\n- Example usage in plugin templates\r\n- Migration guide for existing plugins (optional, recommended)\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\n1. Review the architecture: `packages/core/src/types/elizaos.ts` - new interface\r\n2. Check runtime changes: `packages/core/src/types/runtime.ts` and `packages/core/src/runtime.ts`\r\n3. Verify ElizaOS auto-assignment: `packages/core/src/elizaos.ts` lines 158 and 203\r\n4. Look at cleanup: `packages/core/src/runtime.ts` line 384\r\n\r\n## Detailed testing steps\r\n\r\n**Automated:**\r\n- [x] TypeScript compilation passes\r\n- [x] No circular dependencies\r\n- [x] Type safety verified\r\n\r\n**Manual testing (with plugin-discord):**\r\n- [x] Runtime has `elizaOS` reference after initialization\r\n- [x] `hasElizaOS()` returns `true` when ElizaOS is present\r\n- [x] Plugins can call `runtime.elizaOS.sendMessage()` successfully\r\n- [x] Fallback to `messageService.handleMessage()` works when ElizaOS is undefined\r\n- [x] Memory cleanup on `runtime.stop()` works correctly\r\n\r\n**Test with plugin-discord:**\r\n```typescript\r\n// In plugin-discord/src/messages.ts\r\nif (this.runtime.hasElizaOS()) {\r\n  // Uses unified API - confirmed via logs\r\n  await this.runtime.elizaOS.sendMessage(agentId, message, options);\r\n} else {\r\n  // Fallback for standalone\r\n  await this.runtime.messageService.handleMessage(runtime, message, callback);\r\n}\r\n```\r\n\r\nLogs confirm unified API is used:\r\n```\r\nInfo [Discord] Using unified messaging API\r\n```",
      "repository": "elizaos/eliza",
      "createdAt": "2025-11-03T14:51:50Z",
      "mergedAt": "2025-11-12T16:26:21Z",
      "additions": 312,
      "deletions": 69
    },
    {
      "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_kwDOMT5cIs6zfDfx",
      "title": "fix: migrate from LangChain v0.3 to @langchain/textsplitters v1.0",
      "author": "0xbbjoker",
      "number": 6152,
      "body": "- Replace langchain dependency with @langchain/textsplitters in @elizaos/core\r\n- Update import from 'langchain/text_splitter' to '@langchain/textsplitters'\r\n- Remove outdated langchain resolutions from plugin starter packages\r\n- Add comprehensive test coverage for splitChunks functionality\r\n- All 89 tests passing with new LangChain v1 integration\r\n\r\nThis addresses the deprecation of LangChain v0.3 by migrating to the\r\nmodular @langchain/textsplitters package which is part of the LangChain v1\r\necosystem. The migration maintains full backward compatibility while\r\nreducing bundle size and future-proofing the codebase.\r\n\r\nFixes #6145\r\n\r\nhttps://github.com/elizaOS/eliza/issues/6145#event-20943795877\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> Migrates core from langchain/text_splitter to @langchain/textsplitters v1, updates deps, removes plugin langchain resolutions, and expands splitChunks tests.\n> \n> - **Core (@elizaos/core)**\n>   - **Dependencies**: Add `@langchain/textsplitters@^1.0.0`; remove `langchain`.\n>   - **Code**: Switch import in `src/utils.ts` to `@langchain/textsplitters` and use `RecursiveCharacterTextSplitter` in `splitChunks`.\n>   - **Tests**: Expand `splitChunks` coverage in `src/__tests__/utils.test.ts` (empty input, overlap behavior, large chunk sizes, v1 splitter validation).\n> - **Plugins**\n>   - **Starter templates**: Remove `langchain`-related `resolutions/overrides`; retain `zod` resolution only in `packages/plugin-quick-starter` and `packages/plugin-starter`.\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fa89f69859ea02c64bbab119021ab889174a52d5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-11-14T15:47:47Z",
      "mergedAt": "2025-11-17T18:18:23Z",
      "additions": 160,
      "deletions": 94
    }
  ],
  "codeChanges": {
    "additions": 992,
    "deletions": 462,
    "files": 29,
    "commitCount": 61
  },
  "completedItems": [
    {
      "title": "feat: add ElizaOS reference to runtime",
      "prNumber": 6111,
      "type": "feature",
      "body": "<!-- Use this template by filling in information and copying and pasting relevant items out of the HTML comments. -->\r\n\r\n# Relates to\r\n\r\nRelates to #6095 - Unified messaging API\r\n\r\n# Risks\r\n\r\n**Low risk**\r\n\r\nThis change is non-breaking and ",
      "files": [
        "packages/core/src/__tests__/elizaos.test.ts",
        "packages/core/src/elizaos.ts",
        "packages/core/src/runtime.ts",
        "packages/core/src/types/elizaos.ts",
        "packages/core/src/types/index.ts",
        "packages/core/src/types/runtime.ts",
        "packages/plugin-sql/src/__tests__/integration/postgres-init.test.ts",
        "packages/plugin-sql/src/__tests__/unit/index.test.ts",
        "packages/project-starter/src/__tests__/utils/core-test-utils.ts",
        "packages/project-tee-starter/src/__tests__/utils/core-test-utils.ts",
        "packages/server/src/__tests__/integration/jobs-message-flow.test.ts",
        "packages/core/src/__tests__/runtime-embedding.test.ts"
      ]
    },
    {
      "title": "fix(plugin-sql): correct types path in package.json exports",
      "prNumber": 6134,
      "type": "bugfix",
      "body": "- Fix incorrect types path from ./types/index.d.ts to ./dist/index.d.ts\r\n- Remove non-existent 'types' directory from files array\r\n- Resolves TypeScript import errors when using @elizaos/plugin-sql\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> ",
      "files": [
        "bun.lock",
        "packages/plugin-sql/package.json"
      ]
    },
    {
      "title": "fix: load environment variables from process.env instead of .env file",
      "prNumber": 6141,
      "type": "bugfix",
      "body": "## Relates to\r\n\r\nFixes the issue where `runtime.getSetting(\"ANY_VARIABLES\")` returns `undefined` when environment variables are exported on the host (`export VAR=value`) instead of being defined in a `.env` file, causing agents to use incor",
      "files": [
        "bun.lock",
        "packages/cli/src/commands/start/index.ts",
        "packages/core/src/__tests__/secrets.test.ts",
        "packages/core/src/__tests__/settings.test.ts",
        "packages/core/src/__tests__/utils/environment.test.ts",
        "packages/core/src/secrets.ts",
        "packages/core/src/utils/environment.ts",
        "packages/server/src/index.ts"
      ]
    },
    {
      "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"
      ]
    },
    {
      "title": "fix(build): resolve TypeScript declaration generation errors",
      "prNumber": 6146,
      "type": "bugfix",
      "body": "- Add missing hasElizaOS() method to test-utils mock runtime\r\n  * Implements required type predicate from IAgentRuntime interface\r\n  * Returns false by default for test scenarios\r\n\r\n- Fix plugin-sql TypeScript declaration generation\r\n  * Ov",
      "files": [
        "bun.lock",
        "packages/plugin-sql/build.ts",
        "packages/plugin-sql/tsconfig.build.json",
        "packages/plugin-sql/tsconfig.build.node.json",
        "packages/test-utils/src/mocks/runtime.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 95.20446258167225,
      "prScore": 72.82446258167224,
      "issueScore": 0,
      "reviewScore": 21.5,
      "commentScore": 0.8799999999999999,
      "summary": null
    },
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 89.25863316474536,
      "prScore": 84.05863316474537,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 83.96941785187359,
      "prScore": 83.5694178518736,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.4,
      "summary": null
    },
    {
      "username": "rferrari",
      "avatarUrl": "https://avatars.githubusercontent.com/u/495887?u=5a56d90f584ffc1827bb301541076597dca9cb3e&v=4",
      "totalScore": 36.77887055267063,
      "prScore": 34.57887055267063,
      "issueScore": 2,
      "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": "tungpun",
      "avatarUrl": "https://avatars.githubusercontent.com/u/5058370?u=59cb956de322867be56c0abee49ab3f28f819e2f&v=4",
      "totalScore": 13.943573590279971,
      "prScore": 13.943573590279971,
      "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": "nguyennk92",
      "avatarUrl": "https://avatars.githubusercontent.com/u/30664183?u=d6e579cd25d50bc8e9ec4928d95909d759b841db&v=4",
      "totalScore": 12.345835825288448,
      "prScore": 12.145835825288449,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "borisudovicic",
      "avatarUrl": "https://avatars.githubusercontent.com/u/31806472?u=8935f4d43fd7e4eb9bf5ff92d54d4d2f8ac8a786&v=4",
      "totalScore": 6.2,
      "prScore": 0,
      "issueScore": 6,
      "reviewScore": 0,
      "commentScore": 0.2,
      "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
    },
    {
      "username": "humuhimi",
      "avatarUrl": "https://avatars.githubusercontent.com/u/35215680?u=029a1ed6ea6a26ebf1cfd081cba6af2e6d32ef6d&v=4",
      "totalScore": 4.3,
      "prScore": 0,
      "issueScore": 4.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
    },
    {
      "username": "skurzyp",
      "avatarUrl": "https://avatars.githubusercontent.com/u/98319381?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "samarth30",
      "avatarUrl": "https://avatars.githubusercontent.com/u/48334430?u=1fc119a6c2deb8cf60448b4c8961cb21dc69baeb&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "nikatuz8-cell",
      "avatarUrl": "https://avatars.githubusercontent.com/u/243873833?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "christophwallacher-web",
      "avatarUrl": "https://avatars.githubusercontent.com/u/233379771?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    }
  ],
  "newPRs": 9,
  "mergedPRs": 5,
  "newIssues": 10,
  "closedIssues": 15,
  "activeContributors": 15
}