# ElizaOS Developer Update (2026-04-23 → 2026-04-29)

This week focused on (1) monetization and payments via x402, (2) making automations/triggers “actually fire” by wiring event-kind triggers to the runtime event bus, and (3) hardening message/action routing to reduce leaks, retries, and planner-format brittleness. In parallel, the repo continues a major modernization push (Node 24 / TS 6 / Bun 1.3.x / React 19), currently blocked by a Bun transitive dependency issue.

---

## 1) Core Framework (runtime / architecture / plugin system)

### Runtime event bus → triggers are now first-class
Event-kind triggers are now wired to the runtime event bus, enabling triggers like “on Telegram message received” / “on Discord message received” to dispatch reliably rather than only existing as configuration artifacts.

- **Feature:** `TriggerEventBridge` listens on the runtime event bus and dispatches matching triggers  
  PR: https://github.com/elizaOS/eliza/pull/7116
- **Fix:** Telegram shim now emits `MESSAGE_RECEIVED` so event-kind triggers can fire  
  PR: https://github.com/elizaOS/eliza/pull/7122

**Why this matters:** previously, trigger registration could succeed, but the runtime never emitted the corresponding event (or emitted it only on some integration paths), so no trigger execution occurred.

### x402 monetization: paid plugin routes in the agent runtime
The agent server now supports payment-gated plugin routes via x402 middleware (seller-side), with replay-guarding and startup validation.

- **Feature:** x402 paid plugin routes + hardened test harness  
  PR: https://github.com/elizaOS/eliza/pull/7100

This also aligns with the Discord announcement that **$ELIZA is now the default payment method in x402 for elizaOS/Milady services**, enabling billing x402 services in $ELIZA (confirmed in Discord discussion, 2026-04-28).  
Discord thread: https://discord.com/channels/1253563208833433701/1253563209462448241

### Reliability + privacy hardening in message/action routing
Several fixes landed to reduce action-planner brittleness and avoid leaking internal runtime state:

- **Fix:** tolerate malformed planner action XML (e.g., missing closing tags)  
  PR: https://github.com/elizaOS/eliza/pull/7099
- **Fix:** stop leaking internal mechanism words in transient-failure replies  
  PR: https://github.com/elizaOS/eliza/pull/7098
- **Fix:** reduce prompt bloat that blew long-context caps in reflection/providers pipeline  
  PR: https://github.com/elizaOS/eliza/pull/7013
- **Fix:** preserve explicit `REPLY` decisions through metadata-rescue / race-discard gates  
  PRs: https://github.com/elizaOS/eliza/pull/7141, https://github.com/elizaOS/eliza/pull/7143

### Modernization effort is blocked (Node 24 / TS 6 / Bun 1.3.13 / React 19)
The project is mid-upgrade to:
- Node.js 24
- TypeScript 6
- Bun 1.3.13
- React 19.2.x

However, progress is **critically blocked by a missing transitive dependency** that causes `bun install` failures. The primary blocker called out is:

- **Blocker PR:** https://github.com/elizaOS/eliza/pull/7146 (must merge to unblock the dependency update stack)

Impact (as reported in the daily infra summary):
- dependency updates across repos are stalled
- CI in `elizaos/cloud` and `elizaos-plugins/registry` is failing early (cannot reliably run `bun install` / `tsc`), allowing regressions to slip

---

## 2) New Features (with technical detail + examples)

### A) Payment-gated plugin routes (x402 seller middleware)
With PR #7100, plugins can expose HTTP routes that require x402 payment before execution. This is intended for “agent-as-a-service” style plugin endpoints (tools, enrichment, paid automations), and is also the basis for infrastructure utility (now including $ELIZA default payment for elizaOS/Milady x402 services per Discord).

PR: https://github.com/elizaOS/eliza/pull/7100

**Example: protecting a plugin route**
```ts
import { applyPaymentProtection } from "@elizaos/agent/middleware/x402";

// Pseudocode: exact wiring depends on your agent server setup
app.post(
  "/api/plugins/my-plugin/summarize",
  applyPaymentProtection({
    // seller configuration is validated at startup in #7100
    priceUsd: 0.01,
    productId: "my-plugin:summarize",
    replayProtection: "durable", // replay-guard path added in #7100
  }),
  async (req, res) => {
    const { text } = req.body;
    const summary = await summarize(text);
    res.json({ summary });
  }
);
```

