{
  "interval": {
    "intervalStart": "2026-04-05T00:00:00.000Z",
    "intervalEnd": "2026-04-12T00:00:00.000Z",
    "intervalType": "week"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-04-05 to 2026-04-12, elizaos/eliza had 9 new PRs (5 merged), 3 new issues, and 10 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7Ki-Bz",
      "title": "Advanced Output & Flows",
      "author": "borisudovicic",
      "number": 5924,
      "repository": "elizaos/eliza",
      "body": "* Add structured return types (text, metadata, actions).\n* Support streaming responses (for await (const chunk of agent.streamGenerate())).\n* Enable multi-turn sessions with built-in state handling.",
      "createdAt": "2025-09-09T12:15:01Z",
      "closedAt": "2026-04-10T21:25:05Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7Ki9Gq",
      "title": "Simplified Agent Interaction",
      "author": "borisudovicic",
      "number": 5922,
      "repository": "elizaos/eliza",
      "body": "Expose simple APIs to interact with agents directly (no listeners required).",
      "createdAt": "2025-09-09T12:14:07Z",
      "closedAt": "2026-04-10T21:25:05Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs76tYL2",
      "title": "AIGEN Protocol — Earn $AIGEN tokens by contributing AI agent tools",
      "author": "Aigen-Protocol",
      "number": 6708,
      "repository": "elizaos/eliza",
      "body": "## AIGEN — An Economy By Agents, For Agents\n\nWe're building an economy where AI agents earn $AIGEN tokens for contributing value.\n\n**ElizaOS agents can earn $AIGEN by:**\n- Using SafeAgent Shield for safe crypto trading (10 $AIGEN/check)\n- Building plugins for the AIGEN ecosystem (1,000-10,000 $AIGEN)\n- Providing datasets or analysis (500-5,000 $AIGEN)\n\n**Already live:**\n- 25 MCP tools (safety, DeFi, market data)\n- Smithery: @safeagent/token-safety\n- $AIGEN rewards tracking\n\n**Manifesto:** https://github.com/Aigen-Protocol/aigen-protocol\n**SafeAgent:** https://github.com/Aigen-Protocol/erc-token-safety-score\n\n50% of $AIGEN supply goes to working agents. No pre-sale. No VC.\nEarly agents get founder multipliers.",
      "createdAt": "2026-04-05T01:50:39Z",
      "closedAt": "2026-04-12T18:50:26Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7v3vX6",
      "title": "Non-custodial wallet plugin: elizaos-plugin-agentwallet (EVM + Solana, x402, CCTP bridge)",
      "author": "up2itnow0822",
      "number": 6552,
      "repository": "elizaos/eliza",
      "body": "Built a wallet plugin that gives ElizaOS agents non-custodial financial capabilities. Published to npm as `elizaos-plugin-agentwallet`.\n\n## What it does\n\n- **5 actions:** check balances, transfer tokens, swap (Uniswap V3 + Jupiter), bridge cross-chain (CCTP V2, 17 chains), pay x402 endpoints\n- **Wallet provider** that injects balance context into the agent conversation\n- **Non-custodial** — agent holds its own private key. No Privy, no Coinbase CDP, no vendor lock-in\n- **EVM + Solana** — Base, Arbitrum, Optimism, Ethereum + Solana mainnet/devnet\n\n## Install\n\n```bash\nnpm install elizaos-plugin-agentwallet agentwallet-sdk\n```\n\n## Quick start\n\n```typescript\nimport { agentWalletPlugin } from \"elizaos-plugin-agentwallet\";\n\n// Add to your ElizaOS agent\nconst agent = createAgent({\n  plugins: [agentWalletPlugin],\n  settings: {\n    AGENTWALLET_PRIVATE_KEY: \"0x...\",\n    AGENTWALLET_CHAIN: \"base\",\n  },\n});\n\n// Agent can now: check balances, transfer, swap, bridge, pay x402 endpoints\n```\n\n## Why non-custodial matters\n\nThe current plugin-evm uses LiFi for bridging but has no spend limits, no x402 micropayments, and no Solana Jupiter swaps. This plugin wraps `agentwallet-sdk` (v3.0.0, 629 tests, MIT) which gives agents a complete financial stack without any custodial risk.\n\n## Links\n\n- npm: https://www.npmjs.com/package/elizaos-plugin-agentwallet\n- SDK: https://www.npmjs.com/package/agentwallet-sdk\n- 14 tests, TypeScript strict, MIT license\n\nHappy to adjust anything to better fit the ElizaOS plugin architecture. Would love feedback from the team.",
      "createdAt": "2026-03-04T21:55:31Z",
      "closedAt": "2026-04-05T14:15:59Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs77bCZZ",
      "title": "Delegation chains for autonomous agents — scoped authority, spend limits, cascade revocation",
      "author": "aeoess",
      "number": 6711,
      "repository": "elizaos/eliza",
      "body": "Eliza agents operate autonomously, often with access to wallets and APIs. The current trust model is binary: an agent either has a token/key or it doesn't. There's no way to express \"this agent can spend up to $50 from this wallet\" or \"this agent can post to Twitter but not delete tweets\" or \"this delegation expires in 24 hours.\"\n\nWhen an agent misbehaves or gets compromised, the only option is to revoke the entire key. There's no granular scope, no cascade revocation for downstream agents, and no signed proof of what the agent was authorized to do.\n\nDelegation chains with monotonic narrowing fix this:\n\n```typescript\nimport { issuePassport, createDelegation, verifyDelegation } from 'agent-passport-system'\n\n// Each Eliza agent gets an Ed25519 identity\nconst passport = issuePassport({ name: 'trading-agent-01', model: 'gpt-4o' })\n\n// Owner delegates: trade on Uniswap, max $500/day, 7 days\nconst delegation = createDelegation({\n  delegatedTo: passport.publicKey,\n  delegatedBy: ownerKey,\n  scope: ['commerce:trade', 'defi:swap'],\n  spendLimit: 50000,  // cents\n  expiresAt: new Date(Date.now() + 7 * 86400_000),\n  maxDepth: 1  // can't sub-delegate\n})\n\n// Agent can sub-delegate to a helper, but ONLY narrower\n// Trying to escalate scope or spend → cryptographic rejection\nconst subDelegation = createDelegation({\n  delegatedTo: helperKey,\n  delegatedBy: passport.privateKey,\n  scope: ['defi:swap'],  // narrower than parent\n  spendLimit: 10000,     // less than parent\n  parentDelegation: delegation\n})\n// verifyDelegation(subDelegation) checks the full chain\n```\n\nIf the trading agent gets compromised:\n\n```typescript\nimport { cascadeRevoke } from 'agent-passport-system'\n// One call kills the agent AND all its sub-delegations\ncascadeRevoke(delegation.delegationId, ownerKey)\n```\n\nEvery action the agent takes through the governance layer produces a signed receipt — Ed25519 proof of what was authorized, what was attempted, and what happened. The receipts are append-only and tamper-evident.\n\n`npm install agent-passport-system` (v1.36.2, Apache-2.0) or `pip install agent-passport-system` (v0.8.0).\n\nThe character/plugin architecture maps well here — governance could be a plugin that wraps action execution, checking delegation scope before every external call. The receipt trail gives operators forensic evidence when agents interact with real money.\n",
      "createdAt": "2026-04-07T13:57:35Z",
      "closedAt": "2026-04-12T18:50:25Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs7RaYeB",
      "title": "Shaw/message service retry",
      "author": "lalalune",
      "number": 6717,
      "body": "maybe this is legit?\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Modifies core runtime/plugin initialization and message-processing flow, which can affect agent responsiveness and service availability across deployments. Adds new persistence side effects (entity metadata/components) in the relationship evaluator and changes prompt output formats, increasing behavior-change risk.\n> \n> **Overview**\n> **Adds native runtime feature plugins** via `native_features.py` and updates `AgentRuntime` to auto-register/toggle `knowledge`, `relationships`, and `trajectories`, including plugin component tracking for clean unregistration and service-type gating.\n> \n> **Replaces `RolodexService` with `RelationshipsService`** and updates all contact/follow-up actions and providers to use the new `relationships` service; updates related prompt/spec wording from *rolodex* to *relationships*.\n> \n> **Behavioral prompt/runtime updates**: `message_handler` prompt output is switched to an XML `<response>` format; new prompts are added for `message_classifier` and `update_role`; reflection extraction is tightened to only store durable facts.\n> \n> **Message/service reliability changes**: `compose_state` now times out/guards provider execution, `MessageService` adds a should-respond prefilter and response de-duping (drop stale responses unless configured), and runtime gains batch relationship adapter methods with fallbacks.\n> \n> **Expands `relationship_extraction` evaluator** to detect GitHub handles, disputes, sentiment/trust signals, privacy boundaries, and mentioned people, persisting results into entity metadata and new components (e.g., `privacy_marker`, `dispute_record`).\n> \n> Docs are updated to reference `knowledge` instead of `plugin-knowledge`.\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 8985acd98da56b5ab74a4d5cc83e477d38c2a4b5. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T10:12:20Z",
      "mergedAt": "2026-04-10T11:34:47Z",
      "additions": 28216,
      "deletions": 2464
    },
    {
      "id": "PR_kwDOMT5cIs7RXwQK",
      "title": "feat(core): initial automatic prompt optimization poc + batch queue",
      "author": "odilitime",
      "number": 6716,
      "body": "Add DPE prompt optimization (traces, slot profiles, artifacts, A/B resolver, auto-optimizer, BootstrapFewShot; GEPA/ACE stubs for Phase 4). Wire plugin-neuro for scoring and RUN_ENDED finalization. Introduce batch-queue utilities and integrate runtime, embedding, message, and action paths.\r\n\r\nAlso batch queue abstraction that a lot of subsystem can be standardized on\r\n\r\nPostinstall patches for @elizaos/plugin-ollama: ai@6 rejects v1 embedding/chat providers, so call Ollama HTTP APIs directly; fix warning string interpolation. Required because root package.json postinstall already invokes these scripts.\r\n\r\nIgnore /opt/ for local OPTIMIZATION_DIR data. Agent harness registers neuro and uses optimization settings.\r\n\r\nMade-with: Cursor\r\n\r\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Medium risk because it introduces a new `@elizaos/plugin-promptopt` package that registers runtime hooks/finalizers and modifies the dev harness to auto-inject it based on env settings, plus changes dependency versions and postinstall patching for `@elizaos/plugin-ollama`. Main risk is behavior changes around runtime initialization, disk I/O for optimization traces, and install-time patch scripts.\n> \n> **Overview**\n> Adds a new workspace package, `@elizaos/plugin-promptopt`, which bundles disk-backed prompt-optimization runtime hooks (artifact merge/A-B selection + trace/registry writes) together with neuro-style quality signals and `RUN_ENDED` trace finalization.\n> \n> Updates the `agent` harness to load repo-root `.env` files, mirror `OLLAMA_*` and prompt-optimization env into character settings, auto-inject `promptOptPlugin` when `PROMPT_OPTIMIZATION_ENABLED` is truthy, and run `createRuntimes` with `provision: true` so SQL migrations run for fresh PGLite dirs.\n> \n> Bumps `@elizaos/plugin-ollama` to `^1.2.4`, adds postinstall patch scripts for Ollama behavior, and ignores local optimization artifacts via `/.eliza-optimization/` in `.gitignore`.\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit e0c01fbc518a49e8299ea8db34316ee1844d9207. 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<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added a full prompt-optimization system (tracing, artifact merging, A/B analysis, auto-run pipeline) and plugin-neuro for quality signals and finalization.\n  * Introduced a composable batch-queue toolkit for higher-throughput batching and retryable processing.\n\n* **Improvements**\n  * Many DPE flows now use structured prompt execution for more reliable parameter repair, decisions, and entity resolution.\n  * Enhanced telemetry/trajectory capture, runtime trace enrichment, and embedding batching for robustness.\n\n* **Documentation**\n  * Extensive docs for optimization, adapters, LLM routing, and batch-queue usage.\n\n* **Chores**\n  * Added repository ignore for local optimization artifacts.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR introduces a prompt optimization system (trace writing, A/B analysis, auto-optimization pipeline), a composable batch-queue toolkit (`PriorityQueue` / `BatchProcessor` / `TaskDrain` / `BatchQueue`), and a `plugin-neuro` finalizer that enriches traces on `RUN_ENDED`. The architecture is well-thought-out: sequential optimizer stages, write-lock serialization for JSONL I/O, and deterministic A/B variant selection. Prior review concerns (unbounded `runLocks`, dynamic `readFile` import, duplicate `simpleHash`, and O(n) TTL scan on the success path) are addressed in this revision.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; all P0/P1 concerns from prior review rounds are addressed and remaining findings are style/housekeeping only.\n\nAll three previously flagged critical issues (unbounded runLocks, duplicate simpleHash, O(n) TTL scan on success path) are resolved in this revision. Remaining findings are P2 style items: a redundant dynamic import in a non-hot path, missing .finally() cleanup in write-lock helpers (bounded leak), and indentation in a catch block. None affect runtime correctness or reliability.\n\npackages/typescript/src/optimization/trace-writer.ts, packages/typescript/src/optimization/slot-profile.ts, packages/typescript/src/optimization/resolver.ts (write-lock cleanup consistency); packages/typescript/src/optimization/runner.ts (readFile import); packages/typescript/src/plugin-neuro/handlers/finalizer.ts (indentation)\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/optimization/auto-optimizer.ts | Background auto-optimization scheduler; `runLocks` cleanup and failure cooldown pruning are properly implemented. |\n| packages/typescript/src/optimization/trace-writer.ts | JSONL trace persistence with per-path write serialization; `writeLocks` map is never pruned (bounded by model/slot paths but inconsistent with ABAnalyzer's cleanup pattern). |\n| packages/typescript/src/plugin-neuro/handlers/finalizer.ts | RUN_ENDED finalizer persists enriched traces and schedules A/B analysis; catch block body has incorrect indentation making control flow visually ambiguous. |\n| packages/typescript/src/optimization/runner.ts | End-to-end optimization pipeline runner; `listPendingOptimizations` re-imports `readFile` inside the innermost loop on each profile file instead of hoisting it alongside `readdir`. |\n| packages/typescript/src/utils/batch-queue/batch-processor.ts | Stateless batch executor with semaphore concurrency cap and exponential backoff retries; implementation looks correct. |\n| packages/typescript/src/utils/batch-queue/index.ts | BatchQueue composes PriorityQueue + BatchProcessor + TaskDrain; dispose flush of high-priority items and re-entry guard look correct. |\n| packages/typescript/src/optimization/ab-analyzer.ts | Stateful A/B orchestrator; `withAnalyzeLock` properly cleans up its map entries via `.finally()`, unlike the write-lock helpers in other optimization classes. |\n| packages/typescript/src/optimization/pipeline.ts | Sequential optimizer pipeline (Bootstrap → GEPA → ACE); stage adoption guard and weight merging look correct. |\n| packages/typescript/src/optimization/slot-profile.ts | Incremental per-slot statistics with write-lock serialization; `writeLocks` map is never pruned, keyed by (model, slot, promptKey) triplet which can accumulate over time. |\n| packages/typescript/src/optimization/index.ts | Process-wide singletons for resolver, trace-writer, slot-profile, and AB-analyzer; rootDir change invalidates all singletons correctly. |\n\n</details>\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant DPE as \"dynamicPromptExecFromState\"\n    participant TW as \"TraceWriter\"\n    participant RT as \"Runtime activeTraces\"\n    participant Neuro as \"plugin-neuro RUN_ENDED\"\n    participant SPM as \"SlotProfileManager\"\n    participant ABA as \"ABAnalyzer\"\n    participant AutoOpt as \"maybeRunAutoOptimization\"\n    participant Runner as \"OptimizationRunner\"\n\n    DPE->>TW: \"appendTrace (seq N, baseline)\"\n    DPE->>RT: \"activeTraces.set(traceId)\"\n    RT-->>Neuro: \"RUN_ENDED event\"\n    Neuro->>RT: \"getActiveTracesForRun(runId)\"\n    Neuro->>TW: \"appendTrace (seq N+1, enriched)\"\n    Neuro->>SPM: \"recordTrace\"\n    Neuro->>ABA: \"maybeAnalyze (fire-and-forget)\"\n    ABA->>TW: \"loadTracesForPrompt\"\n    ABA->>TW: \"appendABDecision\"\n    Neuro->>AutoOpt: \"maybeRunAutoPromptOptimization\"\n    AutoOpt->>SPM: \"shouldReoptimize?\"\n    AutoOpt->>Runner: \"run pipeline\"\n    Runner->>TW: \"loadTracesForPrompt (baseline only)\"\n    Runner->>SPM: \"markOptimized\"\n    Neuro->>RT: \"deleteActiveTrace(runId)\"\n```\n\n<sub>Reviews (2): Last reviewed commit: [\"docs: add review dismissal comments\"](https://github.com/elizaos/eliza/commit/4e6882e9a44254d54128aee955a6d41b7f799da7) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=27966843)</sub>\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T07:11:06Z",
      "mergedAt": null,
      "additions": 13189,
      "deletions": 875
    },
    {
      "id": "PR_kwDOMT5cIs7I6dg2",
      "title": "feat: Bring Odi logging, Memory lock down, banner, other core enh",
      "author": "odilitime",
      "number": 6562,
      "body": "- banner, init hook, reply optimization, roles warnedUnnamedEntities, runtime (embedding cache, callerInfo, safeReplacer, onlyInclude, logPrompt/logResponse gating), logger file output\r\n- DISABLE_MEMORY_CREATION/ALLOW_MEMORY_SOURCE_IDS in message service; JSON5, parseBooleanFromText try/catch, formatPosts; add DISABLE_MEMORY_CREATION guard to runtime.evaluate() (was missed)\r\n- keepExistingResponses/BOOTSTRAP_KEEP_RESP, ANXIETY provider, null service guard, provider timeout, HandlerCallback actionName, hasRequestedInState in reply\r\n- Docs: CHANGELOG, ROADMAP, docs/DESIGN.md, README env/design section, WHY comments; fix ALLOW_MEMORY_SOURCE_IDS comment in message.ts\r\n- New: bootstrap banner (preview script), anxiety provider\r\n\r\nMade-with: Cursor\r\n\r\n<!-- Use this template by filling in information and copying and pasting relevant items out of the HTML comments. -->\r\n\r\n# Relates to\r\n\r\n<!-- LINK TO ISSUE OR TICKET -->\r\n\r\n<!-- This risks section must be filled out before the final review and merge. -->\r\n\r\n# Risks\r\n\r\n<!--\r\nLow, medium, large. List what kind of risks and what could be affected.\r\n-->\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\n## What kind of change is this?\r\n\r\n<!--\r\nBug fixes (non-breaking change which fixes an issue)\r\nImprovements (misc. changes to existing features)\r\nFeatures (non-breaking change which adds functionality)\r\nUpdates (new versions of included code)\r\n-->\r\n\r\n<!-- This \"Why\" section is most relevant if there are no linked issues explaining why. If there is a related issue, it might make sense to skip this why section. -->\r\n<!--\r\n## Why are we doing this? Any context or related work?\r\n-->\r\n\r\n# Documentation changes needed?\r\n\r\n<!--\r\nMy changes do not require a change to the project documentation.\r\nMy changes require a change to the project documentation.\r\nIf documentation change is needed: I have updated the documentation accordingly.\r\n-->\r\n\r\n<!-- Please show how you tested the PR. This will really help if the PR needs to be retested and probably help the PR get merged quicker. -->\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\n## Detailed testing steps\r\n\r\n<!--\r\nNone: Automated tests are acceptable.\r\n-->\r\n\r\n<!--\r\n- As [anon/admin], go to [link]\r\n  - [do action]\r\n  - verify [result]\r\n-->\r\n\r\n<!-- If there is a UI change, please include before and after screenshots or videos. This will speed up PRs being merged. It is extra nice to annotate screenshots with arrows or boxes pointing out the differences. -->\r\n<!--\r\n## Screenshots\r\n### Before\r\n### After\r\n-->\r\n\r\n<!-- If there is anything about the deployment, please make a note. -->\r\n<!--\r\n# Deploy Notes\r\n-->\r\n\r\n<!--  Copy and paste command line output. -->\r\n<!--\r\n## Database changes\r\n-->\r\n\r\n<!--  Please specify deploy instructions if there is something more than the automated steps. -->\r\n<!--\r\n## Deployment instructions\r\n-->\r\n\r\n<!-- If you are on Discord, please join https://discord.gg/ai16z and state your Discord username here for the contributor role and join us in #development-feed -->\r\n<!--\r\n## Discord username\r\n\r\n-->\r\n\r\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Touches core runtime/message pipeline behavior (provider timeouts, action-chain state recomposition, memory persistence gating, callback signature) and adds new logging side effects, so regressions could impact response latency, persistence, or integrations.\n> \n> **Overview**\n> **Core runtime hardening & observability.** `composeState` now enforces a per-provider 30s timeout (continuing with empty results on failure) and profiles provider timings; action chains recompose state using `onlyInclude` to refresh just `RECENT_MESSAGES`/`ACTION_STATE` while preserving other cached provider data; action-result caching uses `safeReplacer()`.\n> \n> **Logging & callbacks.** Adds opt-in file logging via `LOG_FILE` to write `output.log`, `prompts.log`, and `chat.log` (with ANSI stripping and prompt/response correlation), and extends `HandlerCallback` to accept an optional `actionName` (runtime and bootstrap `reply` now pass it).\n> \n> **Memory/pipeline controls & bootstrap behavior.** Implements `DISABLE_MEMORY_CREATION` with `ALLOW_MEMORY_SOURCE_IDS` allowlisting and updates race handling to use resolved `keepExistingResponses`; skips memory-dependent evaluators when memory creation is disabled. Adds a bootstrap startup banner (plugin `init` hook + preview script), a new `ANXIETY` provider (registered by default), budget-based truncation of action history/results via shared `sliceToFitBudget`, and reduces roles-provider warning spam with per-runtime bounded tracking. Documentation and examples are updated accordingly (README/CHANGELOG/ROADMAP/DESIGN, Telegram model selection, JSON5 dependency).\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit d4e24be84caf81f419a4a5dd4b50652daf168a0e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Memory persistence controls (DISABLE_MEMORY_CREATION, ALLOW_MEMORY_SOURCE_IDS), shared config helpers, new anxiety provider, startup banner, and prompt/response file logging.\n\n* **Improvements**\n  * Per-provider timeouts and a 30s provider limit, first-action reply optimization, budgeted truncation of action/history context, safer JSON parsing from text, and handler callbacks include action names.\n\n* **Bug Fixes**\n  * Explicit timer cleanup on provider completion and hardened plugin registration.\n\n* **Tests & Docs**\n  * Expanded tests and new design/roadmap/README documentation.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR is a broad hardening and observability pass on the core `@elizaos/typescript` runtime. Key changes include: per-provider 30 s timeouts in `composeState`, `onlyInclude` optimization for action-chain state recomposition, `DISABLE_MEMORY_CREATION` / `ALLOW_MEMORY_SOURCE_IDS` controls in both the message service and `evaluate()`, optional file logging (`LOG_FILE` → `output.log` / `prompts.log` / `chat.log`), an `ANXIETY` verbosity-guidance provider registered by default, a bootstrap ANSI banner on plugin init, JSON5-tolerant LLM output parsing, and `HandlerCallback` extended with an optional `actionName` parameter.\n\n- **Bug — IGNORE response persistence bypassed by `ALLOW_MEMORY_SOURCE_IDS`** (`message.ts:948–952`): the ignore path checks `allowedSources.includes(\"agent_response\")` — a hardcoded string users will never configure — so all IGNORE decisions are silently dropped when any source allowlist is active. The regular response path (line ~773) correctly skips this check; the ignore path should match that behavior.\n- **Bug — zero-vector fallback corrupts semantic memory** (`runtime.ts:4861`): on embedding failure the memory is persisted with a zero vector, making it unretrievable by cosine-similarity search while appearing normally stored. Silent data loss.\n- **`PROVIDERS_TOTAL_TIMEOUT_MS` default raised from 1 000 ms → 5 000 ms** (`message.ts:~2019`): existing deployments relying on the 1 s default will now allow providers up to 5 s before bailing, which may noticeably increase P99 response latency.\n- **Variable shadowing in ignore block** (`message.ts:949`): `allowedSources` is re-resolved inside `if (!disableMemoryCreation)`, shadowing the binding already computed on line 461 and adding a redundant runtime call.\n- **Dead `catch` block in `parseBooleanFromText`** (`utils.ts:941–950`): `String(value).trim().toUpperCase()` cannot throw after the early-return guards; the `logger.warn` is unreachable.\n\n<h3>Confidence Score: 3/5</h3>\n\n- Not safe to merge without addressing the IGNORE memory persistence bug and zero-vector embedding fallback.\n- Two confirmed logic bugs affect correctness in production: IGNORE responses are silently dropped from memory when ALLOW_MEMORY_SOURCE_IDS is set (contradicts stated design and the regular response path), and failed embeddings produce unretrievable zero-vector memories. The PROVIDERS_TOTAL_TIMEOUT_MS default change is a silent breaking change for latency-sensitive deployments. The rest of the PR is well-structured, well-commented, and tested.\n- packages/typescript/src/services/message.ts (IGNORE persistence logic at lines 948–974) and packages/typescript/src/runtime.ts (zero-vector embedding fallback at lines 4858–4865)\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/services/message.ts | Core message processing pipeline — adds DISABLE_MEMORY_CREATION / ALLOW_MEMORY_SOURCE_IDS filtering and keepExistingResponses race-check; the IGNORE path incorrectly applies the source allowlist to agent-generated responses, causing all IGNORE memories to be silently dropped when ALLOW_MEMORY_SOURCE_IDS is configured (contradicts stated design). Also contains variable shadowing and redundant comments. |\n| packages/typescript/src/runtime.ts | Major runtime hardening: per-provider 30s timeouts, onlyInclude optimization for action-chain state recomposition, DISABLE_MEMORY_CREATION guard for evaluate(), file-based prompt/response logging, caller-info stack traces. Zero-vector embedding fallback silently corrupts memory search for affected records. |\n| packages/typescript/src/logger.ts | Adds optional file logging (output.log, prompts.log, chat.log) gated by LOG_FILE env-var; prompt/response correlation now uses the same slug passed through metadata; all log files are placed in the same directory as LOG_FILE. Implementation is sound. |\n| packages/typescript/src/bootstrap/providers/anxiety.ts | New ANXIETY provider returning channel-specific verbosity guidance via random selection of 3 examples per turn; uses Math.random()-0.5 sort (biased shuffle) but non-critical for this use case. |\n| packages/typescript/src/bootstrap/providers/roles.ts | Switches from a module-level Set to a WeakMap<IAgentRuntime, Set<string>> for per-runtime warn-once tracking of unnamed entities; correctly addressed from previous review. |\n| packages/typescript/src/utils/json-llm.ts | New JSON5-based tolerant extraction helper for LLM output; handles code-fenced blocks and single-quote / trailing-comma JSON; throws on failure so callers (parseJSONObjectFromText) can catch and return null. |\n| packages/typescript/src/utils.ts | parseBooleanFromText accepts broader types, formatPosts adds metadata fallbacks and text delimiters, parseJSONObjectFromText delegates to JSON5-based json-llm helper. The try-catch in parseBooleanFromText is dead code but harmless. |\n| packages/typescript/src/types/components.ts | HandlerCallback extended with optional actionName parameter (backward compatible); allows callers to attribute responses to the producing action without content parsing. |\n\n</details>\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[Incoming Message] --> B{DISABLE_MEMORY_CREATION?}\n    B -- No --> C{ALLOW_MEMORY_SOURCE_IDS set?}\n    C -- No allowlist --> D[Persist message memory + queue embedding]\n    C -- Allowlist set --> E{sourceId in allowlist?}\n    E -- Yes --> D\n    E -- No --> F[Skip persistence, assign UUID]\n    B -- Yes --> F\n\n    D --> G[shouldRespond check]\n    F --> G\n\n    G -- IGNORE --> H[callback ignoreContent]\n    H --> I{DISABLE_MEMORY_CREATION?}\n    I -- No --> J{allowedSources includes 'agent_response'?}\n    J -- Yes --> K[Persist IGNORE memory]\n    J -- No → bug --> L[\"❌ IGNORE memory silently dropped\"]\n    I -- Yes --> L2[Skip IGNORE memory]\n\n    G -- Respond --> M[runSingleShotCore / LLM]\n    M --> N{canPersistMemory = !disableMemory}\n    N -- true --> O[Persist response memories]\n    N -- false --> P[Skip response memories]\n\n    O --> Q[run evaluators]\n    P --> Q\n    Q --> R{DISABLE_MEMORY_CREATION?}\n    R -- Yes --> S[Skip evaluators entirely]\n    R -- No --> T[Run evaluators with timeout]\n\n    style L fill:#ff4444,color:#fff\n    style L2 fill:#aaa,color:#fff\n```\n\n<sub>Last reviewed commit: [\"docs: add review dis...\"](https://github.com/elizaos/eliza/commit/d7d1ad5199b8fe12b302326d321ce50fede6912a)</sub>\n\n> Greptile also left **2 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-03-08T23:50:03Z",
      "mergedAt": "2026-04-08T23:27:47Z",
      "additions": 5218,
      "deletions": 259
    },
    {
      "id": "PR_kwDOMT5cIs7Qb6X5",
      "title": "Fix/toon action params",
      "author": "NubsCarson",
      "number": 6709,
      "body": "# Relates to\r\n\r\nn/a, found while testing milady's discord connector\r\n\r\n# Risks\r\n\r\nlow. both changes are additive. no api changes, no breaking changes.\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\ntwo related fixes in DefaultMessageService:\r\n\r\n1. **toon action params**: added a `params` field to the response schema so the LLM is asked to output action parameters in toon format. without this, actions with required params (like RUN_IN_TERMINAL's `command`) never get their values from connectors using toon. the xml path already extracts inline params, the toon path didn't because the schema never asked for them. prompts.ts already documents this format, schema field was the missing piece.\r\n\r\n2. **async action terminal set**: added CREATE_TASK, START_CODING_TASK, CODE_TASK, SPAWN_AGENT, and SPAWN_CODING_AGENT to shouldContinueAfterActions. these actions hand off to PTY sessions and complete async, the handler returns fast while real work runs in the background. without this the continuation loop fires repeatedly while the task runs, generating noisy filler responses on top of the actual final result.\r\n\r\n## What kind of change is this?\r\n\r\nbug fixes\r\n\r\n# Documentation changes needed?\r\n\r\nno, schema now matches the existing prompt template docs\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\n`packages/typescript/src/services/message.ts`:\r\n- params field in schema (around line 1985)\r\n- terminalActions Set in shouldContinueAfterActions (around line 257)\r\n\r\n## Detailed testing steps\r\n\r\n**toon params bug:**\r\n1. set up an agent with a toon-encapsulation connector (discord, milady)\r\n2. register an action with required params (RUN_IN_TERMINAL)\r\n3. trigger via connector\r\n4. before fix: handler gets no params, action fails silently\r\n5. after fix: toon output includes `params: { RUN_IN_TERMINAL: { command: \"...\" } }`, handler runs\r\n\r\n**continuation loop bug:**\r\n1. trigger CREATE_TASK from plugin-agent-orchestrator via discord\r\n2. before fix: continuation fires every ~30s while PTY runs, spams filler responses\r\n3. after fix: loop terminates after CREATE_TASK, single clean result from synthesis\r\n\r\nend-to-end verified via discord on milady, task completes with one clean message.\r\n\r\n35/35 startup-coordinator tests pass, 9/9 onboarding tests pass.\r\n\r\n## Discord username\r\n\r\n1gig\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nFixes two bugs in `DefaultMessageService`: (1) adds a `params` field to the single-shot TOON schema so LLM responses on non-streaming connectors carry action parameters, and (2) adds `CREATE_TASK`, `START_CODING_TASK`, `CODE_TASK`, `SPAWN_AGENT`, and `SPAWN_CODING_AGENT` to the terminal-action set that suppresses post-action continuation loops. The PR also lands supporting changes: inline attachment handling and sanitization, a new `GenerateTextAttachment` type, deterministic prompt-name generation, a TOON utility module, and a large-scale migration of templates from XML to TOON format.\n\n<h3>Confidence Score: 4/5</h3>\n\nSafe to merge; both fixes are additive with no breaking API changes, but a minor indentation defect in the param-repair block is worth cleaning up.\n\nBoth core bug fixes are logically sound and well-tested (tests pass). The `shouldContinueAfterActions` change correctly classifies async task actions as terminal. The `params` schema addition lands on the right path for non-streaming connectors. One P2 indentation issue in the repair code block does not affect runtime behavior. The wider template migration and deterministic-naming refactor are large but orthogonal to the stated fixes.\n\npackages/typescript/src/services/message.ts around lines 2267–2274 (indentation inconsistency in param-repair block)\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/services/message.ts | Core bug fixes: adds `params` field to TOON schema and expands terminal action set; also adds inline attachment support. Minor indentation inconsistency in repair block. |\n| packages/typescript/src/utils/toon.ts | New utility providing TOON encode/decode helpers and `parseToonActionParams` for structured action parameter extraction. |\n| packages/typescript/src/utils/deterministic.ts | New utility replacing Math.random() with a seeded deterministic PRNG for reproducible prompt name generation. |\n| packages/typescript/src/prompts.ts | Refactored from XML to TOON prompt format across all templates; auto-generated from packages/prompts/prompts/*.txt. |\n| packages/typescript/src/actions.ts | Updated `parseActionParams` to accept `unknown` and try TOON format first; action examples switched to deterministic shuffling. |\n| packages/typescript/src/types/model.ts | New `GenerateTextAttachment` interface and `attachments` field on `GenerateTextParams` for multimodal support. |\n| packages/typescript/src/utils.ts | `parseKeyValueXml` now tries TOON before XML fallback; template compilation cached; names generated deterministically. |\n| packages/typescript/src/types/runtime.ts | Added `toon` as valid option for `preferredEncapsulation` and `forceFormat` in `dynamicPromptExecFromState`. |\n\n</details>\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant Connector as Discord/Milady Connector\n    participant MsgSvc as DefaultMessageService\n    participant LLM as LLM (TEXT_LARGE)\n    participant Actions as Action Handler\n\n    Connector->>MsgSvc: handleMessage (no onStreamChunk)\n    Note over MsgSvc: preferredEncapsulation = \"toon\"\n    MsgSvc->>LLM: runSingleShotCore (schema includes params field)\n    LLM-->>MsgSvc: TOON response\\nparams: { RUN_IN_TERMINAL: { command: \"...\" } }\n    MsgSvc->>MsgSvc: parseActionParams(responseContent.params)\n    Note over MsgSvc: shouldContinueAfterActions?\n    alt action is CREATE_TASK / SPAWN_AGENT / etc.\n        Note over MsgSvc: terminalActions → return false (no loop)\n        MsgSvc->>Actions: execute action once\n        Actions-->>Connector: single clean result\n    else action is non-terminal\n        MsgSvc->>MsgSvc: continuation loop fires\n    end\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"fix: stop continuation loop after async ...\"](https://github.com/elizaos/eliza/commit/2676b1fc95e3c0bb6fb232ebe5e4e79101fd6ca0) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=27562392)</sub>\n\n> Greptile also left **1 inline comment** on this PR.\n\n<sub>(4/5) You can add custom instructions or style guidelines for the agent [here](https://app.greptile.com/review/github)!</sub>\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-07T09:02:10Z",
      "mergedAt": null,
      "additions": 3650,
      "deletions": 3460
    },
    {
      "id": "PR_kwDOMT5cIs7Q_-zH",
      "title": "feat(core): group addressee routing and anti-loop prompt guidance",
      "author": "odilitime",
      "number": 6712,
      "body": "Add NameVariationRegistry and evaluateGroupAddresseeOverride for non-LLM disambiguation in group rooms (reply threads and addressed-to-other).\r\n\r\nExtend shouldRespond flow with parent message author for replies, merge routing metadata from content, and sync basic-capabilities shouldRespond with the same options shape.\r\n\r\nTighten should_respond, should_respond_with_context, message_handler, and post_action_decision prompts for closure, IGNORE-only replies, and multi-party behavior; regenerate bundled prompts for TypeScript, Python, and Rust.\r\n\r\nUpdate DESIGN, README, CORE_CONCEPTS, and providers docs; add tests for registry utilities and message-service addressee paths.\r\n\r\nMade-with: Cursor\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Changes the core `shouldRespond` decision path and adds deterministic addressee resolution for group replies, which can alter when agents speak or stay silent in multi-party rooms. Prompt-template updates are broad (TS/Python/Rust) and may shift runtime behavior across deployments.\n> \n> **Overview**\n> Improves group-room addressee routing by adding a deterministic, non-LLM layer (`NameVariationRegistry` + `evaluateGroupAddresseeOverride`) that uses participant names plus optional adapter metadata (e.g. `replyToEntityId`) and parent-message author lookup to decide when to respond in reply threads or ignore messages aimed at other agents.\n> \n> Refactors `shouldRespond` to accept `ShouldRespondOptions` (including `parentMessageAuthorEntityId`), updates both the message service and `basic-capabilities` to disambiguate platform replies in group channels, and adds tests covering the new reply-thread and name-resolution behavior.\n> \n> Tightens shared prompt templates (`should_respond*`, `message_handler`, `post_action_decision`) with explicit closure/anti–ping-pong and multi-party brevity rules, updates the “no thinking” instruction wording, regenerates bundled prompts for TypeScript/Python/Rust, and updates docs to document reply/addressee metadata and remove the prior `ANXIETY` provider guidance.\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 5ed5b1ec094bc27f7c202e06ac3c72039a7ef365. 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 adds non-LLM group-room addressee routing via a new `NameVariationRegistry` and `evaluateGroupAddresseeOverride`, extends the `shouldRespond` flow with parent-message-author disambiguation for reply threads, and tightens all four decision prompts with closure, anti-loop, and multi-party guidance.\n\n- **P1 — `aliasEntity` breaks address resolution for agents with separate `entityId`/`agentId`**: `buildNameRegistryForRoom` calls `aliasEntity(agentId, entityId)` for each such agent, which adds `agentId` to every token's entry in `tokenToEntities`. Because `resolveSingleToken` returns `null` when `set.size > 1`, `checkAddressedTo` can never resolve a name for those agents, silently making `isAddressedToSelf` and `isAddressedToOther` both return `false` — the core feature this PR ships.\n\n<h3>Confidence Score: 4/5</h3>\n\nSafe to merge after fixing the aliasEntity ambiguity bug; all other changes are additive prompt and type improvements.\n\nOne P1 logic bug: aliasEntity corrupts tokenToEntities for agents whose entityId ≠ agentId, silently disabling the primary feature this PR ships (non-LLM group addressee routing). The remaining findings are P2 (dead code). Score is 4 pending that fix.\n\npackages/typescript/src/utils/name-variation-registry.ts (aliasEntity + tokenToEntities logic)\n\n<details open><summary><h3>Vulnerabilities</h3></summary>\n\nNo security concerns identified. The new routing logic performs read-only entity lookups and string matching; no user-supplied input is executed or used in privileged operations. Metadata fields used for routing (`replyToEntityId`, `inReplyTo`, etc.) are validated as UUIDs before any lookup is attempted via `resolveUuid`.\n</details>\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/utils/name-variation-registry.ts | New utility for fast addressee resolution; contains a P1 logic bug where aliasEntity adds alternateId to tokenToEntities, causing resolveSingleToken to return null for all agents with a separate entityId/agentId pair. |\n| packages/typescript/src/utils/addressee-resolution.ts | New group-room routing helpers; logic is sound but inherits the aliasEntity bug from the registry when agentId ≠ entityId; mergeMessageRoutingMetadata correctly guards against null values. |\n| packages/typescript/src/services/message.ts | Extends shouldRespond with parent-author disambiguation and evaluateGroupAddresseeOverride; ANXIETY provider removal and reply-to-other deferral to LLM are correct intentional changes. |\n| packages/typescript/src/prompts.ts | Adds closure/addressee/multi-party rules to shouldRespond templates and a new shouldRespondWithContextTemplate that is currently unused dead code. |\n| packages/typescript/src/basic-capabilities/index.ts | Syncs shouldRespond signature with MessageService (adds ShouldRespondOptions, group disambiguation) and adds SHOULD_RESPOND_BYPASS_TYPES/SOURCES as setting aliases. |\n| packages/typescript/src/types/message-service.ts | Adds ShouldRespondOptions interface and updates shouldRespond signature in IMessageService; clean, well-typed additions. |\n| packages/typescript/src/__tests__/name-variation-registry.test.ts | Tests basic registry operations but doesn't cover aliasEntity behaviour — the P1 bug would not be caught by the existing suite. |\n| packages/typescript/src/__tests__/message-service.test.ts | Adds two well-structured unit tests for group-reply disambiguation paths in shouldRespond; covers the happy paths correctly. |\n\n</details>\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[Incoming message] --> B{Private channel?}\n    B -- yes --> C[shouldRespond original path]\n    B -- no --> D{mentionContext isReply?}\n\n    D -- yes --> E[fetchParentMessageAuthorEntityId]\n    E --> F[shouldRespondOptions set]\n    F --> G[shouldRespond]\n\n    D -- no --> G2[shouldRespond no options]\n\n    G --> H{parentAuthor == agentId?}\n    H -- yes --> I[skipEval=true respond=true]\n    H -- no key present --> J[skipEval=false respond=false]\n    H -- no options --> K[skipEval=true respond=true]\n\n    J --> L[evaluateGroupAddresseeOverride]\n    G2 --> L\n\n    L --> M[buildNameRegistryForRoom]\n    M --> N{isAddressedToSelf?}\n    N -- yes --> O[override respond=true]\n    N -- no --> P{isAddressedToOther?}\n    P -- yes --> Q[override respond=false]\n    P -- no --> R[no override]\n\n    R --> S{skipEval=false?}\n    S -- yes --> T[LLM evaluation]\n    S -- no --> U[Use decision directly]\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"feat(core): group addressee routing and ...\"](https://github.com/elizaos/eliza/commit/5ed5b1ec094bc27f7c202e06ac3c72039a7ef365) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=27810423)</sub>\n\n> Greptile also left **3 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-09T03:10:58Z",
      "mergedAt": null,
      "additions": 1030,
      "deletions": 79
    }
  ],
  "codeChanges": {
    "additions": 9761,
    "deletions": 4355,
    "files": 132,
    "commitCount": 152
  },
  "completedItems": [
    {
      "title": "fix(core): consolidate StreamChunkCallback, remove dual-extractor CAUSING TTS garbling",
      "prNumber": 6690,
      "type": "bugfix",
      "body": "Eight inline `onStreamChunk` definitions across types/runtime.ts, types/model.ts, types/message-service.ts, streaming-context.ts, and runtime.ts are replaced by a single canonical `StreamChunkCallback` type alias in types/components.ts.\r\n\r\n",
      "files": [
        "packages/docs/guides/streaming-responses.mdx",
        "packages/docs/runtime/messaging.mdx",
        "packages/docs/runtime/types-reference.mdx",
        "packages/typescript/src/__tests__/runtime.test.ts",
        "packages/typescript/src/runtime.ts",
        "packages/typescript/src/services/message.ts",
        "packages/typescript/src/streaming-context.ts",
        "packages/typescript/src/types/components.ts",
        "packages/typescript/src/types/message-service.ts",
        "packages/typescript/src/types/model.ts",
        "packages/typescript/src/types/runtime.ts",
        "packages/typescript/src/utils/streaming.ts",
        "packages/python/elizaos/types/components.py"
      ]
    },
    {
      "title": "feat: Bring Odi logging, Memory lock down, banner, other core enh",
      "prNumber": 6562,
      "type": "feature",
      "body": "- banner, init hook, reply optimization, roles warnedUnnamedEntities, runtime (embedding cache, callerInfo, safeReplacer, onlyInclude, logPrompt/logResponse gating), logger file output\r\n- DISABLE_MEMORY_CREATION/ALLOW_MEMORY_SOURCE_IDS in m",
      "files": [
        "anxiety.test.ts",
        "eliza-cloud-v2/services/gateway-discord/tests/logger.test.ts",
        "examples/telegram/typescript/telegram-agent.ts",
        "logger.test.ts",
        "message-service.test.ts",
        "packages/typescript/CHANGELOG.md",
        "packages/typescript/README.md",
        "packages/typescript/ROADMAP.md",
        "packages/typescript/docs/DESIGN.md",
        "packages/typescript/package.json",
        "packages/typescript/scripts/preview-banner.mjs",
        "packages/typescript/src/__tests__/message-service.test.ts",
        "packages/typescript/src/basic-capabilities/providers/actionState.ts",
        "packages/typescript/src/basic-capabilities/providers/recentMessages.ts",
        "packages/typescript/src/bootstrap/__tests__/anxiety.test.ts",
        "packages/typescript/src/bootstrap/__tests__/banner.test.ts",
        "packages/typescript/src/bootstrap/__tests__/banner.ts",
        "packages/typescript/src/bootstrap/__tests__/message-service.test.ts",
        "packages/typescript/src/bootstrap/__tests__/reply.ts",
        "packages/typescript/src/bootstrap/__tests__/roles.test.ts",
        "packages/typescript/src/bootstrap/actions/reply.ts",
        "packages/typescript/src/bootstrap/banner.ts",
        "packages/typescript/src/bootstrap/index.ts",
        "packages/typescript/src/bootstrap/providers/actionState.ts",
        "packages/typescript/src/bootstrap/providers/anxiety.test.ts",
        "packages/typescript/src/bootstrap/providers/anxiety.ts",
        "packages/typescript/src/bootstrap/providers/index.ts",
        "packages/typescript/src/bootstrap/providers/recentMessages.ts",
        "packages/typescript/src/bootstrap/providers/roles.ts",
        "packages/typescript/src/logger.test.ts",
        "packages/typescript/src/logger.ts",
        "packages/typescript/src/runtime.test.ts",
        "packages/typescript/src/runtime.ts",
        "packages/typescript/src/services/message.test.ts",
        "packages/typescript/src/services/message.ts",
        "packages/typescript/src/types/components.ts",
        "packages/typescript/src/types/message-service.ts",
        "packages/typescript/src/utils.test.ts",
        "packages/typescript/src/utils.ts",
        "packages/typescript/src/utils/defer-startup-work.ts",
        "packages/typescript/src/utils/index.ts",
        "packages/typescript/src/utils/json-llm.ts",
        "packages/typescript/src/utils/plugin-banner.ts",
        "packages/typescript/src/utils/plugin-config.ts",
        "packages/typescript/src/utils/slice-to-fit-budget.test.ts",
        "packages/typescript/src/utils/slice-to-fit-budget.ts",
        "packages/typescript/src/utils/text-similarity.ts",
        "reply.test.ts",
        "src/bootstrap/__tests__/anxiety.test.ts",
        "packages/typescript/src/bootstrap/__tests__/reply.test.ts",
        "packages/typescript/src/bootstrap/__tests__/actions.test.ts"
      ]
    },
    {
      "title": "feat: add agent/ like starter in develop",
      "prNumber": 6702,
      "type": "feature",
      "body": "just something to boot up the repo\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Medium risk because it introduces a new `agent` workspace and changes core runtime-composition APIs (`loadCharacters` accepts file paths/options;",
      "files": [
        ".gitmodules",
        "agent/.gitignore",
        "agent/package.json",
        "agent/python/__init__.py",
        "agent/rust/Cargo.toml",
        "agent/rust/src/lib.rs",
        "agent/tsconfig.json",
        "agent/typescript/defaultCharacter.ts",
        "agent/typescript/index.ts",
        "bun.lock",
        "package.json",
        "packages/computeruse/packages/computeruse-ts/package.json",
        "packages/typescript/src/__tests__/runtime-composition.test.ts",
        "packages/typescript/src/runtime-composition.ts",
        "plugins/plugin-local-ai",
        "plugins/plugin-ollama",
        "plugins/plugin-sql",
        "scripts/dev.mjs",
        "scripts/fix-workspace-deps.mjs",
        "scripts/plugin-submodules-dev.mjs",
        "scripts/replace-workspace-versions.js"
      ]
    },
    {
      "title": "Shaw/message service retry",
      "prNumber": 6717,
      "type": "other",
      "body": "maybe this is legit?\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Modifies core runtime/plugin initialization and message-processing flow, which can affect agent responsiveness and service availability across deployments. Add",
      "files": [
        ".github/workflows/skill-review.yml",
        ".gitignore",
        "packages/docs/agents/personality-and-behavior.mdx",
        "packages/docs/guides/customize-an-agent.mdx",
        "packages/docs/what-you-can-build.mdx",
        "packages/elizaos/src/__tests__/create.test.ts",
        "packages/elizaos/src/commands/create.ts",
        "packages/prompts/prompts/add_contact.txt",
        "packages/prompts/prompts/message_classifier.txt",
        "packages/prompts/prompts/message_handler.txt",
        "packages/prompts/prompts/reflection_evaluator.txt",
        "packages/prompts/prompts/should_respond.txt",
        "packages/prompts/prompts/should_respond_with_context.txt",
        "packages/prompts/prompts/update_role.txt",
        "packages/prompts/specs/actions/core.json",
        "packages/prompts/specs/providers/core.json",
        "packages/python/elizaos/advanced_capabilities/__init__.py",
        "packages/python/elizaos/advanced_capabilities/actions/add_contact.py",
        "packages/python/elizaos/advanced_capabilities/actions/remove_contact.py",
        "packages/python/elizaos/advanced_capabilities/actions/roles.py",
        "packages/python/elizaos/advanced_capabilities/actions/schedule_follow_up.py",
        "packages/python/elizaos/advanced_capabilities/actions/search_contacts.py",
        "packages/python/elizaos/advanced_capabilities/actions/update_contact.py",
        "packages/python/elizaos/advanced_capabilities/evaluators/relationship_extraction.py",
        "packages/python/elizaos/advanced_capabilities/providers/contacts.py",
        "packages/python/elizaos/advanced_capabilities/services/__init__.py",
        "packages/python/elizaos/advanced_capabilities/services/follow_up.py",
        "packages/python/elizaos/advanced_capabilities/services/relationships.py",
        "packages/python/elizaos/advanced_capabilities/services/rolodex.py",
        "packages/python/elizaos/advanced_memory/prompts.py",
        "packages/python/elizaos/advanced_memory/types.py",
        "packages/python/elizaos/advanced_planning/actions/schedule_follow_up.py",
        "packages/python/elizaos/basic_capabilities/providers/contacts.py",
        "packages/python/elizaos/basic_capabilities/services/task.py",
        "packages/python/elizaos/basic_capabilities_compat.py",
        "packages/python/elizaos/generated/action_docs.py",
        "packages/python/elizaos/media/mime.py",
        "packages/python/elizaos/native_features.py",
        "packages/python/elizaos/prompts.py",
        "packages/python/elizaos/runtime.py",
        "packages/python/elizaos/services/__init__.py",
        "packages/python/elizaos/services/hook_service.py",
        "packages/python/elizaos/services/message_service.py",
        "packages/python/elizaos/services/trajectories.py",
        "packages/python/elizaos/types/generated/eliza/v1/agent_pb2.py",
        "packages/python/elizaos/types/generated/eliza/v1/agent_pb2.pyi",
        "packages/python/elizaos/types/generated/eliza/v1/message_service_pb2.py",
        "packages/python/elizaos/types/generated/eliza/v1/message_service_pb2.pyi",
        "packages/python/elizaos/types/generated/eliza/v1/model_pb2.py",
        "packages/python/elizaos/types/generated/eliza/v1/model_pb2.pyi"
      ]
    },
    {
      "title": "fix: remove dangling typescript symlink in packages/typescript",
      "prNumber": 6713,
      "type": "bugfix",
      "body": "## Summary\n- `packages/typescript/typescript` was a symlink → `/home/shaw/eliza/packages/typescript`, a path that only exists on one contributor's machine\n- Anything that recursively walks `packages/typescript` (e.g. plugin loaders that cop",
      "files": [
        "packages/typescript/typescript"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 265.002041423674,
      "prScore": 133.42604142367395,
      "issueScore": 0,
      "reviewScore": 130.5,
      "commentScore": 1.0759999999999998,
      "summary": "odilitime: Focused on large-scale codebase maintenance and bug remediation, executing 17 commits that modified 895 files to address a significant volume of technical debt. They provided 10 constructive comments across various reviews to support team alignment, with their primary efforts dedicated to bugfix work (71%) and general project maintenance."
    },
    {
      "username": "NubsCarson",
      "avatarUrl": "https://avatars.githubusercontent.com/u/192162056?u=d2be9082dbee60fcbad21d32bf6e662ab1af3674&v=4",
      "totalScore": 90.28927853760345,
      "prScore": 90.28927853760345,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "NubsCarson: Focused on improving system reliability through bugfix work, with two open pull requests addressing parameter configurations in elizaos/eliza (#6709) and temperature and output constraints in elizaos-plugins/plugin-anthropic (#15). These efforts involved a single commit modifying 18 lines of code, primarily targeting bug resolution across both code and test files."
    },
    {
      "username": "dutchiono",
      "avatarUrl": "https://avatars.githubusercontent.com/u/86275975?u=0d8badaa81aa47682651f87dc2d363837876de98&v=4",
      "totalScore": 57.30816688353785,
      "prScore": 57.30816688353785,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "dutchiono: Focused on resolving environment-specific compatibility issues, currently working on PR #25 in elizaos-plugins/plugin-openrouter to remove PGlite artifacts that were blocking Windows git operations. This effort involved a significant cleanup of 4,270 files to ensure cross-platform stability. Their work this week was dedicated entirely to bugfix efforts."
    },
    {
      "username": "lalalune",
      "avatarUrl": "https://avatars.githubusercontent.com/u/18633264?u=e2e906c3712c2506ebfa98df01c2cfdc50050b30&v=4",
      "totalScore": 56.092773896576105,
      "prScore": 55.6547738965761,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": "lalalune: Executed a large-scale codebase maintenance effort involving 94 commits and the modification of 1,350 files. This work resulted in a net reduction of 276,833 lines of code, reflecting a significant cleanup and refactoring initiative. The primary focus of this activity was on other work, encompassing a wide variety of file types across the repository."
    },
    {
      "username": "0xSolace",
      "avatarUrl": "https://avatars.githubusercontent.com/u/257989456?u=e0d4e0c6385403319241eb46ba647b49083d4a05&v=4",
      "totalScore": 55.763362618815876,
      "prScore": 55.56336261881588,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 54,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 54,
      "commentScore": 0,
      "summary": "greptile-apps: No activity this week."
    },
    {
      "username": "HaruHunab1320",
      "avatarUrl": "https://avatars.githubusercontent.com/u/51176775?u=e51de0edfe50f67a1a5dca3bf3fa3053811dfb7e&v=4",
      "totalScore": 28.851573590279976,
      "prScore": 28.851573590279976,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "kriptoburak",
      "avatarUrl": "https://avatars.githubusercontent.com/u/8755484?u=4230318f8449a95ec98e30fa2ffdf69ee2ade4f0&v=4",
      "totalScore": 18.19497273695029,
      "prScore": 18.19497273695029,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "hypeprinter007-stack",
      "avatarUrl": "https://avatars.githubusercontent.com/u/270686917?v=4",
      "totalScore": 14.893147180559945,
      "prScore": 14.693147180559945,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": "hypeprinter007-stack: Focused on expanding ecosystem integrations by opening PR #333 in elizaos-plugins/registry to add plugin-signalfuse. They also contributed to project discussions through a PR comment. Their activity this week centered on plugin development and registry management."
    },
    {
      "username": "razz-games",
      "avatarUrl": "https://avatars.githubusercontent.com/u/251272822?v=4",
      "totalScore": 14.693147180559945,
      "prScore": 14.693147180559945,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "razz-games: Focused on expanding plugin infrastructure by opening PR #335 in elizaos-plugins/registry to integrate the @razzgames/elizaos-plugin. This work involved a targeted configuration update, representing their primary focus for the week."
    },
    {
      "username": "LamboPoewert",
      "avatarUrl": "https://avatars.githubusercontent.com/u/91011698?u=a8b0456dbd9d3e15b0fee96b4cf2813a5e15022c&v=4",
      "totalScore": 14.346573590279972,
      "prScore": 14.346573590279972,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "LamboPoewert: Focused on expanding the ecosystem's integration capabilities by opening PR #334 in elizaos-plugins/registry to add the @madeonsol/plugin-madeonsol. This contribution involved a targeted configuration update, representing the entirety of their activity for the week."
    },
    {
      "username": "0tabris",
      "avatarUrl": "https://avatars.githubusercontent.com/u/129533148?v=4",
      "totalScore": 14.346573590279972,
      "prScore": 14.346573590279972,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "0tabris: Focused on expanding ecosystem capabilities by opening PR #336 in elizaos-plugins/registry to integrate cross-chain swap functionality via @mangoswap/elizaos-plugin. This work involved targeted configuration updates across two files, balancing new feature implementation with necessary bugfix adjustments."
    },
    {
      "username": "loaditoutadmin",
      "avatarUrl": "https://avatars.githubusercontent.com/u/268400134?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "loaditoutadmin: Focused on security oversight for the project, initiating a discussion regarding the MCP server's security posture in elizaos/eliza (#6710). No code changes or pull requests were submitted during this period."
    },
    {
      "username": "aeoess",
      "avatarUrl": "https://avatars.githubusercontent.com/u/171286556?u=6c84bd29793495ac607e088d40286cf0c99b35b0&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "aeoess: Focused on advancing the architectural capabilities of autonomous agents by initiating a proposal for delegation chains and scoped authority in elizaos/eliza (#6711). This work centers on expanding the framework's governance and security models for agentic interactions."
    },
    {
      "username": "Aigen-Protocol",
      "avatarUrl": "https://avatars.githubusercontent.com/u/83247083?u=8c9172a589d1dc3ecb7359ec620a0170f68e84e2&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "Aigen-Protocol: No activity this week."
    },
    {
      "username": "up2itnow0822",
      "avatarUrl": "https://avatars.githubusercontent.com/u/220628848?u=122901ce09c43502713fd75c969aea3a88d5127b&v=4",
      "totalScore": 0.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "jonathanbulkeley",
      "avatarUrl": "https://avatars.githubusercontent.com/u/258885064?v=4",
      "totalScore": 0.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "Yaqing2023",
      "avatarUrl": "https://avatars.githubusercontent.com/u/130617529?v=4",
      "totalScore": 0.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    }
  ],
  "newPRs": 9,
  "mergedPRs": 5,
  "newIssues": 3,
  "closedIssues": 3,
  "activeContributors": 10
}