# ElizaOS Developer Update - July 17, 2025

## 1. Core Framework

### Service Type System
A major architectural milestone has been achieved with the implementation of standardized service types and a `getServicesByType()` method ([PR #5565](https://github.com/elizaOS/eliza/pull/5565)). This enables:
- Abstract plugin development with type-safe service retrieval
- Multiple services of the same type (e.g., multiple search providers)
- Improved modularity and service discovery

### Action Chaining
The runtime now supports sequential execution of agent actions with state management ([PR #5436](https://github.com/elizaOS/eliza/pull/5436)), enabling:
```javascript
// Actions can now pass data between each other
const result = await runtime.executeAction('createForm', { 
  title: 'Survey',
  fields: ['name', 'email']
});

// Use the result in a subsequent action
await runtime.executeAction('updateForm', { 
  formId: result.formId,
  values: { name: 'User input' }
});
```

### Advisory Locking for DatabaseMigrationService
Fixed a critical bug in the advisory locking system used for database migrations ([PR #5569](https://github.com/elizaOS/eliza/pull/5569)). This prevents race conditions when multiple instances attempt concurrent migrations.

## 2. New Features

### V1 to V2 Character Conversion
Added automatic V1 → V2 character format conversion during JSON import ([PR #5536](https://github.com/elizaOS/eliza/pull/5536)), enabling seamless backward compatibility:
```javascript
// Automatically converts legacy character format
const importedCharacter = useConvertCharacter(jsonData);
if (importedCharacter.wasConverted) {
  console.log(`Converted from V1 format: ${importedCharacter.character.name}`);
}
```

### Image Generation Action
Added a new `generateImageAction` to the agent pipeline ([PR #5446](https://github.com/elizaOS/eliza/pull/5446)), enabling agents to create images based on conversational context using `ModelType.IMAGE`.

### Plugin Quick Starter Template
Added a new `plugin-quick-starter` template ([PR #5589](https://github.com/elizaOS/eliza/pull/5589)) for creating backend-only plugins without frontend boilerplate, streamlining development for server-side extensions.

### Auto-resizing Chat Input
Implemented auto-resizing functionality for the chat input textarea ([PR #5546](https://github.com/elizaOS/eliza/pull/5546)), dynamically adjusting height based on content while maintaining a maximum height for usability.

## 3. Bug Fixes

### Critical Windows Compatibility Issues
Fixed multiple plugin loading failures on Windows ([PR #5437](https://github.com/elizaOS/eliza/pull/5437)), addressing path normalization and localhost resolution issues that were preventing the use of ElizaOS on Windows platforms.

### SPA Routing and Refresh Handling
Resolved issues with SPA routing for globally installed CLI instances ([PR #5479](https://github.com/elizaOS/eliza/pull/5479)), fixing the problem where refreshing non-home routes would result in 404 errors instead of properly loading the application state.

### LLM Response Formatting
Improved prompt enforcement for correct fenced code block formatting in LLM replies ([PR #5525](https://github.com/elizaOS/eliza/pull/5525)), ensuring consistent syntax highlighting and preventing code blocks from being used for non-code content.

### Database Directory Hoisting
Fixed an issue where the PGLITE database directory was being inappropriately hoisted to parent directories ([Issue #5606](https://github.com/elizaOS/eliza/issues/5606)), which caused data conflicts and unexpected behavior.

## 4. API Changes

### Runtime API enhancements
New methods have been added to the Runtime API:
```typescript
// Get services by their standardized type
const searchServices = runtime.getServicesByType(ServiceType.WEB_SEARCH);
for (const service of searchServices) {
  const results = await service.search("query");
}

// Execute actions in sequence with state passing
const actionState = await runtime.executeActionChain([
  { name: 'createForm', args: { title: 'Survey' } },
  { name: 'updateForm', args: { /* uses result from previous action */ } }
]);
```

### Character Import/Export Format Changes
The character import/export system now automatically handles V1 to V2 conversion with plugin matching, ensuring backward compatibility while moving forward with the new format.

### Service Type Interface Changes
New standardized service interfaces have been added:
```typescript
export interface WebSearchService extends Service {
  serviceType: ServiceType.WEB_SEARCH;
  search(query: string): Promise<SearchResult[]>;
}

// Similar interfaces for Browser, Email, PDF, Transcription, Video services
```

## 5. Social Media Integrations

### Twitter/X Platform Issues
The platform is experiencing potential censorship on X (Twitter) with domain and GitHub URLs being blocked. The team is documenting these issues as potential anti-competitive practices and attempting to schedule calls with X representatives to resolve the situation.

### Twitter Plugin Updates
Twitter plugin v1.2.16 was released with new discovery service, auto-posting fixes, and a weighted discovery algorithm for improved content distribution.

## 6. Model Provider Updates

### OpenRouter Deprecation Notice
OpenRouter announced upcoming deprecation of the o1-preview model. Users should migrate to alternative models.

### Ollama Integration Improvements
Enhanced Ollama integration by making the plugin conditional based on `OLLAMA_API_ENDPOINT` environment variable ([PR #5594](https://github.com/elizaOS/eliza/pull/5594)), preventing unnecessary plugin loading and improving startup time when Ollama is not in use.

### Anthropic Model Support
Added support for passing images to Anthropic models through `useModel(ModelType.TEXT_LARGE)` without requiring external API calls.

## 7. Breaking Changes

### Plugin Loading Changes
The system for locating and loading plugins has been significantly refactored. Plugins using custom paths or non-standard loading techniques may need to be updated.

### V1 to V2 Migration
The automatic character conversion system is in place, but some edge cases may exist where custom V1 plugin configurations don't map cleanly to V2 equivalents. Test thoroughly when importing legacy characters.

### Environment Variable Format Changes
Environment variables now require exact formatting without quotes, as quotes are now treated as literal parts of the value:
```
# INCORRECT (will cause errors)
OLLAMA_MODEL="mistral:latest"

# CORRECT
OLLAMA_MODEL=mistral:latest
```

Migration from V1 database schemas to V2 requires proper field mapping. Use the `DatabaseMigrationService` with appropriate advisory locking to prevent conflicts.