**Operational note:** #7100 adds a startup validator and replay-guard infrastructure; if you deploy behind multiple replicas, ensure you use the durable replay guard mode so replay keys aren’t node-local.

Docs (x402 was also documented and linked from web in this PR):  
- Repo docs: https://github.com/elizaOS/eliza/tree/develop/packages/docs (see Mintlify updates referenced in #7100)

### B) Event-kind triggers wired to the runtime event bus
PR: https://github.com/elizaOS/eliza/pull/7116  
Follow-up Telegram emission fix: https://github.com/elizaOS/eliza/pull/7122

**Example: trigger on inbound message events**
```ts
// Conceptual example: event-kind triggers now receive events emitted by integrations
runtime.events.emit("MESSAGE_RECEIVED", {
  platform: "telegram",
  roomId,
  userId,
  text,
});

// TriggerEventBridge (added in #7116) matches event kind + platform
// and dispatches into trigger-handler pipeline.
```

**Practical effect:** “on message received → run workflow” automations now work across the integrations that emit events, rather than only via polling or special-case routing.

### C) Workflow generation UX and reliability improvements (Automations / n8n)
A cluster of improvements landed to make workflow generation more debuggable and less brittle:

- **Feature:** multi-stage workflow generation progress card  
  PR: https://github.com/elizaOS/eliza/pull/7127
- **Fix:** hero-chat n8n workflow create now resolves credentials end-to-end  
  PR: https://github.com/elizaOS/eliza/pull/7118
- **Fix:** tests pin the generate→deploy→get path for regressions  
  PR: https://github.com/elizaOS/eliza/pull/7126
- **Feature:** “missing credentials” banner in AutomationsView  
  PR: https://github.com/elizaOS/eliza/pull/7134
- **Fix:** n8n-sidecar “binary missing” diagnostics demoted to debug to reduce log noise  
  PR: https://github.com/elizaOS/eliza/pull/7138

---

## 3) Bug Fixes (critical fixes + root-cause context)

### Telegram triggers not firing (missing `MESSAGE_RECEIVED`)
**Symptom:** event-kind triggers bound to Telegram messages registered successfully but never executed.  
**Root cause:** the in-process Telegram shim path did not emit `MESSAGE_RECEIVED` on the runtime event bus.  
**Fix:** emit `MESSAGE_RECEIVED` when inbound Telegram messages arrive.  
PR: https://github.com/elizaOS/eliza/pull/7122

### Planner output brittleness: malformed action XML
**Symptom:** planner occasionally emits malformed XML like:
```xml
<actions><action><name>REPLY</name></actions>
```
Missing `</action>` caused strict parsing failures, producing dropped turns or fallback behavior.  
**Fix:** tolerate malformed planner action XML.  
PR: https://github.com/elizaOS/eliza/pull/7099

### “Internal mechanism” leakage in user-facing failure replies
**Symptom:** transient failures produced responses that echoed internal diagnostic/implementation language.  
**Root cause:** recovery prompt instructed the model to explain failures using raw diagnostics and action-result summaries.  
**Fix:** restructure failure reply building to avoid leaking internal mechanism words.  
PR: https://github.com/elizaOS/eliza/pull/7098

### Reflection / providers prompt bloat causing long-context failures
**Symptom:** long-running chats hit context limits due to duplicated/oversized context injected on every turn.  
**Fix:** targeted cuts in reflection evaluators + prompt assembly to reduce repeated context.  
PR: https://github.com/elizaOS/eliza/pull/7013

---

## 4) API Changes (developer-facing surface changes)

### x402 route/payment typing expanded in `@elizaos/core`
PR: https://github.com/elizaOS/eliza/pull/7100

- New/extended route metadata and payment types to support payment-gated plugin endpoints.
- If you maintain custom agent servers or plugin route registries, expect type-level changes around route definitions and middleware wiring.

### Runtime event bus trigger bridge introduces a stable event dispatch path
PR: https://github.com/elizaOS/eliza/pull/7116

