{
  "interval": {
    "intervalStart": "2025-08-21T00:00:00.000Z",
    "intervalEnd": "2025-08-22T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-08-21 to 2025-08-22, elizaos/eliza had 3 new PRs (3 merged), 0 new issues, and 7 active contributors.",
  "topIssues": [],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6ePDWm",
      "title": "feat: training models on own data",
      "author": "lalalune",
      "number": 5510,
      "body": "The goal of this plugin-training is to insert as a custom reasoning module which self-trains on the agent's data and the runs online after training. It's very WIP, and demonstrates a few of these steps, such as training a custom DeepSeek distilled model on together.ai from data, and overriding the internal models with the DeepSeek models. Some of it is still vibe code trash.\r\n\r\nIt was developed on the 'next' branch and might need a little work to integrate into current develop, especially wrt how we integrate the custom reasoning. It's also a bit messy and needs some consistency, and we should make CustomReasoningService into a shared IReasoningService type.",
      "repository": "elizaos/eliza",
      "createdAt": "2025-07-10T05:58:47Z",
      "mergedAt": null,
      "additions": 18236,
      "deletions": 0
    },
    {
      "id": "PR_kwDOMT5cIs6eONK4",
      "title": "Add new types",
      "author": "lalalune",
      "number": 5505,
      "body": "This PR adds some new types, including IPlanningService and other planning types, and some needed type additions to plugins. Also refactors out \"primitives\" since that's a bit random and ugly, instead we have uuid, metadata and the others were moved to messaging to be more appropriate to the nomenclature",
      "repository": "elizaos/eliza",
      "createdAt": "2025-07-10T03:36:06Z",
      "mergedAt": null,
      "additions": 2080,
      "deletions": 130
    },
    {
      "id": "PR_kwDOMT5cIs6j3Xuz",
      "title": "streaming useModel /core",
      "author": "ChristopherTrimboli",
      "number": 5777,
      "body": "# 🚀 Streaming Support for ElizaOS Core Runtime\r\n\r\n## Overview\r\nThis PR introduces comprehensive streaming support to the ElizaOS core runtime, enabling real-time, token-by-token responses from language models. This is a significant enhancement that improves user experience through faster perceived response times and enables new use cases like real-time transcription and audio streaming.\r\n\r\n## Key Changes\r\n\r\n### 1. Core Runtime Enhancements (`packages/core`)\r\n\r\n#### New Streaming Types and Interfaces\r\n- **`ModelStream<T>`**: Type alias for `AsyncIterable<T>` representing streaming data\r\n- **`ModelStreamHandler`**: Interface for registering streaming model implementations\r\n- **Stream Chunk Types**: \r\n  - `TextStreamChunk`: For text generation streaming (delta events with partial text)\r\n  - `TranscriptionStreamChunk`: For audio transcription streaming (partial transcripts)\r\n  - `TextToSpeechStreamChunk`: For TTS streaming (audio chunks)\r\n  - Base types: `ModelStreamFinishChunk`, `ModelStreamErrorChunk`, `ModelStreamUsageChunk`\r\n\r\n#### Runtime Implementation\r\n- **Stream Registry**: New `streamModels` Map to store streaming handlers by model type\r\n- **`registerModelStream()`**: Register streaming handlers with priority-based resolution\r\n- **`getModelStream()`**: Retrieve the highest-priority streaming handler for a model type\r\n- **Stream Normalization**: `wrapReadableStream()` utility that normalizes different stream types:\r\n  - Native `AsyncIterable` objects\r\n  - Web `ReadableStream` API\r\n  - Node.js `Readable` streams\r\n\r\n#### Unified `useModel` API\r\nInstead of adding a separate `useModelStream` function, streaming is elegantly integrated into the existing `useModel` API through overloads:\r\n\r\n```typescript\r\n// Non-streaming (default)\r\nconst result = await runtime.useModel(ModelType.TEXT_LARGE, { prompt: \"Hello\" });\r\n\r\n// Streaming via event parameter\r\nconst stream = await runtime.useModel(\r\n  ModelType.TEXT_LARGE, \r\n  { prompt: \"Hello\" },\r\n  'STREAMING_TEXT'\r\n);\r\n\r\nfor await (const chunk of stream) {\r\n  if (chunk.event === 'delta') {\r\n    console.log(chunk.delta); // Partial text\r\n  }\r\n}\r\n```\r\n\r\n### 2. OpenAI Plugin Integration (`plugin-openai`)\r\n\r\n#### Streaming Implementations\r\n- **Text Generation**: Uses `@ai-sdk/openai`'s `streamText` for GPT models\r\n  - Yields delta chunks with partial text\r\n  - Includes usage statistics (token counts)\r\n  - Proper finish events with complete output\r\n  \r\n- **Text-to-Speech**: Streaming audio generation\r\n  - Yields audio chunks for real-time playback\r\n  - Fallback to single chunk if response isn't streamable\r\n\r\n#### Type Safety\r\n- All streaming handlers are fully typed with no `any` casts\r\n- Local type definitions to handle module resolution\r\n- Conditional registration based on runtime capabilities\r\n\r\n### 3. Testing Infrastructure\r\n\r\n#### Core Streaming Tests (`packages/core/src/__tests__/streaming.test.ts`)\r\n- Tests for streaming handler registration and priority resolution\r\n- Fallback behavior when no streaming handler exists\r\n- Event emission during streaming\r\n- Proper async iteration over stream chunks\r\n\r\n### 4. Type Safety Improvements\r\n\r\n#### Complete Type Coverage\r\n- **No more `any` types**: All parameters and returns are properly typed\r\n- **Generic constraints**: Using TypeScript generics to maintain type relationships\r\n- **Mapped types**: `ModelParamsMap`, `ModelResultMap`, `ModelStreamChunkMap` for type-safe model operations\r\n- **Overloaded signatures**: Clean API with proper return type inference\r\n\r\n#### Fixed Issues\r\n- Tokenizer parameters now include required `modelType` field\r\n- Proper type assertions only where necessary (stream type detection)\r\n- All explicit casts removed in favor of proper typing\r\n\r\n## Benefits\r\n\r\n### For Users\r\n- **Faster Time-to-First-Token**: Users see responses begin immediately\r\n- **Better UX**: Progressive loading instead of waiting for complete responses\r\n- **Real-time Features**: Enables live transcription, streaming audio, etc.\r\n\r\n### For Developers\r\n- **Simple API**: Streaming integrated into existing `useModel` function\r\n- **Type Safety**: Full TypeScript support with no `any` types\r\n- **Flexibility**: Support for different stream formats and sources\r\n- **Extensibility**: Easy to add new streaming model types\r\n\r\n## Technical Highlights\r\n\r\n### Stream Event Types\r\n```typescript\r\n// Text streaming example\r\n{ event: 'delta', delta: 'Hello' }\r\n{ event: 'delta', delta: ' world' }\r\n{ event: 'usage', tokens: { prompt: 5, completion: 2, total: 7 } }\r\n{ event: 'finish', output: 'Hello world' }\r\n```\r\n\r\n### Error Handling\r\n- Graceful fallback to non-streaming when handlers unavailable\r\n- Proper error propagation through stream chunks\r\n- Abort signal support for cancellation\r\n\r\n### Performance\r\n- Minimal overhead for non-streaming calls\r\n- Efficient stream normalization without buffering\r\n- Priority-based handler selection for optimal provider choice\r\n\r\n## Breaking Changes\r\nNone! The implementation is fully backward compatible:\r\n- Existing `useModel` calls work unchanged\r\n- Streaming is opt-in via the event parameter\r\n- Plugins without streaming support continue to work\r\n\r\n## Migration Guide\r\nTo enable streaming in your code:\r\n\r\n```typescript\r\n// Before (still works)\r\nconst response = await runtime.useModel(ModelType.TEXT_LARGE, {\r\n  prompt: \"Write a story\"\r\n});\r\n\r\n// After (with streaming)\r\nconst stream = await runtime.useModel(\r\n  ModelType.TEXT_LARGE,\r\n  { prompt: \"Write a story\" },\r\n  'STREAMING_TEXT'\r\n);\r\n\r\nfor await (const chunk of stream) {\r\n  if (chunk.event === 'delta') {\r\n    process.stdout.write(chunk.delta);\r\n  }\r\n}\r\n```\r\n\r\n## Testing\r\n- ✅ All existing tests pass\r\n- ✅ New streaming-specific tests added\r\n- ✅ Type checking passes with no errors\r\n- ✅ No regression in non-streaming functionality\r\n\r\n## Future Enhancements\r\n- WebSocket/SSE transport for browser clients\r\n- Streaming support for more model types (embeddings, image generation)\r\n- Stream transformation utilities (buffering, throttling)\r\n- Progress indicators for long-running streams\r\n\r\n---\r\n\r\nThis implementation provides a robust, type-safe foundation for streaming in ElizaOS while maintaining full backward compatibility and excellent developer experience.\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-15T16:48:42Z",
      "mergedAt": null,
      "additions": 1024,
      "deletions": 185
    },
    {
      "id": "PR_kwDOMT5cIs6kv00E",
      "title": "fix: metadata in sessions",
      "author": "ChristopherTrimboli",
      "number": 5805,
      "body": "## Session Metadata Propagation for Plugin Actions\n\n### Overview\nThis PR implements session metadata propagation throughout the ElizaOS message processing pipeline, enabling plugins and actions to access custom session metadata (like `ethAddress`, authentication tokens, or platform-specific data) that was provided during session creation.\n\n### Problem\nPreviously, when creating a session with custom metadata via the REST API, this metadata was not accessible to plugin actions. This was particularly problematic for Web3 integrations where wallet addresses and other user context needed to persist across the session.\n\n### Solution\nImplemented a complete metadata propagation flow from session creation through to action handlers:\n\n```\nSession Creation → Channel Metadata → Message Metadata → Memory Object → Action Handler\n```\n\n### Changes Made\n\n#### 1. **Session API Enhancement** (`packages/server/src/api/messaging/sessions.ts`)\n- Modified message sending to fetch and merge channel metadata (containing session metadata)\n- Ensures session metadata is included in all messages sent within that session\n\n#### 2. **Message Bus Service Update** (`packages/server/src/services/message.ts`)\n- Updated `createAgentMemory` to preserve all message metadata in Memory objects\n- Session metadata now flows through to actions via `message.metadata`\n\n#### 3. **Comprehensive Test Coverage**\n- ✅ Added test: \"should propagate session metadata to messages\" in `sessions.test.ts`\n- ✅ Added test: \"should preserve session metadata when creating memories\" in `message-bus.test.ts`\n- ✅ Added test: \"should handle messages without metadata gracefully\" in `message-bus.test.ts`\n\n#### 4. **Documentation & Examples**\n- 📝 Created example action demonstrating metadata access (`examples/session-metadata-access.ts`)\n- 📚 Added comprehensive documentation (`docs/session-metadata-propagation.md`)\n\n### Usage Example\n\n**Creating a session with metadata:**\n```typescript\nPOST /api/messaging/sessions\n{\n  \"agentId\": \"agent-123\",\n  \"userId\": \"user-456\",\n  \"metadata\": {\n    \"ethAddress\": \"0x1234567890123456789012345678901234567890\",\n    \"platform\": \"web3\",\n    \"userPlan\": \"premium\"\n  }\n}\n```\n\n**Accessing in your action:**\n```typescript\nhandler: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n  const metadata = message.metadata || {};\n  const ethAddress = metadata.ethAddress; // ✅ Now accessible!\n  const sessionId = metadata.sessionId;\n  \n  if (ethAddress) {\n    logger.info(`Processing Web3 request for wallet: ${ethAddress}`);\n    // Your Web3 logic here\n  }\n  \n  return true;\n}\n```\n\n### Use Cases\n- 🔐 **Web3 Integration**: Pass wallet addresses and chain preferences\n- 🎫 **Authentication**: Include auth tokens and user permissions\n- 🌍 **Platform Context**: Store platform-specific information (Discord server ID, etc.)\n- ⚙️ **User Preferences**: Persist language, timezone, output format across messages\n\n### Testing\nAll tests pass ✅\n```bash\nbun test --filter metadata  # Run metadata-specific tests\nbun test sessions.test.ts  # Run session tests\nbun test message-bus.test.ts  # Run message bus tests\n```\n\n### Breaking Changes\nNone - This implementation is fully backward compatible.\n\n### Migration Guide\nFor existing implementations:\n1. Update session creation to include metadata\n2. Modify actions to read from `message.metadata`\n3. No changes required if not using metadata\n\n### Checklist\n- [x] Code changes implemented\n- [x] Tests added and passing\n- [x] Documentation updated\n- [x] Example code provided\n- [x] Backward compatibility maintained\n- [x] No breaking changes\n\n### Related Issues\nAddresses the need for session context in plugin actions, particularly for Web3 integrations where wallet addresses need to be accessible throughout the session lifecycle.\n\n---\n**Note for reviewers**: The key files to review are:\n- `packages/server/src/api/messaging/sessions.ts` (lines 745-780)\n- `packages/server/src/services/message.ts` (lines 388-407)\n- Test files for verification of the implementation",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-21T19:04:04Z",
      "mergedAt": "2025-08-21T22:54:12Z",
      "additions": 236,
      "deletions": 4
    },
    {
      "id": "PR_kwDOMT5cIs6d_zWl",
      "title": "feat: update plugin install logic",
      "author": "bowtiedbluefin",
      "number": 5464,
      "body": "\r\n# Relates to\r\n\r\nThis PR addresses an issue with the plugin installation logic, as tracked in the branch issue/plugin-install-fix.\r\n\r\n# Risks\r\n\r\nLow. The changes are confined to the plugin installation script within the CLI. The potential risk is that installing a plugin via the CLI might fail, but it should not affect any other part of the system.\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nThis PR updates the logic for installing plugins using the CLI to ensure greater reliability.\r\n\r\n## What kind of change is this?\r\n\r\nImprovement (misc. changes to existing features)\r\n\r\n\r\n## Why are we doing this? Any context or related work?\r\nPreviously, when installing a plugin from a GitHub URL, the CLI would assume the plugin's package name was the same as the repository name (e.g., elizaOS/plugin-xyz would be assumed to be plugin-xyz). This assumption is often incorrect, as the actual name field in the plugin's package.json can be different (e.g., @eliza/plugin-xyz).\r\nThis led to problems in post-installation steps, like setting up environment variables, because the CLI was looking for the wrong package name in the project's dependencies.\r\nThis PR fixes that. Now, after installing the plugin, the code reads the project's package.json file to find the actual package name that was just added. This makes the process more robust and removes the faulty assumption, ensuring that post-installation steps work correctly regardless of how the plugin is named.\r\n\r\n# Documentation changes needed?\r\n\r\nMy changes do not require a change to the project documentation.\r\n\r\n\r\n# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\nA reviewer should start by examining the diff in packages/cli/src/commands/plugins/actions/install.ts.\r\n\r\n## Detailed testing steps\r\n\r\nFrom the eliza package root, attempt to install a plugin using the CLI.\r\nRun the command: bun eliza plugins:install <plugin-name> (e.g., bun eliza plugins:install @eliza-plugins/dummy-services).\r\nVerify that the command completes successfully and the plugin is added to the project's dependencies.\r\nRun a command from the newly installed plugin to ensure it was loaded correctly.\r\n\r\nOLD****\r\nAll required variables are set - your plugin should work!\r\n\r\nNext steps:\r\n- Restart your application to load new environment variables\r\n- Configure remaining 1 variables in your .env file if needed\r\n- Check the plugin documentation for additional setup steps\r\n\r\nxxxxx@Mac my-agent-morpheus % elizaos plugins installed-plugins\r\n\r\n┌──────────────────────────┐\r\n│  === Plugins Added: ===  │\r\n└──────────────────────────┘\r\n@elizaos/plugin-bootstrap\r\n@elizaos/plugin-openai\r\n@elizaos/plugin-sql\r\n\r\n\r\nNEW****\r\nYour @elizaos/plugin-morpheus plugin is ready to use!\r\n\r\nNext steps:\r\n- Restart your application to load the new environment variables\r\n- Check your .env file if you need to modify any values later\r\n\r\n│\r\n└  ✓ Plugin installed successfully!\r\n\r\nNext steps:\r\n1. Add \"@elizaos/plugin-morpheus\" to your character file's plugins array:\r\n\r\n   {\r\n     \"name\": \"YourAgent\",\r\n     \"plugins\": [\"@elizaos/plugin-morpheus\"],\r\n     ...\r\n   }\r\n\r\n2. Restart your application to load the plugin\r\n3. Configure any required environment variables\r\n4. Check the plugin documentation for additional setup\r\nxxxx@Mac my-agent-morpheus % elizaos plugins installed-plugins\r\n\r\n┌──────────────────────────┐\r\n│  === Plugins Added: ===  │\r\n└──────────────────────────┘\r\n@elizaos/plugin-bootstrap\r\n@elizaos/plugin-morpheus\r\n@elizaos/plugin-openai\r\n@elizaos/plugin-sql\r\n\r\n\r\n## Discord username\r\n@bowtiedbluefin\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-07-08T18:51:28Z",
      "mergedAt": null,
      "additions": 131,
      "deletions": 3
    }
  ],
  "codeChanges": {
    "additions": 299,
    "deletions": 902,
    "files": 62,
    "commitCount": 34
  },
  "completedItems": [
    {
      "title": "fix: metadata in sessions",
      "prNumber": 5805,
      "type": "bugfix",
      "body": "## Session Metadata Propagation for Plugin Actions\n\n### Overview\nThis PR implements session metadata propagation throughout the ElizaOS message processing pipeline, enabling plugins and actions to access custom session metadata (like `ethAd",
      "files": [
        "packages/server/src/__tests__/message-bus.test.ts",
        "packages/server/src/api/messaging/__tests__/sessions.test.ts",
        "packages/server/src/api/messaging/sessions.ts",
        "packages/server/src/services/message.ts"
      ]
    },
    {
      "title": "feat: Convert packages/docs to git submodule from elizaos/docs",
      "prNumber": 5803,
      "type": "feature",
      "body": "## Summary\n\nThis PR converts the `packages/docs` directory from tracked files to a git submodule pointing to the external documentation repository at https://github.com/elizaos/docs.\n\n## Changes\n\n- Removed 171 documentation files that were ",
      "files": [
        ".gitmodules",
        "packages/docs",
        "packages/docs/.github/workflows/check-dead-links.yml",
        "packages/docs/.github/workflows/check-documentation-quality.yml",
        "packages/docs/.github/workflows/claude-code-review.yml",
        "packages/docs/.github/workflows/claude.yml",
        "packages/docs/.gitignore",
        "packages/docs/CLAUDE.md",
        "packages/docs/README.md",
        "packages/docs/api-reference/agents/create-a-new-agent.mdx",
        "packages/docs/api-reference/agents/create-a-world-for-an-agent.mdx",
        "packages/docs/api-reference/agents/delete-an-agent.mdx",
        "packages/docs/api-reference/agents/get-agent-details.mdx",
        "packages/docs/api-reference/agents/get-agent-panels.mdx",
        "packages/docs/api-reference/agents/get-all-worlds.mdx",
        "packages/docs/api-reference/agents/list-all-agents.mdx",
        "packages/docs/api-reference/agents/start-an-agent.mdx",
        "packages/docs/api-reference/agents/stop-an-agent.mdx",
        "packages/docs/api-reference/agents/update-a-world.mdx",
        "packages/docs/api-reference/agents/update-agent.mdx",
        "packages/docs/api-reference/audio/convert-conversation-to-speech.mdx",
        "packages/docs/api-reference/audio/generate-speech-from-text.mdx",
        "packages/docs/api-reference/audio/process-audio-message.mdx",
        "packages/docs/api-reference/audio/synthesize-speech-from-text.mdx",
        "packages/docs/api-reference/audio/transcribe-audio.mdx",
        "packages/docs/api-reference/media/upload-media-for-agent.mdx",
        "packages/docs/api-reference/media/upload-media-to-channel.mdx",
        "packages/docs/api-reference/memory/create-a-room.mdx",
        "packages/docs/api-reference/memory/delete-all-agent-memories.mdx",
        "packages/docs/api-reference/memory/delete-all-memories-for-a-room.mdx",
        "packages/docs/api-reference/memory/get-agent-memories.mdx",
        "packages/docs/api-reference/memory/get-room-memories.mdx",
        "packages/docs/api-reference/memory/update-a-memory.mdx",
        "packages/docs/api-reference/messaging/add-agent-to-channel.mdx",
        "packages/docs/api-reference/messaging/add-agent-to-server.mdx",
        "packages/docs/api-reference/messaging/create-central-channel.mdx",
        "packages/docs/api-reference/messaging/create-channel.mdx",
        "packages/docs/api-reference/messaging/create-group-channel.mdx",
        "packages/docs/api-reference/messaging/create-server.mdx",
        "packages/docs/api-reference/messaging/delete-all-channel-messages-by-user.mdx",
        "packages/docs/api-reference/messaging/delete-all-channel-messages.mdx",
        "packages/docs/api-reference/messaging/delete-channel-message.mdx",
        "packages/docs/api-reference/messaging/delete-channel.mdx",
        "packages/docs/api-reference/messaging/get-central-server-channels.mdx",
        "packages/docs/api-reference/messaging/get-central-servers.mdx",
        "packages/docs/api-reference/messaging/get-channel-details.mdx",
        "packages/docs/api-reference/messaging/get-channel-info.mdx",
        "packages/docs/api-reference/messaging/get-channel-messages.mdx",
        "packages/docs/api-reference/messaging/get-channel-participants.mdx",
        "packages/docs/api-reference/messaging/get-or-create-dm-channel.mdx"
      ]
    },
    {
      "title": "fix: plugin-sql test",
      "prNumber": 5802,
      "type": "bugfix",
      "body": "# Risks\r\n\r\nMedium, not sure this is what we want\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\n- make plugin-sql tests pass for me from monorepo\r\n- mainly createdAt have to be a date object for w/e reason now for pglite (timestamps no long",
      "files": [
        "packages/core/src/runtime.ts",
        "packages/plugin-sql/src/__tests__/e2e/postgres.test.ts",
        "packages/plugin-sql/src/__tests__/integration/base-adapter-methods.test.ts",
        "packages/plugin-sql/src/__tests__/integration/base-comprehensive.test.ts",
        "packages/plugin-sql/src/__tests__/integration/component.test.ts",
        "packages/plugin-sql/src/__tests__/unit/utils.test.ts",
        "packages/plugin-sql/src/base.ts",
        "packages/plugin-sql/src/utils.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 54.488773896576106,
      "prScore": 54.1487738965761,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.33999999999999997,
      "summary": null
    },
    {
      "username": "Dexploarer",
      "avatarUrl": "https://avatars.githubusercontent.com/u/211557447?u=21a243d61cc1f87574328ae07fc64d7d7577b53d&v=4",
      "totalScore": 49.15048198176414,
      "prScore": 49.15048198176414,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "ChristopherTrimboli",
      "avatarUrl": "https://avatars.githubusercontent.com/u/27584221?u=0d816ce1dcdea8f925aba18bb710153d4a87a719&v=4",
      "totalScore": 46.407593866981316,
      "prScore": 45.96959386698131,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": null
    },
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 45.64584140063009,
      "prScore": 45.44584140063009,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "monilpat",
      "avatarUrl": "https://avatars.githubusercontent.com/u/15067321?v=4",
      "totalScore": 5.438,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.43799999999999994,
      "summary": null
    }
  ],
  "newPRs": 3,
  "mergedPRs": 3,
  "newIssues": 0,
  "closedIssues": 0,
  "activeContributors": 7
}