{
  "interval": {
    "intervalStart": "2025-12-28T00:00:00.000Z",
    "intervalEnd": "2026-01-04T00:00:00.000Z",
    "intervalType": "week"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-12-28 to 2026-01-04, elizaos/eliza had 9 new PRs (7 merged), 23 new issues, and 11 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7geh-S",
      "title": "Get rid of token button on dashboard",
      "author": "borisudovicic",
      "number": 6287,
      "repository": "elizaos/eliza",
      "body": "",
      "createdAt": "2025-12-28T23:20:27Z",
      "closedAt": "2025-12-29T14:35:48Z",
      "state": "CLOSED",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs7gADwf",
      "title": "Add feedback button",
      "author": "borisudovicic",
      "number": 6280,
      "repository": "elizaos/eliza",
      "body": "For users to submit feedback",
      "createdAt": "2025-12-23T17:55:16Z",
      "closedAt": "2025-12-29T14:35:47Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7f_y2i",
      "title": "Chat Renaming",
      "author": "borisudovicic",
      "number": 6278,
      "repository": "elizaos/eliza",
      "body": "Summarize chat name",
      "createdAt": "2025-12-23T17:21:47Z",
      "closedAt": "2025-12-29T14:35:48Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7gKJ81",
      "title": "Fix monorepo docs",
      "author": "linear",
      "number": 6284,
      "repository": "elizaos/eliza",
      "body": "",
      "createdAt": "2025-12-24T17:31:42Z",
      "closedAt": "2025-12-30T18:45:34Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7gJ_l_",
      "title": "Issues with spacing in numbered items",
      "author": "borisudovicic",
      "number": 6283,
      "repository": "elizaos/eliza",
      "body": "\n<img src=\"https://uploads.linear.app/186bdefa-3633-464a-80cd-6e86fe765a5c/7fc88e8a-528f-4a34-a929-dcff3e7e22ff/f1aaa49d-d7b9-4fee-ae9c-15ea433a0cd4?signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXRoIjoiLzE4NmJkZWZhLTM2MzMtNDY0YS04MGNkLTZlODZmZTc2NWE1Yy83ZmM4OGU4YS01MjhmLTRhMzQtYTkyOS1kY2ZmM2U3ZTIyZmYvZjFhYWE0OWQtZDdiOS00ZmVlLWFlOWMtMTVlYTQzM2EwY2Q0IiwiaWF0IjoxNzY2NTk1NDg3LCJleHAiOjE3OTgxNjYwNDd9.5u6brrhFoZsckFV9YiGcPrX89Anb262ksBobSIEX_ok \" alt=\"Screenshot 2025-12-24 at 17.57.29.png\" width=\"1181\" data-linear-height=\"675\" />",
      "createdAt": "2025-12-24T16:58:07Z",
      "closedAt": "2025-12-30T18:45:34Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6v8hih",
      "title": "feat(server): Add x402 payment middleware to Jobs API",
      "author": "wtfsayo",
      "number": 6099,
      "body": "## Summary\n\nThis PR adds x402 payment middleware integration to the Jobs API, enabling cryptocurrency payments for AI agent access.\n\n## Key Features\n\n### Flexible Authentication Modes\n- **Both API key + x402 enabled**: Requires BOTH `X-API-KEY` AND `X-PAYMENT` headers\n- **Only API key** (x402=false): Requires only `X-API-KEY` header  \n- **Only x402** (no API token): Requires only `X-PAYMENT` header\n- **Neither enabled**: No authentication required\n\n### Environment-Based Configuration\nAll settings via `.env` variables:\n- `X402_ENABLED` - Enable/disable payment middleware\n- `X402_WALLET_ADDRESS` - Receiving wallet address\n- `X402_PRICE` - Price in USDC (default: $0.01)\n- `X402_NETWORK` - Blockchain network (default: base-sepolia)\n- `X402_USE_MAINNET` - Use CDP facilitator for production\n- `CDP_API_KEY_ID`/`CDP_API_KEY_SECRET` - Required for mainnet\n\n### Auto-Discovery\nEndpoints automatically listed in x402 Bazaar (mainnet) with:\n- Full JSON schemas (input/output)\n- Descriptive documentation\n- Pricing information\n\n## Files Changed\n\n### New Files\n- `packages/server/src/middleware/x402.ts` - Main middleware implementation\n- `packages/server/src/middleware/__tests__/x402.test.ts` - Comprehensive test suite (12 tests)\n- `docs/x402-payment-integration.md` - Full documentation\n\n### Modified Files  \n- `packages/server/src/middleware/index.ts` - Export x402 middleware\n- `packages/server/src/api/messaging/jobs.ts` - Integrated x402 on POST /jobs route\n- `packages/server/package.json` - Added x402 dependencies\n- `bun.lock` - Lockfile update\n\n## Dependencies Added\n- `x402-express@0.7.0` - Express middleware for x402 protocol\n- `@coinbase/x402@0.7.0` - CDP facilitator for mainnet\n\n## Testing\n\n✅ All 12 unit tests passing  \n✅ Build successful\n✅ No linter errors\n✅ TypeScript types validated\n\nRun tests:\n```bash\ncd packages/server\nbun test src/middleware/__tests__/x402.test.ts\n```\n\n## Documentation\n\nSee `docs/x402-payment-integration.md` for:\n- Complete setup instructions\n- Configuration examples\n- Testing guide\n- Security considerations\n- Troubleshooting\n\n## Breaking Changes\n\nNone - x402 is disabled by default and completely optional.\n\n## References\n\n- [x402 Protocol Docs](https://docs.cdp.coinbase.com/x402/)\n- [x402 Quickstart for Sellers](https://docs.cdp.coinbase.com/x402/quickstart-for-sellers)\n- [Coinbase Developer Platform](https://cdp.coinbase.com)\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> Integrates x402 crypto payments into POST /api/messaging/jobs with env-configurable pricing/networks, adds docs/tests, and required dependencies.\n> \n> - **Server/Middleware**:\n>   - Add x402 payment middleware `createX402Middleware` and `x402LoggingMiddleware` in `packages/server/src/middleware/x402.ts`; export via `middleware/index.ts`.\n>   - Supports dual auth: API key and/or x402 (`X-API-KEY`, `X-PAYMENT`) with env-based config (`X402_*`, `CDP_*`).\n> - **API**:\n>   - Protect `POST /api/messaging/jobs` using x402; includes route metadata (input/output schemas) for Bazaar discovery.\n> - **Docs/Tests**:\n>   - Add `docs/x402-payment-integration.md` with setup, modes, and examples.\n>   - Add unit tests `packages/server/src/middleware/__tests__/x402.test.ts`.\n> - **Dependencies**:\n>   - Add `x402-express`, `@coinbase/x402`; update `packages/server/package.json`.\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 57ae3cf5914a740335e67133ada19951df0125e5. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-27T17:07:39Z",
      "mergedAt": null,
      "additions": 4066,
      "deletions": 262
    },
    {
      "id": "PR_kwDOMT5cIs67Avaq",
      "title": "feat: unified hooks with multi-transport support (HTTP/SSE/WebSocket)",
      "author": "standujar",
      "number": 6300,
      "body": "This PR introduces unified client hooks with multi-transport support and aligns transport naming between `api-client` and `server` packages.\r\n\r\n### Key Changes\r\n\r\n**Client Hooks (packages/client)**\r\n- New `useElizaChat` hook - unified interface for all transport types (websocket, sse, http)\r\n- New `useEliza` hook - simplified hook combining chat, agents, and server state\r\n- Transport-specific hooks: `useSocketChat`, `useSSEChat`, `useHTTPChat`\r\n- Lifecycle callbacks for custom side effects (onMessageAdded, onMessageUpdated, onError)\r\n\r\n**Server Transport Alignment (packages/server)**\r\n- Renamed `mode` → `transport` parameter across messaging endpoints\r\n- Transport types: `\"http\"` (sync), `\"sse\"` (streaming), `\"websocket\"` (async via Socket.IO)\r\n- Legacy `mode` parameter still supported for backward compatibility (deprecated)\r\n- Fixed double/triple message processing by separating DB persistence from bus emission\r\n\r\n**API Client (packages/api-client)**\r\n- Added `TransportType` export aligned with server\r\n- Updated session service to use transport types\r\n\r\n**Tests**\r\n- Integration tests for all 3 transports (http, sse, websocket)\r\n- Unit tests for response handlers and transport validation\r\n- Tests for new client hooks (useHTTPChat, useSSEChat)\r\n\r\n**Test Exemple**\r\n![IMG_0035](https://github.com/user-attachments/assets/9748f7f1-5763-4a67-ac52-7f981a22ed82)\r\n\r\n## Test plan\r\n\r\n- [x] Run server unit tests: `bun test packages/server/src/__tests__/unit/api/`\r\n- [x] Run client hook tests\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\n\n- Unifies client-side chat hooks providing a single interface for all transport types (websocket, sse, http) with lifecycle callbacks for custom side effects\n- Renames `mode` parameter to `transport` across messaging endpoints with backward compatibility mapping (sync→http, stream→sse) via `LEGACY_MODE_MAP`  \n- Fixes critical double/triple message processing issue by moving message bus emission to `onWebSocketTransport` callback for websocket transport only\n\n<h3>Important Files Changed</h3>\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/client/src/hooks/use-eliza-chat.ts | New unified hook supporting websocket, sse, and http transports with lifecycle callbacks and consistent interface |\n| packages/server/src/api/messaging/sessions.ts | Updated to use transport parameter, added onWebSocketTransport callback to emit to message bus, fixing double message processing |\n| packages/server/src/api/shared/validation.ts | Added validateTransport with legacy mode mapping support (sync→http, stream→sse) for backward compatibility |\n| packages/server/src/api/shared/constants.ts | Defined TransportType with LEGACY_MODE_MAP for backward compatibility mapping |\n\n<h3>Confidence score: 5/5</h3>\n\n\n- This PR is safe to merge with excellent backward compatibility and thorough test coverage\n- The refactoring maintains full backward compatibility through legacy mode mapping, includes comprehensive unit and integration tests for all transport types, follows consistent naming conventions, and properly fixes the double message processing issue\n- No files require special attention\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant User as User\n    participant Client as Client App\n    participant Router as Sessions Router\n    participant ElizaOS as ElizaOS\n    participant Agent as Agent Runtime\n    participant Database as Database\n    participant MessageBus as Message Bus\n\n    User->>Client: \"Send message\"\n    Client->>Router: \"POST /api/messaging/sessions/{sessionId}/messages\"\n    Router->>Database: \"Create message record\"\n    Database-->>Router: \"Message created\"\n    Router->>ElizaOS: \"handleMessage(agentId, messageMemory)\"\n    ElizaOS->>Agent: \"Process message\"\n    Agent->>Agent: \"Generate response\"\n    Agent-->>ElizaOS: \"Response content\"\n    ElizaOS-->>Router: \"Processing result\"\n    Router->>MessageBus: \"Emit new_message event\"\n    Router-->>Client: \"HTTP response with userMessage\"\n    MessageBus->>Agent: \"Process for agent response\"\n    Agent->>Agent: \"Generate agent reply\"\n    Agent-->>Client: \"Agent response via WebSocket\"\n    Client-->>User: \"Display conversation\"\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": "2025-12-30T18:53:17Z",
      "mergedAt": "2026-01-05T08:58:04Z",
      "additions": 3009,
      "deletions": 529
    },
    {
      "id": "PR_kwDOMT5cIs63dqrL",
      "title": "[DRAFT] feat(core): Implement parallel action execution in processActions",
      "author": "wtfsayo",
      "number": 6209,
      "body": "## Summary\n\nThis PR implements parallel action execution within the `processActions()` method to improve performance for multi-action responses.\n\n## Changes\n\n### Core Runtime (`packages/core/src/runtime.ts`)\n- Execute actions within a single response batch **in parallel** using `Promise.allSettled()`\n- All actions in a batch receive the **same initial state snapshot**\n- State accumulates **sequentially between response batches**\n- Merge all `ActionResult.values` after parallel batch completes\n- Preserve fault tolerance: if one action fails, others still complete\n\n### Prompts (`packages/core/src/prompts.ts`)\n- Updated `messageHandlerTemplate` to reflect parallel execution model\n- Changed \"IMPORTANT ACTION ORDERING RULES\" to \"IMPORTANT ACTION EXECUTION RULES\"\n- Clarified that actions listed in a single response execute in parallel\n- Added guidance to use multi-step workflow for sequential dependencies\n\n### Action State Provider (`packages/plugin-bootstrap/src/providers/actionState.ts`)\n- Updated JSDoc and description to clarify \"previous results\" refers to prior response batches, not sibling parallel actions\n\n### Tests\n- Updated `runtime.test.ts` to match new state initialization behavior\n- Updated `prompts.test.ts` to match new prompt text\n\n## Key Data Flow\n\n```\nResponse 1: [action1, action2, action3]\n  ├─> Execute ALL in parallel with initialState\n  ├─> Wait for all to complete\n  └─> Merge results → accumulatedState\n\nResponse 2: [action4, action5]\n  ├─> Execute ALL in parallel with accumulatedState from Response 1\n  ├─> Wait for all to complete\n  └─> Merge results → new accumulatedState\n```\n\n## Testing\n\n- All existing runtime tests pass\n- All prompt tests pass\n- All multi-step workflow tests pass\n- Action chaining tests pass\n\n## Breaking Changes\n\nNone - backward compatible. Actions that previously assumed sequential execution within a batch will now run in parallel, but since they all receive the same state snapshot, behavior should be equivalent for independent actions.\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> Execute actions in a response batch in parallel with a shared state snapshot, accumulate results across batches, and introduce AsyncLocalStorage-based prompt tracking with prompt/provider/test updates.\n> \n> - **Core (runtime.ts)**:\n>   - Parallelize `processActions` per response using `Promise.allSettled()`; each batch shares a composed state snapshot; accumulate `ActionResult.values` and plan state between batches.\n>   - Add robust action resolution (exact/fuzzy/similes), error paths for missing action/handler, and consistent action memory/logging.\n>   - Preserve legacy returns (void/boolean) as completed; treat `{ success:false }` (including minimal/error-only) as failed.\n>   - Merge working memory with size cap; cache `action_results`; update action plan immutably per step.\n>   - Introduce AsyncLocalStorage context: `ActionContextStore`, `getCurrentActionContext`, and browser fallback `createBrowserFallback` for prompt collection; include action context in `useModel` logs; skip collecting `TEXT_EMBEDDING` prompts.\n> - **Prompts (prompts.ts)**:\n>   - Update `messageHandlerTemplate` for parallel execution model and guidance on multi-step dependencies.\n> - **Provider (plugin-bootstrap/actionState.ts)**:\n>   - Clarify description/docs: \"previous results\" are from prior response batches; parallel actions share the same snapshot.\n> - **Tests**:\n>   - Expand `runtime.test.ts`: parallel execution behavior, action result status semantics, prompt collection/isolation via AsyncLocalStorage, browser fallback behavior, exact vs fuzzy action matching.\n>   - Update `prompts.test.ts` for new execution rules and wording.\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 55765fc289c965232d5d690c363f73c7ea1b81f6. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-12-06T19:03:17Z",
      "mergedAt": null,
      "additions": 1467,
      "deletions": 292
    },
    {
      "id": "PR_kwDOMT5cIs66xbhj",
      "title": "fix: Enable hot reload for backend development",
      "author": "wtfsayo",
      "number": 6293,
      "body": "## Summary\n\nImplements comprehensive hot reload functionality for backend development. When TypeScript files in watched packages are modified, the system automatically rebuilds the CLI and restarts the server with health verification.\n\nPreviously, `bun run dev` only built the CLI once and ran it without watching for file changes. Backend code modifications required manually restarting the dev server.\n\n## Changes\n\n### Core Functionality\n- ✅ Add file watching for all CLI dependency packages:\n  - `packages/cli/src`, `packages/core/src`, `packages/server/src`\n  - `packages/api-client/src`, `packages/plugin-bootstrap/src`\n  - `packages/plugin-sql/src`, `packages/config/src`\n- ✅ Implement automatic rebuild and server restart on file changes\n- ✅ Add 300ms debounce to prevent rapid rebuilds\n- ✅ Handle graceful server shutdown with SIGTERM/SIGKILL fallback\n- ✅ Server health check verification after rebuilds\n- ✅ Rebuild queueing for changes during active rebuilds\n\n### Code Quality (Addressing PR Reviews)\n- ✅ **Replace Node.js spawn with Bun.spawn()** per project standards (CLAUDE.md)\n- ✅ **Add comprehensive TypeScript type annotations** with JSDoc throughout\n- ✅ **Fix SIGKILL fallback** using exit event listeners instead of killed property\n- ✅ **Add directory existence checks** before fs.watch to handle optional packages\n- ✅ **Fix server crash detection** - health check now runs after every rebuild\n- ✅ **Implement rebuild queueing** - file changes during rebuilds no longer dropped\n- ✅ **Update tests** to use temp directory instead of source directory (CI/CD compatible)\n- ✅ **Convert to ES6 imports** - removed all Node.js require() statements\n\n### Testing\n- ✅ Create comprehensive test suite (13 tests, all passing)\n- ✅ Tests verify: watch targets, debounce, rebuild behavior, TypeScript filtering, cleanup, Bun.spawn usage, rebuild queueing, directory checks, exit events, health checks\n\n## How It Works\n\nWhen you run `bun run dev`, the script:\n1. Builds and starts the CLI server\n2. Waits for health check (GET /api/server/ping)\n3. Starts the Vite dev server for frontend\n4. **NEW:** Watches all backend source directories for `.ts`/`.tsx` file changes\n5. **NEW:** On file change:\n   - Debounces 300ms to batch rapid changes\n   - Stops server gracefully (SIGTERM with SIGKILL fallback)\n   - Rebuilds CLI package\n   - Restarts server and waits for health check\n   - Queues additional changes if they occur during rebuild\n\n## Test Results\n\n```bash\n✅ All 13 tests passing\n✅ Build successful (15/15 packages)\n✅ No TypeScript errors\n```\n\n**Test coverage includes:**\n- File watcher configuration\n- Debounce mechanism\n- Server shutdown/restart\n- TypeScript file filtering\n- Cleanup handling\n- Rebuild queueing\n- Directory existence checks\n- SIGKILL fallback behavior\n- Health check after rebuild\n- Bun.spawn usage verification\n\n## Benefits\n\n- 🔄 Backend now has hot reload similar to frontend's Vite HMR\n- ⚡ Faster development workflow - no manual restarts needed\n- 🎯 Watches all relevant packages - changes anywhere trigger rebuilds\n- 🛡️ Debouncing prevents rebuild storms from multiple file saves\n- 🏥 Health checks ensure server is responsive after rebuild\n- 📦 Queuing ensures no changes are lost during rebuilds\n- 🔒 Follows project standards (Bun.spawn, TypeScript annotations)\n\n## Demo\n\nAfter running `bun run dev`, modify any backend file:\n```\n[WATCH] 📝 File changed in cli: index.ts\n[REBUILD] 🔄 Rebuilding CLI...\n[REBUILD] Stopping server...\n[REBUILD] Server stopped gracefully\n[REBUILD] ✅ Build completed, restarting server...\n[HEALTH] Waiting for server to be ready...\n[HEALTH] ✅ Server is ready! (attempt 1)\n[REBUILD] ✅ Server restarted successfully!\n```\n\n## Review Status\n\nAll critical and important issues from PR reviews have been addressed:\n\n| Issue | Status | Fix |\n|-------|--------|-----|\n| Node.js spawn instead of Bun.spawn | ✅ Fixed | Now uses Bun.spawn() throughout |\n| Missing TypeScript types | ✅ Fixed | Comprehensive JSDoc annotations added |\n| Server crash detection flaw | ✅ Fixed | Health check after every rebuild |\n| SIGKILL fallback never executes | ✅ Fixed | Uses exit event listener |\n| Missing directory existence checks | ✅ Fixed | Checks before fs.watch() |\n| File changes during rebuild dropped | ✅ Fixed | Rebuild queueing implemented |\n| Test fails in read-only environments | ✅ Fixed | Uses temp directory |\n| Node.js require() in tests | ✅ Fixed | ES6 imports only |\n\n**Reviewers:** @cursor, @greptile-apps, @claude\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> Enables reliable backend hot reload and modernizes the dev runner.\n> \n> - Overhauls `scripts/dev-watch.js` to watch backend packages (`cli`, `core`, `server`, `api-client`, `plugin-bootstrap`, `plugin-sql`, `config`) for `.ts/.tsx` changes and trigger CLI rebuild + server restart\n> - Adds debounce (300ms) and rebuild queueing; waits for health check (`/api/server/ping`) after each restart\n> - Replaces Node `spawn` usage with `Bun.spawn`, adds JSDoc types, and improves cross-platform package name resolution\n> - Implements graceful shutdown with `SIGTERM` and `SIGKILL` fallback using exit promises; robust cleanup for processes and file watchers\n> - Adds comprehensive tests in `scripts/__tests__/dev-watch.test.ts` covering watch targets, debounce, rebuild behavior, TypeScript filtering, cleanup, queueing, directory existence checks, exit handling, health checks, and Bun usage\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 80105c84ab174d999aadc0615fb8fb8e71a09f81. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-12-29T04:19:27Z",
      "mergedAt": null,
      "additions": 700,
      "deletions": 101
    },
    {
      "id": "PR_kwDOMT5cIs66o0Al",
      "title": "fix(server): standardize message server route naming",
      "author": "standujar",
      "number": 6285,
      "body": "## fix(server): standardize message server route naming\r\n\r\n### Problem\r\n\r\nThe `api-client` package was calling `/message-servers/*` routes that didn't exist on the server. The server had inconsistent naming with `/servers/*` routes instead.\r\n\r\n```\r\nClient calls:  POST /message-servers\r\nServer had:    POST /servers          → 404!\r\n```\r\n\r\n### Solution\r\n\r\n- Renamed `/servers/*` → `/message-servers/*`\r\n- Renamed `:serverId` → `:messageServerId`\r\n- Added deprecated routes with forwarding for backward compatibility\r\n\r\n### Routes Changed\r\n\r\n| Old Route | New Route |\r\n|-----------|-----------|\r\n| `POST /servers` | `POST /message-servers` |\r\n| `GET /servers/:serverId/agents` | `GET /message-servers/:messageServerId/agents` |\r\n| `POST /servers/:serverId/agents` | `POST /message-servers/:messageServerId/agents` |\r\n| `DELETE /servers/:serverId/agents/:agentId` | `DELETE /message-servers/:messageServerId/agents/:agentId` |\r\n\r\n### Backward Compatibility\r\n\r\nOld routes still work but log deprecation warnings:\r\n```\r\n[DEPRECATED] POST /servers is deprecated. Use POST /message-servers instead.\r\n```\r\n\r\n### Tests\r\n\r\n- Added 17 unit tests for route naming conventions\r\n- All 420 server unit tests pass\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-12-26T14:04:10Z",
      "mergedAt": "2025-12-29T12:41:22Z",
      "additions": 638,
      "deletions": 109
    }
  ],
  "codeChanges": {
    "additions": 1461,
    "deletions": 297,
    "files": 18,
    "commitCount": 54
  },
  "completedItems": [
    {
      "title": "refactor(default-message-service): optimize provider handling in MultiStep",
      "prNumber": 6263,
      "type": "refactor",
      "body": "# Risks\r\n\r\nLow. The change only affects the internal execution order of providers in multi-step mode. All providers still execute and return results - just faster.\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nConverts sequential provider ",
      "files": [
        ".env.example",
        "packages/cli/tests/test-timeouts.ts",
        "packages/core/src/__tests__/message-service.test.ts",
        "packages/core/src/services/default-message-service.ts"
      ]
    },
    {
      "title": "fix(server): standardize message server route naming",
      "prNumber": 6285,
      "type": "bugfix",
      "body": "## fix(server): standardize message server route naming\r\n\r\n### Problem\r\n\r\nThe `api-client` package was calling `/message-servers/*` routes that didn't exist on the server. The server had inconsistent naming with `/servers/*` routes instead.",
      "files": [
        "packages/server/src/__tests__/unit/api/message-servers.test.ts",
        "packages/server/src/api/messaging/messageServers.ts"
      ]
    },
    {
      "title": "docs(plugin-dummy-services): add comprehensive README",
      "prNumber": 6290,
      "type": "docs",
      "body": "## Summary\nAdded comprehensive README.md documentation for the `@elizaos/plugin-dummy-services` package.\n\n## Documentation Includes\n- Package overview and purpose\n- Installation instructions (using bun)\n- Table of all 9 available dummy serv",
      "files": [
        "packages/plugin-dummy-services/README.md"
      ]
    },
    {
      "title": "fix(cli): replace execa and child_process with Bun.spawn and bun-exec utilities",
      "prNumber": 6289,
      "type": "bugfix",
      "body": "## Summary\nPer project guidelines in CLAUDE.md, replaced prohibited process execution libraries with Bun-native alternatives.\n\n## Changes\n- **docker-build.ts**: Replaced `execa` with `bunExec` for docker commands\n- **phala-wrapper.ts**: Rep",
      "files": [
        "packages/cli/src/commands/deploy/utils/docker-build.ts",
        "packages/cli/src/commands/report/src/__tests__/integration.test.ts",
        "packages/cli/src/commands/tee/phala-wrapper.ts"
      ]
    },
    {
      "title": "docs: fix documentation inconsistencies and add missing test flags",
      "prNumber": 6288,
      "type": "bugfix",
      "body": "## Summary\n- Change `npm install` to `bun add` in packages/server/README.md (project uses bun exclusively)\n- Replace broken BUILD_SYSTEM.md link with inline explanation in packages/core/README.md\n- Add `--port` and `--skip-type-check` flags",
      "files": [
        "CLAUDE.md",
        "packages/core/README.md",
        "packages/server/README.md"
      ]
    },
    {
      "title": "fix(core): log streaming LLM calls to database",
      "prNumber": 6296,
      "type": "bugfix",
      "body": "## Summary\r\n\r\nStreaming model calls were not being logged to the database because the logging code was placed after the `return` statement in the streaming path. This caused LLM calls (TEXT_SMALL, TEXT_LARGE) to not appear in the Model Call",
      "files": [
        "packages/client/src/components/agent-action-viewer.tsx",
        "packages/client/src/hooks/use-query-hooks.ts",
        "packages/core/src/__tests__/runtime-streaming.test.ts",
        "packages/core/src/runtime.ts"
      ]
    },
    {
      "title": "chore(license): update year to 2026",
      "prNumber": 6301,
      "type": "other",
      "body": "Annual copyright year update.\n\n- Updated year: 2025 -> 2026\n- Files affected: LICENSE\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\n\nUpdated the copyright year in the MIT License from 2025 to 2026. This is a standard annual mainten",
      "files": [
        "LICENSE"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 171.32980288585694,
      "prScore": 132.05180288585692,
      "issueScore": 0,
      "reviewScore": 38.5,
      "commentScore": 0.7779999999999999,
      "summary": null
    },
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 137.2546068839021,
      "prScore": 134.61660688390214,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0.6379999999999999,
      "summary": null
    },
    {
      "username": "vbkotecha",
      "avatarUrl": "https://avatars.githubusercontent.com/u/86377299?u=32a79d9adc10f2738dca41f4690de9ec944d8025&v=4",
      "totalScore": 43.8837738965761,
      "prScore": 43.5437738965761,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.33999999999999997,
      "summary": null
    },
    {
      "username": "borisudovicic",
      "avatarUrl": "https://avatars.githubusercontent.com/u/31806472?u=8935f4d43fd7e4eb9bf5ff92d54d4d2f8ac8a786&v=4",
      "totalScore": 42,
      "prScore": 0,
      "issueScore": 42,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 31.7,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 31.5,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 30.021023349349527,
      "prScore": 25.021023349349527,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "rejected-l",
      "avatarUrl": "https://avatars.githubusercontent.com/u/99460023?u=977f49541583c40f4fc5f6a9f11ca6c6a78b362a&v=4",
      "totalScore": 24.119306144334054,
      "prScore": 24.119306144334054,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "efeecllk",
      "avatarUrl": "https://avatars.githubusercontent.com/u/98906252?u=2e61afdda01f49499ce519e4024e5f0a20fa091e&v=4",
      "totalScore": 22.95669638293567,
      "prScore": 22.95669638293567,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 19.018184404753875,
      "prScore": 19.018184404753875,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "tdnupe3",
      "avatarUrl": "https://avatars.githubusercontent.com/u/25161668?u=94680b6bcbcfce954c7a9dd09d667a3919953041&v=4",
      "totalScore": 13.747573590279972,
      "prScore": 13.547573590279972,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "ChristopherTrimboli",
      "avatarUrl": "https://avatars.githubusercontent.com/u/27584221?u=0d816ce1dcdea8f925aba18bb710153d4a87a719&v=4",
      "totalScore": 5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "linear",
      "avatarUrl": "https://avatars.githubusercontent.com/in/20150?v=4",
      "totalScore": 4,
      "prScore": 0,
      "issueScore": 4,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    }
  ],
  "newPRs": 9,
  "mergedPRs": 7,
  "newIssues": 23,
  "closedIssues": 9,
  "activeContributors": 11
}