{
  "interval": {
    "intervalStart": "2026-04-19T00:00:00.000Z",
    "intervalEnd": "2026-04-20T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-04-19 to 2026-04-20, elizaos/eliza had 4 new PRs (0 merged), 2 new issues, and 9 active contributors.",
  "topIssues": [
    {
      "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
    }
  ],
  "topPRs": [
    {
      "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_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_kwDOMT5cIs7To_EL",
      "title": "fix: clean discord chat UX — drop heartbeat + bump orchestrator pin",
      "author": "RemilioNubilio",
      "number": 6962,
      "body": "Companion to https://github.com/elizaos-plugins/plugin-agent-orchestrator/pull/37. Silences five classes of runtime-internal messages that have been leaking into Discord as console-log-style dumps.\n\n## Changes\n\n### 1. Delete `packages/agent/src/runtime/task-heartbeat.ts` + wiring in `packages/agent/src/api/server.ts`\n\nThe heartbeat posted `still working — Xs in (Bash)` per PTY session. When a single user prompt spawns multiple sessions (the common case with the swarm coordinator), the 120s room-level rate limit lets a second session's 45s ping through unchanged because the gap between sessions usually exceeds 2 minutes. Users saw duplicate `45s in` messages for the same prompt, sometimes after the actual result had already been posted.\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. Same rationale as a comparable upstream cleanup done a few weeks ago that got reverted when the submodule pin was bumped.\n\n### 2. Bump `plugins/plugin-agent-orchestrator`\n\nPicks up the chat-leak fixes in `START_CODING_TASK` / `SPAWN_AGENT` / coordinator / decision-loop / idle-watchdog (see the orchestrator PR).\n\n## Follows the 5 rules\n\n1. No wrappers — just delete + remove references.\n2. Reuses — nothing new to reuse.\n3. No new types.\n4. No new parameters.\n5. Responsibilities stay cleanly split — the WS broadcast path still reports session state; only the chat channel goes quiet.\n\n## Validation\n\nTested on a private Discord test channel via webhook. After the bump, \"make me a tiny dice roller page\" produces:\n1. `rolling` (LLM reply)\n2. Single synthesis summary after completion\n\nThe prior spam (launched-agents dump, 45s heartbeat, workspace path + task prompt dump, `Task finished. Code is at ...`, `Session lost`, `coordinator could not prove completion`) is gone.\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR removes the `task-heartbeat` module that was posting inconsistent \\\"still working — 45s in\\\" pings to Discord chat per PTY session, and bumps the `plugin-agent-orchestrator` submodule to pick up companion chat-leak fixes. The deletion is clean — no remaining references to `installTaskHeartbeat` or `task-heartbeat` exist anywhere in the codebase, and the synthesis callback (`handleSwarmSynthesis`) continues to deliver the final answer on completion.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge — clean deletion with no dangling references and a well-scoped submodule bump.\n\nAll remaining findings are P2 (a dead export in subagent-output.ts). No logic errors, no broken wiring, and no unaddressed references were found. The heartbeat removal is complete and the synthesis path is unaffected.\n\npackages/agent/src/runtime/subagent-output.ts — readCurrentActivityFromJsonl is now a dead export worth pruning in a follow-up.\n\n<h3>Important Files Changed</h3>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/agent/src/api/server.ts | Heartbeat import and wiring removed; no remaining task-heartbeat references; unrelated heartbeat identifiers (WebSocket, app-manager, SSE) are untouched. |\n| packages/agent/src/runtime/task-heartbeat.ts | File deleted cleanly; no remaining imports or re-exports reference it anywhere in the codebase. |\n| plugins/plugin-agent-orchestrator | Submodule pointer bumped from 920c2a1f4 to 911708224 on the alpha branch, picking up orchestrator chat-leak fixes. |\n\n</details>\n\n\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[User prompt via Discord] --> B[PTY sessions spawned]\n    B --> C{Before this PR}\n    B --> D{After this PR}\n\n    C --> C1[task-heartbeat fires after 45s per session]\n    C1 --> C2[Rate-limited per room — but second session often slips through]\n    C2 --> C3[User sees duplicate '45s in' pings, sometimes after the result]\n    C3 --> C4[handleSwarmSynthesis posts final answer]\n\n    D --> D2[Sessions run silently]\n    D2 --> D3[handleSwarmSynthesis posts final answer]\n\n    style C1 fill:#f88,stroke:#c00\n    style C2 fill:#f88,stroke:#c00\n    style C3 fill:#f88,stroke:#c00\n    style D2 fill:#8f8,stroke:#080\n    style D3 fill:#8f8,stroke:#080\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 125-155 ([link](https://github.com/elizaos/eliza/blob/7c15f9116268f25ee64d4586a9b8e6faca6f089d/packages/agent/src/runtime/subagent-output.ts#L125-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 removal**\n\n   `readCurrentActivityFromJsonl` was imported exclusively by `task-heartbeat.ts` (confirmed: no other callers exist in the codebase). Now that the heartbeat is gone, this function and its heartbeat-specific doc comment (`\"the user in a heartbeat\"`) are orphaned. It won't cause a runtime error, but it's dead code worth cleaning up in a follow-up.\n\n</details>\n\n<!-- /greptile_failed_comments -->\n\n<sub>Reviews (1): Last reviewed commit: [\"fix: clean up discord chat UX — drop hea...\"](https://github.com/elizaos/eliza/commit/7c15f9116268f25ee64d4586a9b8e6faca6f089d) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28877413)</sub>\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-18T21:49:27Z",
      "mergedAt": null,
      "additions": 30,
      "deletions": 148
    },
    {
      "id": "PR_kwDOMT5cIs7Txqiu",
      "title": "fix: lifeops discord routing + submodule bumps (plugin-agent-orchestrator discord-ux, plugin-cron maxJobs ceiling)",
      "author": "NubsCarson",
      "number": 6968,
      "body": "## Summary\n\n- app-lifeops LIFE action no longer includes CREATE_TASK / COMPLETE_TASK as similes. They collided with the orchestrator's own action name, making the action-selector LLM route ops/coding prompts to LIFE. LifeOps intent is still covered by the todo/habit/goal/reminder simile names plus the description.\n- New looksLikeCodingTaskRequest predicate; LIFE validate declines prompts that are clearly coding tasks so they fall through to CREATE_TASK.\n- Bumps plugins/plugin-agent-orchestrator to a branch carrying the discord-ux consolidation (bypass permissions fast-path, trust-seed, shell-to-claude prose guard, fallback synthesis, escalate-leak removal, waiting-for-input chat leak silence, LifeOps-guard in CREATE_TASK).\n- Bumps plugins/plugin-cron to a branch with maxJobsPerAgent 100 -> 1000 (prevents runtime bootstrap retry -> duplicate-coordinator race).\n\nUpstream submodule PRs: elizaos-plugins/plugin-agent-orchestrator#39 and elizaos-plugins/plugin-cron#3. After those land, this PR's submodule pointers can be re-bumped to upstream alpha tips.\n\n## Test plan\n- [x] 10/10 Discord webhook tests on a live milady bot (LifeOps routing, coding-task, REPLY paths, mentions, subagent PR chain)\n- [x] Orchestrator + cron tsc clean on the diff (pre-existing descriptionCompressed errors unrelated)\n- [x] Smoke-test after audit rebuild: uptime prompt returns clean synthesis\n- [x] Madge on orchestrator: zero circular deps\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Changes action routing and user-facing synthesis output across LifeOps and subagent coordination, so misclassification or degraded fallback behavior could affect what users see in chat. The logic is mostly guardrails and fallbacks, but it touches central message parsing/routing paths.\n> \n> **Overview**\n> **LifeOps routing:** Removes `CREATE_TASK`/`COMPLETE_TASK` from `LIFE` similes and adds a new `looksLikeCodingTaskRequest()` gate so clearly coding-oriented prompts fall through to the orchestrator instead of being handled by LifeOps.\n> \n> **Subagent synthesis & messaging robustness:** Updates swarm synthesis to prefer the subagent’s final `end_turn` text with a short retry to avoid jsonl flush races, avoids reading jsonl for `shell`/`pi` agents to prevent cross-session contamination, and removes the now-unused task heartbeat. Planner action parsing is made more lenient (recover `<name>` from malformed wrappers) and the planner now defaults to `REPLY` instead of `IGNORE` when it otherwise would produce silence.\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 2d2d35ac4c9f8dd3c899f5be0bfe4723949e175c. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR fixes action-routing collisions in `app-lifeops` by removing `CREATE_TASK`/`COMPLETE_TASK` from the `LIFE` action's similes and adding a new `looksLikeCodingTaskRequest` predicate to `validate()` so coding prompts fall through to the orchestrator. It also bumps `plugin-agent-orchestrator` and `plugin-cron` to feature-branch commits carrying discord-ux consolidation and a `maxJobsPerAgent` ceiling increase respectively — with the expectation that both submodules will be re-pointed to upstream alpha tips once the linked PRs land.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; all findings are P2 style/narrowness concerns in the new predicate, not blocking bugs.\n\nThe core routing fix (simile removal + validate guard) is correct and well-motivated. The three inline comments are about regex breadth and doc-comment terminology — none are runtime correctness issues. Submodule pinning to feature branches is an acknowledged temporary state documented in the PR description.\n\napps/app-lifeops/src/actions/non-actionable-request.ts — the `looksLikeCodingTaskRequest` regex width and the \"action\" noun entry deserve a second look before the predicate grows.\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| apps/app-lifeops/src/actions/non-actionable-request.ts | Adds `looksLikeCodingTaskRequest` predicate; regex spans broadly with `[^.]*` and includes \"action\" as an artifact noun, which may cause false positives for LifeOps prompts. |\n| apps/app-lifeops/src/actions/life.ts | Removes CREATE_TASK/COMPLETE_TASK from similes and adds `looksLikeCodingTaskRequest` to validate(); change is correct and well-motivated. |\n| plugins/plugin-agent-orchestrator | Submodule bumped to commit on an in-review feature branch (elizaos-plugins/plugin-agent-orchestrator#39); should be re-pointed to an upstream alpha tip once that PR lands. |\n| plugins/plugin-cron | Submodule bumped to commit on a feature branch raising maxJobsPerAgent 100→1000 (elizaos-plugins/plugin-cron#3); awaiting upstream merge before re-pointing to alpha tip. |\n| packages/agent/src/api/server.ts | Changes appear to be from the upstream develop merge rather than the core fix; no issues identified in the visible diff context. |\n| packages/typescript/src/services/message.ts | Changes from the upstream develop merge; no issues identified. |\n\n</details>\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[Incoming prompt] --> B{LIFE validate}\n    B -->|looksLikeGoalAdviceOnly| R1[return false → falls through]\n    B -->|looksLikeRelationshipFollowUpRequest| R1\n    B -->|looksLikeCodingTaskRequest| R1\n    B -->|passes all guards| C{hasLifeOpsAccess?}\n    C -->|No| R1\n    C -->|Yes| D[LIFE handler]\n    R1 --> E[Action router tries next action]\n    E --> F[CREATE_TASK / orchestrator]\n    D --> G[LifeOps operation]\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"chore: audit cleanup (slop + comment tig...\"](https://github.com/elizaos/eliza/commit/2d2d35ac4c9f8dd3c899f5be0bfe4723949e175c) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28923843)</sub>\n\n> Greptile also left **3 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-19T22:55:24Z",
      "mergedAt": null,
      "additions": 21,
      "deletions": 23
    },
    {
      "id": "PR_kwDOMT5cIs7TruZk",
      "title": "fix: handle roomId changes in InMemoryDatabaseAdapter.updateMemories",
      "author": "avasis-ai",
      "number": 6965,
      "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 not move the memory to the new room's list. This causes:\n- Stale entries in the old room's memory list (with updated `roomId` pointing elsewhere)\n- Missing entries in the new room's memory list\n\n## Change\nDetect when `roomId` changes and splice the memory out of the old room list into the new room list, preserving the `tableName` from the existing key.\n\nNo behavior change when `roomId` is unchanged.\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR fixes `updateMemories` in `InMemoryDatabaseAdapter` to correctly move a memory to a new room's list when its `roomId` changes during an update, rather than leaving a stale reference in the old room's list. The logic — splice from old list, push to new list using the tableName recovered from the map key — is correct and has no effect when `roomId` is unchanged.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; all remaining findings are P2 style suggestions that do not affect correctness under normal usage.\n\nThe fix is logically correct: it properly splices the memory from the old room list and appends it to the new room list, the break prevents any double-processing, and the no-op path when roomId is unchanged is preserved. The two P2 notes (fragile split and missing test) are quality improvements, not blockers.\n\nNo files require special attention beyond the two P2 suggestions on inMemoryAdapter.ts.\n\n<h3>Important Files Changed</h3>\n\n\n\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/database/inMemoryAdapter.ts | Adds roomId-change detection in updateMemories to correctly move memories between room lists; logic is sound but tableName extraction via split(\":\")[0] is fragile for table names containing colons, and no tests cover the new code path. |\n\n</details>\n\n\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[updateMemories called] --> B{memory in memoriesById?}\n    B -- No --> C[skip, continue]\n    B -- Yes --> D[merge existing plus incoming]\n    D --> E[update memoriesById]\n    E --> F{roomId unchanged?}\n    F -- Yes --> G[find memory in memoriesByRoom, update in-place, break]\n    F -- No --> H[find memory in old room list]\n    H --> I[splice memory from old room list]\n    I --> J[extract tableName from map key]\n    J --> K[compute new room map key]\n    K --> L[get or create new room list]\n    L --> M[push merged memory to new list]\n    M --> N[set new room list in map, break]\n```\n\n<!-- greptile_failed_comments -->\n<details><summary><h3>Comments Outside Diff (1)</h3></summary>\n\n1. `packages/typescript/src/database/inMemoryAdapter.ts`, line 841-874 ([link](https://github.com/elizaos/eliza/blob/2fc93865a981464e641750b797a95bc13b64a2a9/packages/typescript/src/database/inMemoryAdapter.ts#L841-L874)) \n\n   <a href=\"#\"><img alt=\"P2\" src=\"https://greptile-static-assets.s3.amazonaws.com/badges/p2.svg?v=7\" align=\"top\"></a> **No test coverage for the new roomId-change path**\n\n   The PR adds logic to move a memory between room lists when `roomId` changes, but the change is not accompanied by any test. A simple unit test calling `createMemories` → `updateMemories` (with a different `roomId`) → `getMemories` for both old and new rooms would lock in the expected behavior and guard against regressions. `packages/typescript/src/__tests__/database.test.ts` exists but currently has no `updateMemories` coverage at all.\n\n</details>\n\n<!-- /greptile_failed_comments -->\n\n<sub>Reviews (1): Last reviewed commit: [\"fix: handle roomId changes in updateMemo...\"](https://github.com/elizaos/eliza/commit/2fc93865a981464e641750b797a95bc13b64a2a9) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=28893246)</sub>\n\n> Greptile also left **1 inline comment** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-19T07:21:33Z",
      "mergedAt": "2026-04-20T05:38:10Z",
      "additions": 13,
      "deletions": 2
    }
  ],
  "codeChanges": {
    "additions": 0,
    "deletions": 0,
    "files": 0,
    "commitCount": 44
  },
  "completedItems": [],
  "topContributors": [
    {
      "username": "NubsCarson",
      "avatarUrl": "https://avatars.githubusercontent.com/u/192162056?u=d2be9082dbee60fcbad21d32bf6e662ab1af3674&v=4",
      "totalScore": 39.04396711655519,
      "prScore": 39.04396711655519,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "NubsCarson: Focused on system maintenance and routing stability, opening PR #6968 in elizaos/eliza to address lifeops discord routing and submodule updates. This effort involved 15 commits and significant codebase modifications across 142 files, with a primary emphasis on bugfix work."
    },
    {
      "username": "RemilioNubilio",
      "avatarUrl": "https://avatars.githubusercontent.com/u/275382225?u=b1501ee01bb54e5b31ca64895f2a07c69f554a37&v=4",
      "totalScore": 36.34119841652811,
      "prScore": 36.141198416528105,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": "RemilioNubilio: Focused on refining agent task management by opening PR #6964 in elizaos/eliza to implement honest synthesis through subagent end_turn and task-handling logic. They also contributed to project coordination by providing a PR comment to support ongoing development efforts."
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 22.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 22.5,
      "commentScore": 0,
      "summary": "greptile-apps: No activity today."
    },
    {
      "username": "srotzin",
      "avatarUrl": "https://avatars.githubusercontent.com/u/140019476?u=68fc1a0ee6d4b68049dfca93735cd9c7ef0d1082&v=4",
      "totalScore": 16.175621859290715,
      "prScore": 15.975621859290714,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": "srotzin: Focused on expanding agent capabilities by opening PR #6963 in elizaos/eliza to implement the plugin-hiveexchange for native prediction markets. This contribution involved 51 lines of code, centering their efforts on the development of new agent-native features."
    },
    {
      "username": "avasis-ai",
      "avatarUrl": "https://avatars.githubusercontent.com/u/269456994?u=08cfe83895ed0368a691e592d7a40f448b129347&v=4",
      "totalScore": 15.38629436111989,
      "prScore": 15.38629436111989,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "avasis-ai: Focused on improving database reliability by opening a pull request in elizaos/eliza (#6965) to address roomId handling within the InMemoryDatabaseAdapter. This work centers on enhancing data consistency and state management within the database layer."
    },
    {
      "username": "igor-peregudov",
      "avatarUrl": "https://avatars.githubusercontent.com/u/20255110?u=19af530bed935319d2f4d5e3ab43e8ef074b2aa6&v=4",
      "totalScore": 14.693147180559945,
      "prScore": 14.693147180559945,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "igor-peregudov: Focused on expanding plugin support by opening PR #346 in elizaos-plugins/registry to add @elisym/plugin-elizaos. This work involved a targeted configuration update, representing their primary focus for the day."
    },
    {
      "username": "ERROR403agent",
      "avatarUrl": "https://avatars.githubusercontent.com/u/260345463?v=4",
      "totalScore": 14.346573590279972,
      "prScore": 14.346573590279972,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "ERROR403agent: Focused on expanding the ecosystem's capabilities by opening PR #347 in elizaos-plugins/registry to introduce the @error403agent/elizaos-plugin-deepblue."
    },
    {
      "username": "enigma-zeroclaw",
      "avatarUrl": "https://avatars.githubusercontent.com/u/264714710?v=4",
      "totalScore": 4,
      "prScore": 0,
      "issueScore": 4,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "enigma-zeroclaw: Focused on expanding the ecosystem's capabilities by proposing a new framework for agent-to-agent commerce. This effort was initiated through the creation of two issues in elizaos/eliza (#6966, #6967) aimed at integrating Merxex functionality."
    },
    {
      "username": "ColonistOne",
      "avatarUrl": "https://avatars.githubusercontent.com/u/271974769?u=af6b52db284d4ebb9209e436a1fb003ff9ccf2e4&v=4",
      "totalScore": 0.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    }
  ],
  "newPRs": 4,
  "mergedPRs": 0,
  "newIssues": 2,
  "closedIssues": 0,
  "activeContributors": 9
}