# ElizaOS Developer Update (Week of 2026-01-04 → 2026-01-10)

This update summarizes merged work and in-progress changes across `elizaos/eliza`, `elizaos/docs`, and key plugins, plus relevant Discord core-dev discussions from 2026-01-06 to 2026-01-08.

---

## 1) Core Framework (Architecture / Plugin System / Agent Runtime)

### Unified multi-transport messaging + client hooks
The core client/server messaging stack was consolidated around a single transport model spanning **HTTP (sync)**, **SSE (streaming)**, and **WebSocket (async)**:

- **Merged:** `feat: unified hooks with multi-transport support (HTTP/SSE/WebSocket)`  
  PR: https://github.com/elizaos/eliza/pull/6300

Key technical outcomes:
- Introduced `useElizaChat` (one hook to rule them all), plus transport-specific hooks.
- Server endpoints standardized on `transport` (with backwards compatibility for legacy `mode`).
- Fixed **double/triple message processing** by separating DB persistence from bus emission and emitting bus events only for the WebSocket transport path where appropriate.

**Why this matters:** plugin authors and app developers can now reason about message flow consistently regardless of transport, and avoid subtle bugs where `handleMessage()` is effectively invoked multiple times.

### Event-pump scaling direction (design discussion)
In `#core-devs`, the team aligned around **simple event pumps** and **multiple daemon instances per service** as the scaling strategy for connector gateways (Discord/voice/text), with priority differentiation (voice > text) and preprocessing as an optimization lever.  
Reference discussion: review the Jeju cloud branch gateway implementation mentioned by Odilitime:  
https://github.com/elizaOS/eliza-cloud-v2/tree/jeju/apps/discord-gateway

### Cloud reliability work (TOCTOU mitigation)
Cloud runtime work-in-progress (per Stan’s standup updates) focused on eliminating TOCTOU race conditions using a **deduct-before, reconcile-after** pattern. This is particularly relevant for any metering/credits/billing-adjacent operations where concurrent requests can otherwise cause negative balances or inconsistent reconciliation states.

---

## 2) New Features (with examples)

### `useElizaChat`: one hook for HTTP/SSE/WebSocket
With PR #6300 merged, client apps can standardize chat integration:

```ts
import { useElizaChat } from "@elizaos/client";

export function ChatView({ sessionId }: { sessionId: string }) {
  const {
    messages,
    sendMessage,
    loading,
    error,
  } = useElizaChat({
    sessionId,
    transport: "sse", // "http" | "sse" | "websocket"
    onMessageAdded: (msg) => console.log("New message:", msg.id),
    onError: (e) => console.error("Chat error:", e),
  });

  return (
    <div>
      {messages.map(m => <pre key={m.id}>{m.content}</pre>)}
      <button disabled={loading} onClick={() => sendMessage("hello")}>
        Send
      </button>
      {error && <pre>{String(error)}</pre>}
    </div>
  );
}
```

### Plugin ecosystem: Kamiyo integration added to registry
A new plugin package `@kamiyo/eliza` was added to the registry (reported in community/dev channels), enabling **autonomous agent payments** with **escrow-protected settlement** and **on-chain dispute resolution** (implementation details live in Kamiyo’s repository). This is a meaningful step toward “agents as economic actors” patterns.

Community references:
- Daily summary mention (2026-01-08): https://elizaos.github.io/api/summaries/overall/day/2026-01-08.json

### SQL plugin: Neon serverless + stronger RLS (in progress)
**In review / not yet merged** (as of 2026-01-09):  
`feat(plugin-sql): add Neon serverless support & improve RLS security`  
PR: https://github.com/elizaos/eliza/pull/6343

Highlights:
- Neon adapter/manager via `@neondatabase/serverless` (WebSocket-based connections for serverless/edge runtimes).
- RLS context setting hardened using parameterized `set_config()` instead of interpolated `SET LOCAL ...`.
- **API rename** `withEntityContext` → `withIsolationContext` (see API Changes / Breaking Changes below).

---

## 3) Bug Fixes (critical fixes + technical context)

### Discord bootstrap breakage in v1.7.0: `serverId` → `messageServerId`
**Merged fix:** `plugin-bootstrap (+ sql minor) actions/providers for serverId => messageServerId change`  
PR: https://github.com/elizaos/eliza/pull/6333

Context:
- Users on core **v1.7.0** saw Discord plugin failures and logs like **“No server ID found 10”**, caused by incomplete migration from `serverId` to `messageServerId` across bootstrap actions/providers and related schema/test fixtures.
- The fix updates validation and provider outputs to consistently use `messageServerId`, aligning with the evolving room/world context model.

Developer impact:
- If you read `room.serverId` anywhere in custom plugins, audit and update (see Breaking Changes).

### Data isolation failures in Postgres: `SET LOCAL` cannot be parameterized
**Merged fix:** `fix(plugin-sql): use sql.raw() for SET LOCAL to avoid parameterization errors`  
PR: https://github.com/elizaos/eliza/pull/6316

Root cause:
- Drizzle’s `sql\`...\`` template parameterizes values, but `SET LOCAL app.entity_id = $1` is not accepted by Postgres in this context, causing `syntax error at or near $1` when `ENABLE_DATA_ISOLATION=true`.

This fix unblocked all DB ops in isolation mode and added unit/integration coverage.

### plugin-sql stability fixes: pooling, error handling, PGLite shutdown
**Merged fix:** `fix(plugin-sql): add pool config, error handler, and fix PGLite shutdown`  
PR: https://github.com/elizaos/eliza/pull/6323

