# ElizaOS Developer Update
## Week of July 8-14, 2025

### Core Framework
- **Service Discovery Improvements**: Implemented standardized service types with a new `getServicesByType()` method allowing for more flexible service discovery and better type safety across the framework ([#5565](https://github.com/elizaOS/eliza/pull/5565))
- **Action Chaining**: Added robust action chaining capability to the agent runtime, storing action state and return values in the run context, enabling agents to execute complex, multi-step workflows programmatically ([#5436](https://github.com/elizaOS/eliza/pull/5436))
- **Logging Enhancements**: Added a customizable logger configuration system for downstream projects and introduced the `LOG_TIMESTAMPS` environment variable to control timestamp display in logs ([#5430](https://github.com/elizaOS/eliza/pull/5430), [#5563](https://github.com/elizaOS/eliza/pull/5563))
- **Advisory Lock Fix**: Resolved a critical bug in the advisory lock acquisition system affecting database transaction handling ([#5572](https://github.com/elizaOS/eliza/pull/5572))

### New Features
- **Forms Plugin**: Added a powerful forms plugin allowing agents to build, validate, and process structured user input forms with Zod validation and database persistence ([#5487](https://github.com/elizaOS/eliza/pull/5487))

```typescript
// Example of creating a form with the Forms plugin
const formDefinition = {
  id: "project-creation",
  title: "Create New Project",
  fields: [
    {
      id: "name",
      label: "Project Name",
      type: "text",
      required: true,
      placeholder: "Enter project name"
    },
    {
      id: "description",
      label: "Description",
      type: "textarea",
      required: false
    },
    {
      id: "framework",
      label: "Framework",
      type: "select",
      options: ["React", "Vue", "Angular", "Svelte"],
      required: true
    }
  ]
};

// Create and register the form
const formId = await runtime.services.form.createForm(formDefinition);

// Later, process form submission
const { values, isValid } = await runtime.services.form.processFormSubmission(formId, submittedData);
if (isValid) {
  // Use the validated form data
  await startProjectCreation(values.name, values.description, values.framework);
}
```

- **Image Generation**: Implemented a new `generateImageAction` in the agent pipeline enabling agents to create images based on conversational context using `ModelType.IMAGE` ([#5446](https://github.com/elizaOS/eliza/pull/5446))
- **ElizaNet Fallback Mechanism**: Added a proof-of-concept for ElizaNet LiteLLM fallback, providing graceful model degradation when primary providers are unavailable ([#5566](https://github.com/elizaOS/eliza/pull/5566))
- **Character V1 to V2 Conversion**: Added automatic conversion of V1 character files during import with plugin matching, enhancing backward compatibility ([#5536](https://github.com/elizaOS/eliza/pull/5536))
- **Test Utilities Package**: Created a shared `@elizaos/test-utils` package with a MockRuntime for testing plugins, consolidating previously duplicated test infrastructure ([#5507](https://github.com/elizaOS/eliza/pull/5507))

### Bug Fixes
- **Windows Plugin Loading**: Resolved a critical issue affecting plugin loading on Windows platforms, fixing ESM URL scheme errors and path normalization ([#5437](https://github.com/elizaOS/eliza/pull/5437), [#5499](https://github.com/elizaOS/eliza/issues/5499))
- **SPA Routing**: Fixed Single Page Application routing for globally installed CLI, ensuring proper navigation when refreshing non-home routes ([#5479](https://github.com/elizaOS/eliza/pull/5479))
- **Build Process**: Fixed a bug where tsup build was wiping out the vite build due to the `clean: true` setting, affecting project-starter and plugin-starter ([#5555](https://github.com/elizaOS/eliza/pull/5555))
- **CLI Update Command**: Prevented the CLI update command from creating unwanted project files when run outside of an ElizaOS project directory ([#5427](https://github.com/elizaOS/eliza/pull/5427))
- **DM Channel Creation**: Refactored DM channel creation logic to fetch live message count instead of relying on stale state, preventing duplicate channel creation ([#5411](https://github.com/elizaOS/eliza/pull/5411))
- **LLM Ambiguity Handling**: Improved LLM prompting to reduce unnecessary provider selection and enforce correct code block formatting in responses, making agent replies more consistent ([#5526](https://github.com/elizaOS/eliza/pull/5526), [#5525](https://github.com/elizaOS/eliza/pull/5525))

### API Changes
- **Configurations Package**: Added a shared `@elizaos/configs` package providing unified ESLint, TypeScript, and Prettier configurations for plugins and projects ([#5508](https://github.com/elizaOS/eliza/pull/5508))
- **Client Distribution**: Moved client distribution from CLI to server package for better architecture and dependency management ([#5483](https://github.com/elizaOS/eliza/pull/5483))
- **Express Middleware**: Removed duplicate `express.json` middleware in API router that was causing multiple JSON parsing operations ([#5384](https://github.com/elizaOS/eliza/pull/5384))
- **Environment Variable Handling**: Improved secret panel UX for global environment variables to better indicate when secrets are configured at the system level ([#5501](https://github.com/elizaOS/eliza/pull/5501))
- **Type Safety Improvements**: Updated TypeScript return types for better strict compliance, ensuring all action handlers return `Promise<ActionResult>` ([#5512](https://github.com/elizaOS/eliza/pull/5512))

### Social Media Integrations
- **Twitter Plugin Update**: Released Twitter plugin version 1.2.1 with configuration changes to `TWITTER_ACTION_INTERVAL` (recommended setting: 30) to address issues with posts stopping after initial posts ([Discord discussion](https://discord.gg/ai16z))
- **Twitter Plugin Documentation**: Updated Twitter plugin documentation to clarify API requirements and intended functionality ([#5408](https://github.com/elizaOS/eliza/pull/5408))

### Model Provider Updates
- **Google Generative AI Plugin**: Fixed the Google Generative AI plugin installation during the `elizaos create` command to correctly install the package with the proper name ([#5503](https://github.com/elizaOS/eliza/pull/5503))
- **Local AI Improvements**: Enhanced local AI support with better Ollama integration and fixed Windows compatibility issues ([#5556](https://github.com/elizaOS/eliza/pull/5556))
- **Claude Workflow**: Enhanced Claude workflows with full command access and PR commit triggers for better code review automation ([#5570](https://github.com/elizaOS/eliza/pull/5570))

### Breaking Changes
- **CLI Environment System**: Refactored how environment variables are managed in the CLI, affecting projects that rely on specific environment variable behavior ([#5326](https://github.com/elizaOS/eliza/pull/5326))
- **Client Path Resolution**: Changed how client paths are resolved to support globally installed CLI, which might require updates to custom deployments ([#5472](https://github.com/elizaOS/eliza/pull/5472))
- **Character Configuration**: Fixed plugin inclusion in character configuration which may affect how plugins are loaded for existing characters ([#5537](https://github.com/elizaOS/eliza/pull/5537))
- **Migration to bun.Spawn**: Removed execa dependency in favor of direct bun.Spawn usage, which could affect custom scripts relying on the previous implementation ([#5531](https://github.com/elizaOS/eliza/pull/5531))

For more details on these changes, please review the linked PRs and documentation. Remember to update your plugins and agents to take advantage of these new features and improvements.