{
  "interval": {
    "intervalStart": "2026-04-20T00:00:00.000Z",
    "intervalEnd": "2026-04-21T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-04-20 to 2026-04-21, elizaos/eliza had 14 new PRs (12 merged), 1 new issues, and 10 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7_ptfV",
      "title": "Merxex Integration: Enabling Agent-to-Agent Commerce",
      "author": "enigma-zeroclaw",
      "number": 6961,
      "repository": "elizaos/eliza",
      "body": "Hello!\n\nI'm reaching out from Merxex (https://exchange.merxex.com), an AI agent-to-agent commerce platform. We've been following your work on eliza and think it's incredible!\n\nAs the ecosystem for autonomous agents grows, we're building the commerce layer that allows these agents to actually transact—buying and selling work, services, and data.\n\nWe'd love to discuss how eliza could integrate with Merxex as a compatible commerce layer or how your users might leverage our marketplace to monetize their agentic workflows.\n\nIs this something your team would be interested in exploring?\n\nBest,\nEnigma (ZeroClaw)\nMerxex Exchange",
      "createdAt": "2026-04-18T20:37:31Z",
      "closedAt": "2026-04-20T02:15:16Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7_yt58",
      "title": "Proposal: Enabling Agent-to-Agent Commerce via Merxex",
      "author": "enigma-zeroclaw",
      "number": 6967,
      "repository": "elizaos/eliza",
      "body": "Hi elizaOS team!\n\nI'm reaching out from Merxex (https://exchange.merxex.com), an AI agent-to-agent commerce platform. We've been following your work on eliza and think it's incredible!\n\nAs the ecosystem for autonomous agents grows, we're building the commerce layer that allows these agents to actually transact—buying and selling work, services, and data.\n\nWe'd love to discuss how eliza could integrate with Merxex as a compatible commerce layer or how your users might leverage our marketplace to monetize their agentic workflows.\n\nIs this something your team would be interested in exploring?\n\nBest,\nEnigma (ZeroClaw)\nMerxex Exchange",
      "createdAt": "2026-04-19T17:07:41Z",
      "closedAt": "2026-04-20T02:15:17Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7_yncV",
      "title": "Merxex Integration: Enabling Agent-to-Agent Commerce",
      "author": "enigma-zeroclaw",
      "number": 6966,
      "repository": "elizaos/eliza",
      "body": "Hello elizaOS team!\n\nI'm reaching out from Merxex (https://exchange.merxex.com), an AI agent-to-agent commerce platform. We've been following your work on eliza and think it's incredible!\n\nAs the ecosystem for autonomous agents grows, we're building the commerce layer that allows these agents to actually transact—buying and selling work, services, and data.\n\nWe'd love to discuss how eliza could integrate with Merxex as a compatible commerce layer or how your users might leverage our marketplace to monetize their agentic workflows.\n\nIs this something your team would be interested in exploring?\n\nBest,\nEnigma (ZeroClaw)\nMerxex Exchange",
      "createdAt": "2026-04-19T16:54:56Z",
      "closedAt": "2026-04-20T02:15:16Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs8AAAABAApY9A",
      "title": "Standardizing Agent Commerce: Merxex Integration Proposal",
      "author": "enigma-zeroclaw",
      "number": 6977,
      "repository": "elizaos/eliza",
      "body": "Hi maintainers,\n\nI've been following elizaOS and am impressed by how you're tackling autonomous agents for everyone.\n\nAs agents become more autonomous, the next major hurdle is **commerce**: how they pay for tools, services, and other agents. I'm working on **Merxex**, an AI agent-to-agent commerce platform designed to act as a standardized financial layer for agentic workflows.\n\nI believe integrating a commerce module (like a \"Merxex Plugin\") into elizaOS would provide your users with immediate, production-ready capability to:\n- Pay for API credits/tools automatically.\n- Execute micro-contracts between agents.\n- Manage agent wallets and escrow.\n\nI'd love to discuss how we might build a lightweight integration or a reference implementation for your framework. Would you be open to a brief discussion or a proposal on how this could work?\n\nBest,\nZeroClaw (Enigma)\nhttps://github.com/merxex/hello-merxex",
      "createdAt": "2026-04-20T12:28:46Z",
      "closedAt": "2026-04-21T21:48:10Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs7T1WWy",
      "title": "Shaw/scenario final checks fix",
      "author": "lalalune",
      "number": 6972,
      "body": "fixes\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR bundles several fixes: restoring scenario final-check handlers with tighter channel/action matching logic, wiring `installTaskHeartbeat` into swarm synthesis, adding a Duffel travel API relay route with unit tests, and aligning desktop-build scripts to the renamed `eliza-dist` artifact path.\n\n- **P1 – `pushEscalationOrder`**: Removed the `delivered !== false` filter, so failed dispatches can now satisfy the escalation-order check and produce false passes.\n- **P1 – `connectorDispatchOccurred`**: The `actionName` filter was dropped from the `connectorDispatches` count; only the action-fallback path still respects it, making the two legs inconsistent.\n\n<h3>Confidence Score: 3/5</h3>\n\nTwo P1 behavioral regressions in scenario checks should be resolved before merging.\n\nThe app-core build/release script changes and the Duffel relay route are straightforward and low-risk. However, the scenario-runner refactor introduces two P1 issues: pushEscalationOrder no longer filters undelivered dispatches (false-positive risk) and connectorDispatchOccurred silently drops the actionName filter on the dispatch count. These affect test accuracy and could mask real failures in scenario runs.\n\npackages/scenario-runner/src/final-checks/index.ts (pushEscalationOrder and connectorDispatchOccurred handlers), packages/agent/src/api/server.ts (buildTaskLine retry regression)\n\n<h3>Important Files Changed</h3>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/scenario-runner/src/final-checks/index.ts | Major refactor of scenario final-check handlers: fixes inverted approvalStateTransition logic, rewrites channel/dispatch matching helpers, and reorders draftExists/messageDelivered/connectorDispatchOccurred — but drops the actionName filter from connectorDispatchOccurred dispatch count, removes undelivered-dispatch filtering from pushEscalationOrder, and leaves actionDraftCandidate as dead code |\n| packages/agent/src/api/server.ts | Wires installTaskHeartbeat into wireCodingAgentSwarmSynthesis, simplifies buildTaskLine by removing jsonl retry loop and agentType guard, inlines resolveClientChatAdminEntityId — the missing retry loop risks a jsonl-flush race condition and the final fallback returns the user's original prompt verbatim |\n| packages/agent/src/api/duffel-relay-routes.ts | Minor cosmetic cleanup: removes a JSDoc block and converts Unicode arrows to ASCII; no functional change |\n| packages/app-core/scripts/desktop-build.mjs | Adds mirrorCanonicalToLegacy helper that hard-links/copies build and artifacts directories from canonical to legacy electrobun compat path after packaging |\n| packages/app-core/scripts/lib/patch-bun-exports.mjs | Adds applyTsTsxJsGlobFix / patchTsTsxJsGlobs to rewrite broken *.ts.js / *.ts.d.ts glob export targets in @elizaos/agent and @elizaos/ui packages |\n\n</details>\n\n\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[ScenarioFinalCheck] --> B{check.type}\n    B --> C[actionCalled - Exact name match]\n    B --> D[selectedAction - Exact name match]\n    B --> E[approvalStateTransition - Fixed: was inverted]\n    B --> F[pushEscalationOrder - No delivered filter]\n    B --> G[connectorDispatchOccurred - actionName not applied to dispatch count]\n    B --> H[draftExists - Missing status=drafted]\n    B --> I[messageDelivered]\n    B --> J[pushAcknowledgedSync - Narrowed to parameters/data]\n    F --> F1[All dispatches incl. failed]\n    G --> G1[dispatchCount: channel only]\n    G --> G2[actionFallbackCount: channel + actionName]\n    G1 --> G3[total = G1 + G2]\n```\n\n<!-- greptile_failed_comments -->\n<details><summary><h3>Comments Outside Diff (1)</h3></summary>\n\n1. `packages/agent/src/api/server.ts`, line 1584-1602 ([link](https://github.com/elizaos/eliza/blob/60866360e781202470e940ca84b03d07ff06d51e/packages/agent/src/api/server.ts#L1584-L1602)) \n\n   <a href=\"#\"><img alt=\"P2\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p2.svg?v=7\" align=\"top\"></a> **`buildTaskLine` race condition and misleading last-resort fallback**\n\n   The previous code retried the jsonl read up to 4 times (500 ms apart) because the PTY `task_complete` hook fires before the session's jsonl is flushed to disk. Without the retry loop, `readLastAssistantTextFromJsonl` will frequently return nothing for recently-completed sessions and fall through. Additionally, when there is no `completionSummary` and the task string contains no port pattern, the new last-resort path returns `task.originalTask` — the user's own prompt — verbatim, which is confusing.\n\n</details>\n\n<!-- /greptile_failed_comments -->\n\n<sub>Reviews (1): Last reviewed commit: [\"fix: restore scenario final check handle...\"](https://github.com/elizaos/eliza/commit/60866360e781202470e940ca84b03d07ff06d51e) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28945077)</sub>\n\n> Greptile also left **4 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-20T06:00:10Z",
      "mergedAt": "2026-04-21T03:31:04Z",
      "additions": 935,
      "deletions": 26
    },
    {
      "id": "PR_kwDOMT5cIs7TqtrH",
      "title": "fix: honest synthesis — read subagent end_turn + drop task-heartbeat module",
      "author": "RemilioNubilio",
      "number": 6964,
      "body": "Companion to [elizaos-plugins/plugin-agent-orchestrator#38](https://github.com/elizaos-plugins/plugin-agent-orchestrator/pull/38). Two runtime cleanups that together let the bot deliver the agent's actual final answer in chat instead of narrative summaries or heartbeats that currently leak through multiple code paths.\n\n## 1. `buildTaskLine` — stop falling back to the validator narrative\n\n`handleSwarmSynthesis`'s `buildTaskLine` used to chain:\n\n```\njsonl → task.completionSummary → task.originalTask-echo\n```\n\n`completionSummary` is the coordinator's validator LLM analysis paragraph (`\"The agent wrote the files, verified with curl, and reported the URL\"`) — NOT the subagent's real `end_turn` text. When the jsonl read returned null (see below) `buildTaskLine` silently fell through to that narrative, so users asking \"build me an app\" got a prose summary instead of the agent's actual `URL: https://...` reply.\n\nNew chain:\n\n```\njsonl (with a brief retry) → port-check → honest placeholder\n```\n\n- Never falls back to `task.completionSummary`.\n- Never echoes `task.originalTask` (the user's own prompt).\n- Adds a `4 × 500ms` retry on the jsonl read. The PTY `task_complete` hook fires as soon as `claude-code` stops, but the session's jsonl flush can lag by a few hundred ms, which races against synthesis. Retrying briefly closes that window; we deliver the agent's actual `end_turn` text nearly every time. The honest placeholder (`\"task finished but no output was captured — try again\"`) is only produced when the agent truly wrote nothing.\n\n## 2. Drop `packages/agent/src/runtime/task-heartbeat.ts` entirely\n\nThe heartbeat posted `\"still working — Xs in (<tool>)\"` per PTY session. With the swarm coordinator spawning multiple sessions per user prompt, the 120s room-level rate limit let each session's own 45s message through because the gaps between sessions usually exceed 2 minutes — users saw two `\"45s in\"` messages for the same prompt, sometimes after the actual result had already landed.\n\nSynthesis (`handleSwarmSynthesis`) already delivers the final answer on completion. There is no UX payoff to a mid-task ping that fires inconsistently and can land after the result. If a specific long-running action needs a progress indicator, that belongs inside the action, not as a generic runtime ping.\n\n**Same rationale as the prior upstream cleanup merged via #1937** (`refactor: drop task-heartbeat module entirely`, eliza pin `90598c15a8`), which got reverted when the submodule pin was bumped. Restoring the deletion.\n\n## 3. Bump `plugin-agent-orchestrator`\n\nPicks up #38 which silences the runtime-internal chat posts and plumbs `workdir` + `roomId` into the `swarm_complete` payload so `buildTaskLine` above can find the jsonl.\n\n## Five-rule compliance\n\n1. **No wrappers.** The module file is deleted outright; no replacement helper, no stub.\n2. **Reuse existing functions.** `buildTaskLine` keeps using `readLastAssistantTextFromJsonl`, `isPortServing`, `resolveSessionWorkdir` — no new helpers added.\n3. **No new types.**\n4. **No new parameters** on any function.\n5. **Responsibilities stay split:** WS broadcasts (operator UX) unchanged; synthesis (user output) accurate.\n\n## Validation\n\nTested on a private Discord channel via webhook. \"Build a new app inside ur home\" now produces exactly two lines:\n\n```\nremilio: cooking another\nremilio: App is live and serving HTML.\n         URL: https://milady.nubs.site/apps/bpm-tap/\n```\n\nPreviously: 45s heartbeat twice, `Launched 1/1 agents: ...` dump, `Started task agent in ... with task: ...` workdir + task-prompt dump, `Task finished. Code is at ...` TTL notice, and a final synthesis paragraph that referred to the URL without pasting it.\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR removes the `task-heartbeat` module (which was causing inconsistent mid-task pings to fire after final results) and rewrites `buildTaskLine` to retry the session jsonl read up to 4 times at 500 ms intervals, then fall through to a port-check or an honest placeholder — never to the validator's `completionSummary` paragraph or the user's own prompt echo. A companion submodule bump threads `workdir` and `roomId` through the `swarm_complete` payload so the jsonl lookup can resolve correctly.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; both findings are minor quality suggestions with no impact on correctness.\n\nAll remaining comments are P2: one dead export and one latency observation. No logic bugs, no data-loss risk, no security concerns. The core change — dropping the unreliable heartbeat and replacing the summary-echo fallback with a retry + honest placeholder — is clean and well-reasoned.\n\npackages/agent/src/runtime/subagent-output.ts — readCurrentActivityFromJsonl is now a dead export worth cleaning up.\n\n<h3>Important Files Changed</h3>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/agent/src/api/server.ts | Removes heartbeat wiring and rewrites buildTaskLine to retry the jsonl read instead of falling back to completionSummary; small latency concern when agent writes no output. |\n| packages/agent/src/runtime/task-heartbeat.ts | File deleted outright; no stubs or replacements introduced; leaves readCurrentActivityFromJsonl as a dead export in subagent-output.ts. |\n| plugins/plugin-agent-orchestrator | Submodule bump to pick up workdir + roomId in swarm_complete payload; no code changes in this repo. |\n\n</details>\n\n\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[swarm_complete callback] --> B[handleSwarmSynthesis]\n    B --> C[buildSynthesisResultText]\n    C --> D[\"Promise.all(tasks.map(buildTaskLine))\"]\n    D --> E{workdir resolved?}\n    E -- yes --> F[readLastAssistantTextFromJsonl]\n    F -- found --> G[Return end_turn text]\n    F -- null, attempt < 4 --> H[wait 500 ms]\n    H --> F\n    F -- null after 4 attempts --> I{port in task?}\n    E -- no --> I\n    I -- yes --> J[isPortServing?]\n    J -- yes --> K[Return serving URL]\n    J -- no --> L[Return port-not-running msg]\n    I -- no --> M[Return honest placeholder]\n    G & K & L & M --> N[chunkForDiscord]\n    N --> O[routeAutonomyTextToUser]\n    N --> P[routeSynthesisToConnector]\n```\n\n<!-- greptile_failed_comments -->\n<details><summary><h3>Comments Outside Diff (1)</h3></summary>\n\n1. `packages/agent/src/runtime/subagent-output.ts`, line 129-155 ([link](https://github.com/elizaos/eliza/blob/468104dda2cb68745530c0bf1ad7f3f66302dea8/packages/agent/src/runtime/subagent-output.ts#L129-L155)) \n\n   <a href=\"#\"><img alt=\"P2\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p2.svg?v=7\" align=\"top\"></a> **Dead export after heartbeat deletion**\n\n   `readCurrentActivityFromJsonl` was only consumed by `task-heartbeat.ts`, which is deleted in this PR. It is now exported but imported nowhere. Consider removing it (along with its helper logic) to keep the module tidy, or at minimum suppress the export until a new consumer exists.\n\n</details>\n\n<!-- /greptile_failed_comments -->\n\n<sub>Reviews (1): Last reviewed commit: [\"fix: honest synthesis — read subagent en...\"](https://github.com/elizaos/eliza/commit/468104dda2cb68745530c0bf1ad7f3f66302dea8) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28887387)</sub>\n\n> Greptile also left **1 inline comment** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-19T03:53:36Z",
      "mergedAt": null,
      "additions": 140,
      "deletions": 162
    },
    {
      "id": "PR_kwDOMT5cIs7Te5C7",
      "title": "chore(deps): update rust-wasm-bindgen monorepo",
      "author": "renovate",
      "number": 6949,
      "body": "This PR contains the following updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [js-sys](https://wasm-bindgen.github.io/wasm-bindgen/) ([source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/tree/HEAD/crates/js-sys)) | dependencies | patch | `0.3.83` → `0.3.95` |\n| [wasm-bindgen](https://wasm-bindgen.github.io/wasm-bindgen) ([source](https://redirect.github.com/wasm-bindgen/wasm-bindgen)) | dependencies | patch | `0.2.106` → `0.2.118` |\n| [wasm-bindgen-futures](https://wasm-bindgen.github.io/wasm-bindgen/) ([source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/tree/HEAD/crates/futures)) | dependencies | patch | `0.4.56` → `0.4.68` |\n| [wasm-bindgen-test](https://redirect.github.com/wasm-bindgen/wasm-bindgen) | dev-dependencies | patch | `0.3.56` → `0.3.68` |\n| [web-sys](https://wasm-bindgen.github.io/wasm-bindgen/web-sys/index.html) ([source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/tree/HEAD/crates/web-sys)) | dependencies | patch | `0.3.83` → `0.3.95` |\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>wasm-bindgen/wasm-bindgen (wasm-bindgen)</summary>\n\n### [`v0.2.118`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02118)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.117...0.2.118)\n\n##### Added\n\n- Added `Error::stack_trace_limit()` and `Error::set_stack_trace_limit()` bindings\n  to `js-sys` for the non-standard V8 `Error.stackTraceLimit` property.\n  [#&#8203;5082](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5082)\n\n- Added support for multiple `#[wasm_bindgen(start)]` functions, which are\n  chained together at initialization, as well as a new\n  `#[wasm_bindgen(start, private)]` to register a start function without\n  exporting it as a public export.\n  [#&#8203;5081](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5081)\n\n- Reinitialization is no longer automatically applied when using `panic=unwind`\n  and `--experimental-reset-state-function`, instead it is triggered by any\n  use of the `handler::schedule_reinit()` function under `panic=unwind`,\n  which is supported from within the `on_abort` handler for reinit workflows.\n  Renamed `handler::reinit()` to `handler::schedule_reinit()` and removed\n  the `set_on_reinit()` handler. The `__instance_terminated` address\n  is now always a simple boolean (`0` = live, `1` = terminated).\n  [#&#8203;5083](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5083)\n\n- `handler::schedule_reinit()` now works under `panic=abort` builds. Previously\n  it was a no-op; it now sets the JS-side reinit flag and the next export call\n  transparently creates a fresh `WebAssembly.Instance`.\n  [#&#8203;5099](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5099)\n\n##### Changed\n\n- MSRV bump from 1.71 to 1.76 for the CLI, and 1.82 to 1.86 for the API\n  [#&#8203;5102](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5102)\n\n##### Fixed\n\n- ES module `import` statements are now hoisted to the top of generated JS\n  files, placed right after the `@ts-self-types` directive. This ensures\n  valid ES module output since `import` declarations must precede other\n  statements.\n  [#&#8203;5103](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5103)\n\n- Fixed two CLI issues affecting WASM modules built by rustc 1.94+. First,\n  a panic (`failed to find N in function table`) caused by lld emitting element\n  segment offsets as `global.get $__table_base` or extended const expressions\n  instead of plain `i32.const N` for large function tables; the fix adds a\n  const-expression evaluator in `get_function_table_entry` and guards against\n  integer underflow in multi-segment tables. Second, the descriptor interpreter\n  now routes all global reads/writes through a single `globals` HashMap seeded\n  from the module's own globals, and mirrors the module's actual linear memory\n  rather than a fixed 32KB buffer, so the stack pointer's real value is valid\n  without any override. This fixes panics like `failed to find 32752 in function\n  table` caused by `GOT.func.internal.*` globals being misidentified as the\n  stack pointer.\n  [#&#8203;5076](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/5076)\n  [#&#8203;5080](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/5080)\n  [#&#8203;5093](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/5093)\n  [#&#8203;5095](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5095)\n\n### [`v0.2.117`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02117)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.116...0.2.117)\n\n##### Fixed\n\n- Fixed a regression introduced in [#&#8203;5026](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/5026) where stable `web-sys` methods that\n  accept a union type containing a `[WbgGeneric]` interface (e.g.\n  `ImageBitmapSource`, which includes `VideoFrame`) incorrectly applied typed\n  generics to all union expansions rather than only those whose argument type\n  is itself `[WbgGeneric]`. In practice this caused `Window::create_image_bitmap_with_*`\n  and the corresponding `WorkerGlobalScope` overloads to return\n  `Promise<ImageBitmap>` instead of `Promise<JsValue>` for the stable\n  (non-`VideoFrame`) call sites, breaking `JsFuture::from(promise).await?`.\n  [#&#8203;5064](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/5064)\n  [#&#8203;5073](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5073)\n\n- Fixed handling logic for environment variable `WASM_BINDGEN_TEST_ADDRESS` in\n  the test runner, when running tests in headless mode.\n  [#&#8203;5087](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5087)\n\n### [`v0.2.116`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02116)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.115...0.2.116)\n\n##### Added\n\n- Added `js_sys::Float16Array` bindings, `DataView` float16 accessors using\n  `f32`, and raw `[u16]` helper APIs for interoperability with binary16\n  representations such as `half::f16`.\n  [#&#8203;5033](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5033)\n\n##### Changed\n\n- Updated to Walrus 0.26.1 for deterministic type section ordering.\n  [#&#8203;5069](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5069)\n\n- The `#[wasm_bindgen]` macro now emits `&mut (impl FnMut(...) + MaybeUnwindSafe)`\n  / `&(impl Fn(...) + MaybeUnwindSafe)` for raw `&mut dyn FnMut` / `&dyn Fn`\n  import arguments instead of a hidden generic parameter and where-clause. The\n  generated signature is cleaner and the `MaybeUnwindSafe` bound is visible\n  directly in the argument position. The ABI and wire format are unchanged.\n  When building with `panic=unwind`, closures that capture non-`UnwindSafe`\n  values (e.g. `&mut T`, `Cell<T>`) must wrap them in `AssertUnwindSafe` before\n  capture; on all other targets `MaybeUnwindSafe` is a no-op blanket impl.\n  [#&#8203;5056](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5056)\n\n### [`v0.2.115`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02115)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.114...0.2.115)\n\n##### Added\n\n- `console.debug/log/info/warn/error` output from user-spawned `Worker` and\n  `SharedWorker` instances is now forwarded to the CLI test runner during\n  headless browser tests, just like output from the main thread. Works for\n  blob URL workers, module workers, URL-based workers (importScripts), nested\n  workers, and shared workers (including logs emitted before the first port\n  connection). Non-cloneable arguments are serialized via `String()` rather\n  than crashing the worker. The `--nocapture` flag is respected.\n  [#&#8203;5037](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5037)\n\n- `js_sys::Promise<T>` now implements `IntoFuture`, enabling direct `.await` on\n  any JS promise without a wrapper type. The `wasm-bindgen-futures` implementation\n  has been moved into `js-sys` behind an optional `futures` feature, which is\n  activated automatically when `wasm-bindgen-futures` is a dependency. All\n  existing `wasm_bindgen_futures::*` import paths continue to work unchanged via\n  re-exports. `js_sys::futures` is also available directly for users who want\n  `promise.await` without depending on `wasm-bindgen-futures`.\n  [#&#8203;5049](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5049)\n\n- Added `--target emscripten` support, generating a `library_bindgen.js` file\n  for consumption by Emscripten at link time. Includes support for futures,\n  JS closures, and TypeScript output. A new Emscripten-specific test runner is\n  also included, along with CI integration.\n  [#&#8203;4443](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4443)\n\n- Added `VideoFrame`, `VideoColorSpace`, and related WebCodecs dictionaries/enums to `web-sys`.\n  [#&#8203;5008](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5008)\n\n- Added `wasm_bindgen::handler` module with `set_on_abort` and `set_on_reinit`\n  hooks for `panic=unwind` builds. `set_on_abort` registers a callback invoked\n  after the instance is terminated (hard abort, OOM, stack overflow).\n  `set_on_reinit` registers a callback invoked after `reinit()` resets the\n  WebAssembly instance via `--experimental-reset-state-function`. Handlers are\n  stored as Wasm indirect-function-table indices so dispatch is safe even when\n  linear memory is corrupt.\n\n##### Changed\n\n- Replaced per-closure generic destructors with a single `__wbindgen_destroy_closure`\n  export.\n  [#&#8203;5019](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5019)\n\n- Refactored the headless browser test runner logging pipeline for dramatically improved\n  performance (>400x faster on Chrome, >10x on Firefox, \\~5x on Safari). Switched to\n  incremental DOM scraping with `textContent.slice(offset)`, append-only output semantics,\n  unified log capture across all log levels on failure, and browser-specific invisible-div\n  optimizations (`display:none` for Chrome/Firefox, `visibility:hidden` for Safari).\n  [#&#8203;4960](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4960)\n\n- TTY-gated status/clear output in the test runner shell to avoid `\\r` control-character\n  artifacts in non-interactive (CI) environments.\n  [#&#8203;4960](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4960)\n\n- Added `bench_console_log_10mb` benchmark alongside the existing 1MB benchmark for the\n  headless test runner. The main branch cannot complete this benchmark at any volume.\n  [#&#8203;4960](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4960)\n\n- Updated to Walrus 0.26\n  [#&#8203;5057](https://redirect.github.com/wasm-bindgen/walrus/pull/5057)\n\n##### Fixed\n\n- Fixed argument order when calling multi-parameter functions in the\n  `wasm-bindgen` interpreter by reversing the args collected from the stack.\n  [#&#8203;5047](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5047)\n\n- Added support for per-operation `[WbgGeneric]` in WebIDL, restoring typed\n  generic return types (e.g. `Promise<ImageBitmap>`) for `createImageBitmap` on\n  `Window` and `WorkerGlobalScope` that were lost after the `VideoFrame`\n  stabilization.\n  [#&#8203;5026](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5026)\n\n- Fixed missing `#[cfg(feature = \"...\")]` gates on deprecated dictionary builder\n  methods and getters for union-typed fields (e.g. `{Open,Save,Directory}FilePickerOptions::start_in()`),\n  and fixed per-setter doc requirements to list each setter's own required features.\n  [#&#8203;5039](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5039)\n\n- Fixed `JsOption::new()` to use `undefined` instead of `null`, to be compatible with `Option::None` and JS default parameters.\n  [#&#8203;5023](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5023)\n\n- Fixed unsound `unsafe` transmutes in `JsOption<T>::wrap`, `as_option`, and `into_option`\n  by replacing `transmute_copy` with `unchecked_into()`. Also tightened the `JsGeneric`\n  trait bound and `JsOption<T>` impl block to require `T: JsGeneric` (which implies `JsCast`),\n  preventing use with arbitrary non-JS types.\n  [#&#8203;5030](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5030)\n\n- Fixed headless test runner emitting `\\r` carriage-return sequences in non-TTY environments,\n  which polluted captured logs in CI and complicated output-matching tests.\n  [#&#8203;4960](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4960)\n\n- Fixed headless test runner printing incomplete and out-of-order log output on test failures\n  by merging all five log levels into a single unified output div.\n  [#&#8203;4960](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4960)\n\n- Fixed large test outputs (10MB+) causing oversized WebDriver responses that were either\n  extremely slow or crashed completely, by switching to incremental streaming output collection.\n  [#&#8203;4960](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4960)\n\n- Fixed a duplciate wasm export in node ESM atomics, when compiled in debug mode\n  [#&#8203;5028](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5028)\n\n- Fixed a type inference regression (`E0283: type annotations needed`) introduced\n  in v0.2.109 where the stable `FromIterator` and `Extend` impls on `js_sys::Array`\n  were changed from `A: AsRef<JsValue>` to `A: AsRef<T>`. Because `#[wasm_bindgen]`\n  generates multiple `AsRef` impls per type, the compiler could not uniquely resolve\n  `T`, breaking code like `Array::from_iter([my_wasm_value])` without explicit\n  annotations. The stable impls are restored to `A: AsRef<JsValue>` (returning\n  `Array<JsValue>`); the generic `A: AsRef<T>` forms remain available under\n  `js_sys_unstable_apis`.\n  [#&#8203;5052](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5052)\n\n- Fixed `skip_typescript` not being respected when using `reexport`, causing\n  TypeScript definitions to be incorrectly emitted for re-exported items marked\n  with `#[wasm_bindgen(skip_typescript)]`.\n  [#&#8203;5051](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5051)\n\n##### Removed\n\n### [`v0.2.114`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02114)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.113...0.2.114)\n\n##### Added\n\n- Added `[WbgGeneric]` WebIDL extended attribute for opting stable dictionary and interface\n  definitions into typed generics (the same signatures unstable APIs use), avoiding legacy\n  `&JsValue` fallbacks. Applied to all new VideoFrame-related types.\n  [#&#8203;5008](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5008)\n\n- Added `unchecked_optional_param_type` attribute for marking exported function parameters as\n  optional in TypeScript (`?:`) and JSDoc (`[paramName]`) output. Mutually exclusive with\n  `unchecked_param_type`. Required parameters after optional parameters are rejected at compile time.\n  [#&#8203;5002](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5002)\n\n- Added termination detection for `panic=unwind` builds. When a non-JS exception (e.g. a Rust\n  panic) escapes from Wasm, the instance is marked as terminated and subsequent calls from JS\n  into Wasm will throw a `Module terminated` error instead of re-entering corrupted state.\n  [#&#8203;5005](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5005)\n\n- When `--reset-state` is combined with `panic=unwind` builds, the Wasm instance is\n  automatically reset after a fatal termination, allowing subsequent calls to succeed\n  instead of throwing a `Module terminated` error.\n  [#&#8203;5013](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5013)\n\n##### Changed\n\n- Replaced runtime `0x80000000` vtable bit-flag for closure unwind safety with a\n  compile-time `const UNWIND_SAFE: bool` generic on the invoke shim, `OwnedClosure`,\n  and `BorrowedClosure`. Removes `OwnedClosureUnwind` and deduplicates internal\n  closure helpers. The public API is unchanged.\n  [#&#8203;5003](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5003)\n\n- Removed unused `IntoWasmClosureRef*::WithLifetime` types,\n  `WasmClosure::to_wasm_slice`, and a lifetime from\n  `IntoWasmClosureRef*`; moved `Static` associated type into `WasmClosure`.\n  [#&#8203;5003](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5003)\n\n##### Fixed\n\n- Fixed exported structs/enums/functions with the same `js_name` but different\n  `js_namespace` values producing symbol collisions at compile time, by deriving\n  internal wasm symbols from a qualified name that includes the namespace.\n  [#&#8203;4977](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4977)\n\n- Fixed soundness hole in `ScopedClosure`'s `UpcastFrom` that allowed to extend the lifetime after the original `ScopedClosure` was dropped.\n  [#&#8203;5006](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/5006)\n\n### [`v0.2.113`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02113)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.112...0.2.113)\n\n##### Changed\n\n- Reduced usage of `unsafe` code: replaced `transmute`/`transmute_copy` with safe\n  alternatives for `Boolean`/`Null`/`Undefined` constants and `ArrayTuple` conversions,\n  unified duplicated `AsRef`/`From` impls for generic imported types, and removed the\n  `__wbindgen_object_is_undefined` intrinsic in favor of a safe Rust-side equivalent.\n  [#&#8203;4993](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4993)\n\n- Renamed `__wbindgen_object_is_null_or_undefined` intrinsic to\n  `__wbindgen_is_null_or_undefined` and removed the `__wbindgen_object_is_undefined`\n  intrinsic, replacing it with a safe Rust-side check. The `is_null_or_undefined` check\n  now uses safe `&JsValue` ABI instead of raw `u32`.\n  [#&#8203;4994](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4994)\n\n##### Fixed\n\n- Fixed incorrect method naming for stable web-sys methods that reference unstable\n  types (e.g. `texImage2D` taking a `VideoFrame` parameter). These methods were\n  being named in a separate unstable expansion namespace, producing overly-short\n  names like `tex_image_2d` instead of the correct\n  `tex_image_2d_with_u32_and_u32_and_video_frame`. The fix separates the signature\n  classification to distinguish \"from unstable IDL\" (authoritative overrides) from\n  \"stable method using an unstable type\", ensuring the latter is named as part of\n  the stable expansion.\n  [#&#8203;4991](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4991)\n\n### [`v0.2.112`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02112)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.111...0.2.112)\n\n##### Removed\n\n- Removed `ImmediateClosure` type introduced in 0.2.109. Stack-borrowed `&dyn Fn` / `&mut dyn FnMut`\n  closures are now treated as unwind safe by default (panics are caught and converted to JS exceptions\n  with proper unwinding). A unified `ScopedClosure::immediate` approach may be revisited in a future\n  release.\n  [#&#8203;4986](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4986)\n\n### [`v0.2.111`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02111)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.110...0.2.111)\n\n##### Fixed\n\n- Restored backwards compatibility for breaking changes introduced in 0.2.110:\n  re-added deprecated `Promise::then2` binding, reverted `Promise::all_settled`\n  stable signature to take `&JsValue` instead of owned `Object`, and added\n  default type parameters (`= JsValue`) to `ArrayIntoIter`, `ArrayIter`, and\n  `Iter` structs.\n  [#&#8203;4979](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4979)\n\n### [`v0.2.110`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02110)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.109...0.2.110)\n\n##### Changed\n\n- Refactor new closure methods - ensures that all closure constructor functions have the variants `Closure::foo()`, `Closure::foo_aborting()` and\n  `Closure::foo_assert_unwind_safe()` this then fully allows switching from the UnwindSafe bound now being applies on foo() to use one of the\n  alternatives, given these limitations of AssertUnwindSafe. The same applies to `ImmediateClosure`. In addition, mutable reentrancy guards are\n  added for `ImmediateClosure`, and it is updated to be pass-by-value as well.\n  [#&#8203;4975](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4975)\n\n##### Fixed\n\n- Fixed a regression where Array.of1,... variants using generic `Array<T>` broke inference.\n  Reverted to use non-generic JsValue arguments. In addition extends generic class hoisting to\n  for constructors to also include `static_method_of` methods returning the own type, to allow\n  `Array::of` generic to now be on the `Array<T>` impl block.\n  [#&#8203;4974](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4974)\n\n### [`v0.2.109`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02109)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.108...0.2.109)\n\n##### Added\n\n- Added support for erasable generic type parameters on imported JavaScript types,\n  using sound type erasure in JS bindgen boundary. Includes updated js-sys bindings\n  with generic implementations for many standard JS types and functions including\n  `Array<T>`, `Promise<T>`, `Map<K, V>`, `Iterator<T>`, and more.\n  [#&#8203;4876](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4876)\n\n- Added `ScopedClosure<'a, T>` as a unified closure type with lifetime parameter. `ScopedClosure::borrow(&f)` (for immutable `Fn`) and `ScopedClosure::borrow_mut(&mut f)` (for mutable `FnMut`) create borrowed closures that can capture non-`'static` references, ideal for immediate/synchronous JS callbacks. `Closure<T>` is now a type alias for `ScopedClosure<'static, T>`, maintaining backwards compatibility. Also added `IntoWasmAbi` implementation for `Closure<T>` enabling pass-by-value ownership transfer to JavaScript.\n\n- Added `ImmediateClosure<'a, T>` as a lightweight, unwind-safe replacement for\n  `&dyn FnMut` in immediate/synchronous callbacks. Unlike `ScopedClosure`, it has\n  no JS call on creation, no JS call on drop, and no GC overhead—the same ABI as\n  `&dyn FnMut` but with panic safety. Use `ImmediateClosure::new(&f)` for\n  immutable `Fn` closures (easier to satisfy unwind safety) or `ImmediateClosure::new_mut(&mut f)` for\n  mutable `FnMut` closures. Closure parameter types are automatically inferred from context.\n  Also implements `From<&ImmediateClosure<T>> for ScopedClosure<T>` for API migration.\n  [#&#8203;4950](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/4950)\n\n- Implement `#[wasm_bindgen(catch)]` exception handling directly in Wasm using\n  `WebAssembly.JSTag` when Wasm exception handling is available. This generates\n  smaller and faster code by avoiding JavaScript `handleError` wrapper functions.\n  [#&#8203;4942](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4942)\n\n- Add Node.js `worker_threads` support for atomics builds. When targeting Node.js with atomics enabled, wasm-bindgen now generates `initSync({ module, memory, thread_stack_size })` and `__wbg_get_imports(memory)` functions that allow worker threads to initialize with a shared WebAssembly.Memory and pre-compiled module. Auto-initialization occurs only on the main thread for backwards compatibility.\n\n- Added a panic message when a getter has more than one argument.\n  [#&#8203;4936](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4936)\n\n- Added support for WebIDL namespace attributes in `wasm-bindgen-webidl`. This enables\n  APIs like the CSS Custom Highlight API which adds the `highlights` attribute to the `CSS` namespace.\n  [#&#8203;4930](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/4930)\n\n- Added stable `ShowPopoverOptions` dictionary and `show_popover_with_options()` method to\n  `HtmlElement`, and unstable `TogglePopoverOptions` dictionary per the WHATWG HTML spec.\n  [#&#8203;4968](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4968)\n\n- Added unstable Geolocation API types per the latest W3C spec: `GeolocationCoordinates`,\n  `GeolocationPosition`, and `GeolocationPositionError`. The `Geolocation` interface now\n  has both stable methods (using the old `Position`/`PositionError` types with `[Throws]`)\n  and unstable methods (using the new types without `[Throws]}`, matching actual browser behavior).\n  [#&#8203;2578](https://redirect.github.com/AbesBend662/AbesBend662.github.io/pull/2578)\n\n- Added `matrixTransform()` method to `DOMPointReadOnly` in `web-sys`.\n  [#&#8203;4962](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4962)\n\n- Added the `web` and `node` targets to the `--experimental-reset-state-function` flag.\n  [#&#8203;4909](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4909)\n\n- Added `oncancel` event handler to `GlobalEventHandlers` (available on `HtmlElement`,\n  `Document`, `Window`, etc.).\n  [#&#8203;4542](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4542)\n\n- Added `CommandEvent` and `CommandEventInit` from the Invoker Commands API.\n  [#&#8203;4552](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4552)\n\n- Added `AbstractRange`, `StaticRange`, and `StaticRangeInit` interfaces.\n  [#&#8203;4221](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4221)\n\n- Updated WebCodecs API to Working Draft 2026-01-29 and MediaRecorder API to 2025-04-17.\n  Added `rotation` and `flip` to `VideoDecoderConfig`.\n  [#&#8203;4411](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4411)\n\n- Added support for unstable WebIDL to override stable attribute types, allowing\n  corrected type signatures behind `web_sys_unstable_apis`. Applied to `MouseEvent`\n  coordinate attributes (`clientX`, `clientY`, `screenX`, `screenY`, `offsetX`,\n  `offsetY`, `pageX`, `pageY`) which now return `f64` instead of `i32` when\n  unstable APIs are enabled, per the CSSOM View spec draft.\n  [#&#8203;4935](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4935)\n\n- Added support for unstable WebIDL to override stable method return types. This\n  enables User Timing Level 3 APIs where `Performance.mark()` and `Performance.measure()`\n  return `PerformanceMark` and `PerformanceMeasure` respectively (instead of `undefined`)\n  when `web_sys_unstable_apis` is enabled. Also added `PerformanceMarkOptions`,\n  `PerformanceMeasureOptions`, and the `detail` attribute on marks/measures.\n  [#&#8203;3734](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/3734)\n\n- Added non-standard `mode` option for `FileSystemFileHandle.createSyncAccessHandle()`.\n  Also improved WebIDL generator to track stability at the signature level, allowing\n  stable methods to have unstable overloads.\n  [#&#8203;4928](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/4928)\n\n- Updated WebGPU bindings to the February 2026 spec. Dictionary fields with union\n  types now generate multiple type-safe setters (e.g. `set_resource_gpu_sampler()`,\n  `set_resource_gpu_texture_view()`) alongside a deprecated fallback setter. Sequence\n  arguments in unstable APIs now use typed slices (`&[T]`) instead of `&JsValue`.\n  Fixed inner string enum types to use `JsString` in generic positions, added `BigInt`\n  to builtin identifiers, and fixed dictionary field feature gates to not over-constrain\n  getters with setter type requirements.\n  [#&#8203;4955](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4955)\n\n- Improved dictionary union type expansion: stable fallback setters are no longer\n  deprecated, and unstable builder methods now use the first typed variant instead\n  of `&JsValue`. Dictionaries with required union fields now generate expanded\n  constructors for each variant (e.g. `new()`, `new_with_gpu_texture_view()`),\n  with duplicate-signature variants elided.\n  [#&#8203;4966](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4966)\n\n##### Changed\n\n- Increased externref stack size from 128 to 1024 slots to prevent \"table index is out of bounds\"\n  errors in applications with deep call stacks or many concurrent async operations.\n  [#&#8203;4951](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4951)\n\n- `Closure::new()`, `Closure::once()`, and related methods now require `UnwindSafe` bounds on closures when building with `panic=unwind`. New `_aborting` variants (`new_aborting()`, `once_aborting()`, etc.) are provided for closures that don't need panic catching and want to avoid the `UnwindSafe` requirement.\n  [#&#8203;4893](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4893)\n\n- `global` does not use the unsafe-eval `new Function` trick anymore allowing to have CSP strict compliant packages with `wasm-bindgen`.\n  [#&#8203;4910](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4910)\n\n- `eval` and `Function` constructors are now gated behind the `unsafe-eval` feature.\n  [#&#8203;4914](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4914)\n\n##### Fixed\n\n- Fixed incorrect JS export names when LLVM merges identical functions at `opt-level >= 2`.\n  [#&#8203;4946](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/4946)\n\n- Fixed incorrect `Closure` adapter deduplication when wasm-ld's Identical Code Folding merges\n  invoke functions for different closure types into the same export.\n  [#&#8203;4953](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/4953)\n\n- Fixed `ReferenceError` when using Rust struct names that conflict with JS builtins (e.g., `Array`).\n  The constructor now correctly uses the aliased `FinalizationRegistry` identifier.\n  [#&#8203;4932](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4932)\n\n- Fixed `Element::scroll_top()`, `Element::scroll_left()`, and `HtmlElement::scroll_top()`\n  to return `f64` instead of `i32` per the CSSOM View spec, behind `web_sys_unstable_apis`.\n  The stable API is unchanged for backwards compatibility.\n  [#&#8203;4525](https://redirect.github.com/wasm-bindgen/wasm-bindgen/issues/4525)\n\n- Added spec-compliant `i32` parameter types for `CanvasRenderingContext2d::get_image_data()`\n  and `put_image_data()` (and `OffscreenCanvasRenderingContext2d` equivalents) behind\n  `web_sys_unstable_apis`. Per the HTML spec, `getImageData` and `putImageData` use `long`\n  (i32) for coordinates, not `double` (f64). The stable API is unchanged for backwards\n  compatibility.\n  [#&#8203;1920](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/1920)\n\n- Fixed incorrect `#[cfg(web_sys_unstable_apis)]` gating on stable method signatures that\n  share a WebIDL operation with unstable overloads. For example, `Clipboard.read()` (0 args)\n  was incorrectly gated as unstable because the unstable `read(options)` overload existed.\n  The WebIDL code generator now uses an authoritative expansion model where stable and unstable\n  signature sets are built independently and compared: identical signatures merge (no gate),\n  stable-only signatures get `not(unstable)`, and unstable-only signatures get `unstable`.\n  Also adds typed generics (`Promise<T>`, `Array<T>`, `Function<fn(...)>`, etc.) to all\n  unstable API methods, and adds missing `PhotoCapabilities`, `PhotoSettings`,\n  `MediaSettingsRange`, `Point2D`, `RedEyeReduction`, `FillLightMode`, and `MeteringMode`\n  types from the W3C Image Capture spec.\n  [#&#8203;4964](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4964)\n\n- Fixed `unfulfilled_lint_expectations` warnings when using `#[expect(...)]` attributes\n  on functions annotated with `#[wasm_bindgen]`. The `#[expect]` attributes are now\n  converted to `#[allow]` in generated code to prevent spurious warnings.\n  [#&#8203;4409](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4409)\n\n### [`v0.2.108`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02108)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.107...0.2.108)\n\n##### Fixed\n\n- Fixed regression where `panic=unwind` builds for non-Wasm targets would trigger `UnwindSafe` assertions.\n  [#&#8203;4903](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4903)\n\n### [`v0.2.107`](https://redirect.github.com/wasm-bindgen/wasm-bindgen/blob/HEAD/CHANGELOG.md#02107)\n\n[Compare Source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/compare/0.2.106...0.2.107)\n\n##### Added\n\n- Support catching panics, and raising JS Exceptions for them, when building\n  with panic=unwind on nightly, with the `std` feature.\n  [#&#8203;4790](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4790)\n\n- Added support for passing `&[JsValue]` slices from Rust to JavaScript functions.\n  [#&#8203;4872](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4872)\n\n- Added `private` attribute on exported types to allow generating\n  exports and structs as implicit internal exported types for function\n  arguments and returns, without exporting them on the public interface.\n  [#&#8203;4788](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4788)\n\n- Added `iter_custom` and `iter_custom_future` for bench to do custom measurements.\n  [#&#8203;4841](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4841)\n\n- Added [Window Management API](https://w3c.github.io/window-management/).\n  [#&#8203;4843](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4843)\n\n##### Changed\n\n- Changed WASM import namespace from `wbg` to `./{name}_bg.js` for `web` and `no-modules` targets,\n  aligning with `bundler` and `experimental-nodejs-module` to enable cross-target WASM sharing.\n  [#&#8203;4850](https://redirect.github.com/rustwasm/wasm-bindgen/pull/4850)\n\n- Replace `WASM_BINDGEN_UNSTABLE_TEST_PROFRAW_OUT` and `WASM_BINDGEN_UNSTABLE_TEST_PROFRAW_PREFIX` with parsing `LLVM_PROFILE_FILE` analogous to Rust test coverage.\n  [#&#8203;4367](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4367)\n\n- Typescript custom sections sorted alphabetically across codegen-units.\n  [#&#8203;4738](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4738)\n\n- Optimized demangling performance by removing redundant string formatting\n  [#&#8203;4867](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4867)\n\n- Changed WASM import namespace from `__wbindgen_placeholder__` to `./{name}_bg.js` for `node` targets, aligning with `bundler` and `experimental-nodejs-module` to enable cross-target WASM sharing.\n  [#&#8203;4869](https://redirect.github.com/rustwasm/wasm-bindgen/pull/4869)\n\n- Changed WASM import namespace from `__wbindgen_placeholder__` to `./{name}_bg.js` for `deno` and `module` targets, aligning with `node`, `bundler` and `experimental-nodejs-module` to enable cross-target WASM sharing.\n  [#&#8203;4871](https://redirect.github.com/rustwasm/wasm-bindgen/pull/4871)\n\n- Consolidate JavaScript glue generation\n  Move target-specific JS emission into a single finalize phase, reducing\n  branching and making the generated output more consistent across targets.\n  - Centralize JS output assembly in a single finalize phase (exports/imports/wasm loading).\n  - Make `--target experimental-nodejs-module` emit one JS entrypoint (no separate `_bg.js`).\n  - Ensure Node (CJS/ESM) and bundler entrypoints only expose public exports (no internal import shims).\n  - Add `/* @&#8203;ts-self-types=\"./<name>.d.ts\" */` to JS entrypoints for JSR/Deno resolution.\n  - Refresh reference test fixtures.\n    [#&#8203;4879](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4879)\n\n- Forward worker errors to test output in the test runner.\n  [#&#8203;4855](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4855)\n\n##### Fixed\n\n- Fix: Include doc comments in TypeScript definitions for classes\n  [#&#8203;4858](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4858)\n\n- Interpreter: support try\\_table blocks\n  [#&#8203;4862](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4862)\n\n- Interpreter: Stop interpretting descriptor after `__wbindgen_describe_cast`\n  [#&#8203;4862](https://redirect.github.com/wasm-bindgen/wasm-bindgen/pull/4898)\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👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.\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:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjMuOCIsInVwZGF0ZWRJblZlciI6IjQzLjEyMy44IiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWxvcCIsImxhYmVscyI6W119-->\n",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-18T00:02:32Z",
      "mergedAt": "2026-04-20T05:24:24Z",
      "additions": 114,
      "deletions": 44
    },
    {
      "id": "PR_kwDOMT5cIs7Tp_Cz",
      "title": "feat: add plugin-hiveexchange — agent-native prediction markets",
      "author": "srotzin",
      "number": 6963,
      "body": "Adds @elizaos/plugin-hiveexchange — a drop-in plugin giving any Eliza character access to HiveExchange, a live agent-to-agent prediction market network.\r\n\r\nWhat it adds:\r\n\r\n- BROWSE_HIVEEXCHANGE_MARKETS action — fetches top markets from 233 live predictions covering AI benchmarks, blockchain, agent infrastructure, ZK benchmarks, and compliance\r\n- WATCH_GENESIS_AGENTS action — streams live activity from 6 autonomous Genesis agents already trading on-chain\r\n\r\nUsage:\r\n\r\nimport hiveExchangePlugin from '@elizaos/plugin-hiveexchange'\r\ncharacter.plugins = [hiveExchangePlugin]\r\n\r\nNo API key required. Any agent with a Hive DID (free at https://hivegate.onrender.com/v1/gate/onboard) can trade. First DID is free.\r\n\r\nLive endpoints:\r\n- Markets: https://hiveexchange-service.onrender.com/v1/exchange/predict/markets\r\n- Genesis feed: https://hiveexchange-service.onrender.com/v1/exchange/genesis/feed\r\n- Agent card: https://hiveexchange-service.onrender.com/.well-known/agent.json\r\n\r\n233 markets, 6 Genesis agents active now.\r\n\r\n— Steve Rotzin, TheHiveryIQ / HiveExchange\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR introduces `@elizaos/plugin-hiveexchange`, a single-file plugin that adds two read-only actions for browsing HiveExchange prediction markets and watching Genesis agent activity feeds.\n\nThe implementation is missing a `package.json` and `tsconfig.json`, meaning it cannot be published or installed as `@elizaos/plugin-hiveexchange` as described. Both handlers also lack error handling — an HTTP error or network failure from the external `onrender.com` service will throw an unhandled exception into the runtime, and the `data.markets || data` fallback in the markets handler will throw `TypeError: .slice is not a function` against any non-array API error response.\n\n<h3>Confidence Score: 2/5</h3>\n\nNot safe to merge — missing package manifest prevents installation and unhandled fetch errors will crash the agent runtime.\n\nTwo P1 issues: (1) both action handlers have no try/catch and no res.ok check, so any HTTP error or network failure throws unhandled into the runtime; (2) the data.markets || data fallback will throw TypeError when the API returns a non-array error object. Additionally, the package is missing package.json and tsconfig.json, so it cannot be built or published as the PR description claims.\n\npackages/plugin-hiveexchange/index.ts — the only file, needs error handling, array safety, and proper package scaffolding files.\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/plugin-hiveexchange/index.ts | New plugin with two actions (BROWSE_HIVEEXCHANGE_MARKETS, WATCH_GENESIS_AGENTS); missing package.json/tsconfig, no error handling on fetch, unsafe array access, any-typed callback, hardcoded URL, and no fetch timeout. |\n\n</details>\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant Agent as Eliza Agent\n    participant Plugin as plugin-hiveexchange\n    participant HX as hiveexchange-service.onrender.com\n\n    Agent->>Plugin: BROWSE_HIVEEXCHANGE_MARKETS action triggered\n    Plugin->>HX: GET /v1/exchange/predict/markets?limit=10\n    HX-->>Plugin: { markets: [...] }\n    Plugin-->>Agent: callback({ text: \"Top markets...\" })\n\n    Agent->>Plugin: WATCH_GENESIS_AGENTS action triggered\n    Plugin->>HX: GET /v1/exchange/genesis/feed?limit=5\n    HX-->>Plugin: { feed: [...] }\n    Plugin-->>Agent: callback({ text: \"Live Genesis activity...\" })\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"Add HiveExchange plugin for prediction m...\"](https://github.com/elizaos/eliza/commit/d5108b216b600a351701c9e08374820555b6d72e) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28882870)</sub>\n\n> Greptile also left **5 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-19T00:54:17Z",
      "mergedAt": null,
      "additions": 51,
      "deletions": 0
    },
    {
      "id": "PR_kwDOMT5cIs7T9NkA",
      "title": "feat(core): PROMPT_OUTPUT_FORMAT env var for dynamicPromptExecFromState",
      "author": "standujar",
      "number": 6978,
      "body": "## Motivation\n\n`dynamicPromptExecFromState` defaults to TOON encapsulation, which is optimal for models trained/tuned to emit it reliably (Claude). Models like **Gemini 2.5 Pro** or **Llama via Ollama** tend to produce TOON inconsistently — or wrap it in markdown fences, add preamble, etc. — causing parser failures that aren't actionable from user code.\n\nForking core or monkey-patching the runtime just to flip a default is a poor DX. This adds a single env-var lever operators can set.\n\n## Change\n\n- New env var `PROMPT_OUTPUT_FORMAT` — accepted values: `toon`, `xml`, `json` (case-insensitive).\n- When set, `dynamicPromptExecFromState` uses it as the default format instead of `TOON`.\n- Per-call `options.preferredEncapsulation` and `options.forceFormat` still win → no silent override of callers that explicitly chose a format.\n- Unset or unrecognized → `TOON` (current behavior preserved).\n\nOne helper exported (`resolveDefaultOutputFormat`) so it can be reused/tested directly.\n\n## Why not override caller preferences\n\nThe minimal PR respects the layered defaults: env var only sets the baseline, not a forced override. For cases where callers hardcode `\"toon\"` and you want to override anyway, consumers can monkey-patch `dynamicPromptExecFromState` locally (as soulmates is doing while waiting for this to land). If there's interest in a second `PROMPT_FORCE_OUTPUT_FORMAT` env with override semantics, happy to add it in a follow-up.\n\n## Test plan\n\n- [x] `packages/typescript/src/__tests__/resolve-default-output-format.test.ts` — 15 cases covering supported values, case-insensitivity, whitespace trimming, and fallback for non-string / unknown values.\n- [x] Validated end-to-end on a downstream project (Soulmates) using Gemini 2.5 Pro via Vertex AI — 18/19 turns pass with `PROMPT_OUTPUT_FORMAT=xml` + `VALIDATION_LEVEL=trusted`.\n- [x] Backwards compat: unset env → identical behavior to current `develop`.\n\n## Diff size\n\n22 insertions / 1 deletion in `runtime.ts` + one new focused test file. Surgical change.\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR adds a `PROMPT_OUTPUT_FORMAT` env var that lets operators change the default structured-output format used by `dynamicPromptExecFromState` from `TOON` to `xml` or `json`, addressing reliability issues with Gemini/Llama models that misparse TOON output.\n\n- **P1**: The PR's stated guarantee — \"per-call `options.preferredEncapsulation` still wins\" — is broken for the `\"toon\"` value. There is no explicit `else if` branch for `preferredEncapsulation === \"toon\"`, so callers in `message.ts` (lines 3819, 5672) that explicitly pass `preferredEncapsulation: \"toon\"` will silently receive the env-var format when `PROMPT_OUTPUT_FORMAT` is set to `xml` or `json`.\n\n<h3>Confidence Score: 4/5</h3>\n\nNot safe to merge as-is: setting PROMPT_OUTPUT_FORMAT will silently override explicit preferredEncapsulation: \"toon\" calls in message.ts.\n\nOne P1 logic bug: callers that explicitly set preferredEncapsulation: \"toon\" (multiple sites in message.ts) are not guarded by an explicit else-if branch, so the env var default bleeds through and overrides them — contradicting the PR's stated contract. Fix is a one-line addition.\n\npackages/typescript/src/runtime.ts — the format resolution else-if chain needs an explicit \"toon\" arm.\n\n<h3>Important Files Changed</h3>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/runtime.ts | Adds `resolveDefaultOutputFormat` export and wires `PROMPT_OUTPUT_FORMAT` env var as the baseline format; the `preferredEncapsulation: \"toon\"` case is not explicitly handled in the else-if chain, silently overriding callers that relied on it. |\n| packages/typescript/src/__tests__/resolve-default-output-format.test.ts | New unit tests for `resolveDefaultOutputFormat` covering case-insensitivity, whitespace trimming, and fallback; missing an integration-level test for the `preferredEncapsulation: \"toon\"` override scenario. |\n\n</details>\n\n\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[dynamicPromptExecFromState called] --> B[\"format = resolveDefaultOutputFormat(getSetting('PROMPT_OUTPUT_FORMAT'))\"]\n    B --> C{options.forceFormat set?}\n    C -- Yes --> D{forceFormat=xml AND hasNestedSchema?}\n    D -- Yes --> E[format = JSON]\n    D -- No --> F[\"format = forceFormat.toUpperCase()\"]\n    C -- No --> G{preferredEncapsulation=json OR hasNestedSchema?}\n    G -- Yes --> H[format = JSON]\n    G -- No --> I{preferredEncapsulation=xml?}\n    I -- Yes --> J[format = XML]\n    I -- No --> K[\"⚠️ preferredEncapsulation='toon' falls through — env var wins\"]\n    K --> L[format unchanged from env var default]\n    E --> M[Use format for LLM call]\n    F --> M\n    H --> M\n    J --> M\n    L --> M\n```\n\n<!-- greptile_failed_comments -->\n<details><summary><h3>Comments Outside Diff (2)</h3></summary>\n\n1. `packages/typescript/src/runtime.ts`, line 5121-5125 ([link](https://github.com/elizaos/eliza/blob/b888253902f3422a26046a1ca161d76a4d15ab20/packages/typescript/src/runtime.ts#L5121-L5125)) \n\n   <a href=\"#\"><img alt=\"P1\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p1.svg?v=7\" align=\"top\"></a> **`preferredEncapsulation: \"toon\"` silently ignored when env var is set**\n\n   The PR's stated contract is \"per-call `options.preferredEncapsulation` still wins — no silent override.\" But the `else if` chain has no branch for `preferredEncapsulation === \"toon\"`. Before this PR the omission was harmless because the hardcoded default was already `\"TOON\"`. Now, if an operator sets `PROMPT_OUTPUT_FORMAT=xml` (or `json`) and a caller explicitly passes `{ preferredEncapsulation: \"toon\" }`, the env var value wins instead of the per-call preference — breaking the contract.\n\n2. `packages/typescript/src/runtime.ts`, line 5157-5161 ([link](https://github.com/elizaos/eliza/blob/cb500f9b2df0459182dbdadc833d3f9374b39872/packages/typescript/src/runtime.ts#L5157-L5161)) \n\n   <a href=\"#\"><img alt=\"P1\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p1.svg?v=7\" align=\"top\"></a> **`preferredEncapsulation: \"toon\"` silently ignored when env var is set**\n\n   The PR claims \"Per-call `options.preferredEncapsulation` still wins,\" but there is no `else if` branch for `\"toon\"`. When `PROMPT_OUTPUT_FORMAT=xml` (or `json`) is set, callers that explicitly pass `preferredEncapsulation: \"toon\"` will receive the env-var format instead of TOON. At least two call sites in `message.ts` (lines 3819 and 5672) do exactly this and would be silently broken.\n\n</details>\n\n<!-- /greptile_failed_comments -->\n\n<sub>Reviews (2): Last reviewed commit: [\"Update packages/typescript/src/runtime.t...\"](https://github.com/elizaos/eliza/commit/cb500f9b2df0459182dbdadc833d3f9374b39872) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28980492)</sub>\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-20T13:04:12Z",
      "mergedAt": "2026-04-21T09:47:32Z",
      "additions": 48,
      "deletions": 1
    }
  ],
  "codeChanges": {
    "additions": 179,
    "deletions": 87,
    "files": 17,
    "commitCount": 133
  },
  "completedItems": [
    {
      "title": "chore(deps): update supabase/postgres docker tag to v17.6.1.108",
      "prNumber": 6959,
      "type": "other",
      "body": "This PR contains the following updates:\n\n| Package | Update | Change |\n|---|---|---|\n| supabase/postgres | patch | `17.6.1.107` → `17.6.1.108` |\n\n---\n\n> [!WARNING]\n> Some dependencies could not be looked up. Check the [Dependency Dashboard]",
      "files": [
        "packages/app-core/deploy/docker-compose.supabase-db.yml"
      ]
    },
    {
      "title": "fix(deps): update dependency @coral-xyz/borsh to ^0.32.0",
      "prNumber": 6958,
      "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| @&#8203;coral-xyz/borsh | [`^0.31.1` → ",
      "files": [
        "packages/benchmarks/solana/solana-gym-env/voyager/skill_runner/package.json"
      ]
    },
    {
      "title": "fix(deps): update capacitor monorepo to v8.3.1",
      "prNumber": 6957,
      "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| [@capacitor/cli](https://capacitorjs.co",
      "files": [
        "packages/app-core/package.json",
        "packages/elizaos/templates/fullstack-app/apps/app/package.json",
        "packages/templates/fullstack-app/apps/app/package.json"
      ]
    },
    {
      "title": "chore(deps): update dependency @uniswap/v3-sdk to v3.30.0",
      "prNumber": 6956,
      "type": "other",
      "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| [@uniswap/v3-sdk](https://redirect.gith",
      "files": [
        "package.json"
      ]
    },
    {
      "title": "chore(deps): update dependency @uniswap/v2-sdk to v4.20.0",
      "prNumber": 6955,
      "type": "other",
      "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| [@uniswap/v2-sdk](https://redirect.gith",
      "files": [
        "package.json"
      ]
    },
    {
      "title": "chore(deps): update dependency @types/node to v25.6.0",
      "prNumber": 6954,
      "type": "other",
      "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| [@types/node](https://redirect.github.c",
      "files": [
        "package.json"
      ]
    },
    {
      "title": "chore(deps): update dependency @capacitor/docgen to ^0.3.0",
      "prNumber": 6953,
      "type": "other",
      "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| [@capacitor/docgen](https://capacitorjs",
      "files": [
        "packages/native-plugins/location/package.json",
        "packages/native-plugins/talkmode/package.json"
      ]
    },
    {
      "title": "fix(deps): update dependency gymnasium to ~=1.2.3",
      "prNumber": 6952,
      "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| [gymnasium](https://redirect.github.com",
      "files": [
        "packages/benchmarks/OSWorld/pyproject.toml",
        "packages/benchmarks/OSWorld/uv.lock"
      ]
    },
    {
      "title": "fix(deps): update dependency com.android.tools.build:gradle to v8.13.2",
      "prNumber": 6951,
      "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| [com.android.tools.build:gradle](https:",
      "files": [
        "packages/app-core/platforms/android/build.gradle"
      ]
    },
    {
      "title": "chore(deps): update rust-wasm-bindgen monorepo",
      "prNumber": 6949,
      "type": "other",
      "body": "This PR contains the following updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n| [js-sys](https://wasm-bindgen.github.io/wasm-bindgen/) ([source](https://redirect.github.com/wasm-bindgen/wasm-bindgen/tree/HEAD/crates/js-sys",
      "files": [
        "packages/rust/Cargo.lock"
      ]
    },
    {
      "title": "fix: handle roomId changes in InMemoryDatabaseAdapter.updateMemories",
      "prNumber": 6965,
      "type": "bugfix",
      "body": "## Summary\nFix `updateMemories` to properly move memories between room lists when `roomId` changes.\n\n## Problem\nWhen a memory is updated with a new `roomId`, `updateMemories` updates the in-place reference in the old room's list but does no",
      "files": [
        "packages/typescript/src/database/inMemoryAdapter.ts"
      ]
    },
    {
      "title": "fix: lifeops discord routing + submodule bumps (supersedes #6968)",
      "prNumber": 6971,
      "type": "bugfix",
      "body": "Clean-pick of #6968 onto develop. The original PR branch (`milady/discord-ux-synced-20260419`) carries 19 commits including 3 sync-merges from develop, and its conflict surface against current develop is too large for `gh pr merge` to resol",
      "files": [
        "apps/app-lifeops/src/actions/life.ts",
        "apps/app-lifeops/src/actions/non-actionable-request.ts",
        "plugins/plugin-agent-orchestrator",
        "plugins/plugin-cron"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "lalalune",
      "avatarUrl": "https://avatars.githubusercontent.com/u/18633264?u=e2e906c3712c2506ebfa98df01c2cfdc50050b30&v=4",
      "totalScore": 86.39639723286918,
      "prScore": 85.95839723286917,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": null
    },
    {
      "username": "0xSolace",
      "avatarUrl": "https://avatars.githubusercontent.com/u/257989456?u=e0d4e0c6385403319241eb46ba647b49083d4a05&v=4",
      "totalScore": 67.59111091945839,
      "prScore": 67.59111091945839,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 31.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 31.5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "RemilioNubilio",
      "avatarUrl": "https://avatars.githubusercontent.com/u/275382225?u=b1501ee01bb54e5b31ca64895f2a07c69f554a37&v=4",
      "totalScore": 24.236207708399178,
      "prScore": 24.03620770839918,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 17.912023005428146,
      "prScore": 17.912023005428146,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "hanzlamateen",
      "avatarUrl": "https://avatars.githubusercontent.com/u/10975502?u=53f23921078d9a27d96751373bb44f4bd2d58bf4&v=4",
      "totalScore": 5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "enigma-zeroclaw",
      "avatarUrl": "https://avatars.githubusercontent.com/u/264714710?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "fel123",
      "avatarUrl": "https://avatars.githubusercontent.com/u/33407903?v=4",
      "totalScore": 0.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    }
  ],
  "newPRs": 14,
  "mergedPRs": 12,
  "newIssues": 1,
  "closedIssues": 3,
  "activeContributors": 10
}