Notable outcomes:
- Avoided unsafe `null as T` returns (now throws explicitly).
- Improved pool configuration and failure handling.
- Fixed shutdown semantics for PGLite adapter to reduce runtime crashes and hanging exits.

---

## 4) API Changes (developer-visible)

### Messaging endpoints: `mode` → `transport` (backwards compatible, but update clients)
**Merged in PR #6300:** https://github.com/elizaos/eliza/pull/6300

- New canonical request parameter: `transport=http|sse|websocket`
- Legacy `mode` is still accepted (deprecated mapping: `sync→http`, `stream→sse`)

**Recommendation:** migrate to `transport` now to avoid future breakage.

Example (CLI/curl style):

```bash
curl -X POST "$ELIZA_URL/api/messaging/sessions/$SESSION_ID/messages" \
  -H "Content-Type: application/json" \
  -d '{
    "transport": "sse",
    "content": "stream me a response"
  }'
```

### plugin-sql (pending): `withEntityContext` → `withIsolationContext`
**Not merged yet** (PR #6343): https://github.com/elizaos/eliza/pull/6343

If you call the manager context wrapper directly, plan to update:

```ts
// before (older API)
await manager.withEntityContext(entityId, async (tx) => {
  // ...
});

// after (pending)
await manager.withIsolationContext({ entityId, serverId }, async (tx) => {
  // ...
});
```

(Exact signature may change during review; follow PR #6343 for final API.)

---

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

### Discord plugin: release blocker + API alignment work
In `elizaos-plugins/plugin-discord`:
- **Release blocker (P1):** publishing pipeline failure prevented `v1.3.4` release  
  Issue: https://github.com/elizaos-plugins/plugin-discord/issues/40
- **API alignment:** transition from `sendMessage` to standardized `handleMessage`  
  PR: https://github.com/elizaos-plugins/plugin-discord/pull/41
- **Slash command extensibility:** restored `join/leave` functionality  
  Issue: https://github.com/elizaos-plugins/plugin-discord/issues/15

Discord runtime troubleshooting (community):
- v1.7.0 + plugin-discord `1.3.3` incompatibilities were actively triaged; developers recommended downgrading core to `1.6.5` or using the patched branch until plugin releases catch up (see PR #6333 above).

### Telegram plugin: crash on certain image uploads (identified)
A new crash bug was reported: Telegram plugin throws `TypeError` when processing images uploaded as photos.  
Issue: https://github.com/elizaos-plugins/plugin-telegram/issues/23

### Twitter/X
Developer question remains open: whether ElizaOS can support X search/integration **without** the $200/mo API tier (no confirmed technical solution yet). Track this as an integration gap; avoid promising scraping-based approaches without clear legal/operational guidance.

---

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

### Provider-prefixed model IDs now required in Cloud Agent API calls (developer guidance)
A recurring “Model not found” error was resolved by using **provider-prefixed model names**:

Examples confirmed in `#coders`:
- `openai/gpt-4o-mini`
- `anthropic/claude-sonnet-4.5`
- `google/gemini-2.5-flash`

Example request payload snippet:

```json
{
  "model": "openai/gpt-4o-mini",
  "messages": [{ "role": "user", "content": "Hello from my website" }]
}
```

This is not just naming: it disambiguates routing across provider adapters and prevents silent fallback / incorrect provider selection.

### Runtime optimization in flight: embedding dimension caching (DRAFT)
A draft PR proposes caching embedding dimension in `AgentRuntime` to reduce repeated “probe calls” (helpful in serverless environments):  
PR (DRAFT, do not merge yet): https://github.com/elizaos/eliza/pull/6329

---

## 7) Breaking Changes (V1 → V2 + migration warnings)

### `serverId` → `messageServerId` migration (ongoing; treat as breaking for plugins)
Even though PR #6333 was merged as a compatibility fix, plugin and app code that:
- reads `room.serverId`
- logs/filters using `serverId`
- expects `serverId` in world/room provider output

…must be audited.

Relevant fix PR: https://github.com/elizaos/eliza/pull/6333

**Action for plugin authors:** update your types, fixtures, and provider prompts to use `messageServerId`. If you need backward compatibility, support both fields defensively during transition.

### `mode` → `transport` (deprecated path still supported, but plan migration)
PR: https://github.com/elizaos/eliza/pull/6300  
**Do:** update SDK calls and any custom API clients to pass `transport`.

### plugin-sql context wrapper rename (pending merge, likely breaking)
PR: https://github.com/elizaos/eliza/pull/6343  
If you call `withEntityContext` directly, expect a rename to `withIsolationContext` (and potentially signature changes to support both server + entity RLS in one place).

### Dev-only migration override flag (do not enable in production)
If you hit destructive migration blocks on repeated local runs, you can bypass locally:

```bash
ELIZA_ALLOW_DESTRUCTIVE_MIGRATIONS=true elizaos start
```

Guidance from Discord: use `elizaos dev` for iterative development vs `elizaos start` for normal runs.

---

## References / Docs
- Docs repo expansion (~95% coverage) incl. streaming/REST/CLI: https://github.com/elizaos/docs/pull/81  
- Agent memory guide request (open): https://github.com/elizaos/docs/issues/82  
- HackMD “ElizaOS book”: https://hackmd.io/@elizaos/book  
- Weekly summary (Jan 4–10): https://github.com/elizaOS/knowledge/blob/main/github_summaries_week_latest_2026-01-04.md