{
  "interval": {
    "intervalStart": "2026-05-02T00:00:00.000Z",
    "intervalEnd": "2026-05-03T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-05-02 to 2026-05-03, elizaos/eliza had 6 new PRs (5 merged), 8 new issues, and 5 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs8AAAABBHeRuA",
      "title": "telegram: milady wrapper + @elizaos/plugin-telegram both poll the same bot — race causes silent message loss",
      "author": "Sw4pIO",
      "number": 7245,
      "repository": "elizaos/eliza",
      "body": "## Summary\n\nTwo independent Telegraf consumers run against the same bot token concurrently:\n\n1. **`@elizaos/plugin-telegram`** — auto-enabled when `connectors.telegram.enabled === true`. Spawns its own Telegraf instance and starts long-polling.\n2. **milady's standalone wrapper** at `packages/app-core/src/runtime/eliza.ts:534` (function `ensureTelegramBotPolling`) — spawns a *second* Telegraf instance with the same token, calls `bot.startPolling()`.\n\nTelegram's `getUpdates` long-poll API delivers each update to **exactly one consumer**. Whichever long-poll wins the race for a given message gets it; the other sees nothing. Updates routed to the upstream plugin go through elizaOS message handling — which on milady is not wired to a Telegram-channel-aware agent — and silently drop. Updates routed to milady's wrapper go through `useModel` directly and reply correctly.\n\nEnd result: **every other Telegram message (roughly) gets dropped silently**. From the user's perspective, the bot replies sometimes, ignores others.\n\n## Why both exist\n\nThe wrapper was added with this comment (`packages/app-core/src/runtime/eliza.ts:531-533`):\n\n> *\"Ensure Telegram bot is polling. The upstream plugin's `bot.launch()` is not awaited and silently fails on bun/Windows. We create a standalone Telegraf instance with proper lifecycle management.\"*\n\nSo milady spawns its own Telegraf to work around #7241 (Bun + Telegraf 4.16.3 `launch()` readonly-property bug). But it never disables the upstream plugin to avoid the duplicate poller.\n\n## Symptoms\n\n- Inconsistent: bot replies to ~50% of messages, ignores the rest.\n- Logs show `[milady] Telegram bot polling started` AND `[PLUGIN:TELEGRAM] Starting Telegram bot` on boot.\n- `curl https://api.telegram.org/bot<token>/getUpdates` returns empty (something *did* consume them) but no `[milady] Telegram message from @user: ...` log entry for the dropped messages.\n\n## Reproduction\n\n1. Fresh milady, telegram connector enabled with a valid bot token.\n2. `bun run dev` — both pollers start.\n3. From a Telegram client, DM the bot 5 messages back to back.\n4. ~2-3 will get a reply, ~2-3 will be silently dropped depending on which poller wins each `getUpdates` race.\n\n## Workaround (verified locally)\n\nDisable the upstream plugin so milady's wrapper is the only consumer:\n\n```json\n// ~/.milady/milady.json\n{\n  \"plugins\": {\n    \"entries\": {\n      \"@elizaos/plugin-telegram\": { \"enabled\": false },\n      \"telegram\": { \"enabled\": false }\n    }\n  },\n  \"connectors\": {\n    \"telegram\": { \"enabled\": false /* still want the bot active */ }\n  }\n}\n```\n\nAfter restart: only one Telegraf polls, every inbound message routes through milady's wrapper, every message gets a reply. Verified with 4 back-to-back messages — 4 logged inbound, 4 logged replies.\n\n## Suggested fix\n\nTwo paths:\n\n1. **Mutually exclusive at config time.** When milady spawns its own wrapper (`ensureTelegramBotPolling`), it should also force-disable the upstream `@elizaos/plugin-telegram` and the `connectors.telegram` auto-enable. One owner per bot token, no exceptions.\n\n2. **Remove the wrapper, fix the upstream plugin.** Address the `launch()` Bun bug at the source (#7241). Then the wrapper becomes unnecessary and `@elizaos/plugin-telegram` is the single source of truth.\n\nOption 2 is the cleaner architectural fix. Option 1 is the right tactical fix until the upstream Bun issue is resolved. Either way, the current \"both run, hope for the best\" state is not OK because **silent message loss looks like working software** to the user.\n\n## Why this matters\n\nCombined with #7240 (token bridge bug) and #7241 (Telegraf launch bug), the Telegram setup path is currently unable to deliver \"I sent 5 messages and got 5 replies\" reliably out of the box. Even with the user's token correctly bridged into the env and the launch bug worked around, the dual-poller race means inconsistent delivery — a user-facing failure mode that's nearly impossible to diagnose without log access.\n\n## Environment\n\n- bun 1.3.13\n- telegraf 4.16.3\n- @elizaos/plugin-telegram (current alice submodule pin)\n- milady on `alice` (PR #105 sync)",
      "createdAt": "2026-05-02T20:12:34Z",
      "closedAt": "2026-05-03T07:12:53Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs8AAAABBHd_Yw",
      "title": "duplicate MiladyClient class — augmenter prototypes attach to never-instantiated class, all client.X methods undefined at runtime",
      "author": "Sw4pIO",
      "number": 7244,
      "repository": "elizaos/eliza",
      "body": "## Summary\n\n`packages/app-core/src/api/` has **two** `export class MiladyClient` declarations:\n\n- `client-base.ts:36` — the one all 7 augmenter files import (`client-agent`, `client-skills`, `client-chat`, `client-cloud`, `client-vincent`, `client-wallet`, `client-browser-workspace`)\n- `client.ts:2277` — the one the live `client` instance is built from (`export const client = new MiladyClient()` at `client.ts:6504`)\n\nEach augmenter does `MiladyClient.prototype.X = ...` to attach domain methods (e.g. `listAppRuns`, `listCodingAgentTaskThreads`, `sendMessage`, ~155 methods total). Because they import from `client-base.ts` and the instance is built from `client.ts`'s class, **none of those 155 methods land on the live instance**.\n\n## Symptoms\n\n- UI throws `client.listCodingAgentTaskThreads is not a function`, `client.listAppRuns is not a function`, etc. on every page that uses these methods.\n- Errors bubble through React error boundary → chat surface freezes → text input becomes unresponsive (it's `disabled` because the surrounding state crashed).\n- 343 methods present on prototype (the inline `client.ts` ones) — but the augmenter set is missing entirely.\n\n## Reproduction\n\n1. Fresh milady (alice, post-PR#105 sync), `bun run dev`.\n2. Open dashboard → Chat or Apps tab.\n3. Browser console:\n   ```js\n   const m = await import('/@fs/Users/.../packages/app-core/src/api/index.ts');\n   ({\n     listAppRuns: typeof m.client.listAppRuns,             // 'undefined' ❌\n     listCodingAgentTaskThreads: typeof m.client.listCodingAgentTaskThreads, // 'undefined' ❌\n     methodCount: Object.getOwnPropertyNames(Object.getPrototypeOf(m.client)).length, // 343\n   })\n   ```\n4. UI bubbles `is not a function` errors.\n\n## Root cause / context\n\n`client-base.ts` was originally introduced (per its own header comment):\n\n> *\"Separated from client.ts so domain augmentation files can import the class without circular dependency issues.\"*\n\nAt some point during the alice merge, `client.ts` had its own `export class MiladyClient` added inline (likely a refactor that consolidated methods back into one file) — but `client-base.ts` was left in place. The 7 augmenters still target `client-base.ts`. Two separate classes, two separate prototypes. The augmenters silently augment the wrong one.\n\nThere's no compile-time error because both files export a class with the same name and same shape. TypeScript happily lets `MiladyClient.prototype.X = ...` succeed on either.\n\n## Fix (verified locally)\n\nReplace `client-base.ts` body with a one-line re-export shim:\n\n```ts\nexport { MiladyClient } from \"./client\";\n```\n\nVerified locally: method count goes 343 → 500 (157 augmenter methods now land on the live instance). All `is not a function` errors disappear. Chat hydrates cleanly.\n\n## Side-effect imports also needed\n\n`packages/app-core/src/api/index.ts` was also missing side-effect imports for the augmenter files. Even with the re-export shim, the augmenters need to be **loaded** for their `MiladyClient.prototype.X = ...` statements to execute:\n\n```ts\nexport * from \"./client\";\n\n// Side-effect imports: each augments MiladyClient.prototype with methods.\nimport \"./client-agent\";\nimport \"./client-browser-workspace\";\nimport \"./client-chat\";\nimport \"./client-cloud\";\nimport \"./client-skills\";\nimport \"./client-vincent\";\nimport \"./client-wallet\";\n```\n\nThese were dropped in the alice merge as well — possibly because they appear redundant after `export * from \"./client\"`, but they're not (imports of side-effect-only modules need explicit `import \"...\"` statements).\n\n## Environment\n\n- bun 1.3.13\n- milady on `alice` (PR #105 sync)\n- React 19 + Vite dev server",
      "createdAt": "2026-05-02T20:10:27Z",
      "closedAt": "2026-05-03T07:12:56Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs8AAAABBHdQ7Q",
      "title": "auth: hasCodexCliSubscriptionAuth misses modern `tokens.access_token` shape — falsely reports 'install required'",
      "author": "Sw4pIO",
      "number": 7243,
      "repository": "elizaos/eliza",
      "body": "## Summary\n\n`packages/agent/src/auth/credentials.ts:210-225` — `hasCodexCliSubscriptionAuth()` only matches the **legacy** `~/.codex/auth.json` layout:\n\n```ts\nconst data = JSON.parse(fs.readFileSync(authPath, \"utf-8\")) as {\n  auth_mode?: string;\n  OPENAI_API_KEY?: string;\n};\nreturn Boolean(\n  data.OPENAI_API_KEY?.trim() &&\n    data.auth_mode?.trim() &&\n    data.auth_mode.trim().toLowerCase() !== \"api-key\",\n);\n```\n\nModern `codex-cli` (≥ 0.93.0) writes a different shape — no top-level `OPENAI_API_KEY`, no `auth_mode`, just a `tokens` object:\n\n```json\n{\n  \"tokens\": {\n    \"id_token\": \"eyJhbGciOiJSUzI1NiIs...\",\n    \"access_token\": \"eyJhbGciOiJSUzI1NiIs...\",\n    \"refresh_token\": \"...\",\n    \"account_id\": \"...\"\n  },\n  \"last_refresh\": \"...\"\n}\n```\n\nDetection returns `false` → milady reports the user's Codex subscription as \"install required\" on the Settings → Connectors panel and the auto-enable map for `@elizaos/plugin-openai` is skipped. The `subscriptionProvider` resolution silently falls through, so chat routes to whatever else is configured (or fails).\n\n## Symptoms\n\n- User has a valid `codex login` session (verifiable: `codex --version` works, `~/.codex/auth.json` exists with `tokens` block, manual API calls with `tokens.access_token` succeed).\n- Milady dashboard shows **Codex: install required** even though the CLI is installed and authenticated.\n- Boot log lacks `Auto-enabled plugin: @elizaos/plugin-openai (subscription: openai-codex)`.\n- Chat falls back to \"Sorry, I'm having a provider issue\" because routing thinks no provider is available.\n\n## Reproduction\n\n1. `brew install codex-cli` (or already installed — version ≥ 0.93.0)\n2. `codex login` — authenticates and writes `~/.codex/auth.json` in the new format\n3. `cat ~/.codex/auth.json | python3 -c \"import json,sys; d=json.load(sys.stdin); print({'OPENAI_API_KEY': d.get('OPENAI_API_KEY'), 'auth_mode': d.get('auth_mode'), 'has_tokens': bool(d.get('tokens'))})\"` →\n   ```\n   {'OPENAI_API_KEY': None, 'auth_mode': None, 'has_tokens': True}\n   ```\n4. Boot milady → log shows no Codex auto-enable.\n5. Settings → Connectors → Codex shows \"install required\".\n\n## Workaround (verified locally)\n\nManually translate `~/.codex/auth.json` into the milady-side `~/.eliza/auth/openai-codex.json` shape:\n\n```python\nrecord = {\n    'id': 'default',\n    'providerId': 'openai-codex',\n    'label': 'Codex CLI',\n    'source': 'codex-cli',\n    'credentials': {\n        'access': tokens['access_token'],\n        'refresh': tokens['refresh_token'],\n        'expires': now_ms + 3600 * 1000,\n    },\n    'createdAt': now_ms,\n    'updatedAt': now_ms,\n}\n```\n\nAfter writing this file + restart, milady detects the subscription and `@elizaos/plugin-openai` auto-enables.\n\n## Suggested fix\n\nUpdate `hasCodexCliSubscriptionAuth()` to recognize **both** shapes:\n\n```ts\nfunction hasCodexCliSubscriptionAuth(): boolean {\n  const authPath = path.join(os.homedir(), \".codex\", \"auth.json\");\n  try {\n    const data = JSON.parse(fs.readFileSync(authPath, \"utf-8\")) as {\n      auth_mode?: string;\n      OPENAI_API_KEY?: string;\n      tokens?: {\n        access_token?: string;\n        refresh_token?: string;\n      };\n    };\n\n    // Modern codex-cli (>= 0.93.0): tokens block present.\n    if (data.tokens?.access_token?.trim()) return true;\n\n    // Legacy: OPENAI_API_KEY + non-\"api-key\" auth_mode.\n    return Boolean(\n      data.OPENAI_API_KEY?.trim() &&\n        data.auth_mode?.trim() &&\n        data.auth_mode.trim().toLowerCase() !== \"api-key\",\n    );\n  } catch {\n    return false;\n  }\n}\n```\n\nThen update the credential-import path (`importCodexCliCredentials` or wherever it lives) to translate `tokens.access_token`/`tokens.refresh_token` → `OAuthCredentials.{access,refresh,expires}` when the legacy fields are absent.\n\n## Why it matters\n\nEvery user on a fresh install with a current `codex-cli` will hit this. The codex CLI changed its auth file format and milady's detection didn't get updated. From the user's perspective: \"I logged in with codex, milady says I didn't\" → confusion.\n\n## Environment\n- bun 1.3.13\n- codex-cli 0.93.0 (the one written by the modern CLI)\n- macOS arm64\n- milady on `alice` (PR #105 sync)",
      "createdAt": "2026-05-02T20:06:05Z",
      "closedAt": "2026-05-03T07:12:59Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs8AAAABBHPxsw",
      "title": "@elizaos/plugin-telegram (Telegraf 4.16.3) bot.launch() throws 'Attempted to assign to readonly property' under Bun",
      "author": "Sw4pIO",
      "number": 7241,
      "repository": "elizaos/eliza",
      "body": "## Summary\n\n`@elizaos/plugin-telegram`'s startup wrapper calls `bot.launch({...})` on a `Telegraf` instance (Telegraf 4.16.3). Under Bun 1.3.13 this rejects with:\n\n```\n[milady] Telegram bot launch error: Attempted to assign to readonly property.\n```\n\nThe bot never starts polling. From the user side, the bot looks alive on Telegram (Telegram's `getUpdates` queues messages waiting for it) but the runtime never receives them. No replies. UI may report \"Connected\" because the token is valid; the actual long-poll never started.\n\n## Root cause\n\n`telegraf@4.16.3/lib/telegraf.js:189` (compiled output of nullish-coalescing-assignment):\n\n```js\nasync launch(config = {}, onLaunch) {\n    var _a, _b;\n    ...\n    debug('Connecting to Telegram');\n    (_a = this.botInfo) !== null && _a !== void 0 ? _a : (this.botInfo = await this.telegram.getMe());\n    ...\n}\n```\n\nThe expression assigns to `this.botInfo`. Under Bun's CJS interop the Telegraf prototype/instance ends up with a non-writable descriptor on certain inherited fields, and the assignment trips a strict-mode `TypeError: Attempted to assign to readonly property`. Same code paths work under Node.\n\n## Reproduction\n\n1. Fresh milady (alice or develop), Telegram connector enabled with a valid BotFather token (in `env.TELEGRAM_BOT_TOKEN` per #7240).\n2. `bun run dev`\n3. Boot log:\n   ```\n   [PLUGIN:TELEGRAM] Starting Telegram bot\n   [milady] Telegram bot polling started\n   [Warn] [milady] Telegram bot launch error: Attempted to assign to readonly property.\n   ```\n4. DM the bot from Telegram — no inbound message appears in logs.\n5. `curl https://api.telegram.org/bot<token>/getUpdates` shows the messages queued, confirming the bot itself is reachable but its long-poll never started.\n\n## Workaround (verified locally)\n\nIn `eliza/packages/app-core/src/runtime/eliza.ts` (or wherever the wrapper is), bypass `bot.launch()` and start polling directly:\n\n```ts\n(async () => {\n  try {\n    await bot.telegram.deleteWebhook({ drop_pending_updates: true });\n  } catch (err) {\n    logger.warn(`[milady] Telegram deleteWebhook failed: ${...}`);\n  }\n  try {\n    // @ts-expect-error - startPolling is intentionally public for this fallback\n    bot.startPolling([\"message\", \"message_reaction\"]);\n  } catch (err) {\n    logger.warn(`[milady] Telegram startPolling failed: ${...}`);\n  }\n})();\n```\n\nThis skips the `(this.botInfo ??= ...)` assignment that triggers the Bun strict-mode reject. Same behavior as `launch()` (long-poll mode, no webhook), without the error. Verified inbound messages reach the runtime and replies go back.\n\n## Suggested upstream fix\n\nTwo options for the plugin layer:\n\n1. **Wrap `bot.launch()` to use the explicit polling path on Bun:**\n   ```ts\n   const isBun = typeof process !== \"undefined\" && Boolean((process as any).versions?.bun);\n   if (isBun) {\n     await bot.telegram.deleteWebhook({ drop_pending_updates: true });\n     bot.startPolling([\"message\", \"message_reaction\"]);\n   } else {\n     await bot.launch({ dropPendingUpdates: true, allowedUpdates: [\"message\", \"message_reaction\"] });\n   }\n   ```\n\n2. **Pin/upgrade Telegraf** — the issue may be fixed in a newer release with a different compiled output. Worth testing against the latest 4.x and 5.x previews.\n\nOption 1 is the safer immediate fix; option 2 is the right long-term move.\n\n## Why this matters\n\nThis silently breaks every Bun-hosted milady install with a Telegram connector. The auto-enable log says the plugin is loaded, the dashboard says \"connected\", but no messages ever flow. Users have no way to diagnose this without log access, and the failure mode (warning, not error; \"polling started\" log fires before the launch reject because launch() is fire-and-forget) hides the bug effectively.\n\n## Environment\n\n- bun 1.3.13\n- telegraf 4.16.3\n- macOS arm64\n- milady on `alice` (PR #105)",
      "createdAt": "2026-05-02T18:17:06Z",
      "closedAt": "2026-05-03T07:13:02Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs8AAAABBGwSaQ",
      "title": "telegram bot token not bridged from dashboard config to runtime — UI says 'connected' while plugin says 'Bot token not provided'",
      "author": "Sw4pIO",
      "number": 7240,
      "repository": "elizaos/eliza",
      "body": "## Summary\n\nThe dashboard's Telegram setup writes the bot token to `connectors.telegram.botToken` in milady.json, but `@elizaos/plugin-telegram` reads it via `runtime.getSetting(\\\"TELEGRAM_BOT_TOKEN\\\")`. **No code bridges between them.** The `/api/telegram-setup/status` endpoint reports `connected: true, hasToken: true` based on the connector config, while the plugin silently starts in degraded mode with `[PLUGIN:TELEGRAM] Bot token not provided, Telegram functionality unavailable`.\n\nThis is a classic UI/runtime contract drift: setup-status looks at one source of truth (`connectors.telegram.botToken`), the plugin looks at another (`runtime.getSetting(\\\"TELEGRAM_BOT_TOKEN\\\")`), and nothing tells the user that pasting the token in the UI didn't actually wire up the bot.\n\n## Symptoms\n\nAfter completing the Settings → Connectors → Telegram setup form with a valid BotFather token:\n\n- UI: \"Telegram — Connected\" (green checkmark)\n- `GET /api/telegram-setup/status`: `{ available: true, hasToken: true, connected: true }`\n- Backend log on boot:\n  ```\n  [Warn] [PLUGIN:TELEGRAM] Bot token not provided, Telegram functionality unavailable\n  [Warn] [PLUGIN:TELEGRAM] Service started without bot functionality\n  ```\n- DMing the bot on Telegram: bot is unresponsive (it's not polling because no token reached the plugin)\n\n## Reproduction\n\n1. Fresh milady (alice or develop), start dev.\n2. Settings → Connectors → Telegram → paste BotFather token, save.\n3. Inspect `~/.milady/milady.json` — token lives at `connectors.telegram.botToken`.\n4. Inspect `~/.milady/milady.json` `env` block — `TELEGRAM_BOT_TOKEN` is **not** there.\n5. Boot logs show `Bot token not provided`.\n6. Manually copy the token into `env.TELEGRAM_BOT_TOKEN`, restart → plugin starts polling and bot responds.\n\n## Root cause\n\nTwo parallel config keys, no synchronization:\n\n| Where | Read by |\n|---|---|\n| `connectors.telegram.botToken` | Dashboard, `/api/telegram-setup/status` |\n| `env.TELEGRAM_BOT_TOKEN` (or process env) | `@elizaos/plugin-telegram` via `runtime.getSetting()` |\n\nThe setup-routes handler at `packages/agent/src/api/telegram-setup-routes.ts:144` checks `state.runtime?.getSetting(\\\"TELEGRAM_BOT_TOKEN\\\")` for `hasToken`. But the dashboard save handler writes to `connectors.telegram.botToken` only — it doesn't propagate into `env.TELEGRAM_BOT_TOKEN` and doesn't call `runtime.setSetting()`. So `hasToken` happens to read true via some other code path (likely a config-snapshot fallback) while the live runtime has no setting.\n\n## Fix\n\nBridge the two in the save path. Either:\n\n1. **In the dashboard save handler:** when persisting `connectors.telegram.botToken`, also write to `env.TELEGRAM_BOT_TOKEN` (so it's loaded into runtime settings on next boot) AND call `runtime.setSetting(\\\"TELEGRAM_BOT_TOKEN\\\", token)` (so the live plugin picks it up without restart).\n\n2. **In the plugin's init:** read from both `runtime.getSetting(\\\"TELEGRAM_BOT_TOKEN\\\")` AND `runtime.character?.connectors?.telegram?.botToken` (or whatever the canonical config path is). Less clean — encodes UI config layout in plugin code.\n\nOption 1 is right. Same fix should be applied to the other connector→env bridges that have the same problem (likely `discord`, `whatsapp`, `wechat`, etc. — worth grepping).\n\n## Workaround\n\nUntil fixed, users can manually edit `~/.milady/milady.json` and add their token under the `env` block:\n\n```json\n{\n  \"env\": {\n    \"TELEGRAM_BOT_TOKEN\": \"<token from BotFather>\"\n  }\n}\n```\n\nI verified locally: after this edit + restart, plugin logs `Starting Telegram bot` / `Telegram bot polling started` and the bot responds.\n\n## Why this is dangerous\n\nThe UI affirmatively shows \"Connected\" while nothing works. Users with no log access have no way to know setup silently failed. Other connectors likely have the same bug pattern — worth a sweep.\n\n## Environment\n\n- bun 1.3.13\n- milady on `alice` (PR #105 sync)\n- @elizaos/plugin-telegram from eliza submodule",
      "createdAt": "2026-05-02T14:24:53Z",
      "closedAt": "2026-05-03T07:13:10Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs7XooKA",
      "title": "chore: add cloud and plugins, remove rust and python",
      "author": "lalalune",
      "number": 7235,
      "body": "This PR simplifies and consolidates",
      "repository": "elizaos/eliza",
      "createdAt": "2026-05-02T11:46:07Z",
      "mergedAt": "2026-05-03T00:50:22Z",
      "additions": 1307096,
      "deletions": 248884
    },
    {
      "id": "PR_kwDOMT5cIs7XlXyu",
      "title": "fix(vault, confidant): skip OS keychain on headless Linux to prevent native segfault on agent boot",
      "author": "NubsCarson",
      "number": 7230,
      "body": "## What this fixes\n\nAgent runtime hard-crashes on boot (process-level segfault, not a catchable JS error) on any host where `@napi-rs/keyring`'s `libsecret` backend can't reach a D-Bus Secret Service. That's:\n\n- **Headless Linux servers** (no desktop session)\n- **CI runners** (most Docker images don't ship gnome-keyring)\n- **Containers without D-Bus** (most production deployments)\n\nThe crash signature looks like a Bun bug:\n\n```\npanic(main thread): Segmentation fault at address 0x0\noh no: Bun has crashed. This indicates a bug in Bun, not your code.\n```\n\nIt's actually `@napi-rs/keyring 1.2.0` aborting at the C level inside libsecret — the existing try/catch around `keychain.load()` can't fire because the native crash kills the host before JS regains control.\n\n## Why the existing defense doesn't work\n\n`packages/vault/src/master-key.ts` and `packages/confidant/src/{crypto/master-key,backends/keyring}.ts` already wrap every keychain operation in `try/catch`. The catches were written to handle the case where libsecret throws a JS error. But on hosts without a D-Bus session, libsecret doesn't throw — the native binding aborts the process.\n\n`@elizaos/confidant` makes this worse by importing `@napi-rs/keyring` at the **top level** of two files (`backends/keyring.ts:1` and `crypto/master-key.ts:1`). That means the native binding initializes at *module-eval* time. Anything that imports `@elizaos/confidant` from the agent runtime (and the agent boot path does) crashes the process before any defensive code can run.\n\n## Fix\n\n**`packages/vault/src/master-key.ts`** — Detect the unsafe configuration before invoking native code in `defaultMasterKey().load()`:\n\n- `MILADY_VAULT_DISABLE_KEYCHAIN === \"1\"` (explicit opt-out)\n- `process.platform === \"linux\" && !process.env.DBUS_SESSION_BUS_ADDRESS`\n\nWhen unsafe, fall back to `MILADY_VAULT_PASSPHRASE` (the existing scrypt resolver) or throw a clear `MasterKeyUnavailableError` naming the remediation. Existing desktop / dev paths are unchanged — the new check only triggers on the configurations that were already crashing.\n\n**`packages/confidant/src/crypto/master-key.ts`** — Convert the top-level `import { Entry } from \"@napi-rs/keyring\"` to a type-only import; lazy-load `Entry` inside `loadOrCreateKeychainEntry`. Add the same headless-Linux skip + a `CONFIDANT_DISABLE_KEYCHAIN` opt-out.\n\n**`packages/confidant/src/backends/keyring.ts`** — Same pattern. Type-only top-level import; new `loadEntryClass()` helper that does the headless check + dynamic import; used by `resolve` / `store` / `remove`. The helper earns its keep with three callers.\n\n## What this does NOT change\n\n- macOS Keychain Services path\n- Windows Credential Manager path\n- Linux desktop session path (gnome-keyring / kwallet over D-Bus)\n- Test paths using `inMemoryMasterKey()`\n- Existing scrypt-passphrase resolver (`MILADY_VAULT_PASSPHRASE`)\n- Public API of either package — `defaultMasterKey`, `osKeychainMasterKey`, `osKeyringMasterKey`, `KeyringBackend` all keep the same signatures and behavior on hosts where the native binding is safe\n\n## Repro on a headless box\n\n```bash\nunset DBUS_SESSION_BUS_ADDRESS\nbun run dev\n# crashes inside `new Entry(service, account)` in @napi-rs/keyring 1.2.0\n```\n\nAfter the fix, same command on the same host either falls back to `MILADY_VAULT_PASSPHRASE` (if set) or throws `MasterKeyUnavailableError` with a helpful message.\n\n## Related\n\nThe same root cause hits 10 elizaos-plugins repos that ship a CJS bundle requiring async-ESM `@elizaos/core`. Those are filed as separate PRs against each plugin repo, mirroring the existing ESM-only pattern in `plugin-anthropic`.\n\n## Tested\n\nRepro confirmed on this host (headless Linux server, no D-Bus, `@napi-rs/keyring@1.2.0`). Bot boots clean, runs full agent runtime, completes 7-of-7 Discord smoke prompts with zero segfaults.\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR prevents a process-level segfault on headless Linux by converting top-level `@napi-rs/keyring` imports to type-only and lazy-loading the native binding only after confirming D-Bus reachability via `DBUS_SESSION_BUS_ADDRESS` or the `$XDG_RUNTIME_DIR/bus` socket. The guard is applied consistently across `packages/vault` and `packages/confidant`, and `describe()` is updated to reflect the runtime-selected path.\n\n- **P1 (test regression):** The `beforeEach` in `defaultMasterKey — fallback chain` deletes `MILADY_VAULT_DISABLE_KEYCHAIN` to \\\"force the safe path,\\\" but this doesn't suppress the D-Bus checks in `isKeychainUnsafe()`. The two existing `describe()` tests (lines 182–194) will fail on headless Linux CI because `describe()` now returns the bypass string rather than `keychain://…`.\n\n<h3>Confidence Score: 4/5</h3>\n\nSafe to merge after fixing the test regression in the fallback chain describe() tests; the runtime fix is correct.\n\nOne P1 finding: two pre-existing describe() tests in defaultMasterKey — fallback chain will fail on headless Linux CI because beforeEach only removes MILADY_VAULT_DISABLE_KEYCHAIN but does not suppress the D-Bus env-var/socket checks, leaving isKeychainUnsafe() returning true on headless runners. The runtime fix itself is logically sound and well-tested.\n\npackages/vault/test/master-key.test.ts — beforeEach in defaultMasterKey — fallback chain needs to also set DBUS_SESSION_BUS_ADDRESS to truly force the safe path on headless Linux.\n\n<h3>Important Files Changed</h3>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/vault/src/master-key.ts | Adds `isKeychainUnsafe()` with XDG socket fallback, guards both `defaultMasterKey` and `osKeychainMasterKey`, and fixes `describe()` to reflect the bypass path. Logic and error messages are correct. |\n| packages/confidant/src/keychain-host.ts | New shared helper implementing `isKeychainUnsafe()` for the confidant package with opt-out env var and XDG socket check. Clean and correct. |\n| packages/confidant/src/backends/keyring.ts | Converts to type-only import and adds `loadEntryClass()` lazy-loader with unsafe guard. Missing try/catch around dynamic import unlike sibling implementations. |\n| packages/confidant/src/crypto/master-key.ts | Type-only import, lazy load with full try/catch, and `isKeychainUnsafe()` guard. Correctly mirrors the vault implementation pattern. |\n| packages/vault/test/master-key.test.ts | Adds new test suites for bypass behavior, but `beforeEach` in the fallback chain suite incompletely forces the safe path — existing `describe()` tests will fail on headless Linux CI. |\n| packages/app-core/src/api/secrets-manager-routes.test.ts | Injects an in-memory master key into the shared vault fixture so route tests never touch the OS keychain. Correct fix for CI stability. |\n\n</details>\n\n\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[Agent boot / module import] --> B[Type-only import of keyring\\nNo native init at module-eval time]\n    B --> C[load or resolve called]\n    C --> D{isKeychainUnsafe check}\n    D -->|Explicit opt-out flag set| F[Throw typed error]\n    D -->|Linux without reachable D-Bus| F\n    D -->|DBUS_SESSION_BUS_ADDRESS present| G[Dynamic import of native binding]\n    D -->|XDG_RUNTIME_DIR bus socket exists| G\n    D -->|Non-Linux platform| G\n    G --> H[Entry constructor + keychain ops]\n    F --> J{Caller is defaultMasterKey?}\n    J -->|Yes + passphrase env set| L[scrypt passphrase resolver]\n    J -->|Yes + no passphrase| M[Throw with remediation hint]\n    J -->|No - direct caller| M\n```\n\n<!-- greptile_failed_comments -->\n<details><summary><h3>Comments Outside Diff (3)</h3></summary>\n\n1. `packages/vault/src/master-key.ts`, line 234-295 ([link](https://github.com/elizaos/eliza/blob/a5e891b29f8948acca3d4793a9109c444e314e3a/packages/vault/src/master-key.ts#L234-L295)) \n\n   <a href=\"#\"><img alt=\"P2\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p2.svg?v=7\" align=\"top\"></a> **`osKeychainMasterKey` still has no headless-Linux guard**\n\n   `defaultMasterKey` now safely skips the keychain on headless Linux before calling `keychain.load()`, but `osKeychainMasterKey` (the exported public API) contains no equivalent check. Callers that use `osKeychainMasterKey` directly — plugins, integrations, or any code that doesn't go through `defaultMasterKey` — will still trigger the `new Entry(service, account)` call path on headless Linux and reproduce the original segfault. Adding the same guard at the top of `osKeychainMasterKey.load()` would close that gap.\n\n2. `packages/vault/src/master-key.ts`, line 225-230 ([link](https://github.com/elizaos/eliza/blob/a5e891b29f8948acca3d4793a9109c444e314e3a/packages/vault/src/master-key.ts#L225-L230)) \n\n   <a href=\"#\"><img alt=\"P2\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p2.svg?v=7\" align=\"top\"></a> **`describe()` is inaccurate when `keychainUnsafe` is true**\n\n   When the new `keychainUnsafe` path fires, the keychain is completely bypassed and the passphrase resolver (or an error) is used. But `describe()` still unconditionally returns a string starting with `keychain.describe()`, e.g. `\"keychain://milady/vault.masterKey\"`. A caller inspecting the resolver's description on a headless Linux host will see the keychain listed as the primary source even though it is never attempted. The description should reflect the runtime-selected path.\n\n3. `packages/vault/test/master-key.test.ts`, line 182-194 ([link](https://github.com/elizaos/eliza/blob/ae722967bdd73bcb3d7781b0e6c53bdf42b07be0/packages/vault/test/master-key.test.ts#L182-L194)) \n\n   <a href=\"#\"><img alt=\"P1\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p1.svg?v=7\" align=\"top\"></a> **`beforeEach` fix is insufficient — `describe` tests will fail on headless Linux CI**\n\n   The `beforeEach` deletes `MILADY_VAULT_DISABLE_KEYCHAIN` with the comment \"force the keychain safe path… e.g. headless Linux CI without D-Bus.\" But that flag is only the first branch of `isKeychainUnsafe()`. On headless Linux without `DBUS_SESSION_BUS_ADDRESS` and no `$XDG_RUNTIME_DIR/bus` socket, `isKeychainUnsafe()` still returns `true`, so `defaultMasterKey.describe()` returns the bypass string (`\"passphrase://test (keychain bypassed: …)\"` or `\"unavailable (keychain bypassed: …)\"`) — not `\"keychain://…\"`. Both tests below will therefore fail on headless Linux CI after this PR.\n\n   Fix: also set `DBUS_SESSION_BUS_ADDRESS` in `beforeEach` to force the safe path:\n\n   ```ts\n   beforeEach(() => {\n     prev = process.env.MILADY_VAULT_PASSPHRASE;\n     prevDisable = process.env.MILADY_VAULT_DISABLE_KEYCHAIN;\n     prevDbus = process.env.DBUS_SESSION_BUS_ADDRESS;\n     delete process.env.MILADY_VAULT_DISABLE_KEYCHAIN;\n     // Force the Linux D-Bus check to pass so these describe() tests\n     // exercise the keychain path on every platform, including headless CI.\n     process.env.DBUS_SESSION_BUS_ADDRESS = \"unix:path=/run/user/1000/bus\";\n   });\n   afterEach(() => {\n     // restore DBUS_SESSION_BUS_ADDRESS as well\n     if (prevDbus === undefined) delete process.env.DBUS_SESSION_BUS_ADDRESS;\n     else process.env.DBUS_SESSION_BUS_ADDRESS = prevDbus;\n   });\n   ```\n\n</details>\n\n<!-- /greptile_failed_comments -->\n\n<sub>Reviews (2): Last reviewed commit: [\"fix(vault, confidant): tighten headless-...\"](https://github.com/elizaos/eliza/commit/ae722967bdd73bcb3d7781b0e6c53bdf42b07be0) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=30539389)</sub>\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-05-02T03:12:09Z",
      "mergedAt": "2026-05-02T03:30:04Z",
      "additions": 256,
      "deletions": 18
    },
    {
      "id": "PR_kwDOMT5cIs7XmEll",
      "title": "fix(ci): handle bogus Inno Setup exit codes on Windows Server 2025",
      "author": "NubsCarson",
      "number": 7232,
      "body": "## Summary\nWindows Server 2025 headless CI runners return non-zero exit codes from Inno Setup (exit code 5) even when the install succeeds or partially succeeds. The smoke test was treating this as a hard failure and retrying, which also failed.\n\n## Changes\n- `smoke-test-windows.ps1`: Check if `launcher.exe` exists after a non-zero exit code before retrying — if files were extracted successfully, treat as success despite the bad exit code\n- Log full Inno Setup output instead of tail 100 (the actual error is at the beginning, the tail only shows the rollback deletion phase)\n- Add disk space diagnostics before installer extraction\n- Remove `/CLOSEAPPLICATIONS` flag which can hang on headless runners\n\n## Context\nThis is part of a broader effort to fix the Windows release pipeline. The companion milady PR (milady-ai/milady#2089) adds disk cleanup steps to the workflow YAML.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis CI-only fix updates `smoke-test-windows.ps1` to handle Inno Setup returning bogus non-zero exit codes (e.g. exit 5) on Windows Server 2025 headless runners by checking for `launcher.exe` existence before deciding whether to retry or fail. It also removes the `/CLOSEAPPLICATIONS` flag (which can hang headless sessions), adds disk-space diagnostics before install, and changes the log output from `Tail 100` to the full file.\n\n<h3>Confidence Score: 4/5</h3>\n\nSafe to merge — CI-only script change with correct fallback logic and downstream validation still exercised by Verify-PackagedRendererAssets and the health-check loop.\n\nOnly P2 findings: full log verbosity and missing diagnostic log on the bogus-exit-code-success path. No logic errors or security concerns.\n\nNo files require special attention beyond the minor log verbosity noted inline.\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/app-core/platforms/electrobun/scripts/smoke-test-windows.ps1 | Installer error-handling hardened to tolerate Windows Server 2025 bogus exit codes by checking launcher.exe existence; /CLOSEAPPLICATIONS removed; disk diagnostics added; log output changed to full content (potential verbosity issue). |\n\n</details>\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[Run Inno Setup - Attempt 1] --> B{Exit code == 0?}\n    B -- Yes --> E[Find launcher.exe in installerRoot]\n    B -- No --> C[Print full log]\n    C --> D{launcher.exe exists?}\n    D -- Yes --> F[Treat as success - headless runner quirk]\n    D -- No --> G[Retry via cmd /c - Attempt 2]\n    G --> H{launcher.exe exists?}\n    H -- Yes --> I[Treat as success]\n    H -- No --> J{Exit code == 0?}\n    J -- Yes --> E\n    J -- No --> K[Print attempt 2 log - throw error]\n    F --> E\n    I --> E\n    E --> L{launcher.exe found?}\n    L -- Yes --> M[Verify renderer assets - Start launcher - Health check loop]\n    L -- No --> N[throw: launcher not found]\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"fix(ci): add disk diagnostics + full Inn...\"](https://github.com/elizaos/eliza/commit/8116e47827888a7318ebe8df34b2f3d908a15947) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=30542195)</sub>\n\n> Greptile also left **2 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-05-02T04:38:18Z",
      "mergedAt": "2026-05-02T06:04:53Z",
      "additions": 38,
      "deletions": 23
    },
    {
      "id": "PR_kwDOMT5cIs7Xos1B",
      "title": "chore(deps): update node.js to v24",
      "author": "renovate",
      "number": 7239,
      "body": "> ℹ️ **Note**\n> \n> This PR body was truncated due to platform limits.\n\nThis PR contains the following updates:\n\n| Package | Type | Update | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|---|---|\n| [node](https://redirect.github.com/nodejs/node) | final | major | `22-slim` → `24-slim` | ![age](https://developer.mend.io/api/mc/badges/age/docker/node/24.15.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/node/22.22.2/24.15.0?slim=true) |\n| [node](https://redirect.github.com/nodejs/node) | stage | major | `22-slim` → `24-slim` | ![age](https://developer.mend.io/api/mc/badges/age/docker/node/24.15.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/node/22.22.2/24.15.0?slim=true) |\n| [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | devDependencies | major | [`^20.0.0` → `^24.0.0`](https://renovatebot.com/diffs/npm/@types%2fnode/20.19.39/24.12.2) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/24.12.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.19.39/24.12.2?slim=true) |\n\n---\n\n> [!WARNING]\n> Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/79) for more information.\n\n---\n\n### Release Notes\n\n<details>\n<summary>nodejs/node (node)</summary>\n\n### [`v24.15.0`](https://redirect.github.com/nodejs/node/releases/tag/v24.15.0): 2026-04-15, Version 24.15.0 'Krypton' (LTS), @&#8203;aduh95\n\n[Compare Source](https://redirect.github.com/nodejs/node/compare/v24.14.1...v24.15.0)\n\n##### Notable Changes\n\n- \\[[`3d87ecacbc`](https://redirect.github.com/nodejs/node/commit/3d87ecacbc)] - **(SEMVER-MINOR)** **cli**: add --max-heap-size option (tannal) [#&#8203;58708](https://redirect.github.com/nodejs/node/pull/58708)\n- \\[[`83c38672f7`](https://redirect.github.com/nodejs/node/commit/83c38672f7)] - **cli**: add --require-module/--no-require-module (Joyee Cheung) [#&#8203;60959](https://redirect.github.com/nodejs/node/pull/60959)\n- \\[[`54ef940e01`](https://redirect.github.com/nodejs/node/commit/54ef940e01)] - **(SEMVER-MINOR)** **crypto**: add raw key formats support to the KeyObject APIs (Filip Skokan) [#&#8203;62240](https://redirect.github.com/nodejs/node/pull/62240)\n- \\[[`f4a3edc47a`](https://redirect.github.com/nodejs/node/commit/f4a3edc47a)] - **(SEMVER-MINOR)** **fs**: add `throwIfNoEntry` option for fs.stat and fs.promises.stat (Juan José) [#&#8203;61178](https://redirect.github.com/nodejs/node/pull/61178)\n- \\[[`5cdcba17cc`](https://redirect.github.com/nodejs/node/commit/5cdcba17cc)] - **(SEMVER-MINOR)** **http2**: add http1Options for HTTP/1 fallback configuration (Amol Yadav) [#&#8203;61713](https://redirect.github.com/nodejs/node/pull/61713)\n- \\[[`8b6be3fe14`](https://redirect.github.com/nodejs/node/commit/8b6be3fe14)] - **module**: mark require(esm) as stable (Joyee Cheung) [#&#8203;60959](https://redirect.github.com/nodejs/node/pull/60959)\n- \\[[`68fbc0c6cc`](https://redirect.github.com/nodejs/node/commit/68fbc0c6cc)] - **module**: mark module compile cache as stable (Joyee Cheung) [#&#8203;60971](https://redirect.github.com/nodejs/node/pull/60971)\n- \\[[`c851e76f8c`](https://redirect.github.com/nodejs/node/commit/c851e76f8c)] - **(SEMVER-MINOR)** **net**: add `setTOS` and `getTOS` to `Socket` (Amol Yadav) [#&#8203;61503](https://redirect.github.com/nodejs/node/pull/61503)\n- \\[[`6ac4304c87`](https://redirect.github.com/nodejs/node/commit/6ac4304c87)] - **(SEMVER-MINOR)** **sqlite**: add limits property to DatabaseSync (Mert Can Altin) [#&#8203;61298](https://redirect.github.com/nodejs/node/pull/61298)\n- \\[[`aaf9af1672`](https://redirect.github.com/nodejs/node/commit/aaf9af1672)] - **sqlite**: mark as release candidate (Matteo Collina) [#&#8203;61262](https://redirect.github.com/nodejs/node/pull/61262)\n- \\[[`eb77a7a297`](https://redirect.github.com/nodejs/node/commit/eb77a7a297)] - **(SEMVER-MINOR)** **src**: add C++ support for diagnostics channels (RafaelGSS) [#&#8203;61869](https://redirect.github.com/nodejs/node/pull/61869)\n- \\[[`6834ca13bb`](https://redirect.github.com/nodejs/node/commit/6834ca13bb)] - **(SEMVER-MINOR)** **stream**: rename `Duplex.toWeb()` type option to `readableType` (René) [#&#8203;61632](https://redirect.github.com/nodejs/node/pull/61632)\n- \\[[`f5f21d36a6`](https://redirect.github.com/nodejs/node/commit/f5f21d36a6)] - **test\\_runner**: add exports option for module mocks (sangwook) [#&#8203;61727](https://redirect.github.com/nodejs/node/pull/61727)\n- \\[[`1f2025fd1e`](https://redirect.github.com/nodejs/node/commit/1f2025fd1e)] - **(SEMVER-MINOR)** **test\\_runner**: expose worker ID for concurrent test execution (Ali Hassan) [#&#8203;61394](https://redirect.github.com/nodejs/node/pull/61394)\n- \\[[`1ca20fc33d`](https://redirect.github.com/nodejs/node/commit/1ca20fc33d)] - **(SEMVER-MINOR)** **test\\_runner**: show interrupted test on SIGINT (Matteo Collina) [#&#8203;61676](https://redirect.github.com/nodejs/node/pull/61676)\n\n##### Commits\n\n- \\[[`148373cea1`](https://redirect.github.com/nodejs/node/commit/148373cea1)] - **assert,util**: improve comparison performance (Ruben Bridgewater) [#&#8203;61176](https://redirect.github.com/nodejs/node/pull/61176)\n- \\[[`e5558b0859`](https://redirect.github.com/nodejs/node/commit/e5558b0859)] - **assert,util**: fix deep comparing invalid dates skipping properties (Ruben Bridgewater) [#&#8203;61076](https://redirect.github.com/nodejs/node/pull/61076)\n- \\[[`83cffd92b5`](https://redirect.github.com/nodejs/node/commit/83cffd92b5)] - **async\\_hooks**: enabledHooksExist shall return if hooks are enabled (Gerhard Stöbich) [#&#8203;61054](https://redirect.github.com/nodejs/node/pull/61054)\n- \\[[`2c9436b43d`](https://redirect.github.com/nodejs/node/commit/2c9436b43d)] - **benchmark**: fix destructuring in dgram/single-buffer (Ali Hassan) [#&#8203;62084](https://redirect.github.com/nodejs/node/pull/62084)\n- \\[[`837acd7382`](https://redirect.github.com/nodejs/node/commit/837acd7382)] - **benchmark**: add startup benchmark for ESM entrypoint (Joyee Cheung) [#&#8203;61769](https://redirect.github.com/nodejs/node/pull/61769)\n- \\[[`a6ced7d272`](https://redirect.github.com/nodejs/node/commit/a6ced7d272)] - **buffer**: improve performance of multiple Buffer operations (Ali Hassan) [#&#8203;61871](https://redirect.github.com/nodejs/node/pull/61871)\n- \\[[`a82003bf8b`](https://redirect.github.com/nodejs/node/commit/a82003bf8b)] - **buffer**: optimize buffer.concat performance (Mert Can Altin) [#&#8203;61721](https://redirect.github.com/nodejs/node/pull/61721)\n- \\[[`83dfd0be1d`](https://redirect.github.com/nodejs/node/commit/83dfd0be1d)] - **buffer**: disallow ArrayBuffer transfer on pooled buffer (Chengzhong Wu) [#&#8203;61372](https://redirect.github.com/nodejs/node/pull/61372)\n- \\[[`ed2d0cb1bf`](https://redirect.github.com/nodejs/node/commit/ed2d0cb1bf)] - **build**: support empty libname flags in `configure.py` (Antoine du Hamel) [#&#8203;62477](https://redirect.github.com/nodejs/node/pull/62477)\n- \\[[`09f7920267`](https://redirect.github.com/nodejs/node/commit/09f7920267)] - **build**: fix timezone-update path references (Chengzhong Wu) [#&#8203;62280](https://redirect.github.com/nodejs/node/pull/62280)\n- \\[[`af46b15b91`](https://redirect.github.com/nodejs/node/commit/af46b15b91)] - **build**: use path-ignore in GHA coverage-windows.yml (Chengzhong Wu) [#&#8203;61811](https://redirect.github.com/nodejs/node/pull/61811)\n- \\[[`2cf77eadd1`](https://redirect.github.com/nodejs/node/commit/2cf77eadd1)] - **build**: generate\\_config\\_gypi.py generates valid JSON (Shelley Vohr) [#&#8203;61791](https://redirect.github.com/nodejs/node/pull/61791)\n- \\[[`e0220f0c35`](https://redirect.github.com/nodejs/node/commit/e0220f0c35)] - **build**: build with v8 gdbjit support on supported platform (Joyee Cheung) [#&#8203;61010](https://redirect.github.com/nodejs/node/pull/61010)\n- \\[[`5505511dcb`](https://redirect.github.com/nodejs/node/commit/5505511dcb)] - **build**: enable -DV8\\_ENABLE\\_CHECKS flag (Ryuhei Shima) [#&#8203;61327](https://redirect.github.com/nodejs/node/pull/61327)\n- \\[[`5f8ecf3940`](https://redirect.github.com/nodejs/node/commit/5f8ecf3940)] - **build**: add --debug-symbols to build with -g without enabling DCHECKs (Joyee Cheung) [#&#8203;61100](https://redirect.github.com/nodejs/node/pull/61100)\n- \\[[`ab18c0867b`](https://redirect.github.com/nodejs/node/commit/ab18c0867b)] - **build**: fix --node-builtin-modules-path (Filip Skokan) [#&#8203;62115](https://redirect.github.com/nodejs/node/pull/62115)\n- \\[[`bfa60d5782`](https://redirect.github.com/nodejs/node/commit/bfa60d5782)] - **build**: fix GN for new merve dep (Shelley Vohr) [#&#8203;61984](https://redirect.github.com/nodejs/node/pull/61984)\n- \\[[`0d1975fe3a`](https://redirect.github.com/nodejs/node/commit/0d1975fe3a)] - **build,win**: add WinGet Visual Studio 2022 Build Tools Edition config (Mike McCready) [#&#8203;61652](https://redirect.github.com/nodejs/node/pull/61652)\n- \\[[`10b2bb5fa6`](https://redirect.github.com/nodejs/node/commit/10b2bb5fa6)] - **child\\_process**: add tracing channel for spawn (Marco) [#&#8203;61836](https://redirect.github.com/nodejs/node/pull/61836)\n- \\[[`3d87ecacbc`](https://redirect.github.com/nodejs/node/commit/3d87ecacbc)] - **(SEMVER-MINOR)** **cli**: add --max-heap-size option (tannal) [#&#8203;58708](https://redirect.github.com/nodejs/node/pull/58708)\n- \\[[`83c38672f7`](https://redirect.github.com/nodejs/node/commit/83c38672f7)] - **cli**: add --require-module/--no-require-module (Joyee Cheung) [#&#8203;60959](https://redirect.github.com/nodejs/node/pull/60959)\n- \\[[`9d37233824`](https://redirect.github.com/nodejs/node/commit/9d37233824)] - **crypto**: update root certificates to NSS 3.121 (Node.js GitHub Bot) [#&#8203;62485](https://redirect.github.com/nodejs/node/pull/62485)\n- \\[[`b0cbfe38a4`](https://redirect.github.com/nodejs/node/commit/b0cbfe38a4)] - **crypto**: add crypto::GetSSLCtx API for addon access to OpenSSL contexts (Tim Perry) [#&#8203;62254](https://redirect.github.com/nodejs/node/pull/62254)\n- \\[[`dc034a4ac9`](https://redirect.github.com/nodejs/node/commit/dc034a4ac9)] - **crypto**: reject ML-KEM/ML-DSA [PKCS#8](https://redirect.github.com/PKCS/node/issues/8) import without seed in SubtleCrypto (Filip Skokan) [#&#8203;62218](https://redirect.github.com/nodejs/node/pull/62218)\n- \\[[`8aa6e706df`](https://redirect.github.com/nodejs/node/commit/8aa6e706df)] - **crypto**: refactor WebCrypto AEAD algorithms auth tag handling (Filip Skokan) [#&#8203;62169](https://redirect.github.com/nodejs/node/pull/62169)\n- \\[[`20cb932bcf`](https://redirect.github.com/nodejs/node/commit/20cb932bcf)] - **crypto**: read algorithm name property only once in normalizeAlgorithm (Filip Skokan) [#&#8203;62170](https://redirect.github.com/nodejs/node/pull/62170)\n- \\[[`e2934162b4`](https://redirect.github.com/nodejs/node/commit/e2934162b4)] - **crypto**: add missing AES dictionaries (Filip Skokan) [#&#8203;62099](https://redirect.github.com/nodejs/node/pull/62099)\n- \\[[`8b8db52f65`](https://redirect.github.com/nodejs/node/commit/8b8db52f65)] - **crypto**: fix importKey required argument count check (Filip Skokan) [#&#8203;62099](https://redirect.github.com/nodejs/node/pull/62099)\n- \\[[`bd5458db29`](https://redirect.github.com/nodejs/node/commit/bd5458db29)] - **crypto**: fix missing nullptr check on RSA\\_new() (ndossche) [#&#8203;61888](https://redirect.github.com/nodejs/node/pull/61888)\n- \\[[`7302c7ed22`](https://redirect.github.com/nodejs/node/commit/7302c7ed22)] - **crypto**: fix handling of null BUF\\_MEM\\* in ToV8Value() (Nora Dossche) [#&#8203;61885](https://redirect.github.com/nodejs/node/pull/61885)\n- \\[[`8d0c22ea20`](https://redirect.github.com/nodejs/node/commit/8d0c22ea20)] - **crypto**: fix potential null pointer dereference when BIO\\_meth\\_new() fails (Nora Dossche) [#&#8203;61788](https://redirect.github.com/nodejs/node/pull/61788)\n- \\[[`72aad8b40f`](https://redirect.github.com/nodejs/node/commit/72aad8b40f)] - **crypto**: always return certificate serial numbers as uppercase (Anna Henningsen) [#&#8203;61752](https://redirect.github.com/nodejs/node/pull/61752)\n- \\[[`2395fc0f4d`](https://redirect.github.com/nodejs/node/commit/2395fc0f4d)] - **crypto**: rename CShakeParams and KmacParams length to outputLength (Filip Skokan) [#&#8203;61875](https://redirect.github.com/nodejs/node/pull/61875)\n- \\[[`541be3aaf2`](https://redirect.github.com/nodejs/node/commit/541be3aaf2)] - **crypto**: recognize raw formats in keygen (Filip Skokan) [#&#8203;62480](https://redirect.github.com/nodejs/node/pull/62480)\n- \\[[`54ef940e01`](https://redirect.github.com/nodejs/node/commit/54ef940e01)] - **(SEMVER-MINOR)** **crypto**: add raw key formats support to the KeyObject APIs (Filip Skokan) [#&#8203;62240](https://redirect.github.com/nodejs/node/pull/62240)\n- \\[[`bef1949823`](https://redirect.github.com/nodejs/node/commit/bef1949823)] - **deps**: V8: cherry-pick [`33e7739`](https://redirect.github.com/nodejs/node/commit/33e7739c134d) (Thibaud Michaud) [#&#8203;62567](https://redirect.github.com/nodejs/node/pull/62567)\n- \\[[`2e1a565a55`](https://redirect.github.com/nodejs/node/commit/2e1a565a55)] - **deps**: update ada to 3.4.4 (Node.js GitHub Bot) [#&#8203;62414](https://redirect.github.com/nodejs/node/pull/62414)\n- \\[[`d0418bad10`](https://redirect.github.com/nodejs/node/commit/d0418bad10)] - **deps**: update timezone to 2026a (Node.js GitHub Bot) [#&#8203;62164](https://redirect.github.com/nodejs/node/pull/62164)\n- \\[[`53aad66415`](https://redirect.github.com/nodejs/node/commit/53aad66415)] - **deps**: update googletest to [`2461743`](https://redirect.github.com/nodejs/node/commit/2461743991f9aa53e9a3625eafcbacd81a3c74cd) (Node.js GitHub Bot) [#&#8203;62484](https://redirect.github.com/nodejs/node/pull/62484)\n- \\[[`90fab71a84`](https://redirect.github.com/nodejs/node/commit/90fab71a84)] - **deps**: update simdjson to 4.5.0 (Node.js GitHub Bot) [#&#8203;62382](https://redirect.github.com/nodejs/node/pull/62382)\n- \\[[`a416ddf6d9`](https://redirect.github.com/nodejs/node/commit/a416ddf6d9)] - **deps**: V8: cherry-pick [`cf1bce4`](https://redirect.github.com/nodejs/node/commit/cf1bce40a5ef) (Richard Lau) [#&#8203;62449](https://redirect.github.com/nodejs/node/pull/62449)\n- \\[[`4d9123e57d`](https://redirect.github.com/nodejs/node/commit/4d9123e57d)] - **deps**: upgrade npm to 11.12.1 (npm team) [#&#8203;62448](https://redirect.github.com/nodejs/node/pull/62448)\n- \\[[`952d715028`](https://redirect.github.com/nodejs/node/commit/952d715028)] - **deps**: update sqlite to 3.51.3 (Node.js GitHub Bot) [#&#8203;62256](https://redirect.github.com/nodejs/node/pull/62256)\n- \\[[`f3fd7ed426`](https://redirect.github.com/nodejs/node/commit/f3fd7ed426)] - **deps**: update googletest to [`73a63ea`](https://redirect.github.com/nodejs/node/commit/73a63ea05dc8ca29ec1d2c1d66481dd0de1950f1) (Node.js GitHub Bot) [#&#8203;61927](https://redirect.github.com/nodejs/node/pull/61927)\n- \\[[`71a2f82d7c`](https://redirect.github.com/nodejs/node/commit/71a2f82d7c)] - **deps**: upgrade npm to 11.11.1 (npm team) [#&#8203;62216](https://redirect.github.com/nodejs/node/pull/62216)\n- \\[[`84f60c26f7`](https://redirect.github.com/nodejs/node/commit/84f60c26f7)] - **deps**: update amaro to 1.1.8 (Node.js GitHub Bot) [#&#8203;62151](https://redirect.github.com/nodejs/node/pull/62151)\n- \\[[`43159d0e5f`](https://redirect.github.com/nodejs/node/commit/43159d0e5f)] - **deps**: update sqlite to 3.52.0 (Node.js GitHub Bot) [#&#8203;62150](https://redirect.github.com/nodejs/node/pull/62150)\n- \\[[`b887657b38`](https://redirect.github.com/nodejs/node/commit/b887657b38)] - **deps**: V8: cherry-pick [`aa0b288`](https://redirect.github.com/nodejs/node/commit/aa0b288f87cc) (Richard Lau) [#&#8203;62136](https://redirect.github.com/nodejs/node/pull/62136)\n- \\[[`7ab885b323`](https://redirect.github.com/nodejs/node/commit/7ab885b323)] - **deps**: update ada to 3.4.3 (Node.js GitHub Bot) [#&#8203;62049](https://redirect.github.com/nodejs/node/pull/62049)\n- \\[[`671ddec2b9`](https://redirect.github.com/nodejs/node/commit/671ddec2b9)] - **deps**: update minimatch to 10.2.4 (Node.js GitHub Bot) [#&#8203;62016](https://redirect.github.com/nodejs/node/pull/62016)\n- \\[[`290fe37d4d`](https://redirect.github.com/nodejs/node/commit/290fe37d4d)] - **deps**: update simdjson to 4.3.1 (Node.js GitHub Bot) [#&#8203;61930](https://redirect.github.com/nodejs/node/pull/61930)\n- \\[[`a13bee76b5`](https://redirect.github.com/nodejs/node/commit/a13bee76b5)] - **deps**: update acorn-walk to 8.3.5 (Node.js GitHub Bot) [#&#8203;61928](https://redirect.github.com/nodejs/node/pull/61928)\n- \\[[`f0e40b35b9`](https://redirect.github.com/nodejs/node/commit/f0e40b35b9)] - **deps**: update acorn to 8.16.0 (Node.js GitHub Bot) [#&#8203;61925](https://redirect.github.com/nodejs/node/pull/61925)\n- \\[[`463dfa023a`](https://redirect.github.com/nodejs/node/commit/463dfa023a)] - **deps**: update minimatch to 10.2.2 (Node.js GitHub Bot) [#&#8203;61830](https://redirect.github.com/nodejs/node/pull/61830)\n- \\[[`4b2e4bb108`](https://redirect.github.com/nodejs/node/commit/4b2e4bb108)] - **deps**: update nbytes to 0.1.3 (Node.js GitHub Bot) [#&#8203;61879](https://redirect.github.com/nodejs/node/pull/61879)\n- \\[[`5626cb83d0`](https://redirect.github.com/nodejs/node/commit/5626cb83d0)] - **deps**: remove stale OpenSSL arch configs (René) [#&#8203;61834](https://redirect.github.com/nodejs/node/pull/61834)\n- \\[[`52668874fd`](https://redirect.github.com/nodejs/node/commit/52668874fd)] - **deps**: update llhttp to 9.3.1 (Node.js GitHub Bot) [#&#8203;61827](https://redirect.github.com/nodejs/node/pull/61827)\n- \\[[`b3387b07b1`](https://redirect.github.com/nodejs/node/commit/b3387b07b1)] - **deps**: update googletest to [`5a9c3f9`](https://redirect.github.com/nodejs/node/commit/5a9c3f9e8d9b90bbbe8feb32902146cb8f7c1757) (Node.js GitHub Bot) [#&#8203;61731](https://redirect.github.com/nodejs/node/pull/61731)\n- \\[[`196268cb4c`](https://redirect.github.com/nodejs/node/commit/196268cb4c)] - **deps**: V8: cherry-pick [`c5ff7c4`](https://redirect.github.com/nodejs/node/commit/c5ff7c4d6cde) (Chengzhong Wu) [#&#8203;61372](https://redirect.github.com/nodejs/node/pull/61372)\n- \\[[`36869b52de`](https://redirect.github.com/nodejs/node/commit/36869b52de)] - **deps**: update merve to 1.2.2 (Node.js GitHub Bot) [#&#8203;62213](https://redirect.github.com/nodejs/node/pull/62213)\n- \\[[`3cbac055de`](https://redirect.github.com/nodejs/node/commit/3cbac055de)] - **deps**: update merve to 1.2.0 (Node.js GitHub Bot) [#&#8203;62149](https://redirect.github.com/nodejs/node/pull/62149)\n- \\[[`7757cc3495`](https://redirect.github.com/nodejs/node/commit/7757cc3495)] - **deps**: V8: backport [`6a0a25a`](https://redirect.github.com/nodejs/node/commit/6a0a25abaed3) (Vivian Wang) [#&#8203;61670](https://redirect.github.com/nodejs/node/pull/61670)\n- \\[[`359797c2fb`](https://redirect.github.com/nodejs/node/commit/359797c2fb)] - **deps,src**: prepare for cpplint update (Michaël Zasso) [#&#8203;60901](https://redirect.github.com/nodejs/node/pull/60901)\n- \\[[`ace802e59b`](https://redirect.github.com/nodejs/node/commit/ace802e59b)] - **diagnostics\\_channel**: add diagnostics channels for web locks (Ilyas Shabi) [#&#8203;62123](https://redirect.github.com/nodejs/node/pull/62123)\n- \\[[`a072411b03`](https://redirect.github.com/nodejs/node/commit/a072411b03)] - **doc**: remove spawn with shell example from bat/cmd section (Kit Dallege) [#&#8203;62243](https://redirect.github.com/nodejs/node/pull/62243)\n- \\[[`0b152449af`](https://redirect.github.com/nodejs/node/commit/0b152449af)] - **doc**: fix typo in --disable-wasm-trap-handler description (Dmytro Semchuk) [#&#8203;61820](https://redirect.github.com/nodejs/node/pull/61820)\n- \\[[`73ea387ad7`](https://redirect.github.com/nodejs/node/commit/73ea387ad7)] - **doc**: remove obsolete Boxstarter automated install (Mike McCready) [#&#8203;61785](https://redirect.github.com/nodejs/node/pull/61785)\n- \\[[`7f234add8e`](https://redirect.github.com/nodejs/node/commit/7f234add8e)] - **doc**: deprecate `module.register()` (DEP0205) (Geoffrey Booth) [#&#8203;62395](https://redirect.github.com/nodejs/node/pull/62395)\n- \\[[`12fc3c6a30`](https://redirect.github.com/nodejs/node/commit/12fc3c6a30)] - **doc**: clarify that features cannot be both experimental and deprecated (Antoine du Hamel) [#&#8203;62456](https://redirect.github.com/nodejs/node/pull/62456)\n- \\[[`1ecc5962a2`](https://redirect.github.com/nodejs/node/commit/1ecc5962a2)] - **doc**: fix 'transfered' typo in quic.md (lilianakatrina684-a11y) [#&#8203;62492](https://redirect.github.com/nodejs/node/pull/62492)\n- \\[[`56741a1303`](https://redirect.github.com/nodejs/node/commit/56741a1303)] - **doc**: move sqlite type conversion section to correct level (René) [#&#8203;62482](https://redirect.github.com/nodejs/node/pull/62482)\n- \\[[`12b04d17d5`](https://redirect.github.com/nodejs/node/commit/12b04d17d5)] - **doc**: add Rafael to last security release steward (Rafael Gonzaga) [#&#8203;62423](https://redirect.github.com/nodejs/node/pull/62423)\n- \\[[`c4567e4a8d`](https://redirect.github.com/nodejs/node/commit/c4567e4a8d)] - **doc**: fix overstated Date header requirement in response.sendDate (Kit Dallege) [#&#8203;62206](https://redirect.github.com/nodejs/node/pull/62206)\n- \\[[`384a41047f`](https://redirect.github.com/nodejs/node/commit/384a41047f)] - **doc**: enhance clarification about the main field (Mowafak Almahaini) [#&#8203;62302](https://redirect.github.com/nodejs/node/pull/62302)\n- \\[[`93d19b1a1c`](https://redirect.github.com/nodejs/node/commit/93d19b1a1c)] - **doc**: minor typo fix (Jeff Matson) [#&#8203;62358](https://redirect.github.com/nodejs/node/pull/62358)\n- \\[[`3db35d2c59`](https://redirect.github.com/nodejs/node/commit/3db35d2c59)] - **doc**: add path to vulnerabilities.json mention (Rafael Gonzaga) [#&#8203;62355](https://redirect.github.com/nodejs/node/pull/62355)\n- \\[[`57b105c9d5`](https://redirect.github.com/nodejs/node/commit/57b105c9d5)] - **doc**: deprecate CryptoKey use in node:crypto (Filip Skokan) [#&#8203;62321](https://redirect.github.com/nodejs/node/pull/62321)\n- \\[[`490168c993`](https://redirect.github.com/nodejs/node/commit/490168c993)] - **doc**: fix small environment\\_variables typo (chris) [#&#8203;62279](https://redirect.github.com/nodejs/node/pull/62279)\n- \\[[`0291be584b`](https://redirect.github.com/nodejs/node/commit/0291be584b)] - **doc**: test and test-only targets do not run linter (Xavier Stouder) [#&#8203;62120](https://redirect.github.com/nodejs/node/pull/62120)\n- \\[[`ba0a82a1e1`](https://redirect.github.com/nodejs/node/commit/ba0a82a1e1)] - **doc**: clarify fs.ReadStream and fs.WriteStream are not constructable (Kit Dallege) [#&#8203;62208](https://redirect.github.com/nodejs/node/pull/62208)\n- \\[[`125bdbf504`](https://redirect.github.com/nodejs/node/commit/125bdbf504)] - **doc**: clarify that any truthy value of `shell` is part of DEP0190 (Antoine du Hamel) [#&#8203;62249](https://redirect.github.com/nodejs/node/pull/62249)\n- \\[[`a141ad0aeb`](https://redirect.github.com/nodejs/node/commit/a141ad0aeb)] - **doc**: remove outdated Chrome 66 and ndb references from debugger (Kit Dallege) [#&#8203;62202](https://redirect.github.com/nodejs/node/pull/62202)\n- \\[[`44bde8e573`](https://redirect.github.com/nodejs/node/commit/44bde8e573)] - **doc**: add note (and caveat) for `mock.module` about customization hooks (Jacob Smith) [#&#8203;62075](https://redirect.github.com/nodejs/node/pull/62075)\n- \\[[`8c46a1ca1a`](https://redirect.github.com/nodejs/node/commit/8c46a1ca1a)] - **doc**: copyedit `addons.md` (Antoine du Hamel) [#&#8203;62071](https://redirect.github.com/nodejs/node/pull/62071)\n- \\[[`7f989f02f7`](https://redirect.github.com/nodejs/node/commit/7f989f02f7)] - **doc**: correct `util.convertProcessSignalToExitCode` validation behavior (René) [#&#8203;62134](https://redirect.github.com/nodejs/node/pull/62134)\n- \\[[`a4466ebdac`](https://redirect.github.com/nodejs/node/commit/a4466ebdac)] - **doc**: add efekrskl as triager (Efe) [#&#8203;61876](https://redirect.github.com/nodejs/node/pull/61876)\n- \\[[`db516eca3a`](https://redirect.github.com/nodejs/node/commit/db516eca3a)] - **doc**: fix markdown for `expectFailure` values (Jacob Smith) [#&#8203;62100](https://redirect.github.com/nodejs/node/pull/62100)\n- \\[[`ad97045125`](https://redirect.github.com/nodejs/node/commit/ad97045125)] - **doc**: include url.resolve() in DEP0169 application deprecation (Mike McCready) [#&#8203;62002](https://redirect.github.com/nodejs/node/pull/62002)\n- \\[[`309f37ba42`](https://redirect.github.com/nodejs/node/commit/309f37ba42)] - **doc**: expand SECURITY.md with non-vulnerability examples (Rafael Gonzaga) [#&#8203;61972](https://redirect.github.com/nodejs/node/pull/61972)\n- \\[[`dbb3551b7b`](https://redirect.github.com/nodejs/node/commit/dbb3551b7b)] - **doc**: separate in-types and out-types in SQLite conversion docs (René) [#&#8203;62034](https://redirect.github.com/nodejs/node/pull/62034)\n- \\[[`191c433db8`](https://redirect.github.com/nodejs/node/commit/191c433db8)] - **doc**: fix small logic error in DETECT\\_MODULE\\_SYNTAX (René) [#&#8203;62025](https://redirect.github.com/nodejs/node/pull/62025)\n- \\[[`8511b1c784`](https://redirect.github.com/nodejs/node/commit/8511b1c784)] - **doc**: fix module.stripTypeScriptTypes indentation (René) [#&#8203;61992](https://redirect.github.com/nodejs/node/pull/61992)\n- \\[[`dd1139f52c`](https://redirect.github.com/nodejs/node/commit/dd1139f52c)] - **doc**: update DEP0040 (punycode) to application type deprecation (Mike McCready) [#&#8203;61916](https://redirect.github.com/nodejs/node/pull/61916)\n- \\[[`54009e9c62`](https://redirect.github.com/nodejs/node/commit/54009e9c62)] - **doc**: explicitly mention Slack handle (Rafael Gonzaga) [#&#8203;61986](https://redirect.github.com/nodejs/node/pull/61986)\n- \\[[`78fa1a1a49`](https://redirect.github.com/nodejs/node/commit/78fa1a1a49)] - **doc**: support toolchain Visual Studio 2022 & 2026 + Windows 11 SDK (Mike McCready) [#&#8203;61864](https://redirect.github.com/nodejs/node/pull/61864)\n- \\[[`d8204d3cdb`](https://redirect.github.com/nodejs/node/commit/d8204d3cdb)] - **doc**: rename invalid `function` parameter (René) [#&#8203;61942](https://redirect.github.com/nodejs/node/pull/61942)\n- \\[[`a5a14482fb`](https://redirect.github.com/nodejs/node/commit/a5a14482fb)] - **doc**: clarify status of feature request issues (Antoine du Hamel) [#&#8203;61505](https://redirect.github.com/nodejs/node/pull/61505)\n- \\[[`bd0688feb6`](https://redirect.github.com/nodejs/node/commit/bd0688feb6)] - **doc**: add esm and cjs examples to node:vm (Alfredo González) [#&#8203;61498](https://redirect.github.com/nodejs/node/pull/61498)\n- \\[[`240b512f9f`](https://redirect.github.com/nodejs/node/commit/240b512f9f)] - **doc**: clarify build environment is trusted in threat model (Matteo Collina) [#&#8203;61865](https://redirect.github.com/nodejs/node/pull/61865)\n- \\[[`5dd48e3456`](https://redirect.github.com/nodejs/node/commit/5dd48e3456)] - **doc**: remove incorrect mention of `module` in `typescript.md` (Rob Palmer) [#&#8203;61839](https://redirect.github.com/nodejs/node/pull/61839)\n- \\[[`9502c22055`](https://redirect.github.com/nodejs/node/commit/9502c22055)] - **doc**: simplify addAbortListener example (Chemi Atlow) [#&#8203;61842](https://redirect.github.com/nodejs/node/pull/61842)\n- \\[[`6fec397828`](https://redirect.github.com/nodejs/node/commit/6fec397828)] - **doc**: clean up globals.md (René) [#&#8203;61822](https://redirect.github.com/nodejs/node/pull/61822)\n- \\[[`a810f5ccef`](https://redirect.github.com/nodejs/node/commit/a810f5ccef)] - **doc**: clarify async caveats for `events.once()` (René) [#&#8203;61572](https://redirect.github.com/nodejs/node/pull/61572)\n- \\[[`2bf990bb1a`](https://redirect.github.com/nodejs/node/commit/2bf990bb1a)] - **doc**: update Juan's security steward info (Juan José) [#&#8203;61754](https://redirect.github.com/nodejs/node/pull/61754)\n- \\[[`0312db948d`](https://redirect.github.com/nodejs/node/commit/0312db948d)] - **doc**: fix methods being documented as properties in `process.md` (Antoine du Hamel) [#&#8203;61765](https://redirect.github.com/nodejs/node/pull/61765)\n- \\[[`e558b26e7f`](https://redirect.github.com/nodejs/node/commit/e558b26e7f)] - **doc**: add riscv64 info into platform list (Lu Yahan) [#&#8203;42251](https://redirect.github.com/nodejs/node/pull/42251)\n- \\[[`49254e3dc0`](https://redirect.github.com/nodejs/node/commit/49254e3dc0)] - **doc**: fix dropdown menu being obscured at <600px due to stacking context (Jeff) [#&#8203;61735](https://redirect.github.com/nodejs/node/pull/61735)\n- \\[[`4ff01b5c10`](https://redirect.github.com/nodejs/node/commit/4ff01b5c10)] - **doc**: fix spacing in process message event (Aviv Keller) [#&#8203;61756](https://redirect.github.com/nodejs/node/pull/61756)\n- \\[[`94097a79d6`](https://redirect.github.com/nodejs/node/commit/94097a79d6)] - **doc**: move describe/it aliases section before expectFailure (Luca Raveri) [#&#8203;61567](https://redirect.github.com/nodejs/node/pull/61567)\n- \\[[`b7cd31acbe`](https://redirect.github.com/nodejs/node/commit/b7cd31acbe)] - **doc**: fix broken links of net.md (YuSheng Chen) [#&#8203;61673](https://redirect.github.com/nodejs/node/pull/61673)\n- \\[[`ae5e353fe2`](https://redirect.github.com/nodejs/node/commit/ae5e353fe2)] - **doc**: clean up Windows code snippet in `child_process.md` (reillylm) [#&#8203;61422](https://redirect.github.com/nodejs/node/pull/61422)\n- \\[[`ea9beb6a3c`](https://redirect.github.com/nodejs/node/commit/ea9beb6a3c)] - **doc**: update to Visual Studio 2026 manual install (Mike McCready) [#&#8203;61655](https://redirect.github.com/nodejs/node/pull/61655)\n- \\[[`42057c84e2`](https://redirect.github.com/nodejs/node/commit/42057c84e2)] - **doc,module**: add missing doc for syncHooks.deregister() (Joyee Cheung) [#&#8203;61959](https://redirect.github.com/nodejs/node/pull/61959)\n- \\[[`a035bd5235`](https://redirect.github.com/nodejs/node/commit/a035bd5235)] - **doc,test**: clarify --eval syntax for leading '-' scripts (kovan) [#&#8203;62244](https://redirect.github.com/nodejs/node/pull/62244)\n- \\[[`deb0b78460`](https://redirect.github.com/nodejs/node/commit/deb0b78460)] - **esm**: fix typo in worker loader hook comment (jakecastelli) [#&#8203;62475](https://redirect.github.com/nodejs/node/pull/62475)\n- \\[[`b93bf7dbfc`](https://redirect.github.com/nodejs/node/commit/b93bf7dbfc)] - **esm**: fix source phase identity bug in loadCache eviction (Guy Bedford) [#&#8203;62415](https://redirect.github.com/nodejs/node/pull/62415)\n- \\[[`679d18b57f`](https://redirect.github.com/nodejs/node/commit/679d18b57f)] - **esm**: fix path normalization in `finalizeResolution` (Antoine du Hamel) [#&#8203;62080](https://redirect.github.com/nodejs/node/pull/62080)\n- \\[[`171e9fc268`](https://redirect.github.com/nodejs/node/commit/171e9fc268)] - **esm**: update outdated FIXME comment in translators.js (Karan Mangtani) [#&#8203;61715](https://redirect.github.com/nodejs/node/pull/61715)\n- \\[[`cc19728228`](https://redirect.github.com/nodejs/node/commit/cc19728228)] - **events**: avoid cloning listeners array on every emit (Gürgün Dayıoğlu) [#&#8203;62261](https://redirect.github.com/nodejs/node/pull/62261)\n- \\[[`458c92be52`](https://redirect.github.com/nodejs/node/commit/458c92be52)] - **events**: don't call resume after close (Сковорода Никита Андреевич) [#&#8203;60548](https://redirect.github.com/nodejs/node/pull/60548)\n- \\[[`4691f3e7fb`](https://redirect.github.com/nodejs/node/commit/4691f3e7fb)] - **fs**: fix cpSync to handle non-ASCII characters (Stefan Stojanovic) [#&#8203;61950](https://redirect.github.com/nodejs/node/pull/61950)\n- \\[[`f4a3edc47a`](https://redirect.github.com/nodejs/node/commit/f4a3edc47a)] - **(SEMVER-MINOR)** **fs**: add `throwIfNoEntry` option for fs.stat and fs.promises.stat (Juan José) [#&#8203;61178](https://redirect.github.com/nodejs/node/pull/61178)\n- \\[[`58e4d50cd0`](https://redirect.github.com/nodejs/node/commit/58e4d50cd0)] - **http**: fix use-after-free when freeParser is called during llhttp\\_execute (Gerhard Stöbich) [#&#8203;62095](https://redirect.github.com/nodejs/node/pull/62095)\n- \\[[`0a4ad85ab0`](https://redirect.github.com/nodejs/node/commit/0a4ad85ab0)] - **http**: validate ClientRequest path on set (Matteo Collina) [#&#8203;62030](https://redirect.github.com/nodejs/node/pull/62030)\n- \\[[`f8178ac3e6`](https://redirect.github.com/nodejs/node/commit/f8178ac3e6)] - **http**: validate headers in writeEarlyHints (Richard Clarke) [#&#8203;61897](https://redirect.github.com/nodejs/node/pull/61897)\n- \\[[`899884d0ed`](https://redirect.github.com/nodejs/node/commit/899884d0ed)] - **http**: remove redundant keepAliveTimeoutBuffer assignment (Efe) [#&#8203;61743](https://redirect.github.com/nodejs/node/pull/61743)\n- \\[[`08d2e40694`](https://redirect.github.com/nodejs/node/commit/08d2e40694)] - **http**: attach error handler to socket synchronously in onSocket (RajeshKumar11) [#&#8203;61770](https://redirect.github.com/nodejs/node/pull/61770)\n- \\[[`1c2064c1f8`](https://redirect.github.com/nodejs/node/commit/1c2064c1f8)] - **http**: fix keep-alive socket reuse race in requestOnFinish (Martin Slota) [#&#8203;61710](https://redirect.github.com/nodejs/node/pull/61710)\n- \\[[`38e9c66e0f`](https://redirect.github.com/nodejs/node/commit/38e9c66e0f)] - **http2**: add strictSingleValueFields option to relax header validation (Tim Perry) [#&#8203;59917](https://redirect.github.com/nodejs/node/pull/59917)\n- \\[[`5cdcba17cc`](https://redirect.github.com/nodejs/node/commit/5cdcba17cc)] - **(SEMVER-MINOR)** **http2**: add http1Options for HTTP/1 fallback configuration (Amol Yadav) [#&#8203;61713](https://redirect.github.com/nodejs/node/pull/61713)\n- \\[[`687c0acd00`](https://redirect.github.com/nodejs/node/commit/687c0acd00)] - **http2**: fix FileHandle leak in respondWithFile (sangwook) [#&#8203;61707](https://redirect.github.com/nodejs/node/pull/61707)\n- \\[[`0c8f802ec2`](https://redirect.github.com/nodejs/node/commit/0c8f802ec2)] - **inspector**: add Target.getTargets and extract TargetManager (Kohei) [#&#8203;62487](https://redirect.github.com/nodejs/node/pull/62487)\n- \\[[`7de8a303c1`](https://redirect.github.com/nodejs/node/commit/7de8a303c1)] - **inspector**: unwrap internal/debugger/inspect imports (René) [#&#8203;61974](https://redirect.github.com/nodejs/node/pull/61974)\n- \\[[`59ac10a4fd`](https://redirect.github.com/nodejs/node/commit/59ac10a4fd)] - **lib**: make SubtleCrypto.supports enumerable (Filip Skokan) [#&#8203;62307](https://redirect.github.com/nodejs/node/pull/62307)\n- \\[[`9dc102ba90`](https://redirect.github.com/nodejs/node/commit/9dc102ba90)] - **lib**: prefer primordials in SubtleCrypto (Filip Skokan) [#&#8203;62226](https://redirect.github.com/nodejs/node/pull/62226)\n- \\[[`78a9aa8f32`](https://redirect.github.com/nodejs/node/commit/78a9aa8f32)] - **lib**: fix source map url parse in dynamic imports (Chengzhong Wu) [#&#8203;61990](https://redirect.github.com/nodejs/node/pull/61990)\n- \\[[`16b8cc6643`](https://redirect.github.com/nodejs/node/commit/16b8cc6643)] - **lib**: improve argument handling in Blob constructor (Ms2ger) [#&#8203;61980](https://redirect.github.com/nodejs/node/pull/61980)\n- \\[[`a03b5d39b8`](https://redirect.github.com/nodejs/node/commit/a03b5d39b8)] - **lib**: reduce cycles in esm loader and load it in snapshot (Joyee Cheung) [#&#8203;61769](https://redirect.github.com/nodejs/node/pull/61769)\n- \\[[`1017bf5f86`](https://redirect.github.com/nodejs/node/commit/1017bf5f86)] - **lib**: remove top-level getOptionValue() calls in lib/internal/modules (Joyee Cheung) [#&#8203;61769](https://redirect.github.com/nodejs/node/pull/61769)\n- \\[[`d79984b41b`](https://redirect.github.com/nodejs/node/commit/d79984b41b)] - **lib**: optimize styleText when validateStream is false (Rafael Gonzaga) [#&#8203;61792](https://redirect.github.com/nodejs/node/pull/61792)\n- \\[[`6462b89d10`](https://redirect.github.com/nodejs/node/commit/6462b89d10)] - **meta**: bump actions/download-artifact from 7.0.0 to 8.0.0 (dependabot\\[bot]) [#&#8203;62063](https://redirect.github.com/nodejs/node/pull/62063)\n- \\[[`5bb89916ea`](https://redirect.github.com/nodejs/node/commit/5bb89916ea)] - **meta**: bump actions/upload-artifact from 6.0.0 to 7.0.0 (dependabot\\[bot]) [#&#8203;62062](https://redirect.github.com/nodejs/node/pull/62062)\n- \\[[`b067d74d94`](https://redirect.github.com/nodejs/node/commit/b067d74d94)] - **meta**: bump step-security/harden-runner from 2.14.2 to 2.15.0 (dependabot\\[bot]) [#&#8203;62064](https://redirect.github.com/nodejs/node/pull/62064)\n- \\[[`830e5cd125`](https://redirect.github.com/nodejs/node/commit/830e5cd125)] - **meta**: bump github/codeql-action from 4.32.0 to 4.32.4 (dependabot\\[bot]) [#&#8203;61911](https://redirect.github.com/nodejs/node/pull/61911)\n- \\[[`16c839a3dd`](https://redirect.github.com/nodejs/node/commit/16c839a3dd)] - **meta**: bump step-security/harden-runner from 2.14.1 to 2.14.2 (dependabot\\[bot]) [#&#8203;61909](https://redirect.github.com/nodejs/node/pull/61909)\n- \\[[`498abf661e`](https://redirect.github.com/nodejs/node/commit/498abf661e)] - **meta**: bump actions/stale from 10.1.1 to 10.2.0 (dependabot\\[bot]) [#&#8203;61908](https://redirect.github.com/nodejs/node/pull/61908)\n- \\[[`78ac17f426`](https://redirect.github.com/nodejs/node/commit/78ac17f426)] - **module**: fix coverage of mocked CJS modules imported from ESM (Marco) [#&#8203;62133](https://redirect.github.com/nodejs/node/pull/62133)\n- \\[[`46cfad4138`](https://redirect.github.com/nodejs/node/commit/46cfad4138)] - **module**: run require.resolve through module.registerHooks() (Joyee Cheung) [#&#8203;62028](https://redirect.github.com/nodejs/node/pull/62028)\n- \\[[`8b6be3fe14`](https://redirect.github.com/nodejs/node/commit/8b6be3fe14)] - **module**: mark require(esm) as stable (Joyee Cheung) [#&#8203;60959](https://redirect.github.com/nodejs/node/pull/60959)\n- \\[[`68fbc0c6cc`](https://redirect.github.com/nodejs/node/commit/68fbc0c6cc)] - **module**: mark module compile cache as stable (Joyee Cheung) [#&#8203;60971](https://redirect.github.com/nodejs/node/pull/60971)\n- \\[[`c851e76f8c`](https://redirect.github.com/nodejs/node/commit/c851e76f8c)] - **(SEMVER-MINOR)** **net**: add `setTOS` and `getTOS` to `Socket` (Amol Yadav) [#&#8203;61503](https://redirect.github.com/nodejs/node/pull/61503)\n- \\[[`4c206ecb31`](https://redirect.github.com/nodejs/node/commit/4c206ecb31)] - **quic**: remove CryptoKey support from session keys option (Filip Skokan) [#&#8203;62335](https://redirect.github.com/nodejs/node/pull/62335)\n- \\[[`2f9c085cf5`](https://redirect.github.com/nodejs/node/commit/2f9c085cf5)] - **sqlite**: handle stmt invalidation (Guilherme Araújo) [#&#8203;61877](https://redirect.github.com/nodejs/node/pull/61877)\n- \\[[`6ac4304c87`](https://redirect.github.com/nodejs/node/commit/6ac4304c87)] - **(SEMVER-MINOR)** **sqlite**: add limits property to DatabaseSync (Mert Can Altin) [#&#8203;61298](https://redirect.github.com/nodejs/node/pull/61298)\n- \\[[`aaf9af1672`](https://redirect.github.com/nodejs/node/commit/aaf9af1672)] - **sqlite**: mark as release candidate (Matteo Collina) [#&#8203;61262](https://redirect.github.com/nodejs/node/pull/61262)\n- \\[[`7d67e5d693`](https://redirect.github.com/nodejs/node/commit/7d67e5d693)] - **src**: convert context\\_frame field in AsyncWrap to internal field (Anna Henningsen) [#&#8203;62103](https://redirect.github.com/nodejs/node/pull/62103)\n- \\[[`d8ea1aaa8a`](https://redirect.github.com/nodejs/node/commit/d8ea1aaa8a)] - **src**: make AsyncWrap subclass internal field counts explicit (Anna Henningsen) [#&#8203;62103](https://redirect.github.com/nodejs/node/pull/62103)\n- \\[[`1dbf3bedbe`](https://redirect.github.com/nodejs/node/commit/1dbf3bedbe)] - **src**: improve EC JWK import performance (Filip Skokan) [#&#8203;62396](https://redirect.github.com/nodejs/node/pull/62396)\n- \\[[`cd84af747b`](https://redirect.github.com/nodejs/node/commit/cd84af747b)] - **src**: handle null backing store in ArrayBufferViewContents::Read (Mert Can Altin) [#&#8203;62343](https://redirect.github.com/nodejs/node/pull/62343)\n- \\[[`4f553cdc01`](https://redirect.github.com/nodejs/node/commit/4f553cdc01)] - **src**: enable compilation/linking with OpenSSL 4.0 (Filip Skokan) [#&#8203;62410](https://redirect.github.com/nodejs/node/pull/62410)\n- \\[[`70f8057258`](https://redirect.github.com/nodejs/node/commit/70f8057258)] - **src**: use stack allocation in indexOf latin1 path (Mert Can Altin) [#&#8203;62268](https://redirect.github.com/nodejs/node/pull/62268)\n- \\[[`d788467b6a`](https://redirect.github.com/nodejs/node/commit/d788467b6a)] - **src**: expose async context frame debugging helper to JS (Anna Henningsen) [#&#8203;62103](https://redirect.github.com/nodejs/node/pull/62103)\n- \\[[`4213f893ec`](https://redirect.github.com/nodejs/node/commit/4213f893ec)] - **src**: release context frame in AsyncWrap::EmitDestroy (Gerhard Stöbich) [#&#8203;61995](https://redirect.github.com/nodejs/node/pull/61995)\n- \\[[`79fb8cbcf5`](https://redirect.github.com/nodejs/node/commit/79fb8cbcf5)] - **src**: use validate\\_ascii\\_with\\_errors instead of validate\\_ascii (Сковорода Никита Андреевич) [#&#8203;61122](https://redirect.github.com/nodejs/node/pull/61122)\n- \\[[`2df328d59e`](https://redirect.github.com/nodejs/node/commit/2df328d59e)] - **src**: fix flags argument offset in JSUdpWrap (Weixie Cui) [#&#8203;61948](https://redirect.github.com/nodejs/node/pull/61948)\n- \\[[`eb77a7a297`](https://redirect.github.com/nodejs/node/commit/eb77a7a297)] - **(SEMVER-MINOR)** **src**: add C++ support for diagnostics channels (RafaelGSS) [#&#8203;61869](https://redirect.github.com/nodejs/node/pull/61869)\n- \\[[`6cda3d30c0`](https://redirect.github.com/nodejs/node/commit/6cda3d30c0)] - **src**: remove unnecessary `c_str()` conversions in diagnostic messages (Anna Henningsen) [#&#8203;61786](https://redirect.github.com/nodejs/node/pull/61786)\n- \\[[`26c6045363`](https://redirect.github.com/nodejs/node/commit/26c6045363)] - **src**: use bool literals in TraceEnvVarOptions (Tobias Nießen) [#&#8203;61425](https://redirect.github.com/nodejs/node/pull/61425)\n- \\[[`3c8f700fd7`](https://redirect.github.com/nodejs/node/commit/3c8f700fd7)] - **src**: track allocations made by zstd streams (Anna Henningsen) [#&#8203;61717](https://redirect.github.com/nodejs/node/pull/61717)\n- \\[[`94dbb36d4d`](https://redirect.github.com/nodejs/node/commit/94dbb36d4d)] - **src**: do not store compression methods on Brotli classes (Anna Henningsen) [#&#8203;61717](https://redirect.github.com/nodejs/node/pull/61717)\n- \\[[`bef661f182`](https://redirect.github.com/nodejs/node/commit/bef661f182)] - **src**: extract zlib allocation tracking into its own class (Anna Henningsen) [#&#8203;61717](https://redirect.github.com/nodejs/node/pull/61717)\n- \\[[`e8079a8297`](https://redirect.github.com/nodejs/node/commit/e8079a8297)] - **src**: release memory for zstd contexts in `Close()` (Anna Henningsen) [#&#8203;61717](https://redirect.github.com/nodejs/node/pull/61717)\n- \\[[`6e1197a3cc`](https://redirect.github.com/nodejs/node/commit/6e1197a3cc)] - **src**: add more checks and clarify docs for external references (Joyee Cheung) [#&#8203;61719](https://redirect.github.com/nodejs/node/pull/61719)\n- \\[[`c28a22c4be`](https://redirect.github.com/nodejs/node/commit/c28a22c4be)] - **src**: fix cjs\\_lexer external reference registration (Joyee Cheung) [#&#8203;61718](https://redirect.github.com/nodejs/node/pull/61718)\n- \\[[`9e2c5fd7c9`](https://redirect.github.com/nodejs/node/commit/9e2c5fd7c9)] - **src**: simply uint32 to string as it must not fail (Chengzhong Wu) [#&#8203;60846](https://redirect.github.com/nodejs/node/pull/60846)\n- \\[[`df435d32b8`](https://redirect.github.com/nodejs/node/commit/df435d32b8)] - **src**: build v8 tick processor as built-in source text modules (Joyee Cheung) [#&#8203;60518](https://redirect.github.com/nodejs/node/pull/60518)\n- \\[[`2cb3573735`](https://redirect.github.com/nodejs/node/commit/2cb3573735)] - **src,sqlite**: fix filterFunc dangling reference (Edy Silva) [#&#8203;62281](https://redirect.github.com/nodejs/node/pull/62281)\n- \\[[`c44f53b544`](https://redirect.github.com/nodejs/node/commit/c44f53b544)] - **stream**: preserve error over AbortError in pipeline (Marco) [#&#8203;62113](https://redirect.github.com/nodejs/node/pull/62113)\n- \\[[`dc541370b4`](https://redirect.github.com/nodejs/node/commit/dc541370b4)] - **stream**: replace bind with arrow function for onwrite callback (Ali Hassan) [#&#8203;62087](https://redirect.github.com/nodejs/node/pull/62087)\n- \\[[`f6cdfbfaa7`](https://redirect.github.com/nodejs/node/commit/f6cdfbfaa7)] - **stream**: optimize webstreams pipeTo (Mattias Buelens) [#&#8203;62079](https://redirect.github.com/nodejs/node/pull/62079)\n- \\[[`fcf2a9f788`](https://redirect.github.com/nodejs/node/commit/fcf2a9f788)] - **stream**: fix brotli error handling in web compression streams (Filip Skokan) [#&#8203;62107](https://redirect.github.com/nodejs/node/pull/62107)\n- \\[[`cdec579c6b`](https://redirect.github.com/nodejs/node/commit/cdec579c6b)] - **stream**: improve Web Compression spec compliance (Filip Skokan) [#&#8203;62107](https://redirect.github.com/nodejs/node/pull/62107)\n- \\[[`dbe5898379`](https://redirect.github.com/nodejs/node/commit/dbe5898379)] - **stream**: fix UTF-8 character corruption in fast-utf8-stream (Matteo Collina) [#&#8203;61745](https://redirect.github.com/nodejs/node/pull/61745)\n- \\[[`531e62cd74`](https://redirect.github.com/nodejs/node/commit/531e62cd74)] - **stream**: fix TransformStream race on cancel with pending write (Marco) [#&#8203;62040](https://redirect.github.com/nodejs/node/pull/62040)\n- \\[[`a3751f2249`](https://redirect.github.com/nodejs/node/commit/a3751f2249)] - **stream**: accept ArrayBuffer in CompressionStream and DecompressionStream (조수민) [#&#8203;61913](https://redirect.github.com/nodejs/node/pull/61913)\n- \\[[`65aa8f68d0`](https://redirect.github.com/nodejs/node/commit/65aa8f68d0)] - **stream**: fix pipeTo to defer writes per WHATWG spec (Matteo Collina) [#&#8203;61800](https://redirect.github.com/nodejs/node/pull/61800)\n- \\[[`15f32b4935`](https://redirect.github.com/nodejs/node/commit/15f32b4935)] - **stream**: fix decoded fromList chunk boundary check (Thomas Watson) [#&#8203;61884](https://redirect.github.com/nodejs/node/pull/61884)\n- \\[[`569767e52e`](https://redirect.github.com/nodejs/node/commit/569767e52e)] - **stream**: add fast paths for webstreams read and pipeTo (Matteo Collina) [#&#8203;61807](https://redirect.github.com/nodejs/node/pull/61807)\n- \\[[`6834ca13bb`](https://redirect.github.com/nodejs/node/commit/6834ca13bb)] - **(SEMVER-MINOR)** **stream**: rename `Duplex.toWeb()` type option to `readableType` (René) [#&#8203;61632](https://redirect.github.com/nodejs/node/pull/61632)\n- \\[[`5ed5474437`](https://redirect.github.com/nodejs/node/commit/5ed5474437)] - **test**: update WPT for WebCryptoAPI to [`2cb332d`](https://redirect.github.com/nodejs/node/commit/2cb332d710) (Node.js GitHub Bot) [#&#8203;62483](https://redirect.github.com/nodejs/node/pull/62483)\n- \\[[`3c9c0f8577`](https://redirect.github.com/nodejs/node/commit/3c9c0f8577)] - **test**: fix test-buffer-zero-fill-cli to be effective (Сковорода Никита Андреевич) [#&#8203;60623](https://redirect.github.com/nodejs/node/pull/60623)\n- \\[[`19a52a1abe`](https://redirect.github.com/nodejs/node/commit/19a52a1abe)] - **test**: update WPT for url to [`fc3e651`](https://redirect.github.com/nodejs/node/commit/fc3e651593) (Node.js GitHub Bot) [#&#8203;62379](https://redirect.github.com/nodejs/node/pull/62379)\n- \\[[`111ba9bd5b`](https://redirect.github.com/nodejs/node/commit/111ba9bd5b)] - **test**: wait for reattach before initial break on restart (Yuya Inoue) [#&#8203;62471](https://redirect.github.com/nodejs/node/pull/62471)\n- \\[[`0897c6cc08`](https://redirect.github.com/nodejs/node/commit/0897c6cc08)] - **test**: disable flaky WPT Blob test on AIX (James M Snell) [#&#8203;62470](https://redirect.github.com/nodejs/node/pull/62470)\n- \\[[`1c3d93bfab`](https://redirect.github.com/nodejs/node/commit/1c3d93bfab)] - **test**: avoid flaky run wait in debugger restart test (Yuya Inoue) [#&#8203;62112](https://redirect.github.com/nodejs/node/pull/62112)\n- \\[[`83416a640a`](https://redirect.github.com/nodejs/node/commit/83416a640a)] - **test**: skip test-cluster-dgram-reuse on AIX 7.3 (Stewart X Addison) [#&#8203;62238](https://redirect.github.com/nodejs/node/pull/62238)\n- \\[[`af8d0922dd`](https://redirect.github.com/nodejs/node/commit/af8d0922dd)] - **test**: add WebCrypto Promise.prototype.then pollution regression tests (Filip Skokan) [#&#8203;62226](https://redirect.github.com/nodejs/node/pull/62226)\n- \\[[`fc9a60ec74`](https://redirect.github.com/nodejs/node/commit/fc9a60ec74)] - **test**: update WPT for WebCryptoAPI to [`6a1c545`](https://redirect.github.com/nodejs/node/commit/6a1c545d77) (Node.js GitHub Bot) [#&#8203;62187](https://redirect.github.com/nodejs/node/pull/62187)\n- \\[[`12ba2d74fe`](https://redirect.github.com/nodejs/node/commit/12ba2d74fe)] - **test**: update WPT for url to [`c928b19`](https://redirect.github.com/nodejs/node/commit/c928b19ab0) (Node.js GitHub Bot) [#&#8203;62148](https://redirect.github.com/nodejs/node/pull/62148)\n- \\[[`4e15e5b647`](https://redirect.github.com/nodejs/node/commit/4e15e5b647)] - **test**: update WPT for WebCryptoAPI to [`c9e9558`](https://redirect.github.com/nodejs/node/commit/c9e955840a) (Node.js GitHub Bot) [#&#8203;62147](https://redirect.github.com/nodejs/node/pull/62147)\n- \\[[`dc66a05558`](https://redirect.github.com/nodejs/node/commit/dc66a05558)] - **test**: improve WPT report runner (Filip Skokan) [#&#8203;62107](https://redirect.github.com/nodejs/node/pull/62107)\n- \\[[`9536e5621b`](https://redirect.github.com/nodejs/node/commit/9536e5621b)] - **test**: update WPT compression to [`ae05f5c`](https://redirect.github.com/nodejs/node/commit/ae05f5cb53) (Filip Skokan) [#&#8203;62107](https://redirect.github.com/nodejs/node/pull/62107)\n- \\[[`fb1c0bda0a`](https://redirect.github.com/nodejs/node/commit/fb1c0bda0a)] - **test**: update WPT for WebCryptoAPI to [`42e4732`](https://redirect.github.com/nodejs/node/commit/42e47329fd) (Node.js GitHub Bot) [#&#8203;62048](https://redirect.github.com/nodejs/node/pull/62048)\n- \\[[`d886f27485`](https://redirect.github.com/nodejs/node/commit/d886f27485)] - **test**: fix skipping behavior for `test-runner-run-files-undefined` (Antoine du Hamel) [#&#8203;62026](https://redirect.github.com/nodejs/node/pull/62026)\n- \\[[`f79df03e0b`](https://redirect.github.com/nodejs/node/commit/f79df03e0b)] - **test**: remove unnecessary `process.exit` calls from test files (Antoine du Hamel) [#&#8203;62020](https://redirect.github.com/nodejs/node/pull/62020)\n- \\[[`1319295467`](https://redirect.github.com/nodejs/node/commit/1319295467)] - **test**: skip `test-url` on `--shared-ada` builds (Antoine du Hamel) [#&#8203;62019](https://redirect.github.com/nodejs/node/pull/62019)\n- \\[[`2ea06727c6`](https://redirect.github.com/nodejs/node/commit/2ea06727c6)] - **test**: skip strace test with shared openssl (Richard Lau) [#&#8203;61987](https://redirect.github.com/nodejs/node/pull/61987)\n- \\[[`c0680d5df7`](https://redirect.github.com/nodejs/node/commit/c0680d5df7)] - **test**: avoid flaky debugger restart waits (Yuya Inoue) [#&#8203;61773](https://redirect.github.com/nodejs/node/pull/61773)\n- \\[[`22b748ef72`](https://redirect.github.com/nodejs/node/commit/22b748ef72)] - **test**: fix typos in test files (Daijiro Wachi) [#&#8203;61408](https://redirect.github.com/nodejs/node/pull/61408)\n- \\[[`a20bf9a84d`](https://redirect.github.com/nodejs/node/commit/a20bf9a84d)] - **test**: allow filtering async internal frames in assertSnapshot (Joyee Cheung) [#&#8203;61769](https://redirect.github.com/nodejs/node/pull/61769)\n- \\[[`ec2913f036`](https://redirect.github.com/nodejs/node/commit/ec2913f036)] - **test**: unify assertSnapshot stacktrace transform (Chengzhong Wu) [#&#8203;61665](https://redirect.github.com/nodejs/node/pull/61665)\n- \\[[`460f41233d`](https://redirect.github.com/nodejs/node/commit/460f41233d)] - **test**: check stability block position in API markdown (René) [#&#8203;58590](https://redirect.github.com/nodejs/node/pull/58590)\n- \\[[`9ad02065d5`](https://redirect.github.com/nodejs/node/commit/9ad02065d5)] - **test**: adapt buffer test for v8 sandbox (Shelley Vohr) [#&#8203;61772](https://redirect.github.com/nodejs/node/pull/61772)\n- \\[[`5cf001736e`](https://redirect.github.com/nodejs/node/commit/5cf001736e)] - **test**: update FileAPI tests from WPT (Ms2ger) [#&#8203;61750](https://redirect.github.com/nodejs/node/pull/61750)\n- \\[[`84c7a23223`](https://redirect.github.com/nodejs/node/commit/84c7a23223)] - **test**: update WPT for WebCryptoAPI to [`7cbe7e8`](https://redirect.github.com/nodejs/node/commit/7cbe7e8ed9) (Node.js GitHub Bot) [#&#8203;61729](https://redirect.github.com/nodejs/node/pull/61729)\n- \\[[`276a32fd10`](https://redirect.github.com/nodejs/node/commit/276a32fd10)] - **test**: update WPT for url to [`efb889e`](https://redirect.github.com/nodejs/node/commit/efb889eb4c) (Node.js GitHub Bot) [#&#8203;61728](https://redirect.github.com/nodejs/node/pull/61728)\n- \\[[`f5f21d36a6`](https://redirect.github.com/nodejs/node/commit/f5f21d36a6)] - **test\\_runner**: add exports option for module mocks (sangwook) [#&#8203;61727](https://redirect.github.com/nodejs/node/pull/61727)\n- \\[[`bfc8a12977`](https://redirect.github.com/nodejs/node/commit/bfc8a12977)] - **test\\_runner**: make it compatible with fake timers (Matteo Collina) [#&#8203;59272](https://redirect.github.com/nodejs/node/pull/59272)\n- \\[[`e0cde40e1d`](https://redirect.github.com/nodejs/node/commit/e0cde40e1d)] - **test\\_runner**: set non-zero exit code when suite errors occur (Edy Silva) [#&#8203;62282](https://redirect.github.com/nodejs/node/pull/62282)\n- \\[[`d74efd6834`](https://redirect.github.com/nodejs/node/commit/d74efd6834)] - **test\\_runner**: run afterEach on runtime skip (Igor Shevelenkov) [#&#8203;61525](https://redirect.github.com/nodejs/node/pull/61525)\n- \\[[`8287ca749e`](https://redirect.github.com/nodejs/node/commit/8287ca749e)] - **test\\_runner**: expose expectFailure message (sangwook) [#&#8203;61563](https://redirect.github.com/nodejs/node/pull/61563)\n- \\[[`1f2025fd1e`](https://redirect.github.com/nodejs/node/commit/1f2025fd1e)] - **(SEMVER-MINOR)** **test\\_runner**: expose worker ID for concurrent test execution (Ali Hassan) [#&#8203;61394](https://redirect.github.com/nodejs/node/pull/61394)\n- \\[[`b1199c7bb4`](https://redirect.github.com/nodejs/node/commit/b1199c7bb4)] - **test\\_runner**: replace native methods with primordials (Ayoub Mabrouk) [#&#8203;61219](https://redirect.github.com/nodejs/node/pull/61219)\n- \\[[`1ca20fc33d`](https://redirect.github.com/nodejs/node/commit/1ca20fc33d)] - **(SEMVER-MINOR)** **test\\_runner**: show interrupted test on SIGINT (Matteo Collina) [#&#8203;61676](https://redirect.github.com/nodejs/node/pull/61676)\n- \\[[`207ba4f89f`](https://redirect.github.com/nodejs/node/commit/207ba4f89f)] - **test\\_runner**: fix suite rerun (Moshe Atlow) [#&#8203;61775](https://redirect.github.com/nodejs/node/pull/61775)\n- \\[[`9927335c11`](https://redirect.github.com/nodejs/node/commit/9927335c11)] - **tls**: forward keepAlive, keepAliveInitialDelay, noDelay to socket (Sergey Zelenov) [#&#8203;62004](https://redirect.github.com/nodejs/node/pull/62004)\n- \\[[`a1c3c901c0`](https://redirect.github.com/nodejs/node/commit/a1c3c901c0)] - **tools**: bump picomatch from 4.0.3 to 4.0.4 in /tools/eslint (dependabot\\[bot]) [#&#8203;62439](https://redirect.github.com/nodejs/node/pull/62439)\n- \\[[`1c6f5ed7c2`](https://redirect.github.com/nodejs/node/commit/1c6f5ed7c2)] - **tools**: adopt the `--check-for-duplicates` NCU flag (Antoine du Hamel) [#&#8203;62478](https://redirect.github.com/nodejs/node/pull/62478)\n- \\[[`b53377e8fe`](https://redirect.github.com/nodejs/node/commit/b53377e8fe)] - **tools**: bump flatted from 3.4.1 to 3.4.2 in /tools/eslint (dependabot\\[bot]) [#&#8203;62375](https://redirect.github.com/nodejs/node/pull/62375)\n- \\[[`f102e79b80`](https://redirect.github.com/nodejs/node/commit/f102e79b80)] - **tools**: bump eslint deps (Huáng Jùnliàng) [#&#8203;62356](https://redirect.github.com/nodejs/node/pull/62356)\n- \\[[`f5d74f8216`](https://redirect.github.com/nodejs/node/commit/f5d74f8216)] - **tools**: add eslint-plugin-regexp (Huáng Jùnliàng) [#&#8203;62093](https://redirect.github.com/nodejs/node/pull/62093)\n- \\[[`bc5b9a04ad`](https://redirect.github.com/nodejs/node/commit/bc5b9a04ad)] - **tools**: bump flatted from 3.3.3 to 3.4.1 in /tools/eslint (dependabot\\[bot]) [#&#8203;62255](https://\n\n> ✂ **Note**\n> \n> PR body was truncated to here.\n\n\n</details>\n\n---\n\n### Configuration\n\n📅 **Schedule**: (UTC)\n\n- Branch creation\n  - At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule defined)\n\n🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.\n\n♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/elizaOS/eliza).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->\n",
      "repository": "elizaos/eliza",
      "createdAt": "2026-05-02T12:01:03Z",
      "mergedAt": "2026-05-02T12:30:19Z",
      "additions": 1,
      "deletions": 1
    },
    {
      "id": "PR_kwDOMT5cIs7Xoo5W",
      "title": "fix(deps): update dependency viem to v2.48.8",
      "author": "renovate",
      "number": 7237,
      "body": "This PR contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n| [viem](https://viem.sh) ([source](https://redirect.github.com/wevm/viem)) | [`2.46.0` → `2.48.8`](https://renovatebot.com/diffs/npm/viem/2.46.0/2.48.8) | ![age](https://developer.mend.io/api/mc/badges/age/npm/viem/2.48.8?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/viem/2.46.0/2.48.8?slim=true) |\n\n---\n\n> [!WARNING]\n> Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/79) for more information.\n\n---\n\n### Release Notes\n\n<details>\n<summary>wevm/viem (viem)</summary>\n\n### [`v2.48.8`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.8)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.7...viem@2.48.8)\n\n##### Patch Changes\n\n- [#&#8203;4573](https://redirect.github.com/wevm/viem/pull/4573) [`6df91c4bd23bcc83b82b2c058e685fc85d18f98f`](https://redirect.github.com/wevm/viem/commit/6df91c4bd23bcc83b82b2c058e685fc85d18f98f) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added `capabilities` to `TransactionRequestTempo` and forwarded it through `formatTransactionRequest`.\n\n### [`v2.48.7`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.7)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.6...viem@2.48.7)\n\n##### Patch Changes\n\n- [#&#8203;4567](https://redirect.github.com/wevm/viem/pull/4567) [`ef3f4334f81bffc40bc2666103d3f2210f6da004`](https://redirect.github.com/wevm/viem/commit/ef3f4334f81bffc40bc2666103d3f2210f6da004) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Preserved `keyType`, `keyId`, and `keyData` from the input request when no account is present in `formatTransactionRequest`.\n\n### [`v2.48.6`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.6)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.4...viem@2.48.6)\n\n##### Patch Changes\n\n- [#&#8203;4564](https://redirect.github.com/wevm/viem/pull/4564) [`d55c4a5a74112d594e306b7ed7a714d5b17a0d43`](https://redirect.github.com/wevm/viem/commit/d55c4a5a74112d594e306b7ed7a714d5b17a0d43) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Stripped basic-auth credentials (`user:pass@`) from URLs surfaced in\n  error meta-messages (`HttpRequestError`, `WebSocketRequestError`,\n  `RpcRequestError`, `TimeoutError`).\n\n### [`v2.48.4`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.4)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.3...viem@2.48.4)\n\n##### Patch Changes\n\n- [#&#8203;4532](https://redirect.github.com/wevm/viem/pull/4532) [`cb3206e1039b21e45e4ed17898aa1ff561cdecb4`](https://redirect.github.com/wevm/viem/commit/cb3206e1039b21e45e4ed17898aa1ff561cdecb4) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - viem/tempo: Added virtual address actions for the TIP-1022 Address Registry precompile: `virtualAddress.getMasterAddress`, `virtualAddress.resolve`, `virtualAddress.registerMaster`, `virtualAddress.registerMasterSync`. Re-exported `VirtualAddress` and `VirtualMaster` from `ox/tempo`.\n\n### [`v2.48.3`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.3)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.2...viem@2.48.3)\n\n##### Patch Changes\n\n- [#&#8203;4537](https://redirect.github.com/wevm/viem/pull/4537) [`bc4be026420daba9c682412ceb5840526ae7fdd1`](https://redirect.github.com/wevm/viem/commit/bc4be026420daba9c682412ceb5840526ae7fdd1) Thanks [@&#8203;tmm](https://redirect.github.com/tmm)! - Re-exported `Bytes`, `PublicKey`, and `Secp256k1` from `viem/tempo`.\n\n### [`v2.48.2`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.2)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.1...viem@2.48.2)\n\n##### Patch Changes\n\n- [#&#8203;4526](https://redirect.github.com/wevm/viem/pull/4526) [`28fcb0d487ecc525d687201b4eb47136ace7f7b9`](https://redirect.github.com/wevm/viem/commit/28fcb0d487ecc525d687201b4eb47136ace7f7b9) Thanks [@&#8203;mk0walsk](https://redirect.github.com/mk0walsk)! - Added OP Stack chain config to Zircuit.\n\n- [#&#8203;4520](https://redirect.github.com/wevm/viem/pull/4520) [`3e88a77f8eb92fa1ce4410ad14bdbab8f04cce4b`](https://redirect.github.com/wevm/viem/commit/3e88a77f8eb92fa1ce4410ad14bdbab8f04cce4b) Thanks [@&#8203;pxrl](https://redirect.github.com/pxrl)! - Added Tron block time\n\n- [`67d979c678c4835ace58c00e43eaf2291cd5764b`](https://redirect.github.com/wevm/viem/commit/67d979c678c4835ace58c00e43eaf2291cd5764b) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed `prepareTransactionRequest` to preserve `nonce: 0` instead of dropping it.\n\n- [#&#8203;4455](https://redirect.github.com/wevm/viem/pull/4455) [`c0c09a6adf8cafc75f3ace8b892e57f41538baa7`](https://redirect.github.com/wevm/viem/commit/c0c09a6adf8cafc75f3ace8b892e57f41538baa7) Thanks [@&#8203;nikicat](https://redirect.github.com/nikicat)! - Fixed `LogTopic` type to accept readonly arrays.\n\n- [`59b69da17293f626650f211f0129b7ccfdaf957d`](https://redirect.github.com/wevm/viem/commit/59b69da17293f626650f211f0129b7ccfdaf957d) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Added `resolveAccessKey` to support alternative access key formats (`{ address, type }`, `{ publicKey, type }`) in addition to `{ accessKeyAddress, keyType }` for `signKeyAuthorization` and access key actions.\n\n- [#&#8203;4428](https://redirect.github.com/wevm/viem/pull/4428) [`30ac0cf8517a013d9869cf2a9c2a652c80abaf46`](https://redirect.github.com/wevm/viem/commit/30ac0cf8517a013d9869cf2a9c2a652c80abaf46) Thanks [@&#8203;hashcashier](https://redirect.github.com/hashcashier)! - Replaced manual `extraData` decoding with `l2SequenceNumber()` contract call in `getGames`.\n\n### [`v2.48.1`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.1)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.48.0...viem@2.48.1)\n\n##### Patch Changes\n\n- [`099684399e5d4807de02e97f4902e3c0e56ee65c`](https://redirect.github.com/wevm/viem/commit/099684399e5d4807de02e97f4902e3c0e56ee65c) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed `feePayerSignature` being dropped in Tempo's `formatTransactionRequest`.\n\n- [#&#8203;4525](https://redirect.github.com/wevm/viem/pull/4525) [`64556ad0973ea7b9926ed46f23ed9f1689b7047f`](https://redirect.github.com/wevm/viem/commit/64556ad0973ea7b9926ed46f23ed9f1689b7047f) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed Tempo formatter to forward `feePayer: false` in transaction requests.\n\n- [#&#8203;4516](https://redirect.github.com/wevm/viem/pull/4516) [`336b748469483a622153c10bf7bf9110a3fb9b72`](https://redirect.github.com/wevm/viem/commit/336b748469483a622153c10bf7bf9110a3fb9b72) Thanks [@&#8203;0xtomm](https://redirect.github.com/0xtomm)! - Added missing `testnet: false` for testnet / devnets.\n\n- [#&#8203;4517](https://redirect.github.com/wevm/viem/pull/4517) [`25cc59c6eb235770b1a843b99bef606d2f1d7206`](https://redirect.github.com/wevm/viem/commit/25cc59c6eb235770b1a843b99bef606d2f1d7206) Thanks [@&#8203;0xtomm](https://redirect.github.com/0xtomm)! - Fixed native currencies on chains.\n\n- [#&#8203;4518](https://redirect.github.com/wevm/viem/pull/4518) [`eb655cc7e04e08c7008b0a19f69b8b7e4d3c95d3`](https://redirect.github.com/wevm/viem/commit/eb655cc7e04e08c7008b0a19f69b8b7e4d3c95d3) Thanks [@&#8203;RekCuy63](https://redirect.github.com/RekCuy63)! - Preserved explicit `nonce` in `fillTransaction`.\n\n### [`v2.48.0`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.48.0)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.19...viem@2.48.0)\n\n##### Minor Changes\n\n- [#&#8203;4510](https://redirect.github.com/wevm/viem/pull/4510) [`23fbf03f915acd046087d25f859a90c51a44d030`](https://redirect.github.com/wevm/viem/commit/23fbf03f915acd046087d25f859a90c51a44d030) Thanks [@&#8203;Zygimantass](https://redirect.github.com/Zygimantass)! - Added Tempo zones support\n\n### [`v2.47.19`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.19)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.18...viem@2.47.19)\n\n##### Patch Changes\n\n- [#&#8203;4513](https://redirect.github.com/wevm/viem/pull/4513) [`dd2452464f114361473423a6ce4da045a5a435a4`](https://redirect.github.com/wevm/viem/commit/dd2452464f114361473423a6ce4da045a5a435a4) Thanks [@&#8203;decofe](https://redirect.github.com/decofe)! - Updated Tempo RPC URLs.\n\n### [`v2.47.18`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.18)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.17...viem@2.47.18)\n\n##### Patch Changes\n\n- [#&#8203;4499](https://redirect.github.com/wevm/viem/pull/4499) [`24a1544c8a26fbf93f8029078ca310dba4df5b45`](https://redirect.github.com/wevm/viem/commit/24a1544c8a26fbf93f8029078ca310dba4df5b45) Thanks [@&#8203;deodad](https://redirect.github.com/deodad)! - Added `withRelay` to `viem/tempo` as the primary relay transport, and deprecated `withFeePayer` in favor of it.\n\n- [`2c4239dc07737ffc6631677324828bde6a17b9f7`](https://redirect.github.com/wevm/viem/commit/2c4239dc07737ffc6631677324828bde6a17b9f7) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added combined `abis` export to `Abis` in `viem/tempo` that concatenates all Tempo precompile ABIs into a single array.\n\n- [`2c4239dc07737ffc6631677324828bde6a17b9f7`](https://redirect.github.com/wevm/viem/commit/2c4239dc07737ffc6631677324828bde6a17b9f7) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added `error` capability to `FillTransactionCapabilities` in `viem/tempo` for structured execution error reporting from the relay.\n\n- [#&#8203;4492](https://redirect.github.com/wevm/viem/pull/4492) [`7b95669c23f86885bdd059f17d41f93c846b8dd6`](https://redirect.github.com/wevm/viem/commit/7b95669c23f86885bdd059f17d41f93c846b8dd6) Thanks [@&#8203;Dhruv-2003](https://redirect.github.com/Dhruv-2003)! - Fixed `getTimeToNextGame` crash when dispute game factory has zero or one games.\n\n- [#&#8203;4497](https://redirect.github.com/wevm/viem/pull/4497) [`0a465ce232e1f1a239d7a45bac946ae9405f3eee`](https://redirect.github.com/wevm/viem/commit/0a465ce232e1f1a239d7a45bac946ae9405f3eee) Thanks [@&#8203;deodad](https://redirect.github.com/deodad)! - Updated `withFeePayer` transports to forward `eth_fillTransaction` requests to the fee payer transport only when `feePayer: true` is requested.\n\n### [`v2.47.17`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.17)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.16...viem@2.47.17)\n\n##### Patch Changes\n\n- [`0b4bde619e71eefa206381e1be43b02ff4b1305b`](https://redirect.github.com/wevm/viem/commit/0b4bde619e71eefa206381e1be43b02ff4b1305b) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Fixed `prepareTransactionRequest` dropping `feeToken` from `eth_fillTransaction` response.\n\n- [`0b4bde619e71eefa206381e1be43b02ff4b1305b`](https://redirect.github.com/wevm/viem/commit/0b4bde619e71eefa206381e1be43b02ff4b1305b) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Fixed `Account.signTransaction` computing wrong presign hash when `feePayerSignature` is present by normalizing it to `null` before hashing.\n\n- [`0b4bde619e71eefa206381e1be43b02ff4b1305b`](https://redirect.github.com/wevm/viem/commit/0b4bde619e71eefa206381e1be43b02ff4b1305b) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Fixed `serializeTempo` collapsing `feePayerSignature: null` (presign marker) to `undefined`, causing the `0x00` fee-payer marker to be omitted from serialization.\n\n### [`v2.47.16`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.16)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.15...viem@2.47.16)\n\n##### Patch Changes\n\n- [`d4754544554200a01d226464ec6bded3eb44c88f`](https://redirect.github.com/wevm/viem/commit/d4754544554200a01d226464ec6bded3eb44c88f) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed types.\n\n### [`v2.47.15`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.15)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.14...viem@2.47.15)\n\n##### Patch Changes\n\n- [`c1893fa232bd0f4fe747167cf4ea44a9a7cf05be`](https://redirect.github.com/wevm/viem/commit/c1893fa232bd0f4fe747167cf4ea44a9a7cf05be) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Added EIP-5792 `capabilities` to `fillTransaction` return type.\n\n### [`v2.47.14`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.14)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.12...viem@2.47.14)\n\n##### Patch Changes\n\n- [`d916060143305c4d321d30fd29b061069427d2a3`](https://redirect.github.com/wevm/viem/commit/d916060143305c4d321d30fd29b061069427d2a3) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed `formatTransactionRequest` to include `from` field from account address.\n\n- [`d916060143305c4d321d30fd29b061069427d2a3`](https://redirect.github.com/wevm/viem/commit/d916060143305c4d321d30fd29b061069427d2a3) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed `fillTransaction` to skip fee multiplier when `feePayerSignature` is present.\n\n- [`d916060143305c4d321d30fd29b061069427d2a3`](https://redirect.github.com/wevm/viem/commit/d916060143305c4d321d30fd29b061069427d2a3) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Added `meta` property to `fillTransaction` return type.\n\n- [`d916060143305c4d321d30fd29b061069427d2a3`](https://redirect.github.com/wevm/viem/commit/d916060143305c4d321d30fd29b061069427d2a3) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed `simulateBlocks` and `simulateCalls` `tokenMetadata` return type.\n\n### [`v2.47.12`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.12)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.11...viem@2.47.12)\n\n##### Patch Changes\n\n- [`ee5e2575faa5489c0f8316b07f342fc1dff1ec96`](https://redirect.github.com/wevm/viem/commit/ee5e2575faa5489c0f8316b07f342fc1dff1ec96) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added `Expiry` module for generating unix timestamp expiries (e.g. `Expiry.hours(1)`, `Expiry.days(30)`).\n\n### [`v2.47.11`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.11)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.10...viem@2.47.11)\n\n##### Patch Changes\n\n- [#&#8203;4440](https://redirect.github.com/wevm/viem/pull/4440) [`75ae99e2654043d927ac7e20d630fc93932fce9c`](https://redirect.github.com/wevm/viem/commit/75ae99e2654043d927ac7e20d630fc93932fce9c) Thanks [@&#8203;luanxu-dev](https://redirect.github.com/luanxu-dev)! - Fixed `shouldRetry` to handle RPC code 429 in batch mode, where some providers (e.g. Alchemy) return HTTP 200 with a JSON-RPC body of `{ code: 429 }` instead of an HTTP 429.\n\n- [#&#8203;4407](https://redirect.github.com/wevm/viem/pull/4407) [`fa6edb93203fbd108aba1f4cbbfc47f29bec8253`](https://redirect.github.com/wevm/viem/commit/fa6edb93203fbd108aba1f4cbbfc47f29bec8253) Thanks [@&#8203;d1r1](https://redirect.github.com/d1r1)! - Added Fluent Mainnet chain.\n\n- [#&#8203;4474](https://redirect.github.com/wevm/viem/pull/4474) [`51ee597f6e01ddcd98feb1e9663d5be97e3db4ea`](https://redirect.github.com/wevm/viem/commit/51ee597f6e01ddcd98feb1e9663d5be97e3db4ea) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - **viem/tempo:** Added `scopes` and `limits.period` to access key authorizations for contract call scoping and periodic spending limits (TIP-1011).\n\n### [`v2.47.10`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.10)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.6...viem@2.47.10)\n\n##### Patch Changes\n\n- [#&#8203;4443](https://redirect.github.com/wevm/viem/pull/4443) [`19dd6e54001a82f20ab13e42eacdbe61814e6e52`](https://redirect.github.com/wevm/viem/commit/19dd6e54001a82f20ab13e42eacdbe61814e6e52) Thanks [@&#8203;TJ-Frederick](https://redirect.github.com/TJ-Frederick)! - Added Radius Network (chain ID 723487) and Radius Test Network (chain ID 72344) chain definitions.\n\n- [#&#8203;4456](https://redirect.github.com/wevm/viem/pull/4456) [`7b2cca5ab72c56b4c1a18d9765f4f323ca6b162d`](https://redirect.github.com/wevm/viem/commit/7b2cca5ab72c56b4c1a18d9765f4f323ca6b162d) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Extracted `keyAuthorization` from `eth_fillTransaction` response in `prepareTransactionRequest`.\n\n- [#&#8203;4457](https://redirect.github.com/wevm/viem/pull/4457) [`39d42e515f33f54102d56705cf25c51f8d8f4087`](https://redirect.github.com/wevm/viem/commit/39d42e515f33f54102d56705cf25c51f8d8f4087) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added hardfork-aware `getRemainingLimit` that uses `getRemainingLimitWithPeriod` on T3+ chains. Returns `{ remaining, periodEnd }` object.\n\n- [#&#8203;4448](https://redirect.github.com/wevm/viem/pull/4448) [`3b1908405105bf9d2a08dd1943b4b3fad2cee38a`](https://redirect.github.com/wevm/viem/commit/3b1908405105bf9d2a08dd1943b4b3fad2cee38a) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Fixed transaction type detection for secp256k1 access key accounts.\n\n- [#&#8203;4450](https://redirect.github.com/wevm/viem/pull/4450) [`4555ee6329235335d4278a3f9f33af69091a1c79`](https://redirect.github.com/wevm/viem/commit/4555ee6329235335d4278a3f9f33af69091a1c79) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Fixed gas estimation for access key transactions with a fee payer.\n\n- [#&#8203;4432](https://redirect.github.com/wevm/viem/pull/4432) [`3aa680df95bda40adc9306749e0fd46b93cc6bde`](https://redirect.github.com/wevm/viem/commit/3aa680df95bda40adc9306749e0fd46b93cc6bde) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added access key signature verification support to `verifyHash` via `mode: 'allowAccessKey'`.\n\n- [#&#8203;4442](https://redirect.github.com/wevm/viem/pull/4442) [`0ece4d9d08f53c817b0401fdd39ac3abb59c05f2`](https://redirect.github.com/wevm/viem/commit/0ece4d9d08f53c817b0401fdd39ac3abb59c05f2) Thanks [@&#8203;decofe](https://redirect.github.com/decofe)! - `viem/tempo`: Added TIP-1004 (EIP-2612) permit functions to the `tip20` ABI (`permit`, `nonces`, `DOMAIN_SEPARATOR`, `PermitExpired`, `InvalidSignature`).\n\n- [#&#8203;4419](https://redirect.github.com/wevm/viem/pull/4419) [`4f77ac880ed81e104a68a530665b42661e0c1ebf`](https://redirect.github.com/wevm/viem/commit/4f77ac880ed81e104a68a530665b42661e0c1ebf) Thanks [@&#8203;emdin](https://redirect.github.com/emdin)! - Added Igra Network chain.\n\n- [#&#8203;4422](https://redirect.github.com/wevm/viem/pull/4422) [`3c950f70495df4a357b57b6c90ffb828f0a8a884`](https://redirect.github.com/wevm/viem/commit/3c950f70495df4a357b57b6c90ffb828f0a8a884) Thanks [@&#8203;ryanRfox](https://redirect.github.com/ryanRfox)! - Added Mezo and Mezo Testnet chains.\n\n- [#&#8203;4426](https://redirect.github.com/wevm/viem/pull/4426) [`63ab458812b15fe5d737de08356f8b4e635c6da3`](https://redirect.github.com/wevm/viem/commit/63ab458812b15fe5d737de08356f8b4e635c6da3) Thanks [@&#8203;PatrickAlphaC](https://redirect.github.com/PatrickAlphaC)! - Added BattleChain Testnet\n\n- [#&#8203;4423](https://redirect.github.com/wevm/viem/pull/4423) [`16f6ca238cd5e6d86b36dbb92098a180af6d8ef7`](https://redirect.github.com/wevm/viem/commit/16f6ca238cd5e6d86b36dbb92098a180af6d8ef7) Thanks [@&#8203;pxrl](https://redirect.github.com/pxrl)! - Added basic OP definitions to MegaETH, fixed Blockscout defs.\n\n- [`621b0856e55e710c61bd0a2d57c125d559bd9ae4`](https://redirect.github.com/wevm/viem/commit/621b0856e55e710c61bd0a2d57c125d559bd9ae4) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Propagated execution reverted errors (code 3) from `eth_fillTransaction` in `prepareTransactionRequest` instead of silently falling through.\n\n- [#&#8203;4409](https://redirect.github.com/wevm/viem/pull/4409) [`25634335611498ecaead8435b1403e5f28d30fc1`](https://redirect.github.com/wevm/viem/commit/25634335611498ecaead8435b1403e5f28d30fc1) Thanks [@&#8203;abs3ntdev](https://redirect.github.com/abs3ntdev)! - Added Gensyn Mainnet\n\n- [#&#8203;4425](https://redirect.github.com/wevm/viem/pull/4425) [`ce08d9a4dc9ab986d5d9f6cfe380ae6ec1fec2d9`](https://redirect.github.com/wevm/viem/commit/ce08d9a4dc9ab986d5d9f6cfe380ae6ec1fec2d9) Thanks [@&#8203;o-az](https://redirect.github.com/o-az)! - Removed Tempo Andantino network and updated references\n\n- [#&#8203;4420](https://redirect.github.com/wevm/viem/pull/4420) [`c158236bd6e0d5c80881243d85a535723f61dd7e`](https://redirect.github.com/wevm/viem/commit/c158236bd6e0d5c80881243d85a535723f61dd7e) Thanks [@&#8203;mycodecrafting](https://redirect.github.com/mycodecrafting)! - Added Eden chain.\n\n- [#&#8203;4421](https://redirect.github.com/wevm/viem/pull/4421) [`26bf275307bf6e31430fa5283770f5caa4033aee`](https://redirect.github.com/wevm/viem/commit/26bf275307bf6e31430fa5283770f5caa4033aee) Thanks [@&#8203;KirienzoEth](https://redirect.github.com/KirienzoEth)! - Add the multicall3 configuration to the Katana chain's config\n\n### [`v2.47.6`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.6)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.5...viem@2.47.6)\n\n##### Patch Changes\n\n- [`09d9f3520ce8837cb352e0bf3a7d735b511abd6f`](https://redirect.github.com/wevm/viem/commit/09d9f3520ce8837cb352e0bf3a7d735b511abd6f) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Updated Ox\n\n- [#&#8203;4401](https://redirect.github.com/wevm/viem/pull/4401) [`928ae87a32a13c72c9adf9390172d7b92bf99ce7`](https://redirect.github.com/wevm/viem/commit/928ae87a32a13c72c9adf9390172d7b92bf99ce7) Thanks [@&#8203;ndavd](https://redirect.github.com/ndavd)! - Ensured that `dataSuffix` is applied to all transactions regardless of `data` presence.\n\n- [#&#8203;4405](https://redirect.github.com/wevm/viem/pull/4405) [`4ad0de0ebc543a9054bd7d57976eede1d3612440`](https://redirect.github.com/wevm/viem/commit/4ad0de0ebc543a9054bd7d57976eede1d3612440) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Added `mode` parameter to `verifyMessage` and `verifyHash`.\n\n### [`v2.47.5`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.5)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.4...viem@2.47.5)\n\n##### Patch Changes\n\n- [#&#8203;4376](https://redirect.github.com/wevm/viem/pull/4376) [`64383c9e53cb42e5c371cc8da5a91cdfa47a3331`](https://redirect.github.com/wevm/viem/commit/64383c9e53cb42e5c371cc8da5a91cdfa47a3331) Thanks [@&#8203;nowooj](https://redirect.github.com/nowooj)! - Added CONX chain.\n\n- [#&#8203;4377](https://redirect.github.com/wevm/viem/pull/4377) [`94248ab65c00c6254158e4cd985d8f5eec41f870`](https://redirect.github.com/wevm/viem/commit/94248ab65c00c6254158e4cd985d8f5eec41f870) Thanks [@&#8203;Aboudjem](https://redirect.github.com/Aboudjem)! - Fixed unbounded LRU cache growth on iOS 18+.\n\n- [`a168f08272962f495306f72301a9d6c148428564`](https://redirect.github.com/wevm/viem/commit/a168f08272962f495306f72301a9d6c148428564) Thanks [@&#8203;tmm](https://redirect.github.com/tmm)! - Updated chain definition.\n\n- [#&#8203;4391](https://redirect.github.com/wevm/viem/pull/4391) [`a8c8e6ed4ee40f6259899742a2be20d0772841ce`](https://redirect.github.com/wevm/viem/commit/a8c8e6ed4ee40f6259899742a2be20d0772841ce) Thanks [@&#8203;mohamedhesham840](https://redirect.github.com/mohamedhesham840)! - Fixed incorrect error message for PaymasterStakeTooLowError (code -32505)\n\n- [#&#8203;4403](https://redirect.github.com/wevm/viem/pull/4403) [`e8435e340592986fcd9c21a7626ff40b1af1e850`](https://redirect.github.com/wevm/viem/commit/e8435e340592986fcd9c21a7626ff40b1af1e850) Thanks [@&#8203;GuillermoEscobero](https://redirect.github.com/GuillermoEscobero)! - Removed Zircuit Mainnet deprecated RPCs and Zircuit old testnet.\n\n- [#&#8203;4385](https://redirect.github.com/wevm/viem/pull/4385) [`ee1f2950dc5f8bf51ed9682ac0e9c4d9ef96a7bf`](https://redirect.github.com/wevm/viem/commit/ee1f2950dc5f8bf51ed9682ac0e9c4d9ef96a7bf) Thanks [@&#8203;pxrl](https://redirect.github.com/pxrl)! - Defined DisputeGameFactory for Lisk, Mode & Zora\n\n- [#&#8203;4388](https://redirect.github.com/wevm/viem/pull/4388) [`60f701f16217ef099c25184be97dc0e70e686b40`](https://redirect.github.com/wevm/viem/commit/60f701f16217ef099c25184be97dc0e70e686b40) Thanks [@&#8203;alcuadrado](https://redirect.github.com/alcuadrado)! - Added error preservation in `getContractError`.\n\n### [`v2.47.4`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.4)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.2...viem@2.47.4)\n\n##### Patch Changes\n\n- [`6c3dc97e9d19718580ea8aa4db04f5e065594a49`](https://redirect.github.com/wevm/viem/commit/6c3dc97e9d19718580ea8aa4db04f5e065594a49) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Updated Ox.\n\n### [`v2.47.2`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.2)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.1...viem@2.47.2)\n\n##### Patch Changes\n\n- [`1b522780cd9c24339a2d01dbc6ee9638ebf7143c`](https://redirect.github.com/wevm/viem/commit/1b522780cd9c24339a2d01dbc6ee9638ebf7143c) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Updated `ox` to `0.14.1`.\n\n### [`v2.47.1`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.1)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.47.0...viem@2.47.1)\n\n##### Patch Changes\n\n- [#&#8203;4383](https://redirect.github.com/wevm/viem/pull/4383) [`66457cbb5de7a3086732f9016af798c9ec5222a5`](https://redirect.github.com/wevm/viem/commit/66457cbb5de7a3086732f9016af798c9ec5222a5) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Changed default `internal_version` on access keys to `v2`.\n\n### [`v2.47.0`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.47.0)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.46.3...viem@2.47.0)\n\n##### Minor Changes\n\n- [`1adb83804d5f6c3f36d5f293de88532330d52dc7`](https://redirect.github.com/wevm/viem/commit/1adb83804d5f6c3f36d5f293de88532330d52dc7) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - **Breaking (`viem/tempo`):** `chainId` is now required when signing access key authorizations with `signKeyAuthorization`. It is recommended to use `client.accessKey.signAuthorization` instead for inferred chain ID.\n\n  ```diff\n  import { client } from './viem.config'\n  import { Account } from 'viem/tempo'\n\n  const account = Account.from({ privateKey: '0x...' })\n  const accessKey = Account.fromP256(generatePrivateKey(), {\n    access: account,\n  })\n\n  - const keyAuthorization = await account.signKeyAuthorization(accessKey)\n  + const keyAuthorization = await client.accessKey.signAuthorization({\n  +   account,\n  +   accessKey,\n  + })\n  ```\n\n##### Patch Changes\n\n- [#&#8203;4374](https://redirect.github.com/wevm/viem/pull/4374) [`141a367cd4fec97224477d5cef008c0f66a43926`](https://redirect.github.com/wevm/viem/commit/141a367cd4fec97224477d5cef008c0f66a43926) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - **`viem/tempo`:** Exported `TempoAddress` from `ox/tempo`.\n\n### [`v2.46.3`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.46.3)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.46.2...viem@2.46.3)\n\n##### Patch Changes\n\n- [#&#8203;4345](https://redirect.github.com/wevm/viem/pull/4345) [`0e5d47967ec4294fe3896d284cad7df9d5a48e87`](https://redirect.github.com/wevm/viem/commit/0e5d47967ec4294fe3896d284cad7df9d5a48e87) Thanks [@&#8203;mrehmankrown](https://redirect.github.com/mrehmankrown)! - Added Krown chain.\n\n- [#&#8203;4359](https://redirect.github.com/wevm/viem/pull/4359) [`2e96ebdf3eb7b727bb9e0cf0395922f1c9c4b71d`](https://redirect.github.com/wevm/viem/commit/2e96ebdf3eb7b727bb9e0cf0395922f1c9c4b71d) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Added `accessKey` actions (`getMetadata`, `getRemainingLimit`, `revoke`, `updateLimit`).\n\n- [`cbcd16bb9480881537df5a4f922f9f4e2cc9c52f`](https://redirect.github.com/wevm/viem/commit/cbcd16bb9480881537df5a4f922f9f4e2cc9c52f) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Exported `from` from `Account`.\n\n- [#&#8203;4346](https://redirect.github.com/wevm/viem/pull/4346) [`45ff3ff2480bc43c9dfd36ae30330f309318ce2f`](https://redirect.github.com/wevm/viem/commit/45ff3ff2480bc43c9dfd36ae30330f309318ce2f) Thanks [@&#8203;Kropiunig](https://redirect.github.com/Kropiunig)! - Fixed `parseEventLogs` to normalize RpcLog inputs before decoding.\n\n- [#&#8203;4352](https://redirect.github.com/wevm/viem/pull/4352) [`cbda35cf01f9da2de2464cf18f1ffbcdee4d46e0`](https://redirect.github.com/wevm/viem/commit/cbda35cf01f9da2de2464cf18f1ffbcdee4d46e0) Thanks [@&#8203;ClockRide](https://redirect.github.com/ClockRide)! - Updated Polygon chain default RPC URL.\n\n- [#&#8203;4269](https://redirect.github.com/wevm/viem/pull/4269) [`1ce50f716b002295b0bcc4dc6c6db65ae041d2bc`](https://redirect.github.com/wevm/viem/commit/1ce50f716b002295b0bcc4dc6c6db65ae041d2bc) Thanks [@&#8203;yigiterdev](https://redirect.github.com/yigiterdev)! - Fixed `sendRawTransactionSync` to send timeout as integer instead of hex.\n\n- [#&#8203;4170](https://redirect.github.com/wevm/viem/pull/4170) [`4c821db0aa2763a1ab0bb18762be7d6665ac2617`](https://redirect.github.com/wevm/viem/commit/4c821db0aa2763a1ab0bb18762be7d6665ac2617) Thanks [@&#8203;Kemperino](https://redirect.github.com/Kemperino)! - Added `getDelegation` utility for EIP7702\n\n- [#&#8203;4351](https://redirect.github.com/wevm/viem/pull/4351) [`c5f3bef7508c640f4b13068758e550ee5a726141`](https://redirect.github.com/wevm/viem/commit/c5f3bef7508c640f4b13068758e550ee5a726141) Thanks [@&#8203;dwi](https://redirect.github.com/dwi)! - Changed Ronin Saigon Testnet chainId after L2 migration.\n\n- [#&#8203;4357](https://redirect.github.com/wevm/viem/pull/4357) [`ea5f5a2b5b0481aa4bf0e129f8c8a8b48c88a806`](https://redirect.github.com/wevm/viem/commit/ea5f5a2b5b0481aa4bf0e129f8c8a8b48c88a806) Thanks [@&#8203;alexander-sei](https://redirect.github.com/alexander-sei)! - Updated Sei block explorer from Seitrace to Seiscan. Removed `seiDevnet` chain (network is defunct).\n\n### [`v2.46.2`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.46.2)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.46.1...viem@2.46.2)\n\n##### Patch Changes\n\n- [`1a10fb7812cc13bd72495552c4a590aa5ce8cf15`](https://redirect.github.com/wevm/viem/commit/1a10fb7812cc13bd72495552c4a590aa5ce8cf15) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - `viem/tempo`: Removed fee payer magic in favor of pure support for `0x78`-prefixed fee payer envelopes.\n\n### [`v2.46.1`](https://redirect.github.com/wevm/viem/releases/tag/viem%402.46.1)\n\n[Compare Source](https://redirect.github.com/wevm/viem/compare/viem@2.46.0...viem@2.46.1)\n\n##### Patch Changes\n\n- [`44cbba75ab219c4e297f6cfd21c04f47548585e2`](https://redirect.github.com/wevm/viem/commit/44cbba75ab219c4e297f6cfd21c04f47548585e2) Thanks [@&#8203;jxom](https://redirect.github.com/jxom)! - Removed Ekta chain.\n\n</details>\n\n---\n\n### Configuration\n\n📅 **Schedule**: (UTC)\n\n- Branch creation\n  - At any time (no schedule defined)\n- Automerge\n  - At any time (no schedule defined)\n\n🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.\n\n♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.\n\n🔕 **Ignore**: Close this PR and you won't be reminded about this update again.\n\n---\n\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/elizaOS/eliza).\n<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->\n",
      "repository": "elizaos/eliza",
      "createdAt": "2026-05-02T11:48:33Z",
      "mergedAt": "2026-05-02T12:29:42Z",
      "additions": 1,
      "deletions": 1
    }
  ],
  "codeChanges": {
    "additions": 297,
    "deletions": 44,
    "files": 8,
    "commitCount": 148
  },
  "completedItems": [
    {
      "title": "chore(deps): update node.js to v24",
      "prNumber": 7239,
      "type": "other",
      "body": "> ℹ️ **Note**\n> \n> This PR body was truncated due to platform limits.\n\nThis PR contains the following updates:\n\n| Package | Type | Update | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovateb",
      "files": [
        "plugins/plugin-agent-wallet/package.json"
      ]
    },
    {
      "title": "fix(deps): update dependency viem to v2.48.8",
      "prNumber": 7237,
      "type": "bugfix",
      "body": "This PR contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |\n|---|---|---|---|\n| [viem](https://viem.sh) ([source](https",
      "files": [
        "plugins/plugin-agent-wallet/package.json"
      ]
    },
    {
      "title": "chore(deps): update dependency tsdown to ^0.21.0",
      "prNumber": 7236,
      "type": "other",
      "body": "> ℹ️ **Note**\n> \n> This PR body was truncated due to platform limits.\n\nThis PR contains the following updates:\n\n| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-con",
      "files": [
        "plugins/plugin-agent-wallet/package.json"
      ]
    },
    {
      "title": "fix(ci): handle bogus Inno Setup exit codes on Windows Server 2025",
      "prNumber": 7232,
      "type": "bugfix",
      "body": "## Summary\nWindows Server 2025 headless CI runners return non-zero exit codes from Inno Setup (exit code 5) even when the install succeeds or partially succeeds. The smoke test was treating this as a hard failure and retrying, which also fa",
      "files": [
        "packages/app-core/platforms/electrobun/scripts/smoke-test-windows.ps1"
      ]
    },
    {
      "title": "fix(vault, confidant): skip OS keychain on headless Linux to prevent native segfault on agent boot",
      "prNumber": 7230,
      "type": "bugfix",
      "body": "## What this fixes\n\nAgent runtime hard-crashes on boot (process-level segfault, not a catchable JS error) on any host where `@napi-rs/keyring`'s `libsecret` backend can't reach a D-Bus Secret Service. That's:\n\n- **Headless Linux servers** (",
      "files": [
        "packages/app-core/src/api/secrets-manager-routes.test.ts",
        "packages/confidant/src/backends/keyring.ts",
        "packages/confidant/src/crypto/master-key.ts",
        "packages/confidant/src/keychain-host.ts",
        "packages/vault/src/master-key.ts",
        "packages/vault/test/master-key.test.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "NubsCarson",
      "avatarUrl": "https://avatars.githubusercontent.com/u/192162056?u=d2be9082dbee60fcbad21d32bf6e662ab1af3674&v=4",
      "totalScore": 218.5568560885912,
      "prScore": 216.5568560885912,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "NubsCarson: Focused on stabilizing the agent runtime and build processes, notably resolving a critical crash on headless Linux in elizaos/eliza#7230 and addressing broken CJS builds across multiple plugins. Their work centered entirely on bugfixes, ensuring cross-platform compatibility and build integrity through 12 commits across 17 files."
    },
    {
      "username": "lalalune",
      "avatarUrl": "https://avatars.githubusercontent.com/u/18633264?u=e2e906c3712c2506ebfa98df01c2cfdc50050b30&v=4",
      "totalScore": 34.086773896576105,
      "prScore": 33.6487738965761,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": "lalalune: Executed a significant architectural refactor in elizaos/eliza via PR #7235, which involved modifying 5,324 files to streamline cloud and plugin integrations while removing legacy rust and python components. Their work today was balanced across other project tasks, bugfixes, and testing, with a primary focus on configuration, test suites, and core codebase maintenance."
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 27.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 27,
      "commentScore": 0.2,
      "summary": "greptile-apps: No activity today."
    },
    {
      "username": "vyctorbrzezowski",
      "avatarUrl": "https://avatars.githubusercontent.com/u/51521767?u=9cd153e7883fb4e8486fe44817b3ae46a6a3df22&v=4",
      "totalScore": 21.0695263639469,
      "prScore": 21.0695263639469,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "vyctorbrzezowski: Focused on improving system reliability by addressing a runtime configuration issue in elizaos-plugins/plugin-telegram#29. This effort involved modifying 6 files with 409 total lines of code, demonstrating a dedicated focus on bugfix work and testing."
    },
    {
      "username": "RemilioNubilio",
      "avatarUrl": "https://avatars.githubusercontent.com/u/275382225?u=b1501ee01bb54e5b31ca64895f2a07c69f554a37&v=4",
      "totalScore": 16.693147180559947,
      "prScore": 14.693147180559945,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "RemilioNubilio: Focused on improving environment configuration management within the Discord plugin, initiating work to ensure the `DISCORD_AUTO_REPLY` variable is correctly respected via issue #49 and PR #50."
    },
    {
      "username": "Sw4pIO",
      "avatarUrl": "https://avatars.githubusercontent.com/u/250003491?u=b9bad2342b9ccdb72ee4d4502d5534b6256e9d5c&v=4",
      "totalScore": 14,
      "prScore": 0,
      "issueScore": 14,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "Sw4pIO: Focused on identifying and triaging critical stability issues within the elizaos/eliza repository, specifically addressing configuration, authentication, and plugin integration bugs through the creation of seven issues (#7233, #7238, #7240, #7241, #7243, #7244, #7245). Their work centered on improving the reliability of the Telegram plugin and authentication workflows."
    },
    {
      "username": "github-code-quality",
      "avatarUrl": "https://avatars.githubusercontent.com/u/9919?v=4",
      "totalScore": 13.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 13.5,
      "commentScore": 0,
      "summary": "github-code-quality: No activity today."
    }
  ],
  "newPRs": 6,
  "mergedPRs": 5,
  "newIssues": 8,
  "closedIssues": 0,
  "activeContributors": 5
}