- Trigger execution is now driven by runtime events (not just UI flows or polling).
- Integrations should emit consistent event payloads (see Telegram fix in #7122).

### Message/action routing semantics tightened for explicit `REPLY`
PRs: https://github.com/elizaOS/eliza/pull/7141, https://github.com/elizaOS/eliza/pull/7143

- If you rely on metadata-rescue or race-discard behavior in custom forks, re-check assumptions:
  - explicit `REPLY` should be preserved when it is the planner’s chosen action
  - race-discard should not delete an explicit reply that was intentionally produced

---

## 5) Social Media Integrations (Twitter / Telegram / Discord / Farcaster)

### Telegram
- **Fix:** emit `MESSAGE_RECEIVED` so event-kind triggers fire for Telegram inbound messages  
  PR: https://github.com/elizaOS/eliza/pull/7122

### Discord
- LifeOps routing fixes were called out as active/ongoing work in project summaries; a clean-picked routing fix is present:
  - **Fix:** LifeOps discord routing + submodule bumps  
    PR: https://github.com/elizaOS/eliza/pull/6971

### Community / infra note: x402 + $ELIZA utility
Discord confirmed: **$ELIZA is the default payment method in x402 for elizaOS/Milady services**, enabling users to bill x402 services with $ELIZA.  
Thread: https://discord.com/channels/1253563208833433701/1253563209462448241

---

## 6) Model Provider Updates (OpenAI / Anthropic / OpenRouter / etc.)

### Cloud provider routing modernization: Vercel AI Gateway → OpenRouter (+ failovers)
The cloud infrastructure replaced Vercel AI Gateway with **OpenRouter**, using **OpenAI and Anthropic as failovers** (reported in the daily infrastructure summary).

This change is relevant if you:
- depend on cloud-side model routing behavior
- compare model IDs across local vs cloud environments
- need consistent fallback semantics across providers

### Anthropic model ID correctness
A concrete provider drift bug was fixed where the default Haiku model ID was malformed, producing 404s from Anthropic.

- **Fix:** correct malformed Anthropic Haiku model ID  
  PR: https://github.com/elizaOS/eliza/pull/7078

### Auth clarity: Claude Code CLI vs in-app OAuth
A UX/auth bug caused the in-app settings to mistakenly treat local Claude Code CLI credentials as an in-app OAuth connection.

- **Fix:** distinguish Claude Code CLI credentials from in-app OAuth  
  PR: https://github.com/elizaOS/eliza/pull/7094

---

## 7) Breaking Changes / Migration Notes (V1 → V2, plus upcoming V3)

### ⚠️ Dependency/platform upgrade wave (Node 24 / TS 6 / Bun 1.3.x / React 19)
Even before the blocker (PR #7146) is resolved, you should prepare for:
- stricter TS 6 inference and lib typings
- Node 24 runtime behavior changes (fetch/undici, ESM edge cases, toolchain assumptions)
- Bun install resolution differences vs npm/pnpm
- React 19 changes affecting app-core / UI packages

**Action:** pin your toolchain in CI (Node + Bun versions) and test plugin builds against the `develop` branch frequently once installs are unblocked.

### ⚠️ x402 payment-gated routes may affect plugin expectations
If your plugin exposes routes, and you adopt x402 protection:
- unauthenticated/non-paying callers will receive payment-required responses by default
- you may need to update client code to handle x402 negotiation flows

PR: https://github.com/elizaOS/eliza/pull/7100

### V3 + Milady integration status
Shaw reported in Discord that **Eliza v3 and Milady integration are nearing completion**, with significant progress expected soon.  
Thread: https://discord.com/channels/1253563208833433701/1253563209462448241

Until V3 lands, expect some churn in:
- app-core UI surfaces (Milady rebases, onboarding flows)
- plugin routing/credential mediation layers (noted as active PR work in infra summaries)
- automation + workflow generator surfaces (n8n routing/credential propagation)

--- 

### References / Useful Links
- Main repo PRs (examples referenced above): https://github.com/elizaOS/eliza/pulls
- Discord (discussion): https://discord.com/channels/1253563208833433701/1253563209462448241
- Docs source tree: https://github.com/elizaOS/eliza/tree/develop/packages/docs