{
  "interval": {
    "intervalStart": "2025-08-17T00:00:00.000Z",
    "intervalEnd": "2025-08-18T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-08-17 to 2025-08-18, elizaos/eliza had 3 new PRs (2 merged), 1 new issues, and 5 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7GW5oV",
      "title": "Implement PDF Export",
      "author": "linear",
      "number": 5790,
      "repository": "elizaos/eliza",
      "body": "### **Ticket: Implement PDF Export**\n\n**ID:** `FEAT-134` (Example ID)\n\n**Epic:** `Performance Reporting Dashboard`\n\n**Tags:** `cli`, `reporting`,- `feature`, `pdf`\n\n**Estimated Story Points:** `5`\n\n**Dependencies:** `FEAT-133` (Dynamic Report Rendering)\n\n#### **1. Title**\n\n`feat(cli): Add PDF export functionality to the 'report generate' command`\n\n#### **2. Description**\n\nTo enhance the shareability and archiving of performance reports, this ticket adds an optional PDF export feature. It introduces a `--format pdf` flag to the `elizaos report generate` command, which will generate a high-fidelity PDF version of the HTML report.\n\nThis will be achieved by using a headless browser library, **Puppeteer**, to \"print\" the final, fully-rendered HTML report to a PDF file. This approach ensures that the PDF is a perfect, pixel-for-pixel representation of the interactive web report, including all charts and dynamic content.\n\n#### **3. Acceptance Criteria**\n\n1. **CLI Flag Implementation:**\n   * The `elizaos report generate` command is updated to accept a new optional flag: `--format <format>`.\n   * The accepted values for `<format>` are `html` (default) and `pdf`.\n   * The command's help text is updated to document the new flag.\n2. **Puppeteer Integration:**\n   * The `puppeteer` npm package is added as a development dependency to the `packages/cli` project.\n   * A new utility or service is created to encapsulate the PDF generation logic.\n3. **PDF Generation Logic:**\n   * When `--format pdf` is specified, the command first generates the final HTML report in a temporary location.\n   * It then launches a headless Chrome instance using Puppeteer.\n   * It navigates to the temporary HTML file using a `file://` URL.\n   * It waits for the page and all JavaScript (including chart animations) to be fully loaded and rendered. A delay or a specific DOM-ready event might be necessary.\n   * It calls Puppeteer's `page.pdf()` method to generate the PDF.\n   * The generated PDF is saved to the specified output path (e.g., `<input_dir>/performance_report.pdf`).\n   * The temporary HTML file is deleted after the PDF is successfully created.\n4. **Print-Friendly Styling:**\n   * The HTML template is updated with a `@media print` CSS block.\n   * These print-specific styles will ensure the PDF output is optimized for a document format:\n     * Remove unnecessary UI elements like interactive search/sort buttons from the print view.\n     * Ensure chart animations are disabled for printing to capture their final state.\n     * Optimize page breaks to avoid splitting charts or tables awkwardly across pages.\n     * Set a consistent page margin and font size for readability.\n\n#### **4. Technical Implementation Details**\n\n**Files to Modify / Create:**\n\n* `packages/cli/package.json`: Add `puppeteer` dependency.\n* `packages/cli/src/commands/report/generate.ts`: Add the `--format` flag and the conditional logic to invoke the PDF generator.\n* `packages/cli/src/commands/report/src/pdf-generator.ts`: New file containing the Puppeteer logic.\n* `packages/cli/src/commands/report/src/assets/report_template.html`: Add the `@media print` styles.\n\n**Example PDF Generation Logic (**`pdf-generator.ts`):\n\n```typescript\nimport puppeteer from 'puppeteer';\nimport fs from 'fs/promises';\nimport path from 'path';\nexport async function generatePdfFromHtml(htmlContent: string, outputPath: string): Promise<void> {\n  const tempHtmlPath = path.join(path.dirname(outputPath), 'temp_report.html');\n  await fs.writeFile(tempHtmlPath, htmlContent);\n  const browser = await puppeteer.launch({ headless: true });\n  const page = await browser.newPage();\n  \n  await page.goto(`file://${tempHtmlPath}`, { waitUntil: 'networkidle0' });\n  // Optional: Wait for charts to finish animating\n  await page.waitForTimeout(2000); \n  await page.pdf({\n    path: outputPath,\n    format: 'A4',\n    printBackground: true,\n    margin: { top: '20px', right: '20px', bottom: '20px', left: '20px' }\n  });\n  await browser.close();\n  await fs.unlink(tempHtmlPath);\n}\n```\n\n**Example Print-Specific CSS:**\n\n```css\n@media print {\n  body {\n    font-size: 10pt;\n  }\n  .no-print, .interactive-controls {\n    display: none !important;\n  }\n  canvas {\n    /* Ensure charts are not split across pages */\n    page-break-inside: avoid;\n  }\n}\n```\n\n#### **5. Testing Requirements**\n\n* **Integration Tests:**\n  * Update the `generate` command's integration test to include a case with the `--format pdf` flag.\n  * The test should assert that a non-empty PDF file is created at the expected location.\n  * (Optional but recommended) Use a library like `pdf-parse` to read the generated PDF's text content and verify that it contains expected strings from the report.\n* **Manual Testing:**\n  * Generate a PDF from a complex report and manually review it to ensure:\n    * All content, including charts, is rendered correctly.\n    * The layout and page breaks are clean.\n    * Text is selectable.\n    * There are no rendering artifacts from the headless browser.\n\n#### **6. Out of Scope**\n\n* Creating a separate, custom PDF layout. The goal is to mirror the HTML report's appearance, not to create a different design.\n* Advanced PDF features like an interactive table of contents or bookmarks.\n* Support for any other export formats besides `html` and `pdf`.",
      "createdAt": "2025-08-17T03:21:26Z",
      "closedAt": "2025-08-18T05:15:49Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6j_jmP",
      "title": "feat(bootstrap): async embedding generation via queue service",
      "author": "0xbbjoker",
      "number": 5793,
      "body": "# Relates to\r\n\r\nPerformance improvement for message processing latency - embeddings were blocking runtime for 500ms+ per message\r\n\r\n# Risks\r\n\r\n**Low risk** - The change is backward compatible and includes fallback behavior. Main risks:\r\n- Memory usage could increase if embedding queue grows large (mitigated by priority queue and processing limits)\r\n- Embeddings may be generated slightly later than before (acceptable trade-off for faster message responses)\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nThis PR implements asynchronous embedding generation to prevent blocking the message processing pipeline. Previously, generating embeddings for messages would block the runtime for 500ms+ per API call, delaying message responses. Now embeddings are queued and processed in the background by a dedicated service.\r\n\r\nKey changes:\r\n- Added `queueEmbeddingGeneration` method to `AgentRuntime` that emits events instead of blocking\r\n- Created `EmbeddingGenerationService` that listens for `EMBEDDING_QUEUED` events and processes them asynchronously\r\n- Implemented a priority queue system (high/normal/low) for embedding generation\r\n- Added comprehensive test coverage for both the runtime method and service\r\n\r\n## What kind of change is this?\r\n\r\n**Features** (non-breaking change which adds functionality) + **Improvements** (performance enhancement to existing features)\r\n\r\n# Documentation changes needed?\r\n\r\nMy changes require a change to the project documentation.\r\n- [ ] Need to document the new `queueEmbeddingGeneration` method in runtime API docs\r\n- [ ] Need to document the `EmbeddingGenerationService` in plugin documentation\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\n1. Review `packages/core/src/runtime.ts` - see the new `queueEmbeddingGeneration` method (lines 2024-2055)\r\n2. Review `packages/plugin-bootstrap/src/services/embedding.ts` - the new service implementation\r\n3. Check the integration in `packages/plugin-bootstrap/src/index.ts` where we replaced `addEmbeddingToMemory` calls with `queueEmbeddingGeneration`\r\n4. Review test coverage in:\r\n   - `packages/plugin-bootstrap/src/__tests__/embedding-service.test.ts`\r\n   - `packages/core/src/__tests__/runtime-embedding.test.ts`\r\n\r\n## Detailed testing steps\r\n\r\n### Automated Tests\r\n```bash\r\n# Run core tests\r\ncd packages/core && bun run test\r\n\r\n# Run bootstrap plugin tests  \r\ncd packages/plugin-bootstrap && bun run test\r\n```\r\n\r\n### Manual Testing\r\n1. Start an agent with the bootstrap plugin\r\n2. Send a message to the agent\r\n3. Observe that:\r\n   - The agent responds quickly (no 500ms delay)\r\n   - Check logs for \"Queueing embedding generation\" and \"Processing embedding for memory\"\r\n   - Verify embeddings are eventually generated (check database or memory state)\r\n\r\n### Performance Verification\r\nThe tests include a specific test case demonstrating non-blocking behavior:\r\n- `\"should not block runtime while generating embeddings\"` test verifies that embedding generation happens asynchronously\r\n- Response times should be significantly faster (500ms+ improvement per message)\r\n\r\n## Before/After Performance\r\n\r\n**Before:** Message → Create Memory → Generate Embedding (500ms+) → Process Actions → Respond  \r\n**After:** Message → Create Memory → Queue Embedding (instant) → Process Actions → Respond | (Embedding generated in background)\r\n\r\n# Deploy Notes\r\n\r\nNo deployment changes required. The service is automatically registered when the bootstrap plugin is loaded.\r\n\r\n## Database changes\r\n\r\nNone - uses existing memory table structure",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-17T15:38:09Z",
      "mergedAt": null,
      "additions": 1736,
      "deletions": 34
    },
    {
      "id": "PR_kwDOMT5cIs6j_KIc",
      "title": "fix: resolve test failures and enhance XML parsing reliability in CI environment",
      "author": "wtfsayo",
      "number": 5792,
      "body": "## Problem\nMultiple GitHub Actions test failures were occurring across different packages, plus a critical plugin configuration bug:\n\n### Original Issues (https://github.com/elizaOS/eliza/actions/runs/17020769599/job/48249463787)\n- ❌ **10 errors in plugin-bootstrap**: Missing `logger` property in MockRuntime\n- ❌ **Structured logging mismatch**: Tests expected old logging format instead of structured logging  \n- ❌ **Missing interface methods**: `getRoomsByIds` not implemented in MockRuntime\n\n### Additional CI Issues (https://github.com/elizaOS/eliza/actions/runs/17021201839/job/48250478841)\n- ❌ **TEE starter plugin config**: Expected 'OFF' but got undefined\n- ❌ **Attachment test mocking**: `useModel` mock not properly reset between tests\n- ❌ **XML parsing failures**: CI environment sometimes returns malformed XML responses\n\n### Critical Plugin Configuration Bug\n- ❌ **Config parsing at import time**: Schema parsing happened during module import, causing:\n  - Module load failures when environment variables are invalid\n  - Missing dynamically set environment variables\n  - Inconsistent config application due to duplicate parsing\n  - Improper test environment detection\n\n## Solution\n\n### ✅ **Fixed MockRuntime Infrastructure**\n- Added `logger` property to MockRuntime type definition with mock functions for `debug`, `warn`, `error`, and `info`\n- Added missing `getRoomsByIds` method to match `IAgentRuntime` interface\n- Enhanced mock setup to properly handle test isolation\n- Added `IMAGE_DESCRIPTION` model type support in mock runtime\n\n### ✅ **Updated Test Expectations for Structured Logging**\n- **Attachments tests**: Updated to check `mockRuntime.logger.warn` for runtime logger calls\n- **Evaluators tests**: Fixed to expect structured format: `{ error: expect.any(Error) }, 'message'`\n- **Services tests**: Updated task error logging expectations to match actual structured logging calls\n- **Proper logger verification**: Tests now check the correct logger instances (global vs runtime)\n\n### ✅ **Fixed Critical Plugin Configuration Bug**\n- **BREAKING CHANGE**: Moved config schema parsing from module import time to `plugin.init()` method\n- Eliminated duplicate config parsing logic\n- Ensured dynamic environment variables are picked up at runtime\n- Prevented module load failures due to invalid environment variables\n- Added comprehensive test for config parsing during initialization\n- Used dynamic property getters for config to ensure tests always see current env values\n\n### ✅ **Enhanced XML Parsing Reliability**\n- **Added fallback XML parsing**: When `parseKeyValueXml` fails, falls back to simple regex parsing\n- **Improved error handling**: Better handling of malformed or incomplete XML responses\n- **Null-safe processing**: Handle cases where description or text fields are missing\n- **CI compatibility**: Ensures attachment processing works reliably in different environments\n\n### ✅ **Enhanced Test Mocking**\n- Fixed `useModel` mock setup in attachment tests for CI compatibility\n- Ensured proper mock reset between test cases using `mockReset()`\n- Improved test isolation and reliability across different environments\n- Removed problematic module-level mocks in favor of instance-based mocking\n\n## Impact\n\n### 📊 **Test Results**\n- **Before**: 10+ test failures across multiple packages\n- **After**: **All tests passing** ✅\n  - plugin-bootstrap: 126 pass, 0 fail\n  - project-tee-starter: 93 pass, 1 skip, 0 fail\n\n### 🔧 **Technical Improvements**  \n- **Better TypeScript compliance**: MockRuntime fully implements `IAgentRuntime` interface\n- **Proper test infrastructure**: Consistent mock setup across all test files  \n- **Environment compatibility**: Tests work in both local development and CI environments\n- **Structured logging support**: All tests expect correct logging format\n- **Robust plugin loading**: Plugins no longer fail to load due to missing environment variables\n- **Dynamic configuration**: Config parsing happens at the right time with proper validation\n- **Reliable XML parsing**: Attachment processing handles various XML response formats\n\n## Testing\n\n### Local Verification\n```bash\n# Plugin Bootstrap Tests\ncd packages/plugin-bootstrap && bun test\n# ✅ 126 pass, 0 fail\n\n# TEE Starter Tests  \ncd packages/project-tee-starter && bun test\n# ✅ 93 pass, 1 skip, 0 fail\n```\n\n### Packages Fixed\n- ✅ `packages/plugin-bootstrap` - All 126 tests passing\n- ✅ `packages/project-tee-starter` - All 93 tests passing (1 skipped)\n- ✅ Mock infrastructure enhanced for future test reliability\n- ✅ Plugin configuration architecture improved for robustness\n- ✅ XML parsing enhanced for CI environment compatibility\n\nThis comprehensive fix resolves the GitHub Actions test failures and significantly improves both the test infrastructure and plugin configuration architecture for the ElizaOS project.\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-17T12:47:53Z",
      "mergedAt": "2025-08-17T14:46:05Z",
      "additions": 183,
      "deletions": 101
    },
    {
      "id": "PR_kwDOMT5cIs6j-yPz",
      "title": "fix: resolve entity creation SQL parameter mismatch",
      "author": "wtfsayo",
      "number": 5791,
      "body": "## Summary\n\nThis PR fixes a critical database error that was occurring during entity creation:\n\n```\n[ERROR] Error creating entity: Failed query: insert into \"entities\" values ($1, $2, default, default, default)\nparams: [only 2 parameters provided instead of expected 5]\n```\n\n## Root Cause\n\nThe issue was a mismatch between the TypeScript `Entity` interface and the database schema:\n- **TypeScript**: `metadata?: Metadata` (optional)\n- **Database**: `metadata JSONB NOT NULL DEFAULT '{}'` (required with default)\n\nWhen entities were created without metadata, Drizzle generated incorrect SQL with mismatched parameter counts.\n\n## Solution\n\n### 1. Type System Fix (Primary)\n- Made `Entity.metadata` required in TypeScript to match database schema\n- This prevents the issue at compile time rather than runtime\n\n### 2. Logger Improvements (Secondary)  \n- Converted structured logging calls to string-based messages\n- Fixed TypeScript errors in logger parameter types\n- Improved performance by eliminating object creation in log calls\n\n## Benefits\n\n- **Type Safety**: Compile-time prevention of entity creation without metadata\n- **Performance**: No runtime data transformation needed\n- **Consistency**: TypeScript types now match database reality\n- **Maintainability**: Self-documenting code that makes requirements clear\n\n## Testing\n\nAll entity-related tests pass:\n- ✅ Basic entity creation and retrieval\n- ✅ Entity updates and deletions  \n- ✅ Multiple entity operations\n- ✅ Edge cases (duplicate creation, missing data)\n- ✅ Complex entity operations with metadata\n\n## Migration Impact\n\nThis is a breaking change for any code creating entities without metadata, but:\n1. The database already required metadata (with empty object default)\n2. Most existing code already provides metadata\n3. TypeScript will catch any missing cases at compile time\n\n## Files Changed\n\n- `packages/core/src/types/environment.ts`: Made Entity.metadata required\n- `packages/plugin-sql/src/base.ts`: Removed runtime transformation, fixed logging",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-17T09:38:09Z",
      "mergedAt": "2025-08-17T12:03:34Z",
      "additions": 90,
      "deletions": 139
    }
  ],
  "codeChanges": {
    "additions": 273,
    "deletions": 240,
    "files": 10,
    "commitCount": 22
  },
  "completedItems": [
    {
      "title": "fix: resolve test failures and enhance XML parsing reliability in CI environment",
      "prNumber": 5792,
      "type": "bugfix",
      "body": "## Problem\nMultiple GitHub Actions test failures were occurring across different packages, plus a critical plugin configuration bug:\n\n### Original Issues (https://github.com/elizaOS/eliza/actions/runs/17020769599/job/48249463787)\n- ❌ **10 e",
      "files": [
        "bun.lock",
        "packages/plugin-bootstrap/src/__tests__/attachments.test.ts",
        "packages/plugin-bootstrap/src/__tests__/evaluators.test.ts",
        "packages/plugin-bootstrap/src/__tests__/services.test.ts",
        "packages/plugin-bootstrap/src/__tests__/test-utils.ts",
        "packages/plugin-bootstrap/src/index.ts",
        "packages/project-tee-starter/src/__tests__/config.test.ts",
        "packages/project-tee-starter/src/plugin.ts"
      ]
    },
    {
      "title": "fix: resolve entity creation SQL parameter mismatch",
      "prNumber": 5791,
      "type": "bugfix",
      "body": "## Summary\n\nThis PR fixes a critical database error that was occurring during entity creation:\n\n```\n[ERROR] Error creating entity: Failed query: insert into \"entities\" values ($1, $2, default, default, default)\nparams: [only 2 parameters pr",
      "files": [
        "packages/core/src/types/environment.ts",
        "packages/plugin-sql/src/base.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 94.09303602999779,
      "prScore": 94.09303602999779,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "wtfsayo: Focused on critical bug fixes, merging two PRs in elizaos/eliza, including #5792 which resolved test failures and enhanced XML parsing reliability, and #5791 which addressed an entity creation SQL parameter mismatch. Their work primarily involved bugfix and test-related code changes across 200 files."
    },
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 53.7437738965761,
      "prScore": 43.5437738965761,
      "issueScore": 0,
      "reviewScore": 10,
      "commentScore": 0.2,
      "summary": "0xbbjoker: Focused on significant feature development, opening PR elizaos/eliza#5793 to enable async embedding generation via a queue service, which involved substantial code changes across 14 files (+1179/-32 lines) with a primary focus on tests and code. They also provided two approvals on other pull requests."
    },
    {
      "username": "madjin",
      "avatarUrl": "https://avatars.githubusercontent.com/u/32600939?u=cdcf89f44c7a50906c7a80d889efa85023af2049&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "madjin: Focused on strategic planning by creating a new issue, elizaos/elizaos.github.io#150, to track the implementation of \"Attestations via SAS / EAS.\""
    },
    {
      "username": "linear",
      "avatarUrl": "https://avatars.githubusercontent.com/in/20150?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "linear: Focused on future feature development by creating issue elizaos/eliza#5790, \"Implement PDF Export.\""
    }
  ],
  "newPRs": 3,
  "mergedPRs": 2,
  "newIssues": 1,
  "closedIssues": 0,
  "activeContributors": 5
}