{
  "interval": {
    "intervalStart": "2026-03-27T00:00:00.000Z",
    "intervalEnd": "2026-03-28T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-03-27 to 2026-03-28, elizaos/eliza had 3 new PRs (1 merged), 0 new issues, and 5 active contributors.",
  "topIssues": [],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs7N-pIx",
      "title": "fix(core): consolidate StreamChunkCallback, remove dual-extractor CAUSING TTS garbling",
      "author": "odilitime",
      "number": 6690,
      "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\nThe callback gains `accumulated?: string` — the full extracted field text from ValidationStreamExtractor. WHY: handleMessage previously ran two independent XML extractors (ValidationStreamExtractor via dynamicPromptExecFromState + ResponseStreamExtractor via runWithStreamingContext). Both received raw LLM tokens in useModel and emitted independently, producing overlapping deltas that garbled TTS output. Providing accumulated text from the single remaining extractor eliminates the reassembly problem.\r\n\r\nhandleMessage no longer creates a ResponseStreamExtractor or wraps processMessage in runWithStreamingContext. Voice first-sentence detection wraps the caller's onStreamChunk callback and uses accumulated when available, falling back to a local buffer.\r\n\r\nDocs updated: streaming-responses guide, types-reference, messaging.mdx extractor table.\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\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Touches core streaming and message handling flow and widens a public callback signature, which could break custom integrations and affect streaming/TTS behavior if any downstream expects the old `(chunk, messageId)` contract.\n> \n> **Overview**\n> Fixes garbled streaming/TTS by removing `DefaultMessageService`’s extra `ResponseStreamExtractor`/`runWithStreamingContext` path so only the `ValidationStreamExtractor` pipeline emits chunks.\n> \n> Consolidates all streaming chunk callbacks into a single exported `StreamChunkCallback` type and extends it to `(chunk, messageId?, accumulated?)`, with `ValidationStreamExtractor` now providing authoritative per-field `accumulated` text and raw token streams explicitly passing `undefined`.\n> \n> Updates action streaming to maintain its own filtered accumulation, propagates the new signature through runtime/context/model/message-service types and tests, and refreshes docs to describe the new callback contract and architecture change.\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit aa5621ef891a54bab4ac37843c1de8047e3caf3f. 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\n## Summary by CodeRabbit\n\n## Release Notes\n\n* **New Features**\n  * Streaming callbacks now receive accumulated text when available, enabling better handling of complete streamed responses.\n  * Callbacks now support both synchronous and asynchronous execution.\n\n* **Bug Fixes**\n  * Fixed garbled TTS output caused by extractor collision in the message pipeline.\n\n* **Documentation**\n  * Updated streaming callback documentation with expanded parameter details and architectural clarifications.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR eliminates a **dual-extractor race condition** that caused TTS output garbling. Previously, `DefaultMessageService.handleMessage` wrapped `processMessage` in `runWithStreamingContext` with a `ResponseStreamExtractor`, while `dynamicPromptExecFromState` inside `processMessage` independently ran a `ValidationStreamExtractor`. Both extractors received the same raw LLM tokens from `useModel` (`paramsChunk` + `ctxChunk`), so consumers received two independent, overlapping delta streams — producing unintelligible TTS.\n\nThe fix removes the `ResponseStreamExtractor` + `runWithStreamingContext` layer entirely from `handleMessage`. A single canonical pipeline remains: VSE → MarkableExtractor → `wrappedOnStreamChunk`. Voice first-sentence detection moves into `wrappedOnStreamChunk`, which uses the new `accumulated` parameter (the authoritative full-field text from VSE) instead of re-assembling from deltas. Consolidating `StreamChunkCallback` into one type across eight previously-inconsistent call sites is a clean, forward-looking improvement.\n\n**Key changes:**\n- `StreamChunkCallback` in `types/components.ts` gains `accumulated?: string` and widens return to `void | Promise<void>`, replacing 8 inline duplicate signatures\n- `ValidationStreamExtractor.emitFieldContent` now passes `content` as `accumulated` in its `onChunk` call\n- `handleMessage` no longer creates `ResponseStreamExtractor` or calls `runWithStreamingContext`; voice detection wraps the user callback directly\n- `createStreamingContext` and `actionStreamingContext` in `runtime.ts` forward `accumulated` unchanged through their respective filters\n- Raw-token paths in `useModel` correctly pass `accumulated=undefined`\n\n**Minor observations:**\n- `createStreamingContext` forwards `accumulated` from the upstream source without transforming it, which is only semantically correct when the inner extractor is a passthrough. Currently always `MarkableExtractor` (safe), but the assumption is undocumented.\n- The `streamTextFallback` fallback buffer is never seeded from `accumulated`, so if a stream transitions from a VSE-based source to a raw-token source within one `handleMessage` call, the fallback path starts from empty. In practice `firstSentenceSent` is already `true` by that point, so voice won't re-trigger, but the invariant is fragile.\n\n<h3>Confidence Score: 4/5</h3>\n\nSafe to merge; correctly eliminates the dual-extractor TTS garbling bug with a clean, well-reasoned single-pipeline architecture\n\nThe root cause is correctly identified and fixed — removing runWithStreamingContext from handleMessage eliminates the second extractor path that caused overlapping deltas. The new wrappedOnStreamChunk pattern is equivalent to the old voice detection logic but operates on VSE-provided accumulated text instead of re-assembling from deltas. Type consolidation is a net positive. Two P2 style issues remain: the implicit passthrough assumption in createStreamingContext and the unsynchronized streamTextFallback buffer — neither affects correctness in the current code paths.\n\npackages/typescript/src/services/message.ts (wrappedOnStreamChunk fallback path) and packages/typescript/src/utils/streaming.ts (createStreamingContext accumulated forwarding)\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/services/message.ts | Core fix: removes dual-extractor pipeline by eliminating ResponseStreamExtractor+runWithStreamingContext; voice detection moved into wrappedOnStreamChunk wrapper with correct accumulated/fallback handling |\n| packages/typescript/src/utils/streaming.ts | ValidationStreamExtractorConfig.onChunk gains accumulated parameter; createStreamingContext updated to forward accumulated through MarkableExtractor passthrough; emitFieldContent correctly passes content as accumulated |\n| packages/typescript/src/types/components.ts | StreamChunkCallback consolidated to canonical form with accumulated parameter and widened return type void|Promise<void>; well-documented with inline WHY comments |\n| packages/typescript/src/runtime.ts | dynamicPromptExecFromState bridges VSE accumulated to StreamChunkCallback; actionStreamingContext correctly passes accumulated=undefined from raw-token context; inline type replaced with StreamingContext&{onStreamEnd} |\n\n</details>\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant U as User / Client\n    participant HM as handleMessage\n    participant PM as processMessage\n    participant DPE as dynamicPromptExecFromState\n    participant VSE as ValidationStreamExtractor\n    participant ME as MarkableExtractor\n    participant WC as wrappedOnStreamChunk\n\n    U->>HM: handleMessage(options.onStreamChunk)\n    Note over HM: Creates wrappedOnStreamChunk<br/>(voice detection wrapper)\n    HM->>PM: processMessage(opts.onStreamChunk=wrapped)\n    Note over PM: createStreamingContext(MarkableExtractor,<br/>wrappedOnStreamChunk, responseId)\n    PM->>DPE: dynamicPromptExecFromState(onStreamChunk=streamingCtx)\n    Note over DPE: Creates ValidationStreamExtractor<br/>modelParams.onStreamChunk = chunk→VSE.push(chunk)\n    DPE->>VSE: raw LLM token (paramsChunk)\n    VSE->>ME: onChunk(delta, field, accumulated)\n    ME->>WC: passthrough delta + accumulated\n    WC->>WC: voice first-sentence detection<br/>(uses accumulated if available)\n    WC-->>U: userOnStreamChunk(delta, msgId, accumulated)\n\n    Note over HM: OLD (removed): runWithStreamingContext(RSE)<br/>caused ctxChunk to ALSO fire on same token → garbling\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"fix(core): consolidate StreamChunkCallba...\"](https://github.com/elizaos/eliza/commit/c3c0422fc95af7bc825dc5e1faaf32ba4a1975fa) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=26545105)</sub>\n\n> Greptile also left **2 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-03-27T08:26:43Z",
      "mergedAt": null,
      "additions": 309,
      "deletions": 194
    },
    {
      "id": "PR_kwDOMT5cIs7OGel_",
      "title": "fix: extract action params from standalone XML blocks in comma-separated format",
      "author": "HaruHunab1320",
      "number": 6692,
      "body": "## Summary\n- When the LLM outputs actions as `<actions>REPLY,START_CODING_TASK</actions>` (comma-separated), the message service extracted action names but **dropped all parameters**\n- The LLM outputs params in standalone sibling blocks like `<START_CODING_TASK><repo>...</repo></START_CODING_TASK>` — the XML parser puts these as top-level keys on `parsedXml`, but the comma-split path never collected them into `parsedXml.params`\n- This caused `processActions` to call handlers with empty `options.parameters`, breaking any action that relies on params (e.g., coding agent spawning where `task`/`agents`/`repo` are needed)\n\n## Fix\nAfter comma-splitting action names, scan `parsedXml` for top-level keys matching those names. If found and they contain XML children, assemble them into `parsedXml.params` in the legacy flat format (`<ACTION_NAME>...</ACTION_NAME>`) that `parseActionParams` already consumes.\n\nGuards:\n- Only populates when `parsedXml.params` is not already set (structured `<action>` blocks take priority)\n- Skips reserved keys (`actions`, `thought`, `text`, `simple`)\n- Only matches string values containing `<` (actual XML, not plain text)\n\n## Test plan\n- [x] `comma-separated-action-params.test.ts` — 7 tests covering source verification + `parseActionParams` integration with the flat format\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR fixes a bug where action parameters were silently dropped when the LLM used the comma-separated `<actions>REPLY,START_CODING_TASK</actions>` format instead of the structured `<action>` block format. The fix scans `parsedXml` for top-level keys matching the comma-split action names and assembles them into the `parsedXml.params` string that `parseActionParams` already knows how to consume, mirroring what the structured-action path already did.\\n\\n**Changes:**\\n- `message.ts` – After comma-splitting action names, iterates `parsedXml` for matching top-level keys (skipping reserved ones and non-XML values), wraps them into the legacy flat `<ACTION_NAME>…</ACTION_NAME>` format, and assigns the result to `parsedXml.params` (only when params is not already populated). Also cleans up excessive indentation in the TTS block.\\n- New test file – 7 tests: 4 source-inspection assertions (variable names, patterns) and 3 proper `parseActionParams` integration tests covering single-action, multi-action, and empty-input cases.\\n\\n**Observations:**\\n- The core logic is correct: `parsedXml[matchingKey]` holds inner XML content (the XML parser strips the outer wrapper), so re-wrapping with `<UPPER_NAME>` before joining produces exactly the legacy flat format expected by `parseActionParams`.\\n- The `!parsedXml.params || parsedXml.params === \\\"\\\"` guard correctly prevents overwriting params already populated by the structured-action path.\\n- The reserved-key exclusions (`actions`, `thought`, `text`, `simple`) use case-sensitive string comparisons against `matchingKey`, which could miss uppercase/mixed-case variants emitted by some XML parsers.\\n- The source-inspection tests in the first `describe` block are brittle: they assert on internal variable names and will break on any rename, even safe ones.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; the fix correctly addresses the parameter-loss bug and all remaining findings are P2 style/robustness suggestions.\n\nThe functional change is correct and well-guarded: it only activates when params are absent, skips reserved keys, validates for XML content, and the assembled string is in the exact format that the existing parseActionParams already handles. The two P2 findings (brittle source-inspection tests and case-sensitive reserved-key guards) are non-blocking quality improvements. No P0 or P1 issues found.\n\npackages/typescript/src/__tests__/comma-separated-action-params.test.ts — the source-inspection test block should ideally be replaced with behavioural tests.\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/services/message.ts | Adds standalone XML-block param extraction for comma-split action format; also cleans up TTS indentation. Logic is sound but reserved-key comparisons are case-sensitive. |\n| packages/typescript/src/__tests__/comma-separated-action-params.test.ts | New regression tests covering the fix; the first describe block uses brittle source-inspection assertions (variable name checks) rather than behavioural tests. |\n\n</details>\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[LLM response parsed into parsedXml] --> B{parsedXml.actions type?}\n    B -- \"string containing action\" --> C[Structured path: extract action entries and inline params]\n    C --> D{actionEntries found?}\n    D -- yes --> E[Build inlineParamsXml string if parsedXml.params is empty]\n    E --> F[Return action names list]\n    D -- no --> G[Fall through to comma-split path]\n    B -- \"plain comma-separated string\" --> G\n    G --> H[Split by comma → commaSplitActions]\n    H --> I{parsedXml.params empty?}\n    I -- yes --> J[For each action name: find matching top-level key in parsedXml]\n    J --> K{Key found and not reserved and value contains '<'?}\n    K -- yes --> L[Push ACTION_NAME inner content to standaloneParamsFragments]\n    K -- no --> M[Skip]\n    L --> N{Any fragments?}\n    N -- yes --> O[Set parsedXml.params = joined fragments]\n    O --> P[Return commaSplitActions]\n    N -- no --> P\n    I -- no --> P\n    B -- \"array\" --> Q[Return parsedXml.actions directly]\n    F --> R[responseContent = spread parsedXml + overrides]\n    P --> R\n    Q --> R\n    R --> S[parseActionParams reads responseContent.params → Map of action to params]\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"fix: extract action params from standalo...\"](https://github.com/elizaos/eliza/commit/268170e3dc32533e612a4d9c1032402093b1ddb2) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=26585402)</sub>\n\n> Greptile also left **2 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-03-27T16:29:36Z",
      "mergedAt": "2026-03-27T16:38:05Z",
      "additions": 242,
      "deletions": 30
    },
    {
      "id": "PR_kwDOMT5cIs7N6REK",
      "title": "chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates",
      "author": "dependabot",
      "number": 6689,
      "body": "Bumps the npm_and_yarn group with 2 updates in the /packages/computeruse/packages/kv directory: [handlebars](https://github.com/handlebars-lang/handlebars.js) and [picomatch](https://github.com/micromatch/picomatch).\n\nUpdates `handlebars` from 4.7.8 to 4.7.9\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/handlebars-lang/handlebars.js/releases\">handlebars's releases</a>.</em></p>\n<blockquote>\n<h2>v4.7.9</h2>\n<ul>\n<li>fix: enable shell mode for spawn to resolve Windows EINVAL issue - e0137c2</li>\n<li>fix type &quot;RuntimeOptions&quot; also accepting string partials - eab1d14</li>\n<li>feat(types): set <code>hash</code> to be a <code>Record&lt;string, any&gt;</code> - de4414d</li>\n<li>fix non-contiguous program indices - 4512766</li>\n<li>refactor: rename i to startPartIndex - e497a35</li>\n<li>security: fix security issues - 68d8df5\n<ul>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2w6w-674q-4c4q\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2w6w-674q-4c4q</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-3mfm-83xf-c92r\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-3mfm-83xf-c92r</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xhpv-hc6g-r9c6\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xhpv-hc6g-r9c6</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xjpj-3mr7-gcpf\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xjpj-3mr7-gcpf</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-9cx6-37pm-9jff\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-9cx6-37pm-9jff</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2qvq-rjwj-gvw9\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2qvq-rjwj-gvw9</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-7rx3-28cr-v5wh\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-7rx3-28cr-v5wh</a></li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-442j-39wm-28r2\">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-442j-39wm-28r2</a></li>\n</ul>\n</li>\n</ul>\n<p><a href=\"https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9\">Commits</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/handlebars-lang/handlebars.js/blob/v4.7.9/release-notes.md\">handlebars's changelog</a>.</em></p>\n<blockquote>\n<h2>v4.7.9 - March 26th, 2026</h2>\n<ul>\n<li>fix: enable shell mode for spawn to resolve Windows EINVAL issue - e0137c2</li>\n<li>fix type &quot;RuntimeOptions&quot; also accepting string partials - eab1d14</li>\n<li>feat(types): set <code>hash</code> to be a <code>Record&lt;string, any&gt;</code> - de4414d</li>\n<li>fix non-contiguous program indices - 4512766</li>\n<li>refactor: rename i to startPartIndex - e497a35</li>\n<li>security: fix security issues - 68d8df5</li>\n</ul>\n<p><a href=\"https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9\">Commits</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/dce542c9a660048d31f0981ac8a45c08b919bddb\"><code>dce542c</code></a> v4.7.9</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/8a41389ba5b2624b6f43a5463d8e2533b843a562\"><code>8a41389</code></a> Update release notes</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/68d8df5a88e0a26fe9e6084c5c6aaebe67b07da2\"><code>68d8df5</code></a> Fix security issues</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/b2a083136b11e1da9f0f47a11f749a9830a49328\"><code>b2a0831</code></a> Fix browser tests</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/9f98c1629834abf8de5a127caff8a2eab03d2c12\"><code>9f98c16</code></a> Fix release script</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/45443b4290475dfb7cec32a85d344f12ab345eb9\"><code>45443b4</code></a> Revert &quot;Improve partial indenting performance&quot;</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/8841a5f6d35096aee95d68e1e49636a4cb5c661e\"><code>8841a5f</code></a> Fix CI errors with linting</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/e0137c26f2202593bca7cc25184e733e87d54709\"><code>e0137c2</code></a> fix: enable shell mode for spawn to resolve Windows EINVAL issue</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/e914d6037ffb0dd371f7e4823cdb019732ae66d7\"><code>e914d60</code></a> Improve rendering performance</li>\n<li><a href=\"https://github.com/handlebars-lang/handlebars.js/commit/7de4b41c344a5d702edca93d1841b59642fa32bd\"><code>7de4b41</code></a> Upgrade GitHub Actions checkout and setup-node on 4.x branch</li>\n<li>Additional commits viewable in <a href=\"https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `picomatch` from 2.3.1 to 2.3.2\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/micromatch/picomatch/releases\">picomatch's releases</a>.</em></p>\n<blockquote>\n<h2>2.3.2</h2>\n<p>This is a security release fixing several security relevant issues.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>fix: exception when glob pattern contains constructor by <a href=\"https://github.com/Jason3S\"><code>@​Jason3S</code></a> in <a href=\"https://redirect.github.com/micromatch/picomatch/pull/144\">micromatch/picomatch#144</a></li>\n<li>Fix for <a href=\"https://github.com/micromatch/picomatch/security/advisories/GHSA-c2c7-rcm5-vvqj\">CVE-2026-33671</a></li>\n<li>Fix for <a href=\"https://github.com/micromatch/picomatch/security/advisories/GHSA-3v7f-55p6-f55p\">CVE-2026-33672</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2\">https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md\">picomatch's changelog</a>.</em></p>\n<blockquote>\n<h1>Release history</h1>\n<p><strong>All notable changes to this project will be documented in this file.</strong></p>\n<p>The format is based on <a href=\"http://keepachangelog.com/en/1.0.0/\">Keep a Changelog</a>\nand this project adheres to <a href=\"http://semver.org/spec/v2.0.0.html\">Semantic Versioning</a>.</p>\n<!-- raw HTML omitted -->\n<ul>\n<li>Changelogs are for humans, not machines.</li>\n<li>There should be an entry for every single version.</li>\n<li>The same types of changes should be grouped.</li>\n<li>Versions and sections should be linkable.</li>\n<li>The latest version comes first.</li>\n<li>The release date of each versions is displayed.</li>\n<li>Mention whether you follow Semantic Versioning.</li>\n</ul>\n<!-- raw HTML omitted -->\n<!-- raw HTML omitted -->\n<p>Changelog entries are classified using the following labels <em>(from <a href=\"http://keepachangelog.com/\">keep-a-changelog</a></em>):</p>\n<ul>\n<li><code>Added</code> for new features.</li>\n<li><code>Changed</code> for changes in existing functionality.</li>\n<li><code>Deprecated</code> for soon-to-be removed features.</li>\n<li><code>Removed</code> for now removed features.</li>\n<li><code>Fixed</code> for any bug fixes.</li>\n<li><code>Security</code> in case of vulnerabilities.</li>\n</ul>\n<!-- raw HTML omitted -->\n<h2>4.0.0 (2024-02-07)</h2>\n<h3>Fixes</h3>\n<ul>\n<li>Fix bad text values in parse <a href=\"https://redirect.github.com/micromatch/picomatch/issues/126\">#126</a>, thanks to <a href=\"https://github.com/connor4312\"><code>@​connor4312</code></a></li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Remove process global to work outside of node <a href=\"https://redirect.github.com/micromatch/picomatch/issues/129\">#129</a>, thanks to <a href=\"https://github.com/styfle\"><code>@​styfle</code></a></li>\n<li>Add sideEffects to package.json <a href=\"https://redirect.github.com/micromatch/picomatch/issues/128\">#128</a>, thanks to <a href=\"https://github.com/frandiox\"><code>@​frandiox</code></a></li>\n<li>Removed <code>os</code>, make compatible browser environment. See <a href=\"https://redirect.github.com/micromatch/picomatch/issues/124\">#124</a>, thanks to <a href=\"https://github.com/gwsbhqt\"><code>@​gwsbhqt</code></a></li>\n</ul>\n<h2>3.0.1</h2>\n<h3>Fixes</h3>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/81cba8d4b767cab3cb29d26eb4f691eed75b73b2\"><code>81cba8d</code></a> Publish 2.3.2</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/fc1f6b69006e9435caf8fb40d8aff378bc0b7bce\"><code>fc1f6b6</code></a> Merge commit from fork</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/eec17aee5428a7249e9ca5adbb8a0d28fa29619b\"><code>eec17ae</code></a> Merge commit from fork</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/78f8ca4362d9e66cadea97b93e292f10096452ed\"><code>78f8ca4</code></a> Merge pull request <a href=\"https://redirect.github.com/micromatch/picomatch/issues/156\">#156</a> from micromatch/backport-144</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/3f4f10eaa65bf3a52e8f2999674cd27e11fa3c9b\"><code>3f4f10e</code></a> Merge pull request <a href=\"https://redirect.github.com/micromatch/picomatch/issues/144\">#144</a> from Jason3S/jdent-object-properties</li>\n<li>See full diff in <a href=\"https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/elizaOS/eliza/network/alerts).\n\n</details>",
      "repository": "elizaos/eliza",
      "createdAt": "2026-03-27T01:52:42Z",
      "mergedAt": null,
      "additions": 6,
      "deletions": 6
    },
    {
      "id": "PR_kwDOMT5cIs7Nzg7g",
      "title": "chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /packages/computeruse/packages/kv in the npm_and_yarn group across 1 directory",
      "author": "dependabot",
      "number": 6685,
      "body": "Bumps the npm_and_yarn group with 1 update in the /packages/computeruse/packages/kv directory: [picomatch](https://github.com/micromatch/picomatch).\n\nUpdates `picomatch` from 2.3.1 to 2.3.2\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/micromatch/picomatch/releases\">picomatch's releases</a>.</em></p>\n<blockquote>\n<h2>2.3.2</h2>\n<p>This is a security release fixing several security relevant issues.</p>\n<h2>What's Changed</h2>\n<ul>\n<li>fix: exception when glob pattern contains constructor by <a href=\"https://github.com/Jason3S\"><code>@​Jason3S</code></a> in <a href=\"https://redirect.github.com/micromatch/picomatch/pull/144\">micromatch/picomatch#144</a></li>\n<li>Fix for <a href=\"https://github.com/micromatch/picomatch/security/advisories/GHSA-c2c7-rcm5-vvqj\">CVE-2026-33671</a></li>\n<li>Fix for <a href=\"https://github.com/micromatch/picomatch/security/advisories/GHSA-3v7f-55p6-f55p\">CVE-2026-33672</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2\">https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md\">picomatch's changelog</a>.</em></p>\n<blockquote>\n<h1>Release history</h1>\n<p><strong>All notable changes to this project will be documented in this file.</strong></p>\n<p>The format is based on <a href=\"http://keepachangelog.com/en/1.0.0/\">Keep a Changelog</a>\nand this project adheres to <a href=\"http://semver.org/spec/v2.0.0.html\">Semantic Versioning</a>.</p>\n<!-- raw HTML omitted -->\n<ul>\n<li>Changelogs are for humans, not machines.</li>\n<li>There should be an entry for every single version.</li>\n<li>The same types of changes should be grouped.</li>\n<li>Versions and sections should be linkable.</li>\n<li>The latest version comes first.</li>\n<li>The release date of each versions is displayed.</li>\n<li>Mention whether you follow Semantic Versioning.</li>\n</ul>\n<!-- raw HTML omitted -->\n<!-- raw HTML omitted -->\n<p>Changelog entries are classified using the following labels <em>(from <a href=\"http://keepachangelog.com/\">keep-a-changelog</a></em>):</p>\n<ul>\n<li><code>Added</code> for new features.</li>\n<li><code>Changed</code> for changes in existing functionality.</li>\n<li><code>Deprecated</code> for soon-to-be removed features.</li>\n<li><code>Removed</code> for now removed features.</li>\n<li><code>Fixed</code> for any bug fixes.</li>\n<li><code>Security</code> in case of vulnerabilities.</li>\n</ul>\n<!-- raw HTML omitted -->\n<h2>4.0.0 (2024-02-07)</h2>\n<h3>Fixes</h3>\n<ul>\n<li>Fix bad text values in parse <a href=\"https://redirect.github.com/micromatch/picomatch/issues/126\">#126</a>, thanks to <a href=\"https://github.com/connor4312\"><code>@​connor4312</code></a></li>\n</ul>\n<h3>Changed</h3>\n<ul>\n<li>Remove process global to work outside of node <a href=\"https://redirect.github.com/micromatch/picomatch/issues/129\">#129</a>, thanks to <a href=\"https://github.com/styfle\"><code>@​styfle</code></a></li>\n<li>Add sideEffects to package.json <a href=\"https://redirect.github.com/micromatch/picomatch/issues/128\">#128</a>, thanks to <a href=\"https://github.com/frandiox\"><code>@​frandiox</code></a></li>\n<li>Removed <code>os</code>, make compatible browser environment. See <a href=\"https://redirect.github.com/micromatch/picomatch/issues/124\">#124</a>, thanks to <a href=\"https://github.com/gwsbhqt\"><code>@​gwsbhqt</code></a></li>\n</ul>\n<h2>3.0.1</h2>\n<h3>Fixes</h3>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/81cba8d4b767cab3cb29d26eb4f691eed75b73b2\"><code>81cba8d</code></a> Publish 2.3.2</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/fc1f6b69006e9435caf8fb40d8aff378bc0b7bce\"><code>fc1f6b6</code></a> Merge commit from fork</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/eec17aee5428a7249e9ca5adbb8a0d28fa29619b\"><code>eec17ae</code></a> Merge commit from fork</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/78f8ca4362d9e66cadea97b93e292f10096452ed\"><code>78f8ca4</code></a> Merge pull request <a href=\"https://redirect.github.com/micromatch/picomatch/issues/156\">#156</a> from micromatch/backport-144</li>\n<li><a href=\"https://github.com/micromatch/picomatch/commit/3f4f10eaa65bf3a52e8f2999674cd27e11fa3c9b\"><code>3f4f10e</code></a> Merge pull request <a href=\"https://redirect.github.com/micromatch/picomatch/issues/144\">#144</a> from Jason3S/jdent-object-properties</li>\n<li>See full diff in <a href=\"https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=picomatch&package-manager=npm_and_yarn&previous-version=2.3.1&new-version=2.3.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/elizaOS/eliza/network/alerts).\n\n</details>",
      "repository": "elizaos/eliza",
      "createdAt": "2026-03-26T17:39:14Z",
      "mergedAt": null,
      "additions": 3,
      "deletions": 3
    }
  ],
  "codeChanges": {
    "additions": 242,
    "deletions": 30,
    "files": 2,
    "commitCount": 11
  },
  "completedItems": [
    {
      "title": "fix: extract action params from standalone XML blocks in comma-separated format",
      "prNumber": 6692,
      "type": "bugfix",
      "body": "## Summary\n- When the LLM outputs actions as `<actions>REPLY,START_CODING_TASK</actions>` (comma-separated), the message service extracted action names but **dropped all parameters**\n- The LLM outputs params in standalone sibling blocks lik",
      "files": [
        "packages/typescript/src/__tests__/comma-separated-action-params.test.ts",
        "packages/typescript/src/services/message.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 81.31288134035684,
      "prScore": 45.11288134035684,
      "issueScore": 0,
      "reviewScore": 36,
      "commentScore": 0.2,
      "summary": "odilitime: Focused on bugfix work, opening PR elizaos/eliza#6690 to consolidate StreamChunkCallback and remove dual-extra, while also providing 8 review comments across various pull requests. Their code changes involved modifying 18 files with a net addition of 115 lines, primarily in code and documentation."
    },
    {
      "username": "HaruHunab1320",
      "avatarUrl": "https://avatars.githubusercontent.com/u/51176775?u=e51de0edfe50f67a1a5dca3bf3fa3053811dfb7e&v=4",
      "totalScore": 40.60947179518496,
      "prScore": 40.60947179518496,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "HaruHunab1320: Focused on improving the parsing of standalone XML blocks, merging a significant bugfix in elizaos/eliza (#6692) with +242/-30 lines of changes, demonstrating a balanced contribution to both feature and bugfix work across code and tests."
    },
    {
      "username": "ItachiDevv",
      "avatarUrl": "https://avatars.githubusercontent.com/u/215284846?u=2a0b5e47905d4545f9c3872836236af94b30bc91&v=4",
      "totalScore": 15.09861228866811,
      "prScore": 15.09861228866811,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "ItachiDevv: Today, ItachiDevv opened a new pull request, elizaos-plugins/registry#322, to add a new plugin, and made a small configuration change related to tests."
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 13.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 13.5,
      "commentScore": 0,
      "summary": "greptile-apps: No activity today."
    },
    {
      "username": "pino12033",
      "avatarUrl": "https://avatars.githubusercontent.com/u/265916801?v=4",
      "totalScore": 0.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": "pino12033: Focused on bugfix work, contributing one PR comment and modifying 2 files with 1 commit."
    }
  ],
  "newPRs": 3,
  "mergedPRs": 1,
  "newIssues": 0,
  "closedIssues": 0,
  "activeContributors": 5
}