# ElizaOS Developer Update - Week of June 22-28, 2025

## Core Framework

The team completed a major architectural shift this week, transforming plugins from project-scoped to agent-scoped with PR [#5270](https://github.com/elizaos/eliza/pull/5270), allowing different characters to use different plugins. However, this change caused integration issues that required a rollback ([#5297](https://github.com/elizaos/eliza/pull/5297)) to ensure stability. Work continues to reimplement this capability more robustly.

Progress on the message server architecture has stabilized, with runtime initialization improvements (PR [#5092](https://github.com/elizaos/eliza/pull/5092)) addressing critical issues in the database adapter handling and agent ID synchronization. The team also fixed the "agent is thinking" issue ([#5151](https://github.com/elizaos/eliza/pull/5151)) that caused the UI to get stuck when agents chose to ignore a user message.

A significant enhancement was made with PR [#5264](https://github.com/elizaos/eliza/pull/5264) adding OpenRouter to the model selection options, giving developers more flexibility in choosing AI providers.

## New Features

### Type-safe API Client Package

A comprehensive new `@elizaos/api-client` package was introduced in PR [#5240](https://github.com/elizaos/eliza/pull/5240), providing a fully typed interface for interacting with ElizaOS server APIs:

```typescript
import { createApiClient } from '@elizaos/api-client';

const client = createApiClient({
  baseUrl: 'http://localhost:3000',
});

// Type-safe API calls with full IntelliSense support
const agents = await client.agents.list();
const memories = await client.memories.list(agentId);
```

This client has been integrated throughout the codebase, replacing direct fetch calls with a consistent, well-typed alternative.

### Enhanced File Handling

Support for plain text (.txt) file uploads was added in PR [#5262](https://github.com/elizaos/eliza/pull/5262), expanding the types of content users can share with their agents:

```javascript
// Server now processes text files alongside images and other media
const handleFileUpload = async (req, res) => {
  const files = req.files;
  
  for (const file of files) {
    if (file.mimetype === 'text/plain') {
      // Process text file content
      const content = await fs.readFile(file.path, 'utf-8');
      // Store in memory or knowledge base
    }
  }
};
```

PR [#5257](https://github.com/elizaos/eliza/pull/5257) improved attachment handling to support both local and remote images, ensuring consistent processing regardless of source.

## Bug Fixes

A critical issue causing responses to appear in memories but not in chat UI was fixed, addressing a websocket/API communication problem between backend and frontend that was causing conversations to stall. 

The character form secrets panel functionality for managing API keys and environment variables was fixed in PR [#5186](https://github.com/elizaos/eliza/pull/5186), restoring the ability to properly save environment settings.

PR [#5283](https://github.com/elizaos/eliza/pull/5283) improved AI provider tests to avoid brittle patterns that required updates with every new AI provider addition, making the codebase more maintainable.

A significant bug in plugin-sql was addressed in PR [#5287](https://github.com/elizaos/eliza/pull/5287), converting `message_servers.id` from TEXT to UUID type to fix broken foreign key constraints that were causing database migration failures.

## API Changes

The API routes were reorganized into a logical domain-based structure in PR [#5010](https://github.com/elizaos/eliza/pull/5010), improving code organization and developer experience:

```
api/
├── agents/
│   ├── index.ts
│   ├── rooms.ts
│   └── memories.ts
├── channels/
│   └── index.ts
├── messages/
│   └── index.ts
└── etc...
```

API documentation was comprehensively updated in PR [#5280](https://github.com/elizaos/eliza/pull/5280) to match the current implementation, with a migration guide added for developers.

## Social Media Integrations

The Twitter plugin has been updated to use API keys instead of web scraping due to X platform restrictions. This change is reflected in the v1.0.13 release of the plugin. Documentation has been updated to reflect these changes, guiding users on obtaining and configuring the necessary API credentials.

The Telegram plugin received fixes for configuration issues in group chats, with updated guidance on adjusting bot privacy settings using BotFather to ensure proper functionality.

## Model Provider Updates

OpenRouter support was added as an AI provider option in PR [#5264](https://github.com/elizaos/eliza/pull/5264), expanding the range of available models. The PR also improved embedding model selection capabilities.

Google Generative AI (Gemini) support was added to the ElizaOS CLI in PR [#5217](https://github.com/elizaos/eliza/pull/5217), with simplified descriptions for AI model and database selections.

PR [#5285](https://github.com/elizaos/eliza/pull/5285) fixed Ollama embedding selection and project loading issues, preventing the `plugin-local-ai` from loading when Ollama is selected as the AI provider.

## Breaking Changes

The migration from project-scoped to agent-scoped plugins (PR [#5270](https://github.com/elizaos/eliza/pull/5270)) is a significant architectural change that will affect existing implementations. While this change was temporarily rolled back in PR [#5297](https://github.com/elizaos/eliza/pull/5297), developers should prepare for this transition in upcoming releases.

The Twitter plugin now requires API keys due to X platform restrictions, which is a breaking change from previous versions that used web scraping. Users must update their configurations to include the necessary API credentials.

When migrating from v1 to v2, be aware that several environment variable names have been standardized across the codebase. Check your `.env` files against the latest templates and update variable names as needed to ensure proper functionality.