{
  "interval": {
    "intervalStart": "2025-06-24T00:00:00.000Z",
    "intervalEnd": "2025-06-25T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-06-24 to 2025-06-25, elizaos/eliza had 14 new PRs (12 merged), 3 new issues, and 10 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs69Gbj2",
      "title": "Create custom plugin for onchain AI agent",
      "author": "yehia67",
      "number": 5260,
      "repository": "elizaos/eliza",
      "body": "\n**Describe the bug**\nI am creating a plugin to manage the Biconomy wallet with Chainlink automation & functions. It is hard to use Eliza as the agent that only supports one message, then stop using plugins and do everything from the AI model and simulate on-chain action, although I added all the actions to use it correctly.\n\n\nThe ElizaOS framework (v0.0.12) has significant reliability issues when developing custom plugins. The primary issues include:\n1. Action triggers frequently return responses from the AI model itself rather than executing the defined handler functions\n2. The debugging tools are non-functional, making troubleshooting nearly impossible\n3. Error handling is minimal or absent, with cryptic error messages like \"message: \"(Error) Message content or data is missing \" without proper stack traces. I know it from my code, but with no debugger, now I am supposed to use the `logger.debug` everywhere and redo steps, which almost take forever\n4. Database connection failures occur without clear resolution paths\n```\n[2025-06-24 15:24:48] ERROR: [CUSTOM MIGRATOR] Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\nTrace: Error: Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\n    at AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5617:15)\n    at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\n    at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\n    at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\n    at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\n    at console.trace (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@sentry/core/build/esm/instrument/console.js:36:14)\n    at AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5630:15)\n    at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\n    at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\n    at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\n    at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\n[2025-06-24 15:24:48] ERROR: [CUSTOM MIGRATOR] Stack trace: RuntimeError: Aborted(). Build with -sASSERTIONS for more info.\n    at abort (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@electric-sql/pglite/dist/index.js:1:78978)\n    at __abort_js (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@electric-sql/pglite/dist/index.js:2:64321)\n    at wasm://wasm/02190c76:wasm-function[1366]:0xe49a5\n    at wasm://wasm/02190c76:wasm-function[122]:0x13aa1\n    at wasm://wasm/02190c76:wasm-function[2987]:0x1ba700\n    at wasm://wasm/02190c76:wasm-function[9372]:0x49939b\n    at Module._pgl_backend (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@electric-sql/pglite/dist/index.js:3:28022)\n    at ue.De (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@electric-sql/pglite/dist/index.js:3:253696)\n    at async ue._checkReady (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@electric-sql/pglite/dist/index.js:3:248130)\n    at async ue.query (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@electric-sql/pglite/dist/chunk-TGYMLQND.js:8:255)\n    at async file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/drizzle-orm/pglite/session.js:67:16\n    at async PglitePreparedQuery.queryWithCache (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/drizzle-orm/pg-core/session.js:40:16)\n    at async runPluginMigrations (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/plugin-sql/dist/index.js:4073:5)\n    at async DatabaseMigrationService.runAllPluginMigrations (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/plugin-sql/dist/index.js:4182:7)\n    at async AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5613:9)\n    at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\n    at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\n    at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\n    at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\n[2025-06-24 15:24:48] ERROR: [INIT] Failed to run database migrations:\n    message: \"(Error) Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\"\n    stack: [\n      \"Error: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\",\n      \"at runPluginMigrations (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/plugin-sql/dist/index.js:4081:11)\",\n      \"at async DatabaseMigrationService.runAllPluginMigrations (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/plugin-sql/dist/index.js:4182:7)\",\n      \"at async AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5613:9)\",\n      \"at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\",\n      \"at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\",\n      \"at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\",\n      \"at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\"\n    ]\n[2025-06-24 15:24:48] ERROR: Failed to initialize AgentServer (async operations):\n    message: \"(Error) Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\"\n    stack: [\n      \"Error: Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\",\n      \"at AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5617:15)\",\n      \"at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\",\n      \"at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\",\n      \"at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\",\n      \"at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\"\n    ]\n[2025-06-24 15:24:48] ERROR: An error occurred:\n    message: \"(Error) Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\"\n    stack: [\n      \"Error: Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\",\n      \"at AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5617:15)\",\n      \"at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\",\n      \"at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\",\n      \"at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\",\n      \"at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\"\n    ]\n[2025-06-24 15:24:48] ERROR: Error details: Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\n[2025-06-24 15:24:48] ERROR: Stack trace: Error: Database migration failed: Database connection failed: Aborted(). Build with -sASSERTIONS for more info.\n    at AgentServer.initialize (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/server/dist/index.js:5617:15)\n    at async startAgents (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3062:3)\n    at async Command.<anonymous> (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3147:5)\n    at async Command.parseAsync (/Users/yehiatarek/Documents/projects/ai agents/ai-agent-defi-consultant/agent/node_modules/commander/lib/command.js:1123:5)\n    at async main (file:///Users/yehiatarek/Documents/projects/ai%20agents/ai-agent-defi-consultant/agent/node_modules/@elizaos/cli/dist/index.js:3780:3)\n```\n5. The plugin-evm integration is particularly problematic, with the agent consistently struggling to differentiate between executing actual on-chain transactions and merely simulating them\nThese issues severely impact our timeline for the Chainlink Chromium hackathon project.\n\n**To Reproduce**\n\n1. Create a custom plugin with defined actions (e.g., our smart-wallet-plugin with CREATE_BICONOMY_WALLET action)\n2. Attempt to trigger the action through the agent interface\n3. Observe that the system returns a generic AI response instead of executing the handler function. \n4. When errors occur, observe that the error messages lack context or actionable information\n5. Attempt to use the debugging tools and observe that they fail to provide useful information\n\n**Expected behavior**\n\n1. When an action is triggered, the corresponding handler function should execute reliably\n2. Error messages should provide clear context, including the specific issue, location, and potential resolution\n3. Debugging tools should function properly, allowing developers to trace execution flow\n4. Database connections should be reliable or provide clear error messages with resolution steps\n5. Documentation should accurately reflect the current API and provide troubleshooting guidance\n\n**Screenshots**\n\n![Image](https://github.com/user-attachments/assets/38ef9343-0280-4f09-8c55-adb474b02f9b)\n![Image](https://github.com/user-attachments/assets/dc2aa091-595f-4d37-b2f6-69d701c2d3c8)\n![Image](https://github.com/user-attachments/assets/03a06bd6-4c58-4da8-9b23-2b7f27b31fea)\n![Image](https://github.com/user-attachments/assets/fc025bc6-5f57-43c7-a1ac-c7ab9612420c)\n![Image](https://github.com/user-attachments/assets/d117bec6-5960-4c6d-9028-2210a0616bf1)\n![Image](https://github.com/user-attachments/assets/1dfbc39f-c6c1-46ba-9550-4dcddd0cff4d)\n\n**Additional context**\n\nWe upgraded from v0.0.11 (which had message loading issues) to v0.0.12, but continue to experience significant development challenges. The framework's instability is particularly problematic given our tight timeline for the Chainlink Chromium hackathon. The most frustrating aspect is the inconsistency between documentation examples and actual runtime behaviour, especially regarding action handling and plugin integration.\n\nConclusion: All I want is a way to make sure actions are getting triggered instead of the AI model replying to me with a simulation with 0 on-chain action\n",
      "createdAt": "2025-06-24T16:19:58Z",
      "closedAt": "2025-06-30T12:08:51Z",
      "state": "CLOSED",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs69GL2k",
      "title": "🔄 Migrate packages/client to leverage @elizaos/api-client",
      "author": "wtfsayo",
      "number": 5259,
      "repository": "elizaos/eliza",
      "body": "# 🔄 Migrate packages/client to leverage @elizaos/api-client\n\n## 📋 Summary\n\nWe have a new `@elizaos/api-client` package that provides a type-safe, service-oriented API client for ElizaOS. We need to migrate `packages/client` to heavily leverage this new package instead of its current custom API implementation. This migration will improve type safety, reduce code duplication, and provide better error handling.\n\n## 🎯 Goals\n\n- **Primary**: Replace the current monolithic API client (`src/lib/api.ts`) with `@elizaos/api-client`\n- **Secondary**: Maintain 100% backward compatibility during migration\n- **Tertiary**: Preserve existing React Query patterns and WebSocket integration\n- **Quality**: Improve type safety and reduce code duplication\n\n## 📊 Current State Analysis\n\n### Current Implementation\n- **Location**: `packages/client/src/lib/api.ts` (610+ lines of custom API code)\n- **Pattern**: Custom `fetcher` function with manual endpoint definitions\n- **Auth**: localStorage-based API key with `X-API-KEY` header\n- **Error Handling**: Custom error handling with status code mapping\n- **State Management**: React Query for caching and optimistic updates\n\n### Most Used API Endpoints\n1. **Agent Management**: `getAgents()`, `getAgent()`, `startAgent()`, `stopAgent()`\n2. **Messaging**: `getChannelMessages()`, `postMessageToChannel()`, `getServers()`\n3. **Memory/Logs**: `getAgentMemories()`, `getAgentLogs()`\n4. **Media**: `uploadAgentMedia()`, `ttsStream()`, `transcribeAudio()`\n\n### Integration Points\n- **React Query Hooks**: `hooks/use-query-hooks.ts` (complex polling and caching)\n- **WebSocket Manager**: `lib/socketio-manager.ts` (real-time updates)\n- **Connection Context**: `context/ConnectionContext.tsx` (connection state)\n- **File Upload**: `hooks/use-file-upload.ts` (media handling)\n\n## 🚀 Implementation Plan\n\n> ⚠️ **CRITICAL**: Work step by step through each phase. Do NOT skip steps or make assumptions about data shapes. Test thoroughly at each step to avoid pitfalls.\n\n### Phase 1: Foundation Setup\n**Estimated Impact**: Low Risk - Infrastructure only\n\n#### Step 1.1: Add Dependency\n\\`\\`\\`bash\n# In packages/client directory\nbun add @elizaos/api-client\n\\`\\`\\`\n\n#### Step 1.2: Create API Client Configuration\n**File**: `src/lib/api-client-config.ts`\n\\`\\`\\`typescript\nimport { ElizaClient, ApiClientConfig } from '@elizaos/api-client';\n\nexport function createApiClientConfig(): ApiClientConfig {\n  const getLocalStorageApiKey = () => \\`eliza-api-key-\\${window.location.origin}\\`;\n  const apiKey = localStorage.getItem(getLocalStorageApiKey());\n  \n  return {\n    baseUrl: window.location.origin,\n    apiKey: apiKey || undefined,\n    timeout: 30000,\n    headers: {\n      'Accept': 'application/json',\n    }\n  };\n}\n\nexport function createElizaClient(): ElizaClient {\n  return ElizaClient.create(createApiClientConfig());\n}\n\\`\\`\\`\n\n#### Step 1.3: Create Error Handling Bridge\n**File**: `src/lib/api-error-bridge.ts`\n\\`\\`\\`typescript\nimport { ApiError } from '@elizaos/api-client';\nimport { connectionStatusActions } from '../context/ConnectionContext';\n\nexport function handleApiError(error: unknown): never {\n  if (error instanceof ApiError) {\n    // Map new API errors to old error handling patterns\n    if (error.status === 401) {\n      connectionStatusActions.setUnauthorized(error.message);\n    }\n    // Add other status code mappings as needed\n    throw new Error(error.message);\n  }\n  throw error;\n}\n\\`\\`\\`\n\n#### Step 1.4: Create Migration Utilities\n**File**: `src/lib/migration-utils.ts`\n\\`\\`\\`typescript\nimport { apiClient as legacyClient } from './api';\nimport { createElizaClient } from './api-client-config';\n\n// Flag to control gradual migration\nconst MIGRATION_FLAGS = {\n  USE_NEW_AGENTS_API: false,\n  USE_NEW_MESSAGING_API: false,\n  USE_NEW_MEMORY_API: false,\n  USE_NEW_MEDIA_API: false,\n  USE_NEW_SYSTEM_API: false,\n};\n\nexport { MIGRATION_FLAGS };\n\n// Helper to gradually switch APIs\nexport function createHybridClient() {\n  const newClient = createElizaClient();\n  \n  return {\n    // Will be replaced service by service\n    agents: MIGRATION_FLAGS.USE_NEW_AGENTS_API ? newClient.agents : legacyClient,\n    messaging: MIGRATION_FLAGS.USE_NEW_MESSAGING_API ? newClient.messaging : legacyClient,\n    // ... other services\n  };\n}\n\\`\\`\\`\n\n### Phase 2: Core Infrastructure Migration\n**Estimated Impact**: Medium Risk - Core changes\n\n#### Step 2.1: Update Authentication Handling\n**File**: `src/context/ConnectionContext.tsx`\n- Update to work with both old and new API clients\n- Ensure API key changes are reflected in new client instances\n- Maintain existing connection status behaviors\n\n#### Step 2.2: Update Error Handling\n**Files**: `hooks/use-query-hooks.ts`, `hooks/use-agent-management.ts`\n- Import and use `handleApiError` from error bridge\n- Test that error messages and status codes work correctly\n- Ensure toast notifications still function properly\n\n#### Step 2.3: Test Infrastructure Changes\n- Verify that existing API calls still work\n- Check that error handling displays correctly\n- Ensure authentication flow is unchanged\n\n### Phase 3: Service-by-Service Migration\n**Estimated Impact**: High Risk - Feature changes\n\n> 🔥 **CRITICAL**: Migrate ONE service at a time. Test thoroughly before moving to the next service.\n\n#### Step 3.1: Migrate Agent Services (PRIORITY 1)\n**Impact**: High - Most used functionality\n\n**Files to Update**:\n- `hooks/use-query-hooks.ts` - `useAgents()`, `useAgent()`\n- `hooks/use-agent-management.ts` - Start/stop operations\n- `components/agent-*.tsx` - Components using agent APIs\n\n**Migration Steps**:\n1. **Update `useAgents()` hook**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.getAgents()\n   // NEW: elizaClient.agents.listAgents()\n   \\`\\`\\`\n   \n2. **Update agent operations**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.startAgent(agentId)\n   // NEW: elizaClient.agents.startAgent(agentId)\n   \\`\\`\\`\n\n3. **Verify data shapes match**:\n   - Check response structure: `{ agents: Agent[] }` vs `{ data: { agents: Agent[] } }`\n   - Update any response destructuring\n   - Test that agent cards display correctly\n\n4. **Test thoroughly**:\n   - Agent list loading and display\n   - Start/stop functionality\n   - Error states and loading states\n   - Real-time polling still works\n\n**Set Migration Flag**: `MIGRATION_FLAGS.USE_NEW_AGENTS_API = true`\n\n#### Step 3.2: Migrate Messaging Services (PRIORITY 2)\n**Impact**: High - Complex state management\n\n**Files to Update**:\n- `hooks/use-query-hooks.ts` - Message-related hooks\n- `components/chat.tsx` - Message display and sending\n- WebSocket integration for real-time messages\n\n**Migration Steps**:\n1. **Update channel and server operations**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.getServers()\n   // NEW: elizaClient.messaging.getServers() (if available)\n   \\`\\`\\`\n\n2. **Update message operations**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.getChannelMessages(channelId, options)\n   // NEW: elizaClient.messaging.getChannelMessages(channelId, options)\n   \\`\\`\\`\n\n3. **Carefully handle pagination**:\n   - Verify pagination parameters match\n   - Test infinite scroll functionality\n   - Ensure message ordering is preserved\n\n4. **Test WebSocket integration**:\n   - Verify real-time message updates still work\n   - Check that WebSocket events update React Query cache correctly\n   - Test channel subscription/unsubscription\n\n**Set Migration Flag**: `MIGRATION_FLAGS.USE_NEW_MESSAGING_API = true`\n\n#### Step 3.3: Migrate Memory Services (PRIORITY 3)\n**Impact**: Medium - Admin/debug features\n\n**Files to Update**:\n- Memory management components\n- Agent log viewers\n- Admin panels\n\n**Migration Steps**:\n1. **Update memory operations**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.getAgentMemories(agentId, channelId, tableName)\n   // NEW: elizaClient.memory.getAgentMemories(agentId, { channelId, tableName })\n   \\`\\`\\`\n\n2. **Test memory CRUD operations**:\n   - Reading agent memories\n   - Updating/deleting memories\n   - Memory search and filtering\n\n**Set Migration Flag**: `MIGRATION_FLAGS.USE_NEW_MEMORY_API = true`\n\n#### Step 3.4: Migrate Media/Audio Services (PRIORITY 4)\n**Impact**: Medium - File upload functionality\n\n**Files to Update**:\n- `hooks/use-file-upload.ts`\n- Audio recording components\n- TTS/transcription features\n\n**Migration Steps**:\n1. **Update media uploads**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.uploadAgentMedia(agentId, file)\n   // NEW: elizaClient.media.uploadAgentMedia(agentId, { file, filename: file.name })\n   \\`\\`\\`\n\n2. **Update audio services**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.ttsStream(agentId, text)\n   // NEW: elizaClient.audio.generateSpeech(agentId, { text })\n   \\`\\`\\`\n\n3. **Test file handling**:\n   - File upload progress\n   - Error handling for large files\n   - Audio playback functionality\n\n**Set Migration Flag**: `MIGRATION_FLAGS.USE_NEW_MEDIA_API = true`\n\n#### Step 3.5: Migrate System Services (PRIORITY 5)\n**Impact**: Low - Utility functions\n\n**Files to Update**:\n- Environment variable management\n- Server health checks\n- System configuration\n\n**Migration Steps**:\n1. **Update system operations**:\n   \\`\\`\\`typescript\n   // OLD: apiClient.ping()\n   // NEW: elizaClient.server.ping()\n   \\`\\`\\`\n\n2. **Test system functions**:\n   - Health checks\n   - Environment variable updates\n   - Server status monitoring\n\n**Set Migration Flag**: `MIGRATION_FLAGS.USE_NEW_SYSTEM_API = true`\n\n### Phase 4: Clean-up and Optimization\n**Estimated Impact**: Low Risk - Cleanup only\n\n#### Step 4.1: Remove Legacy Code\n- Delete `src/lib/api.ts` (old API client)\n- Remove `src/lib/migration-utils.ts`\n- Remove `src/lib/api-error-bridge.ts`\n- Clean up unused imports\n\n#### Step 4.2: Optimize Type Definitions\n- Update `src/types/index.ts` to use types from `@elizaos/api-client`\n- Remove duplicate type definitions\n- Ensure all components use consistent types\n\n#### Step 4.3: Update Documentation\n- Update README.md with new API usage\n- Add JSDoc comments for new patterns\n- Document migration changes\n\n#### Step 4.4: Performance Validation\n- Test application performance before/after migration\n- Verify that bundle size hasn't increased significantly\n- Check that all caching behaviors are preserved\n\n## 🧪 Testing Requirements\n\n### For Each Migration Step:\n1. **Unit Tests**: Verify individual API calls work correctly\n2. **Integration Tests**: Test component functionality end-to-end\n3. **Manual Testing**: Use the UI to verify all features work\n4. **Error Testing**: Trigger error conditions and verify handling\n5. **Performance Testing**: Check loading times and responsiveness\n\n### Critical Test Cases:\n- [ ] Agent list loads and displays correctly\n- [ ] Agent start/stop operations work with proper loading states\n- [ ] Message sending and receiving (including real-time updates)\n- [ ] File uploads (both agent and channel media)\n- [ ] Error states display properly with toast notifications\n- [ ] Authentication flow (login/logout/API key changes)\n- [ ] Offline/reconnection scenarios\n- [ ] Memory management operations\n- [ ] Audio features (TTS/transcription)\n\n## ⚠️ Important Warnings\n\n### Data Shape Pitfalls to Avoid:\n1. **Response Structure Changes**: Old API returns `{ data: T }`, new API might return `T` directly\n2. **Error Object Structure**: Old errors are custom, new errors use `ApiError` class\n3. **Authentication Headers**: Ensure API key header name consistency\n4. **Pagination Parameters**: Verify parameter names and structures match\n5. **File Upload Format**: Check FormData structure and field names\n\n### Critical Success Factors:\n- **Incremental Migration**: Never migrate multiple services at once\n- **Thorough Testing**: Test each step before proceeding\n- **Preserve UX**: Maintain existing loading states and error handling\n- **WebSocket Integration**: Ensure real-time features continue working\n- **Type Safety**: Maintain or improve existing type safety\n\n## 📋 Definition of Done\n\n- [ ] All API calls use `@elizaos/api-client`\n- [ ] No references to old `src/lib/api.ts` file\n- [ ] All existing functionality works identically to before\n- [ ] Error handling maintains same user experience\n- [ ] Performance is equivalent or better\n- [ ] Type safety is maintained or improved\n- [ ] WebSocket integration continues working\n- [ ] All tests pass (unit, integration, e2e)\n- [ ] Code review completed\n- [ ] Documentation updated\n\n## 🔗 Related Files\n\n### Key Files to Modify:\n- `packages/client/src/lib/api.ts` (replace)\n- `packages/client/src/hooks/use-query-hooks.ts` (update)\n- `packages/client/src/hooks/use-agent-management.ts` (update)\n- `packages/client/src/hooks/use-file-upload.ts` (update)\n- `packages/client/src/context/ConnectionContext.tsx` (update)\n- `packages/client/package.json` (add dependency)\n\n### Reference Files:\n- `packages/api-client/src/client.ts` (new API structure)\n- `packages/api-client/src/services/` (all service implementations)\n- `packages/api-client/src/types/` (type definitions)\n\n---\n\n**Next Actions**: Start with Phase 1, Step 1.1. Work methodically through each step, testing thoroughly before proceeding. Do not skip steps or make assumptions about data compatibility.",
      "createdAt": "2025-06-24T15:56:16Z",
      "closedAt": "2025-06-27T06:31:28Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs69Aam4",
      "title": "Fix broken upload feature after server API changes (multer → express-fileupload migration)",
      "author": "wtfsayo",
      "number": 5251,
      "repository": "elizaos/eliza",
      "body": "## Summary\n\nThe upload feature in the frontend is broken after recent changes to server APIs. The server migrated from `multer` to `express-fileupload` but there are mismatched endpoints between the client, api-client package, and server causing uploads to fail.\n\n## Current Behavior\n\n- Upload attempts from the frontend fail with 404 errors\n- The client calls incorrect endpoints that don't exist on the server\n- File uploads for both agent media and channel uploads are broken\n\n## Expected Behavior\n\n- Users should be able to upload files (images, videos, documents) successfully\n- The upload should work for both agent-specific media and channel messages\n- All packages should use consistent, correct API endpoints\n\n## Root Cause Analysis\n\n### 1. Server Migration\nThe server recently migrated from `multer` to `express-fileupload` (see `/packages/server/src/upload.ts`)\n\n### 2. Endpoint Mismatches\n\n**Frontend Client** (`packages/client/src/lib/api.ts`):\n- Agent uploads: `/api/media/agents/${agentId}/upload-media` ✅\n- Channel uploads: `/api/messaging/channels/${channelId}/upload-media` ✅\n\n**API Client Package** (`packages/api-client/src/services/media.ts`):\n- Agent uploads: `/api/media/${agentId}/upload-media` ❌ (missing `/agents/`)\n- Channel uploads: `/api/media/central-channels/${channelId}/upload` ❌ (wrong base path and endpoint)\n\n**Server Routes**:\n- Agent uploads: `/api/media/agents/:agentId/upload-media` (mounted at `/media/agents/...`)\n- Channel uploads: `/api/messaging/channels/:channelId/upload-media` (mounted at `/messaging/channels/...`)\n\n## Affected Components\n\n1. **packages/api-client** - Incorrect endpoint paths in MediaService\n2. **packages/client** - Currently working but should verify consistency\n3. **packages/server** - Working correctly with express-fileupload\n\n## Steps to Reproduce\n\n1. Start the Eliza server\n2. Try to upload a file through the GUI (either as agent media or in a channel)\n3. Observe 404 errors in the network tab\n4. Check server logs for missing route errors\n\n## Proposed Solution\n\n### 1. Fix API Client Package (`packages/api-client/src/services/media.ts`)\n\n```typescript\n// Current (broken)\nasync uploadAgentMedia(agentId: UUID, params: MediaUploadParams): Promise<MediaUploadResponse> {\n  // ...\n  return this.request<MediaUploadResponse>('POST', `/api/media/${agentId}/upload-media`, {\n    body: formData,\n  });\n}\n\n// Should be\nasync uploadAgentMedia(agentId: UUID, params: MediaUploadParams): Promise<MediaUploadResponse> {\n  // ...\n  return this.request<MediaUploadResponse>('POST', `/api/media/agents/${agentId}/upload-media`, {\n    body: formData,\n  });\n}\n```\n\n```typescript\n// Current (broken)\nasync uploadChannelFiles(channelId: UUID, params: ChannelUploadParams): Promise<ChannelUploadResponse> {\n  // ...\n  return this.request<ChannelUploadResponse>(\n    'POST',\n    `/api/media/central-channels/${channelId}/upload`,\n    {\n      body: formData,\n    }\n  );\n}\n\n// Should be (note: also needs to handle single file, not multiple)\nasync uploadChannelMedia(channelId: UUID, file: File): Promise<ChannelUploadResponse> {\n  const formData = new FormData();\n  formData.append('file', file);\n  \n  return this.request<ChannelUploadResponse>(\n    'POST',\n    `/api/messaging/channels/${channelId}/upload-media`,\n    {\n      body: formData,\n    }\n  );\n}\n```\n\n### 2. Update API Client Types\n\nThe API client types may need updating to match the server's expected request/response format for single file uploads.\n\n### 3. Testing Required\n\n- Test agent media uploads\n- Test channel file uploads  \n- Verify file serving endpoints still work\n- Check that uploaded files are stored in correct directories\n\n## Additional Context\n\n- Server uses `express-fileupload` middleware with 50MB file size limits\n- Files are validated for MIME type before processing\n- Uploaded files are stored in `.eliza/data/uploads/agents/{agentId}/` or `.eliza/data/uploads/channels/{channelId}/`\n\n## Priority\n\nHigh - This is a core feature that's completely broken for users trying to share media through the Eliza interface.",
      "createdAt": "2025-06-24T08:43:42Z",
      "closedAt": "2025-06-24T10:07:48Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6bgJ7Q",
      "title": "refactor(polygon): remove conflicts",
      "author": "snobbee",
      "number": 5232,
      "body": "* renamed plugin names to avoid conflicts across plugins\r\n* rephrase examples to avoid confilcts",
      "repository": "elizaos/eliza",
      "createdAt": "2025-06-21T09:06:45Z",
      "mergedAt": "2025-06-24T13:31:48Z",
      "additions": 14358,
      "deletions": 3658
    },
    {
      "id": "PR_kwDOMT5cIs6b18_q",
      "title": "Feature/jules agent dev poc",
      "author": "valentinuuiuiu",
      "number": 5254,
      "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\n<!-- LINK TO ISSUE OR TICKET -->\r\n\r\n<!-- This risks section must be filled out before the final review and merge. -->\r\n\r\n# Risks\r\n\r\n<!--\r\nLow, medium, large. List what kind of risks and what could be affected.\r\n-->\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\n## What kind of change is this?\r\n\r\n<!--\r\nBug fixes (non-breaking change which fixes an issue)\r\nImprovements (misc. changes to existing features)\r\nFeatures (non-breaking change which adds functionality)\r\nUpdates (new versions of included code)\r\n-->\r\n\r\n<!-- This \"Why\" section is most relevant if there are no linked issues explaining why. If there is a related issue, it might make sense to skip this why section. -->\r\n<!--\r\n## Why are we doing this? Any context or related work?\r\n-->\r\n\r\n# Documentation changes needed?\r\n\r\n<!--\r\nMy changes do not require a change to the project documentation.\r\nMy changes require a change to the project documentation.\r\nIf documentation change is needed: I have updated the documentation accordingly.\r\n-->\r\n\r\n<!-- Please show how you tested the PR. This will really help if the PR needs to be retested and probably help the PR get merged quicker. -->\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\n## Detailed testing steps\r\n\r\n<!--\r\nNone: Automated tests are acceptable.\r\n-->\r\n\r\n<!--\r\n- As [anon/admin], go to [link]\r\n  - [do action]\r\n  - verify [result]\r\n-->\r\n\r\n<!-- If there is a UI change, please include before and after screenshots or videos. This will speed up PRs being merged. It is extra nice to annotate screenshots with arrows or boxes pointing out the differences. -->\r\n<!--\r\n## Screenshots\r\n### Before\r\n### After\r\n-->\r\n\r\n<!-- If there is anything about the deployment, please make a note. -->\r\n<!--\r\n# Deploy Notes\r\n-->\r\n\r\n<!--  Copy and paste command line output. -->\r\n<!--\r\n## Database changes\r\n-->\r\n\r\n<!--  Please specify deploy instructions if there is something more than the automated steps. -->\r\n<!--\r\n## Deployment instructions\r\n-->\r\n\r\n<!-- If you are on Discord, please join https://discord.gg/ai16z and state your Discord username here for the contributor role and join us in #development-feed -->\r\n<!--\r\n## Discord username\r\n\r\n-->\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-06-24T10:58:54Z",
      "mergedAt": null,
      "additions": 13813,
      "deletions": 17780
    },
    {
      "id": "PR_kwDOMT5cIs6bsXgX",
      "title": "Added: Actions and ABIs for Alethea Plugin",
      "author": "Samarthsinghal28",
      "number": 5247,
      "body": "# Relates to\r\n\r\n<!-- No specific issue linked -->\r\n\r\n# Risks\r\n\r\n**Medium** — This PR introduces new plugin functionality and external interactions via ABIs and actions. It may affect downstream systems that rely on plugin behavior or Hive interactions.\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nThis pull request adds support for the Alethea Plugin by introducing:\r\n\r\n- Basic ABIs required for interacting with external contracts or services.\r\n- Core plugin actions needed for executing Alethea-related operations.\r\n- Hive actions to support blockchain interactions related to the plugin's logic.\r\n\r\n## What kind of change is this?\r\n\r\n**Features** – This is a non-breaking change that adds new functionality (Alethea plugin support via actions and ABIs).\r\n\r\n# Documentation changes needed?\r\n\r\n- [x] My changes require a change to the project documentation.\r\n- [ ] My changes do not require a change to the project documentation.\r\n- [x] I have updated the documentation accordingly.\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\nBegin by reviewing the new Alethea plugin files:\r\n\r\n-  `packages/plugin-alethea/alethea`\r\n\r\n## Detailed testing steps\r\n\r\n- Use the UI or CLI (if available) to trigger Alethea actions.\r\n- Verify the ABIs are correctly parsed and contract calls succeed.\r\n- Confirm Hive actions log and respond as expected.\r\n\r\n# Screenshots\r\n\r\n- Already shared the test screenshots\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-06-23T15:50:36Z",
      "mergedAt": "2025-06-24T13:31:50Z",
      "additions": 10193,
      "deletions": 118
    },
    {
      "id": "PR_kwDOMT5cIs6bJ3Ir",
      "title": "fix: character form - secrets panel",
      "author": "0xbbjoker",
      "number": 5186,
      "body": "# Relates to\nFixes issues with the character form secrets panel functionality for managing API keys and environment variables.\n\n# Risks\n**Low** - UI/UX improvements to existing secrets management functionality. Affects character creation and configuration workflow.\n\n# Background\n\n## What does this PR do?\nThis PR fixes the secrets panel in the character form interface, improving how users configure API keys and sensitive environment variables when creating or editing agent characters. The changes enhance the UI/UX for secrets management and ensure proper integration with ElizaOS's plugin system.\n\n**First Commit**: Fixes core functionality issues in the character form secrets panel\n- Resolves UI rendering problems with the secrets configuration interface\n- Improves form validation and error handling for API keys\n- Ensures proper integration with environment variable management\n\n**Second Commit**: Enhances secrets panel implementation \n- Adds additional validation and user feedback mechanisms\n- Implements missing functionality for secrets management workflow\n- Improves integration with plugin configuration requirements\n\n## What kind of change is this?\n**Bug fixes** (non-breaking change which fixes an issue) + **Improvements** (misc. changes to existing features)\n\n# Documentation changes needed?\nMy changes do not require a change to the project documentation.\n\n# Testing\n\n## Where should a reviewer start?\n1. Navigate to the character creation/editing form\n2. Focus on the secrets panel section where API keys are configured\n3. Test the form validation and submission workflow\n\n## Detailed testing steps\n- As a user, go to the character form interface\n  - Access the secrets panel section\n  - Add/edit API keys (OpenAI, Discord, Twitter tokens, etc.)\n  - Verify form validation works correctly\n  - Verify secrets are properly saved and loaded\n  - Test error handling for invalid inputs\n- Verify integration with plugin configuration requirements\n- Test that agents can properly access configured secrets\n\n## Notes for Plugin Registry\n⚠️ **Important**: For this secrets panel feature to be fully functional across all plugins, each plugin in the ElizaOS registry needs to update their `package.json` with the required `agentConfig` section:\n\n```json\n{\n  \"agentConfig\": {\n    \"pluginType\": \"elizaos:plugin:1.0.0\",\n    \"pluginParameters\": {\n      \"API_KEY\": {\n        \"type\": \"string\",\n        \"description\": \"API key for the service\",\n        \"required\": true\n      }\n    }\n  }\n}\n```\n\nThis allows the secrets panel to automatically generate appropriate input fields for each plugin's required secrets.",
      "repository": "elizaos/eliza",
      "createdAt": "2025-06-18T22:26:19Z",
      "mergedAt": "2025-06-24T16:24:30Z",
      "additions": 2297,
      "deletions": 525
    },
    {
      "id": "PR_kwDOMT5cIs6b521P",
      "title": "feat: Complete migration of packages/client to @elizaos/api-client",
      "author": "wtfsayo",
      "number": 5263,
      "body": "# feat: Complete migration of packages/client to @elizaos/api-client\n\n## Summary\n\n🎯 **Complete migration of packages/client to use the new `@elizaos/api-client` package**\n\nThis PR implements a comprehensive migration strategy that transitions all client functionality from the legacy API client to the standardized `@elizaos/api-client` package while maintaining 100% backward compatibility and preserving all existing features.\n\n## 🚀 Key Changes\n\n### Complete API Client Replacement\n- **Removed Legacy Client**: Eliminated the old `packages/client/src/lib/api.ts` (610 lines deleted)\n- **New Client Integration**: Added `@elizaos/api-client` dependency and configured singleton client instance\n- **Centralized Configuration**: Created `api-client-config.ts` with localStorage-based API key management\n\n### Service Layer Migration\n- **Agent Services**: All agent CRUD operations (create, read, update, delete, start, stop)\n- **Messaging Services**: Messages, channels, servers, DM management\n- **Memory Services**: Agent memories, internal memories, group memories\n- **Media Services**: File uploads, media handling\n- **Audio Services**: TTS generation, speech transcription\n- **System Services**: Health checks, logging, environment management\n\n### Component & Hook Updates\n- **All React Hooks**: Migrated 20+ hooks to use `createElizaClient()`\n- **Audio Components**: Updated TTS button and audio recorder to use new audio service\n- **File Upload**: Refactored to use new media service endpoints\n- **Agent Management**: Updated agent creation, settings, and status management\n\n## 🔧 Technical Implementation\n\n### Direct Migration Approach\nInstead of a hybrid approach, this migration directly replaces all legacy API calls with the new client:\n\n```typescript\n// Before: Legacy API\nconst response = await apiClient.post('/agents', data);\n\n// After: New API Client  \nconst elizaClient = createElizaClient();\nconst response = await elizaClient.agents.createAgent(data);\n```\n\n### Service-Specific Improvements\n- **Audio Service**: Proper base64/Blob handling for TTS and transcription\n- **Error Handling**: Centralized error management with consistent user feedback\n- **Type Safety**: Full TypeScript support with proper service interfaces\n- **Response Handling**: Improved handling of 204 No Content and empty responses\n\n## ✅ Features Preserved\n\n- **Real-time WebSocket Integration**: All chat functionality intact\n- **File Upload & Media Sharing**: Images, videos, documents\n- **Text-to-Speech & Transcription**: Audio features working with new service\n- **Agent Management**: Complete agent lifecycle management\n- **Memory Operations**: Chat history and agent memory systems\n- **Group Chat**: Multi-participant conversations and DM channels\n- **Admin Features**: Logging, debugging, environment management\n\n## 📊 Migration Metrics\n\n- **Files Changed**: 54 files modified\n- **Code Reduction**: Net -457 lines (removed legacy code, added new functionality)\n- **API Endpoints**: 100% migrated to new service architecture\n- **Test Coverage**: All existing tests passing (32/32 ✅)\n- **No Breaking Changes**: Zero disruption to existing functionality\n\n## 🧪 Testing & Validation\n\n- ✅ All existing unit tests pass\n- ✅ TypeScript compilation successful\n- ✅ Linting passes\n- ✅ WebSocket integration preserved\n- ✅ File upload functionality verified\n- ✅ Audio features (TTS/transcription) working\n- ✅ Agent operations tested\n- ✅ Memory operations validated\n- ✅ Group and DM functionality confirmed\n\n## 🎁 Benefits\n\n### For Developers\n- **Modern Architecture**: Uses standardized API client with consistent patterns\n- **Better Type Safety**: Full TypeScript support across all services\n- **Improved Error Handling**: Centralized error management with user-friendly messages\n- **Cleaner Code**: Removed legacy patterns and duplicate code\n\n### For Users\n- **Seamless Experience**: No changes to existing functionality\n- **Improved Reliability**: Better error handling and edge case management\n- **Enhanced Performance**: Optimized request handling and response processing\n\n### For Maintainers\n- **Unified API Layer**: Single source of truth for all API interactions\n- **Future-Proof**: Ready for upcoming API enhancements and new features\n- **Easier Debugging**: Centralized logging and error tracking\n\n## 🔄 Backward Compatibility\n\n**Zero Breaking Changes** - This migration maintains 100% backward compatibility. All existing functionality works exactly as before, with improved reliability and performance under the hood.\n\n## 📝 Next Steps\n\n- Monitor production deployment for any edge cases\n- Consider additional optimizations for the new client configuration\n- Evaluate opportunities for further API standardization across other packages\n\n---\n\n*This migration represents a significant step toward a more maintainable and scalable codebase while preserving the complete user experience.*",
      "repository": "elizaos/eliza",
      "createdAt": "2025-06-24T17:02:10Z",
      "mergedAt": "2025-06-25T13:11:16Z",
      "additions": 1627,
      "deletions": 1083
    }
  ],
  "codeChanges": {
    "additions": 26295,
    "deletions": 3808,
    "files": 146,
    "commitCount": 96
  },
  "completedItems": [
    {
      "title": "fix: character form - secrets panel",
      "prNumber": 5186,
      "type": "bugfix",
      "body": "# Relates to\nFixes issues with the character form secrets panel functionality for managing API keys and environment variables.\n\n# Risks\n**Low** - UI/UX improvements to existing secrets management functionality. Affects character creation an",
      "files": [
        "packages/client/src/components/agent-creator.tsx",
        "packages/client/src/components/agent-settings.tsx",
        "packages/client/src/components/avatar-panel.tsx",
        "packages/client/src/components/character-form.tsx",
        "packages/client/src/components/secret-panel.tsx",
        "packages/client/src/components/ui/alert.tsx",
        "packages/client/src/hooks/use-plugin-details.ts",
        "packages/client/src/hooks/use-query-hooks.ts",
        "packages/client/src/lib/api.ts",
        "packages/client/src/routes/createAgent.tsx",
        "bun.lock",
        "packages/client/src/components/env-settings.tsx",
        "packages/client/src/components/missing-secrets-dialog.tsx",
        "packages/client/src/config/agent-templates.ts",
        "packages/client/src/components/plugins-panel.tsx",
        "packages/client/src/routes/agent-settings.tsx"
      ]
    },
    {
      "title": "refactor(polygon): remove conflicts",
      "prNumber": 5232,
      "type": "refactor",
      "body": "* renamed plugin names to avoid conflicts across plugins\r\n* rephrase examples to avoid confilcts",
      "files": [
        "bun.lock",
        "packages/plugin-polymarket/src/actions/createApiKey.ts",
        "packages/plugin-polymarket/src/actions/getBestPrice.ts",
        "packages/plugin-polymarket/src/actions/getClobMarkets.ts",
        "packages/plugin-polymarket/src/actions/getOpenMarkets.ts",
        "packages/plugin-polymarket/src/actions/getOrderBookDepth.ts",
        "packages/plugin-polymarket/src/actions/getSpread.ts",
        "packages/plugin-polymarket/src/actions/placeOrder.ts",
        "packages/plugin-quickswap/src/actions/addLiquidity.ts",
        "packages/plugin-quickswap/src/actions/calculateLiquidityValue.ts",
        "packages/plugin-quickswap/src/actions/calculateMidPrice.ts",
        "packages/plugin-quickswap/src/actions/calculatePriceImpact.ts",
        "packages/plugin-quickswap/src/actions/calculateTokenPrice.ts",
        "packages/plugin-quickswap/src/actions/claimFarmingRewards.ts",
        "packages/plugin-quickswap/src/actions/estimateGasFees.ts",
        "packages/plugin-quickswap/src/actions/executeLimitOrderStopLossTakeProfit.ts",
        "packages/plugin-quickswap/src/actions/fetchPairData.ts",
        "packages/plugin-quickswap/src/actions/fetchTokenData.ts",
        "packages/plugin-quickswap/src/actions/getFarmingPoolDetails.ts",
        "packages/plugin-quickswap/src/actions/getTransactionStatus.ts",
        "packages/plugin-quickswap/src/actions/initializeQuickswapPlugin.ts",
        "packages/plugin-quickswap/src/actions/removeLiquidity.ts",
        "packages/plugin-quickswap/src/actions/supportFeeOnTransferTokens.ts",
        "packages/plugin-quickswap/src/actions/swapTokens.ts",
        "packages/plugin-alethea/.env.example",
        "packages/plugin-alethea/.eslintrc.cjs",
        "packages/plugin-alethea/.gitignore",
        "packages/plugin-alethea/.npmignore",
        "packages/plugin-alethea/.prettierrc.cjs",
        "packages/plugin-alethea/README.md",
        "packages/plugin-alethea/package.json",
        "packages/plugin-alethea/src/abis/AliToken.ts",
        "packages/plugin-alethea/src/abis/DisperseApp.ts",
        "packages/plugin-alethea/src/abis/ERC721.ts",
        "packages/plugin-alethea/src/abis/HiveRegistry.ts",
        "packages/plugin-alethea/src/abis/IntelligentNFTV2.ts",
        "packages/plugin-alethea/src/abis/KeysFactory.ts",
        "packages/plugin-alethea/src/abis/TradeableShares.ts",
        "packages/plugin-alethea/src/abis/UniswapV3.ts",
        "packages/plugin-alethea/src/abis/WhitelabelERC20.ts",
        "packages/plugin-alethea/src/abis/WhitelabelERC20Bytecode.ts",
        "packages/plugin-alethea/src/abis/index.ts",
        "packages/plugin-alethea/src/actions/buyKeysAction.ts",
        "packages/plugin-alethea/src/actions/convertInftToAliAgentAction.ts",
        "packages/plugin-alethea/src/actions/convertNftToAliAgentAction.ts",
        "packages/plugin-alethea/src/actions/createHiveAction.ts",
        "packages/plugin-alethea/src/actions/createLiquidityPoolAction.ts",
        "packages/plugin-alethea/src/actions/deployAliAgentTokenAction.ts",
        "packages/plugin-alethea/src/actions/deployHiveUtilityTokenAction.ts",
        "packages/plugin-alethea/src/actions/distributeHiveTokensAction.ts",
        "packages/plugin-alethea/src/actions/executeAirdropAction.ts",
        "packages/plugin-alethea/src/actions/fusePodWithAliAgentAction.ts",
        "packages/plugin-alethea/src/actions/getAliAgentKeyBuyPriceAction.ts",
        "packages/plugin-alethea/src/actions/getAliAgentKeySellPriceAction.ts",
        "packages/plugin-alethea/src/actions/getLinkedAssetDetailsAction.ts",
        "packages/plugin-alethea/src/actions/governance.ts",
        "packages/plugin-alethea/src/actions/index.ts",
        "packages/plugin-alethea/src/actions/inft-creation.ts",
        "packages/plugin-alethea/src/actions/inft.ts",
        "packages/plugin-alethea/src/actions/joinHiveAction.ts",
        "packages/plugin-alethea/src/actions/leaveHiveAction.ts",
        "packages/plugin-alethea/src/actions/market-data.ts",
        "packages/plugin-alethea/src/actions/sellKeysAction.ts",
        "packages/plugin-alethea/src/actions/updateHiveUriAction.ts",
        "packages/plugin-alethea/src/constants/contracts.ts",
        "packages/plugin-alethea/src/constants/governance.ts",
        "packages/plugin-alethea/src/constants/index.ts",
        "packages/plugin-alethea/src/constants/inft.ts",
        "packages/plugin-alethea/src/plugin.ts",
        "packages/plugin-alethea/src/templates/index.ts",
        "packages/plugin-alethea/src/templates/inft-creation.ts",
        "packages/plugin-alethea/src/templates/inft.ts",
        "packages/plugin-alethea/src/templates/market-data.ts"
      ]
    },
    {
      "title": "Feature/phase4 admin api migration",
      "prNumber": 5266,
      "type": "feature",
      "body": "",
      "files": [
        "bun.lock",
        "packages/api-client/src/services/agents.ts",
        "packages/api-client/src/services/audio.ts",
        "packages/api-client/src/services/memory.ts",
        "packages/api-client/src/services/messaging.ts",
        "packages/api-client/src/services/server.ts",
        "packages/api-client/src/services/system.ts",
        "packages/api-client/src/types/messaging.ts",
        "packages/client/package.json",
        "packages/client/src/App.tsx",
        "packages/client/src/components/agent-creator.tsx",
        "packages/client/src/components/agent-log-viewer.tsx",
        "packages/client/src/components/agent-settings.tsx",
        "packages/client/src/components/character-form.tsx",
        "packages/client/src/components/chat.tsx",
        "packages/client/src/components/env-settings.tsx",
        "packages/client/src/components/group-panel.tsx",
        "packages/client/src/components/plugins-panel.tsx",
        "packages/client/src/components/secret-panel.tsx",
        "packages/client/src/components/server-management.tsx",
        "packages/client/src/hooks/use-plugins.ts",
        "packages/client/src/hooks/use-query-hooks.ts",
        "packages/client/src/hooks/use-server-agents.ts",
        "packages/client/src/lib/migration-utils.ts",
        "packages/server/src/api/memory/agents.ts"
      ]
    },
    {
      "title": "fix: rename for clarity",
      "prNumber": 5265,
      "type": "bugfix",
      "body": "",
      "files": [
        "packages/core/src/utils.ts",
        "packages/plugin-bootstrap/src/index.ts"
      ]
    },
    {
      "title": "feat: adds support for user-uploaded plain text (.txt) files in the GUI.",
      "prNumber": 5262,
      "type": "feature",
      "body": "This PR adds support for user-uploaded plain text (.txt) files in the GUI.",
      "files": [
        "packages/plugin-bootstrap/src/index.ts"
      ]
    },
    {
      "title": "polishing docs: error fixes for clarity",
      "prNumber": 5258,
      "type": "bugfix",
      "body": "Spotted and fixed a few wording hiccups:\r\n\r\n`satsified` - `satisfied`\r\n`succesful` - `successful`",
      "files": [
        "packages/docs/archive/injection/example.md",
        "packages/docs/blog/taming_info.mdx"
      ]
    },
    {
      "title": "fix: processAttachments to Support Local Image URLs and Include Attachment Descriptions in Prompts",
      "prNumber": 5257,
      "type": "bugfix",
      "body": "This PR improves the processAttachments logic in the bootstrap phase. Previously, processAttachments only handled images with HTTP URLs. This update adds support for local image URLs as well.\r\n\r\nAdditionally, this PR includes attachment des",
      "files": [
        "packages/core/src/utils.ts",
        "packages/plugin-bootstrap/src/index.ts",
        "packages/plugin-sql/src/base.ts"
      ]
    },
    {
      "title": "refactor: starter packages to separate character and plugin files",
      "prNumber": 5256,
      "type": "refactor",
      "body": "## Summary\n\nThis PR refactors the starter packages to have cleaner separation of concerns by moving character and plugin configurations to their own dedicated files.\n\n### Changes Made\n\n- **`packages/plugin-starter`**: \n  - Moved plugin conf",
      "files": [
        "packages/plugin-starter/src/index.ts",
        "packages/plugin-starter/src/plugin.ts",
        "packages/project-starter/src/character.ts",
        "packages/project-starter/src/index.ts",
        "packages/project-tee-starter/src/index.ts"
      ]
    },
    {
      "title": "fix: complete multer migration and resolve upload functionality",
      "prNumber": 5252,
      "type": "bugfix",
      "body": "## Summary\n- Complete migration from express-fileupload to multer for all upload functionality\n- Fix API endpoint mismatches between client and server after multer migration\n- Resolve \"Unexpected end of form\" multipart parsing errors\n- Ensu",
      "files": [
        "bun.lock",
        "eliza.postman.json",
        "packages/api-client/src/services/media.ts",
        "packages/api-client/src/types/media.ts",
        "packages/client/src/lib/info.json",
        "packages/docs/src/openapi/eliza-v1.yaml",
        "packages/server/package.json",
        "packages/server/src/__tests__/test-utils/mocks.test.ts",
        "packages/server/src/__tests__/test-utils/mocks.ts",
        "packages/server/src/api/audio/processing.ts",
        "packages/server/src/api/index.ts",
        "packages/server/src/api/media/agents.ts",
        "packages/server/src/api/media/channels.ts",
        "packages/server/src/api/messaging/channels.ts",
        "packages/server/src/api/shared/file-utils.ts",
        "packages/server/src/index.ts",
        "packages/server/src/upload.ts"
      ]
    },
    {
      "title": "fix: Fix macOS CLI test failures by centralizing platform options",
      "prNumber": 5250,
      "type": "bugfix",
      "body": "## Summary\n- Fixed undefined function call `getBunPath()` → `getBunExecutable()` in agent.test.ts\n- Centralized platform-specific options for execSync calls to fix macOS CI failures\n- Added proper PATH resolution and locale settings for mac",
      "files": [
        ".github/workflows/cli-tests.yml",
        "packages/cli/run-all-tests.sh",
        "packages/cli/tests/commands/agent.test.ts",
        "packages/cli/tests/commands/create.test.ts",
        "packages/cli/tests/commands/plugins.test.ts",
        "packages/cli/tests/commands/start.test.ts",
        "packages/cli/tests/commands/test-utils.ts"
      ]
    },
    {
      "title": "Added: Actions and ABIs for Alethea Plugin",
      "prNumber": 5247,
      "type": "other",
      "body": "# Relates to\r\n\r\n<!-- No specific issue linked -->\r\n\r\n# Risks\r\n\r\n**Medium** — This PR introduces new plugin functionality and external interactions via ABIs and actions. It may affect downstream systems that rely on plugin behavior or Hive i",
      "files": [
        "bun.lock",
        "packages/plugin-alethea/.env.example",
        "packages/plugin-alethea/.eslintrc.cjs",
        "packages/plugin-alethea/.gitignore",
        "packages/plugin-alethea/.npmignore",
        "packages/plugin-alethea/.prettierrc.cjs",
        "packages/plugin-alethea/README.md",
        "packages/plugin-alethea/package.json",
        "packages/plugin-alethea/src/abis/AliToken.ts",
        "packages/plugin-alethea/src/abis/DisperseApp.ts",
        "packages/plugin-alethea/src/abis/ERC721.ts",
        "packages/plugin-alethea/src/abis/HiveRegistry.ts",
        "packages/plugin-alethea/src/abis/IntelligentNFTV2.ts",
        "packages/plugin-alethea/src/abis/KeysFactory.ts",
        "packages/plugin-alethea/src/abis/TradeableShares.ts",
        "packages/plugin-alethea/src/abis/UniswapV3.ts",
        "packages/plugin-alethea/src/abis/WhitelabelERC20.ts",
        "packages/plugin-alethea/src/abis/WhitelabelERC20Bytecode.ts",
        "packages/plugin-alethea/src/abis/index.ts",
        "packages/plugin-alethea/src/actions/buyKeysAction.ts",
        "packages/plugin-alethea/src/actions/convertInftToAliAgentAction.ts",
        "packages/plugin-alethea/src/actions/convertNftToAliAgentAction.ts",
        "packages/plugin-alethea/src/actions/createHiveAction.ts",
        "packages/plugin-alethea/src/actions/createLiquidityPoolAction.ts",
        "packages/plugin-alethea/src/actions/deployAliAgentTokenAction.ts",
        "packages/plugin-alethea/src/actions/deployHiveUtilityTokenAction.ts",
        "packages/plugin-alethea/src/actions/distributeHiveTokensAction.ts",
        "packages/plugin-alethea/src/actions/executeAirdropAction.ts",
        "packages/plugin-alethea/src/actions/fusePodWithAliAgentAction.ts",
        "packages/plugin-alethea/src/actions/getAliAgentKeyBuyPriceAction.ts",
        "packages/plugin-alethea/src/actions/getAliAgentKeySellPriceAction.ts",
        "packages/plugin-alethea/src/actions/getLinkedAssetDetailsAction.ts",
        "packages/plugin-alethea/src/actions/governance.ts",
        "packages/plugin-alethea/src/actions/index.ts",
        "packages/plugin-alethea/src/actions/inft-creation.ts",
        "packages/plugin-alethea/src/actions/inft.ts",
        "packages/plugin-alethea/src/actions/joinHiveAction.ts",
        "packages/plugin-alethea/src/actions/leaveHiveAction.ts",
        "packages/plugin-alethea/src/actions/market-data.ts",
        "packages/plugin-alethea/src/actions/sellKeysAction.ts",
        "packages/plugin-alethea/src/actions/updateHiveUriAction.ts",
        "packages/plugin-alethea/src/constants/contracts.ts",
        "packages/plugin-alethea/src/constants/governance.ts",
        "packages/plugin-alethea/src/constants/index.ts",
        "packages/plugin-alethea/src/constants/inft.ts",
        "packages/plugin-alethea/src/plugin.ts",
        "packages/plugin-alethea/src/templates/index.ts",
        "packages/plugin-alethea/src/templates/inft-creation.ts",
        "packages/plugin-alethea/src/templates/inft.ts",
        "packages/plugin-alethea/src/templates/market-data.ts"
      ]
    },
    {
      "title": "refactor: centralize-directory-detection-logic",
      "prNumber": 5246,
      "type": "refactor",
      "body": "  ## Description\r\n  This PR centralizes scattered directory type detection logic throughout the CLI codebase into the `directory-detection` utility, eliminating code duplication and ensuring consistent behavior across all CLI commands. This",
      "files": [
        "packages/cli/src/commands/start/index.ts",
        "packages/cli/src/commands/test/actions/e2e-tests.ts",
        "packages/cli/src/commands/test/utils/project-utils.ts",
        "packages/cli/src/project.ts",
        "packages/cli/src/utils/build-project.ts",
        "packages/cli/tests/unit/commands/test/e2e-tests.test.ts",
        "packages/cli/tests/unit/utils/build-project.test.ts",
        "packages/cli/tests/unit/utils/directory-detection.test.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 250.26711160805021,
      "prScore": 241.82911160805023,
      "issueScore": 8,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": "wtfsayo: Merged 4 PRs, including significant feature work and bug fixes, with a total of +897/-907 lines in PR #5252 and a major refactor in PR #5256 (+406/-408 lines). Created 2 issues and modified 358 files across 38 commits, maintaining a consistent work pattern focused on feature development (47%) and bug fixes (24%)."
    },
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 117.12562747638061,
      "prScore": 107.42562747638061,
      "issueScore": 0,
      "reviewScore": 9.5,
      "commentScore": 0.2,
      "summary": "0xbbjoker: Opened 3 PRs (#5267, #5264, #5255) and modified 41 files with a total of +3552/-1139 lines, focusing primarily on bug fixes (64%) and features (36%). Actively engaged with 2 reviews, including 1 approval, demonstrating consistent work patterns."
    },
    {
      "username": "tcm390",
      "avatarUrl": "https://avatars.githubusercontent.com/u/60634884?u=c6c41679b8322eaa0c81f72e0b4ed95e80f0ac16&v=4",
      "totalScore": 76.79867214201155,
      "prScore": 76.79867214201155,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "tcm390: Merged 3 PRs, including significant bug fixes and feature additions, with a total of +457/-425 lines across PRs #5265, #5262, and #5257. Actively modified 35 files, focusing primarily on other work (77%) and bugfixes (15%), demonstrating consistent daily contributions."
    },
    {
      "username": "valentinuuiuiu",
      "avatarUrl": "https://avatars.githubusercontent.com/u/105746659?v=4",
      "totalScore": 40.4257738965761,
      "prScore": 40.4257738965761,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "valentinuuiuiu: Opened 1 PR (#5254) focused on feature work, modifying 324 files with a total of +17775/-8528 lines. Demonstrated consistent activity with a single commit today, primarily working on code, tests, and configuration."
    },
    {
      "username": "eeemmmmmm",
      "avatarUrl": "https://avatars.githubusercontent.com/u/155267286?u=f7d609c472582d2c72ff5b592dddf98359459fc5&v=4",
      "totalScore": 21.9004379124341,
      "prScore": 21.9004379124341,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "eeemmmmmm: Merged 1 PR (#5258) focused on polishing documentation with minor error fixes (+2/-2 lines) and made modifications to 2 files, all related to bugfix work. Maintained a consistent activity pattern, being active every day."
    },
    {
      "username": "ChristopherTrimboli",
      "avatarUrl": "https://avatars.githubusercontent.com/u/27584221?u=0d816ce1dcdea8f925aba18bb710153d4a87a719&v=4",
      "totalScore": 5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": "ChristopherTrimboli: Contributed by reviewing 1 pull request with 1 approval, showing sporadic activity today. No other contributions were made, and there were no code changes or comments on issues."
    },
    {
      "username": "yehia67",
      "avatarUrl": "https://avatars.githubusercontent.com/u/21314724?u=382461180dd04185ac97e32d306dc49d8e80ee60&v=4",
      "totalScore": 4.4399999999999995,
      "prScore": 0,
      "issueScore": 4.1,
      "reviewScore": 0,
      "commentScore": 0.33999999999999997,
      "summary": "yehia67: Created 1 new issue (#5260 \"Create custom plugin for onchain AI agent\" (OPEN)) and commented on 2 issues, demonstrating sporadic activity today."
    },
    {
      "username": "joaoCarvalho1000",
      "avatarUrl": "https://avatars.githubusercontent.com/u/14310755?u=0375ed276623a7f1d36717f95130bf0cdebf2402&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    }
  ],
  "newPRs": 14,
  "mergedPRs": 12,
  "newIssues": 3,
  "closedIssues": 1,
  "activeContributors": 10
}