# ElizaOS Developer Update - June 10, 2025

## Core Framework

The ElizaOS team has made substantial architectural improvements this week with the release of **version 1.0.7**. Key framework changes include:

- **Type System Refactoring**: The monolithic `types.ts` file has been split into granular files for better maintainability and search capabilities ([#4999](https://github.com/elizaos/eliza/pull/4999)). This makes the codebase more navigable and improves developer experience when working with types.

- **Centralized Directory Detection**: Implemented proper monorepo support to standardize path handling across the codebase ([#5011](https://github.com/elizaos/eliza/pull/5011)). This fixes issues with inconsistent directory detection logic that previously caused problems with workspace dependencies.

- **Message Handler Improvements**: Fixed critical issues in the unified message handler located in `plugin-bootstrap`, which manages dynamic provider selection. The implementation now properly preserves metadata and prevents cross-interference between agents ([#4935](https://github.com/elizaos/eliza/pull/4935)).

- **Agent Runtime Enhancements**: The `ensureAgentExists` method has been moved from `plugin-sql` to the runtime level where it belongs, and agent configuration now properly updates on restart ([#4970](https://github.com/elizaos/eliza/pull/4970)).

## New Features

### Enhanced Plugin System

The plugin system has received several significant improvements:

```typescript
// New environment variable prompting for plugins
// packages/cli/src/commands/plugins/add.ts
async function promptForEnvVars(plugin: PluginManifest) {
  if (!plugin.envVars || plugin.envVars.length === 0) return {};
  
  const envVars: Record<string, string> = {};
  
  for (const envVar of plugin.envVars) {
    const value = await promptInput({
      message: `Enter value for ${envVar.name}${envVar.required ? ' (required)' : ''}:`,
      hint: envVar.description,
      validate: (value) => {
        if (envVar.required && !value) return 'This field is required';
        return true;
      }
    });
    
    if (value) envVars[envVar.name] = value;
  }
  
  return envVars;
}
```

- **Environment Variable Prompting**: Plugins can now specify required environment variables that the CLI will automatically prompt for during installation ([#4945](https://github.com/elizaos/eliza/pull/4945)).

- **Auto-Import Enhancement**: Fixed plugin auto-import when starting from plugin directories, eliminating manual configuration requirements ([#4900](https://github.com/elizaos/eliza/pull/4900)).

- **Lockfile Cleanup**: Added automatic lockfile cleanup for GitHub fallback installations to prevent circular dependency issues ([#5009](https://github.com/elizaos/eliza/pull/5009)).

### UI/UX Improvements

Significant enhancements to the user interface include:

```typescript
// Split Button Component Example
// packages/client/src/components/ui/SplitButton.tsx
export function SplitButton({
  label,
  options,
  variant = "default",
  size = "default",
  align = "end",
  disabled = false,
}: SplitButtonProps) {
  return (
    <div className="relative inline-flex rounded-md">
      <Button
        variant={variant}
        size={size}
        disabled={disabled}
        onClick={options[0]?.onClick}
        className={cn(
          "rounded-r-none border-r-0",
          disabled && "pointer-events-none opacity-50"
        )}
      >
        {label}
      </Button>
      <DropdownMenu>
        <DropdownMenuTrigger asChild>
          <Button
            variant={variant}
            size={size}
            disabled={disabled}
            className="rounded-l-none px-2"
          >
            <ChevronDown className="h-4 w-4" />
          </Button>
        </DropdownMenuTrigger>
        <DropdownMenuContent align={align}>
          {options.map((option, index) => (
            <DropdownMenuItem
              key={index}
              onClick={option.onClick}
              disabled={option.disabled}
            >
              {option.description || option.label}
            </DropdownMenuItem>
          ))}
        </DropdownMenuContent>
      </DropdownMenu>
    </div>
  );
}
```

- **New Split Button Component**: Added a reusable component with dropdown functionality for grouping related actions ([#5000](https://github.com/elizaos/eliza/pull/5000)).

- **Mobile Support**: Better responsive design with proper sidebar handling and Tailwind v4 upgrade ([#4866](https://github.com/elizaos/eliza/pull/4866)).

- **Retry Button**: Users can now retry previous messages with a single click instead of retyping ([#4973](https://github.com/elizaos/eliza/pull/4973)).

- **Responsive Design**: Improved spacing, layout, and accessibility across all UI components ([#4974](https://github.com/elizaos/eliza/pull/4971)).

## Bug Fixes

### Agent Communication Issues

Several critical bugs affecting agent communication have been resolved:

- **Agent Cross-Interference**: Fixed a serious issue where multiple agents would respond to messages intended for a single agent, causing confusion and excessive responses ([#4935](https://github.com/elizaos/eliza/pull/4935)).

- **Self-Response Infinite Loop**: Resolved a problem where agents were getting stuck in endless response loops by properly filtering the messages they process ([#4934](https://github.com/elizaos/eliza/pull/4934)).

- **Foreign Key Constraints**: Fixed channel connection errors that were causing "insert or update on table 'central_messages' violates foreign key constraint" errors ([#4898](https://github.com/elizaos/eliza/pull/4898)).

### System Reliability

- **Empty Logs Display**: Fixed an issue where logs would appear empty despite data being present ([#5006](https://github.com/elizaos/eliza/pull/5006)).

- **E2E Test Reliability**: Improved test stability with proper database cleanup and unique database creation ([#5013](https://github.com/elizaos/eliza/pull/5013)).

- **Text Embedding Filtering**: Excluded text embedding content from debug logs to reduce noise and improve readability ([#5003](https://github.com/elizaos/eliza/pull/5003)).

## API Changes

### Message Server API

The message server has undergone significant refactoring:

```typescript
// Example of calling the new message server API
// To create a room via REST API
const response = await fetch(`/api/agents/${agentId}/rooms`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    name: "TestRoom",
    worldId: "00000000-0000-0000-0000-000000000000",
    type: "dm"
  })
});

// To get rooms for an agent
const rooms = await fetch(`/api/agents/${agentId}/rooms`).then(r => r.json());
```

- **Added Missing API Endpoints**: Fixed the missing GET endpoint for agent rooms ([#4860](https://github.com/elizaos/eliza/pull/4860)).

- **Improved Action Callbacks**: Fixed issues where MCP tool responses and other non-REPLY actions were generated but never sent to users ([#4919](https://github.com/elizaos/eliza/pull/4919)).

- **Fixed Message Routing**: Resolved issues where agents weren't properly recognized as channel participants, causing message delivery failures ([#4972](https://github.com/elizaos/eliza/pull/4972)).

- **API URL Correction**: Fixed incorrect API URL used for message server when SERVER_PORT is not 3000 ([#4980](https://github.com/elizaos/eliza/pull/4980)).

## Social Media Integrations

### Twitter Plugin Updates

The Twitter integration has received several important fixes:

- **Client Startup**: Fixed Twitter client startup failure in release 1.0.2 ([#4894](https://github.com/elizaos/eliza/issues/4894)).

- **Timeline Processing**: Improved handling of Twitter timeline by reducing items to review and modifying prompts to one action per tweet, resolving timeline processing issues.

- **Response Handling**: Added better error handling and topic assessment for Twitter responses, with the ability to port back functionality to assess topics and respond to on-topic tweets.

- **Media Review**: Added capability to review media content in Twitter timeline, enhancing agents' ability to interpret visual content.

## Model Provider Updates

### Plugin System Enhancements

```typescript
// Example of provider selection in message handler
// The unified message handler now correctly determines what dynamic providers to include
async function getAvailableProviders(context) {
  // First check if AI has selected specific providers
  if (context.metadata?.providers?.length > 0) {
    // Use AI-selected providers
    return context.metadata.providers;
  }
  
  // Fall back to configured providers in priority order
  return getConfiguredProviders();
}
```

- **Provider Selection Logic**: Clarified how AI selects providers within the system architecture. The message handler in plugin-bootstrap now correctly determines what dynamic providers to include.

- **Anthropic API Integration**: Addressed API key validation issues with Anthropic when using the ElizaOS CLI.

- **Local AI Plugin**: Fixed dependency loop error in the local-AI plugin, improving compatibility with self-hosted models.

- **Embedding Exclusion**: Enhanced log readability by filtering out text embedding content from debug logs.

## Breaking Changes

As we continue development toward V2, developers should be aware of these potential migration issues:

- **Plugin Specification Changes**: Plugins are now using versioned specifications from `@elizaos/core`. Existing plugins that don't specify a version will use V1 by default, but we recommend updating to explicitly import from `@elizaos/core/v1`.

- **Database Migrations**: The message server now uses a standalone database, which requires migrations when upgrading from pre-1.0.6 versions. These run automatically but may fail if PostgreSQL requirements aren't properly installed.

- **Channel Types**: Channel type enums have been renamed and reorganized for better semantics. Make sure to update any code that interacts with channels to use the new types.

- **Plugin Ordering**: The order of plugins is now more important for proper fallback behavior. Configure OpenRouter to precede Ollama for proper embedding model fallback.

Update to ElizaOS v1.0.7 by running:

```bash
npm i -g @elizaos/cli
```

For any issues, please join us in the Discord #tech-support channel or open an issue on GitHub.