{
  "interval": {
    "intervalStart": "2025-10-12T00:00:00.000Z",
    "intervalEnd": "2025-10-19T00:00:00.000Z",
    "intervalType": "week"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-10-12 to 2025-10-19, elizaos/eliza had 9 new PRs (11 merged), 5 new issues, and 13 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7SLVfk",
      "title": "The documentation for plugins isn't correct.",
      "author": "ryanmstokes",
      "number": 6070,
      "repository": "elizaos/eliza",
      "body": "Seriously how are you even letting anyone use this right now? This is one of the worst documented frameworks I've ever seen despite having so much documentation. You can't even scaffold a plugin following your documentation without it throwing errors.",
      "createdAt": "2025-10-17T13:28:03Z",
      "closedAt": "2025-10-17T13:47:33Z",
      "state": "CLOSED",
      "commentCount": 3
    },
    {
      "id": "I_kwDOMT5cIs7Ki91T",
      "title": "Direct API Calls",
      "author": "borisudovicic",
      "number": 5923,
      "repository": "elizaos/eliza",
      "body": "* Implement agent.generate(input) as a Promise-based API.\n* Add variants that include/exclude character personality.",
      "createdAt": "2025-09-09T12:14:52Z",
      "closedAt": "2025-10-14T15:24:02Z",
      "state": "CLOSED",
      "commentCount": 2
    },
    {
      "id": "I_kwDOMT5cIs7RGLr3",
      "title": "[DOCS] Every plugin link in docs leads to a 404",
      "author": "douglasg14b",
      "number": 6061,
      "repository": "elizaos/eliza",
      "body": "https://docs.elizaos.ai/plugin-registry/overview#core-plugins\n\nClicking on plugins goes to: https://docs.elizaos.ai/plugins/bootstrap\n\n<img width=\"1608\" height=\"1013\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/857c53a2-7491-4308-b2e6-1fe40b3b7af8\" />",
      "createdAt": "2025-10-13T00:01:19Z",
      "closedAt": "2025-10-14T13:11:35Z",
      "state": "CLOSED",
      "commentCount": 2
    },
    {
      "id": "I_kwDOMT5cIs7DFLKl",
      "title": "Classified game - plugin-autocoder",
      "author": "samarth30",
      "number": 5685,
      "repository": "elizaos/eliza",
      "body": "working on enhancing plugin autocoder to enhance classified game.<br>following things are in progress\n\n* working on creating workflows\n* working on improving prompt engineerings \n* enhancing loops \n* test validation improvements ",
      "createdAt": "2025-07-29T09:39:05Z",
      "closedAt": "2025-10-17T11:25:27Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7F0i3j",
      "title": "Eigencloud POC",
      "author": "borisudovicic",
      "number": 5768,
      "repository": "elizaos/eliza",
      "body": "This service offers a *deterministic* OpenAI-compliant LLM inference endpoint that can be used via multiple clients. A couple of key points:\n\n* By OpenAI compliancy we specifically mean the messages-based Chat Completions API: [https://platform.openai.com/docs/api-reference/chat/create](https://platform.openai.com/docs/api-reference/chat/create),\n* By “deterministic” we specifically mean that one request (prompt, parameters, etc) provided to the API multiple times will produce the **same** output.\n  * For eg. setting a different seed but otherwise keeping the request the same will produce a different output.\n\n## curl\n\n```\ncurl -s -X POST http://192.222.58.254:8001/v1/chat/completions \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"model\": \"gemma-3-27b-it\",\n  \"max_completion_tokens\": 120,\n  \"seed\": 42,\n  \"messages\": [{\"role\": \"user\", \"content\": \"Write a story about programming\"}]\n}' | jq\n```\n\n### Streaming response\n\n```\ncurl -s -X POST http://192.222.58.254:8001/v1/chat/completions \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"model\": \"gemma-3-27b-it\",\n  \"max_completion_tokens\": 120,\n  \"seed\": 42,\n  \"stream\": true,\n  \"messages\": [{\"role\": \"user\", \"content\": \"Write a story about programming\"}]\n}'\n```\n\n## Vercel AI SDK\n\n[https://ai-sdk.dev/docs/introduction](https://ai-sdk.dev/docs/introduction)\n\n```\nimport { generateText } from 'ai';\nimport { createOpenAI } from '@ai-sdk/openai';\n\nconst config = {\n  baseURL: 'http://192.222.58.254:8001/v1',\n  apiKey: 'sk-dummy-custom-key',\n  model: 'gemma-3-27b-it'\n};\n\n// Create a custom OpenAI client instance\nconst customOpenAI = createOpenAI({\n  baseURL: config.baseURL,\n  apiKey: config.apiKey,\n});\n\n// Create the model instance using the custom client\nconst model = customOpenAI(config.model);\n\nasync function chatCompletion() {\n  console.log('\\n💬 Testing chat completion...');\n  \n  try {\n    const result = await generateText({\n      model: model,\n      messages: [\n        { role: 'system', content: 'You are a helpful assistant.' },\n        { role: 'user', content: 'What are the benefits of using local AI models?' }\n      ],\n      seed: 42\n    });\n\n    console.log('✅ Chat response:');\n    console.log(result.text);\n  } catch (error) {\n    console.error('❌ Error with chat completion:');\n    console.error(error.message);\n  }\n}\n\n// Main execution\nasync function main() {\n  console.log('EigenAI usage via Vercel AI SDK\\n');\n  console.log('=' + '='.repeat(49));\n  \n  console.log(`\\n🔧 Configuration:`);\n  console.log(`   Service: EigenAI`);\n  console.log(`   Base URL: ${config.baseURL}`);\n  console.log(`   Model: ${config.model}`);\n  console.log(`   API Key: ${config.apiKey.substring(0, 10)}...`);\n  \n  await chatCompletion();\n}\n\nmain().catch(console.error);\n```",
      "createdAt": "2025-08-13T15:21:30Z",
      "closedAt": "2025-10-15T14:50:04Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6tQLtD",
      "title": "elizaos deploy r2 artifacts style",
      "author": "ChristopherTrimboli",
      "number": 6058,
      "body": "## Overview\r\n\r\nThis PR completely migrates the ElizaOS CLI deployment system from traditional Docker image builds to a modern bootstrapper architecture. This change significantly improves deployment speed, reduces resource usage, and eliminates platform size limitations.\r\n\r\n## What Changed\r\n\r\n### 🚀 New Bootstrapper Architecture\r\n\r\n**Added:**\r\n- `deploy-bootstrapper.ts` - Core bootstrapper deployment logic\r\n- `artifact.ts` - Artifact creation and management utilities\r\n- `r2-client.ts` - R2 storage client for future direct operations\r\n- Bootstrapper Dockerfile template and entrypoint script\r\n- Support for deterministic artifact creation with `.gitignore` respect\r\n\r\n**Key Features:**\r\n- Creates lightweight tar.gz artifacts (typically <50MB vs 500MB+ Docker images)\r\n- Uploads artifacts to Cloudflare R2 via secure API\r\n- Uses minimal shared bootstrapper image (~100MB)\r\n- Fetches project code at container startup\r\n- Supports both Bun and npm lockfiles\r\n- Implements SHA256 checksum verification\r\n\r\n### 🗑️ Removed Legacy Docker Code\r\n\r\n**Deleted:**\r\n- `utils/docker.ts` - All Docker build/export utilities (~280 lines)\r\n- `deployWithDocker()` function (~300 lines)\r\n- Docker-specific CLI options (`--use-docker`, `--tag`, `--no-build`)\r\n- Dockerfile generation and management code\r\n\r\n### 📦 Dependencies\r\n\r\n**Added:**\r\n- `tar` - For creating compressed archives\r\n- `ignore` - For respecting .gitignore rules\r\n- `node-fetch` - For HTTP operations\r\n- `form-data` - For multipart uploads\r\n\r\n## Why This Change?\r\n\r\n### Problems with Old Approach:\r\n- **Size Limits**: Docker images often exceeded 500MB-2GB, hitting platform limits\r\n- **Slow Uploads**: Uploading entire Docker images was bandwidth-intensive\r\n- **Version Conflicts**: Single Docker image could break older projects\r\n- **Resource Waste**: Duplicated base layers for every deployment\r\n\r\n### Benefits of Bootstrapper:\r\n- **10x Smaller Uploads**: Only project code, not entire OS/runtime\r\n- **Faster Deployments**: 30-60s vs 5-10 minutes\r\n- **Version Isolation**: Each project maintains its own dependencies\r\n- **Better Caching**: Shared base image, project-specific dependencies\r\n- **Platform Friendly**: Works within Cloudflare's 50GB limits\r\n\r\n## Technical Implementation\r\n\r\n### Deployment Flow:\r\n1. **Artifact Creation**\r\n   ```typescript\r\n   // Creates deterministic tar.gz with project files\r\n   const artifact = await createArtifact({\r\n     projectPath: cwd,\r\n     outputPath: artifactPath,\r\n     excludePatterns: ['.git', 'node_modules', '.env'],\r\n     deterministic: true\r\n   });\r\n   ```\r\n\r\n2. **Upload to R2**\r\n   ```typescript\r\n   // Uploads via Cloud API with checksum verification\r\n   const uploadResponse = await apiClient.uploadArtifact({\r\n     projectId: projectName,\r\n     version: projectVersion,\r\n     checksum: artifactChecksum,\r\n     size: artifactSize,\r\n     artifactPath\r\n   });\r\n   ```\r\n\r\n3. **Container Deployment**\r\n   ```typescript\r\n   // Deploys bootstrapper with artifact URL\r\n   const containerConfig = {\r\n     image_tag: \"elizaos/bootstrapper:latest\",\r\n     environment_vars: {\r\n       R2_ARTIFACT_URL: artifactData.artifactUrl,\r\n       R2_TOKEN: artifactData.token,\r\n       R2_ARTIFACT_CHECKSUM: artifactChecksum,\r\n       START_CMD: \"bun run start\"\r\n     }\r\n   };\r\n   ```\r\n\r\n### Bootstrapper Runtime:\r\n- Alpine Linux base with Bun pre-installed\r\n- Downloads artifact using one-time scoped token\r\n- Verifies SHA256 checksum\r\n- Extracts project files\r\n- Installs dependencies from lockfile\r\n- Executes START_CMD\r\n\r\n## Breaking Changes\r\n\r\n⚠️ **Removed CLI Options:**\r\n- `--use-docker` - No longer supported\r\n- `--tag` - Not applicable to bootstrapper\r\n- `--no-build` - Build happens in container\r\n- `--dockerfile` - Bootstrapper uses standard image\r\n\r\n**Migration Guide:**\r\n```bash\r\n# Old (no longer works)\r\nelizaos deploy --use-docker --tag my-image:v1\r\n\r\n# New (default behavior)\r\nelizaos deploy\r\n\r\n# With existing artifact\r\nelizaos deploy --skip-artifact --artifact-path ./dist/artifact.tar.gz\r\n```\r\n\r\n## Testing\r\n\r\n### Manual Testing:\r\n- ✅ Deployed sample project with bootstrapper\r\n- ✅ Verified artifact creation and upload\r\n- ✅ Confirmed container starts and runs correctly\r\n- ✅ Tested with both Bun and npm projects\r\n- ✅ Validated checksum verification\r\n- ✅ Tested artifact cleanup (keeps last 3)\r\n\r\n### Performance Comparison:\r\n| Metric | Docker Mode | Bootstrapper |\r\n|--------|------------|--------------|\r\n| Artifact Size | 500MB-2GB | 10-50MB |\r\n| Upload Time | 2-10 min | 10-30 sec |\r\n| Total Deploy Time | 5-15 min | 1-2 min |\r\n| Storage Used | 2GB/deploy | 50MB/deploy |\r\n\r\n   // Uploads via Cloud API with checksum verification\r\n   const uploadResponse = await apiClient.uploadArtifact({\r\n     projectId: projectName,\r\n     version: projectVersion,\r\n     checksum: artifactChecksum,\r\n     size: artifactSize,\r\n     artifactPath\r\n   });nged\r\n\r\n### 🚀 New Artifact Management System\r\n\r\n**Added Endpoints:**\r\n- `POST /api/v1/artifacts/upload` - Request presigned URL and upload artifacts\r\n- `GET /api/v1/artifacts` - List project artifacts\r\n\r\n**Database Changes:**\r\n- New `artifacts` table with organization/project/version tracking\r\n- Unique constraint on version per project\r\n- Indexes for efficient querying\r\n\r\n**Key Features:**\r\n- Presigned S3 URLs for direct R2 uploads\r\n- SHA256 checksum verification\r\n- 10MB artifact size limit (configurable)\r\n- Artifact metadata storage (Eliza version, Node version, etc.)\r\n- One-time scoped token generation for secure retrieval\r\n\r\n### 🔄 Container Route Updates\r\n\r\n**Modified:**\r\n- Added bootstrapper fields to container schema\r\n- Default to bootstrapper mode (`use_bootstrapper: true`)\r\n- Store artifact metadata in container record\r\n- Pass bootstrapper config to Cloudflare deployment\r\n\r\n**Schema Changes:**\r\n```typescript\r\nconst createContainerSchema = z.object({\r\n  name: z.string(),\r\n  port: z.number(),\r\n  environment_vars: z.record(z.string()),\r\n  \r\n  // New bootstrapper fields\r\n  use_bootstrapper: z.boolean().default(true),\r\n  artifact_url: z.string().optional(),\r\n  artifact_checksum: z.string().optional(),\r\n  image_tag: z.string().default(\"elizaos/bootstrapper:latest\")\r\n});\r\n```\r\n\r\n### 🗑️ Deprecated Legacy Endpoints\r\n\r\n**Marked as Deprecated:**\r\n- `POST /api/v1/containers/upload-image` - Docker image upload\r\n- `CloudflareService.uploadImage()` - Docker upload method\r\n\r\nThese remain functional with deprecation warnings for backward compatibility.\r\n\r\n## Technical Implementation\r\n\r\n### Artifact Upload Flow:\r\n\r\n1. **Request Upload URL**\r\n   ```typescript\r\n   // Client requests presigned URL\r\n   POST /api/v1/artifacts/upload\r\n   {\r\n     projectId: \"my-project\",\r\n     version: \"1.0.0\",\r\n     checksum: \"sha256...\",\r\n     size: 1048576\r\n   }\r\n   ```\r\n\r\n2. **Generate Presigned URL**\r\n   ```typescript\r\n   // Server creates S3 presigned URL for R2\r\n   const putCommand = new PutObjectCommand({\r\n     Bucket: process.env.R2_BUCKET_NAME,\r\n     Key: `artifacts/${org}/${project}/${version}/${id}.tar.gz`,\r\n     ContentType: 'application/gzip',\r\n     ContentLength: size,\r\n     ChecksumSHA256: checksum\r\n   });\r\n   \r\n   const uploadUrl = await getSignedUrl(r2Client, putCommand, {\r\n     expiresIn: 600 // 10 minutes\r\n   });\r\n   ```\r\n\r\n3. **Store Metadata**\r\n   ```typescript\r\n   // Save artifact record\r\n   await db.insert(artifacts).values({\r\n     id: artifactId,\r\n     organization_id: user.organization_id,\r\n     project_id: projectId,\r\n     version,\r\n     checksum,\r\n     size,\r\n     r2_key,\r\n     r2_url: publicUrl,\r\n     metadata,\r\n     created_by: user.id\r\n   });\r\n   ```\r\n\r\n### Container Deployment:\r\n\r\n```typescript\r\n// Deploy with bootstrapper configuration\r\nconst deployment = await cloudflare.deployContainer({\r\n  name: config.name,\r\n  imageTag: \"elizaos/bootstrapper:latest\",\r\n  port: config.port,\r\n  environmentVars: {\r\n    ...config.environment_vars,\r\n    R2_ARTIFACT_URL: config.artifact_url,\r\n    R2_TOKEN: generatedToken,\r\n    R2_ARTIFACT_CHECKSUM: config.artifact_checksum\r\n  }\r\n});\r\n```\r\n\r\n## Database Migration\r\n\r\n```sql\r\n-- 0006_add_artifacts_table.sql\r\nCREATE TABLE IF NOT EXISTS artifacts (\r\n  id TEXT PRIMARY KEY,\r\n  organization_id TEXT NOT NULL,\r\n  project_id TEXT NOT NULL,\r\n  version TEXT NOT NULL,\r\n  checksum TEXT NOT NULL,\r\n  size INTEGER NOT NULL,\r\n  r2_key TEXT NOT NULL,\r\n  r2_url TEXT NOT NULL,\r\n  metadata JSONB DEFAULT '{}',\r\n  created_by TEXT NOT NULL,\r\n  created_at TIMESTAMP DEFAULT NOW() NOT NULL\r\n);\r\n\r\nCREATE INDEX idx_artifacts_org_project ON artifacts(organization_id, project_id);\r\nCREATE INDEX idx_artifacts_project_version ON artifacts(project_id, version);\r\nCREATE UNIQUE INDEX uniq_artifact_version ON artifacts(organization_id, project_id, version);\r\n```\r\n\r\n## Environment Variables\r\n\r\n**New Required Variables:**\r\n```bash\r\n# R2 Storage Configuration\r\nR2_ACCOUNT_ID=your_cloudflare_account_id\r\nR2_ACCESS_KEY_ID=your_r2_access_key\r\nR2_SECRET_ACCESS_KEY=your_r2_secret_key\r\nR2_BUCKET_NAME=elizaos-artifacts\r\nR2_PUBLIC_DOMAIN=artifacts.elizacloud.ai  # Optional custom domain\r\n```\r\n\r\n## Security Considerations\r\n\r\n- ✅ Presigned URLs expire after 10 minutes\r\n- ✅ One-time tokens for artifact retrieval\r\n- ✅ SHA256 checksum verification on upload and download\r\n- ✅ Organization-scoped artifact isolation\r\n- ✅ Size limits to prevent abuse (10MB default)\r\n\r\n## Performance Impact\r\n\r\n### Metrics:\r\n| Operation | Old (Docker) | New (Bootstrapper) |\r\n|-----------|-------------|-------------------|\r\n| Upload Size | 500MB-2GB | 10-50MB |\r\n| API Processing | 30-60s | <1s |\r\n| Storage Cost | High | 95% reduction |\r\n| Network Usage | High | 90% reduction |\r\n\r\n### Load Testing:\r\n- Handled 100 concurrent artifact uploads\r\n- Average upload time: 5 seconds\r\n- No performance degradation observed\r\n\r\n## Breaking Changes\r\n\r\n⚠️ **Default Behavior Change:**\r\n- Containers now default to bootstrapper mode\r\n- `use_bootstrapper` defaults to `true` instead of `false`\r\n\r\n**Backward Compatibility:**\r\n- Legacy Docker endpoints remain functional with warnings\r\n- Existing containers continue to work\r\n- Gradual migration path available\r\n\r\n## Testing\r\n\r\n- ✅ Artifact upload with checksum validation\r\n- ✅ Presigned URL generation and expiry\r\n- ✅ Container deployment with bootstrapper\r\n- ✅ Legacy endpoint deprecation warnings\r\n- ✅ Database migration rollback tested\r\n- ✅ R2 connectivity and error handling\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-11T15:13:37Z",
      "mergedAt": "2025-10-12T22:19:46Z",
      "additions": 2170,
      "deletions": 135
    },
    {
      "id": "PR_kwDOMT5cIs6sMtSD",
      "title": "feat: migrate to UUID-only agent identification",
      "author": "0xbbjoker",
      "number": 6036,
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Agents now use randomly generated UUIDs (not names) for identity; duplicate names are allowed, with loader/runtime/server/DB updated plus migrations and tests.\n> \n> - **Core/runtime (`packages/core`)**:\n>   - Generate `agentId` via `uuidv4()` (no name-derived IDs).\n>   - `ensureAgentExists` now requires `agent.id`, updates/creates strictly by UUID.\n>   - Logs/messages reference `agent.id`.\n> - **Server (`packages/server`)**:\n>   - Loader `jsonToCharacter` assigns `id` if missing and supports env prefixes by `name` and `id`.\n>   - Agent CRUD create path uses provided `character.id` (no name-to-UUID), and updates active runtimes in-place.\n>   - Added tests for loader UUID generation and CRUD behavior with duplicate names.\n> - **SQL Plugin (`packages/plugin-sql`)**:\n>   - Schema: drop unique constraint on `agents.name`.\n>   - `createAgent` checks duplicate `id` only; allows duplicate `name`.\n>   - Integration and migration tests verifying duplicate-name support, UUID-based CRUD, and constraint removal.\n> - **CLI (`packages/cli`)**:\n>   - Scenario factory assigns random `id` to test character (no name-based ID).\n> - **Project starter**:\n>   - Character docs note auto-generated `id` and option to set a fixed UUID.\n> - **Tests**:\n>   - Extensive suites across core/server/sql to ensure UUID independence from names and proper migrations.\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 93f269089b99832050651406cf7047f4a9392463. 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- New Features\n  - Agents/characters now use randomly generated UUIDs for identity; multiple agents can share the same name.\n  - Loader auto-assigns an ID when missing; explicit IDs are preserved.\n  - Environment variable prefixing now derives from the agent ID for consistent configuration.\n- Documentation\n  - Starter character docs updated to explain ID generation and how to set a fixed ID.\n- Chores\n  - Database schema updated to remove the unique constraint on agent names, enabling duplicate names while keeping ID-based operations.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-06T06:52:46Z",
      "mergedAt": "2025-10-17T11:57:29Z",
      "additions": 1824,
      "deletions": 124
    },
    {
      "id": "PR_kwDOMT5cIs6uKQsE",
      "title": "refactor(tests): Move character builder logic to core",
      "author": "standujar",
      "number": 6069,
      "body": "\n- Move buildCharacterPlugins() to core (business logic)\n\n- Keep Eliza character to cli\n\n- Remove duplicate code from server\n\n- Add 27 tests on core",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-16T19:42:50Z",
      "mergedAt": "2025-10-17T15:37:44Z",
      "additions": 706,
      "deletions": 789
    },
    {
      "id": "PR_kwDOMT5cIs6tmLW9",
      "title": "Refactor/icon button prop",
      "author": "5c0",
      "number": 6063,
      "body": "# Relates to\r\n\r\nThis PR addresses a `TODO` comment found in `packages/client/src/components/agent-prism/IconButton.tsx`. No issue is formally associated with this change.\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\nLow. This change is a refactoring of a single UI component and all of its usages have been updated. The change is localized to the client-side presentation layer.\r\n\r\n# Background\r\n\r\n## What does this PR do?\r\n\r\nThis PR refactors the `IconButton` component to make its API more explicit and type-safe. It replaces the use of the generic `children` prop for passing icons with a dedicated and mandatory `icon` prop. This ensures that every `IconButton` is always instantiated with an icon component.\r\n\r\nAll existing usages of `IconButton` have been updated to conform to the new API, passing the appropriate `lucide-react` icon component to the new prop.\r\n\r\n## What kind of change is this?\r\n\r\nImprovements (misc. changes to existing features)\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# Testing\r\n\r\n## Where should a reviewer start?\r\n\r\nA good starting point is reviewing the changes in `packages/client/src/components/agent-prism/IconButton.tsx` to see the new component API.\r\n\r\nAfter that, the modified call sites can be reviewed to see how the new API is used:\r\n*   `packages/client/src/components/agent-prism/CollapseAndExpandControls.tsx`\r\n*   `packages/client/src/components/agent-prism/DetailsView/DetailsViewHeader.tsx`\r\n*   `packages/client/src/components/agent-prism/DetailsView/DetailsViewInputOutputTab.tsx`\r\n\r\n## Detailed testing steps\r\n\r\nAutomated tests are acceptable. The component tests for the `client` package should cover these changes.\r\n\r\nA manual verification can also be done by running the client and navigating to pages where the `IconButton` is used (e.g., the agent details view) to ensure the copy and expand/collapse icons render and function correctly.\r\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-14T06:43:16Z",
      "mergedAt": null,
      "additions": 421,
      "deletions": 21
    },
    {
      "id": "PR_kwDOMT5cIs6tbn-u",
      "title": "feat(core): implement generateText() API",
      "author": "tylermcwilliams",
      "number": 6062,
      "body": "## Overview\r\nImplements the `generateText()` Promise-based API for simple text generation as discussed in #5923.\r\n\r\n## Discussion Context\r\nPer conversation with @0xbbjoker in #5923:\r\n- Named `generateText()` (not `generate()`) to clarify it's text-only generation\r\n- Supports optional character personality injection via `includeCharacter` flag  \r\n- Returns structured `{ text: string }` for future extensibility\r\n\r\n## Implementation Details\r\n\r\n### API Surface\r\n```typescript\r\nasync generateText(\r\n  input: string,\r\n  options?: GenerateTextOptions\r\n): Promise<GenerateTextResult>\r\n```\r\n\r\n### Key Features\r\n- **Character personality injection** - Defaults to including character bio/system/style in prompt (opt-out with `includeCharacter: false`)\r\n- **Model selection** - Defaults to `TEXT_LARGE`, supports all text generation model types\r\n- **Parameter pass-through** - Temperature, maxTokens, etc. from `GenerateTextParams`\r\n- **Structured return** - `{ text: string }` format allows future additions without breaking changes\r\n\r\n### Implementation\r\n- Added `GenerateTextOptions` and `GenerateTextResult` types to `model.ts`\r\n- Added `generateText()` method signature to `IAgentRuntime` interface in `runtime.ts`\r\n- Implemented method in `AgentRuntime` class - builds character context from bio/system/style, calls `useModel()` with constructed prompt\r\n- No breaking changes to existing APIs\r\n\r\n## Testing\r\n- ✅ Full example demonstrating usage patterns (`examples/generate-text.ts`)\r\n- ✅ All builds passing locally\r\n\r\n## Example Usage\r\n\r\nSee `examples/generate-text.ts` for a complete working example with Shakespeare character.\r\n\r\n### With Character Personality (Default)\r\n```typescript\r\nconst result = await runtime.generateText(\r\n  \"What do you think about artificial intelligence?\"\r\n);\r\n// Response will be with personality\r\n```\r\n\r\n### Without Character (Utility Mode)\r\n```typescript\r\nconst result = await runtime.generateText(\r\n  \"Translate to Spanish: Hello, how are you?\", \r\n  { includeCharacter: false }\r\n);\r\n// Raw translation without personality\r\n```\r\n\r\n### Custom Parameters\r\n```typescript\r\nconst result = await runtime.generateText(\r\n  \"Write a haiku about coding\",\r\n  { \r\n    temperature: 0.9,\r\n    maxTokens: 100\r\n  }\r\n);\r\n// More creative output with temperature bump\r\n```\r\n\r\n## Related\r\n- Closes #5923\r\n\r\n## Checklist\r\n- [x] Example provided and tested\r\n- [x] Builds without errors\r\n- [x] No breaking changes",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-13T10:36:49Z",
      "mergedAt": "2025-10-14T15:24:01Z",
      "additions": 398,
      "deletions": 1
    }
  ],
  "codeChanges": {
    "additions": 6922,
    "deletions": 2441,
    "files": 86,
    "commitCount": 76
  },
  "completedItems": [
    {
      "title": "feat: migrate to UUID-only agent identification",
      "prNumber": 6036,
      "type": "feature",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Agents now use randomly generated UUIDs (not names) for identity; duplicate names are allowed, with loader/runtime/server/DB updated plus migrations and tests.\n> \n> - **Core/runtime (`packages/core`)**:\n>",
      "files": [
        "packages/cli/src/commands/scenario/src/runtime-factory.ts",
        "packages/core/src/__tests__/agent-uuid.test.ts",
        "packages/core/src/runtime.ts",
        "packages/plugin-sql/src/__tests__/integration/agent.test.ts",
        "packages/plugin-sql/src/__tests__/migration/schema-evolution-tests/08-agent-name-constraint-removal.test.ts",
        "packages/plugin-sql/src/base.ts",
        "packages/plugin-sql/src/schema/agent.ts",
        "packages/project-starter/src/character.ts",
        "packages/server/src/__tests__/loader-uuid.test.ts",
        "packages/server/src/api/agents/__tests__/crud-uuid.test.ts",
        "packages/server/src/api/agents/crud.ts",
        "packages/server/src/loader.ts"
      ]
    },
    {
      "title": "fix(plugins): use correct ZodError.issues API instead of .errors",
      "prNumber": 6035,
      "type": "bugfix",
      "body": "- Changed error.errors to error.issues to match ZodError API\r\n- Fixed error handling in plugin-starter and project-starter\r\n- Added proper error handling for non-ZodError cases\r\n- Ensures consistency with plugin-quick-starter implementation",
      "files": [
        "packages/plugin-quick-starter/src/__tests__/plugin.test.ts",
        "packages/plugin-quick-starter/src/plugin.ts",
        "packages/plugin-starter/src/plugin.ts",
        "packages/project-starter/src/plugin.ts"
      ]
    },
    {
      "title": "feat(cli): Simplify CLI to use server / core",
      "prNumber": 6060,
      "type": "feature",
      "body": "## 🎯 Phase: CLI Cleanup\r\n\r\n**Status**: 🟡 Draft\r\n**Priority**: MEDIUM - Proper architecture  \r\n**Breaking**: No  \r\n\r\n---\r\n\r\n## 📋 Summary\r\n\r\nThis PR removes massive duplication from the CLI by deleting the custom module-loader and using pu",
      "files": [
        "bun.lock",
        "packages/cli/src/commands/scenario/src/plugin-parser.ts",
        "packages/cli/src/commands/scenario/src/runtime-factory.ts",
        "packages/cli/src/commands/start/index.ts",
        "packages/cli/src/commands/test/actions/e2e-tests.ts",
        "packages/cli/src/utils/index.ts",
        "packages/cli/src/utils/module-loader.test.ts",
        "packages/cli/src/utils/module-loader.ts",
        "packages/cli/src/commands/dev/actions/dev-server.ts",
        "packages/cli/src/commands/test/index.ts",
        "packages/cli/src/utils/__tests__/port-handling.test.ts",
        "packages/cli/src/utils/port-handling.ts",
        "packages/cli/src/utils/port-validation.ts",
        "packages/core/src/elizaos.ts",
        "packages/server/src/__tests__/agent-plugin-reload.test.ts",
        "packages/server/src/__tests__/agent-server-database.test.ts",
        "packages/server/src/__tests__/agent-server-errors.test.ts",
        "packages/server/src/__tests__/agent-server-initialization.test.ts",
        "packages/server/src/__tests__/agent-server-management.test.ts",
        "packages/server/src/__tests__/agent-server-middleware.test.ts",
        "packages/server/src/__tests__/api.test.ts",
        "packages/server/src/__tests__/cli-compatibility.test.ts",
        "packages/server/src/__tests__/integration/agent-server-interaction.test.ts",
        "packages/server/src/__tests__/integration/database-operations.test.ts",
        "packages/server/src/__tests__/integration/socketio-message-flow.test.ts",
        "packages/server/src/api/agents/crud.ts",
        "packages/server/src/api/agents/lifecycle.ts",
        "packages/server/src/index.ts"
      ]
    },
    {
      "title": "elizaos deploy r2 artifacts style",
      "prNumber": 6058,
      "type": "other",
      "body": "## Overview\r\n\r\nThis PR completely migrates the ElizaOS CLI deployment system from traditional Docker image builds to a modern bootstrapper architecture. This change significantly improves deployment speed, reduces resource usage, and elimin",
      "files": [
        "Dockerfile",
        "bun.lock",
        "packages/cli/Dockerfile",
        "packages/cli/package.json",
        "packages/cli/src/commands/deploy/README.md",
        "packages/cli/src/commands/deploy/actions/deploy-bootstrapper.ts",
        "packages/cli/src/commands/deploy/actions/deploy.ts",
        "packages/cli/src/commands/deploy/index.ts",
        "packages/cli/src/commands/deploy/types.ts",
        "packages/cli/src/commands/deploy/utils/api-client.ts",
        "packages/cli/src/commands/deploy/utils/artifact.ts",
        "packages/cli/src/commands/deploy/utils/r2-client.ts",
        "packages/cli/src/index.ts",
        "packages/core/src/index.ts",
        "packages/test-utils/src/mocks/runtime.ts"
      ]
    },
    {
      "title": "feat(core): implement generateText() API",
      "prNumber": 6062,
      "type": "feature",
      "body": "## Overview\r\nImplements the `generateText()` Promise-based API for simple text generation as discussed in #5923.\r\n\r\n## Discussion Context\r\nPer conversation with @0xbbjoker in #5923:\r\n- Named `generateText()` (not `generate()`) to clarify it",
      "files": [
        "examples/generate-text.ts",
        "packages/core/src/__tests__/runtime-generation.test.ts",
        "packages/core/src/runtime.ts",
        "packages/core/src/types/model.ts",
        "packages/core/src/types/runtime.ts"
      ]
    },
    {
      "title": "feat(cli): add Eigen TEE wrapper",
      "prNumber": 6065,
      "type": "feature",
      "body": "## Summary\n- add Eigen CLI wrapper to tee command for TEE deployments\n- provide consented installation flow and PATH detection for Eigen binaries\n\n## Testing\n- manual: \n  - bun run eliza/packages/cli/dist/index.js tee eigen (prompts, instal",
      "files": [
        "packages/cli/src/commands/tee/eigen-wrapper.ts",
        "packages/cli/src/commands/tee/index.ts"
      ]
    },
    {
      "title": "refactor(tests): Move character builder logic to core",
      "prNumber": 6069,
      "type": "refactor",
      "body": "\n- Move buildCharacterPlugins() to core (business logic)\n\n- Keep Eliza character to cli\n\n- Remove duplicate code from server\n\n- Add 27 tests on core",
      "files": [
        "bun.lock",
        "packages/cli/src/characters/eliza.ts",
        "packages/cli/src/commands/create/actions/creators.ts",
        "packages/cli/src/commands/test/actions/e2e-tests.ts",
        "packages/cli/src/project.ts",
        "packages/cli/tests/unit/characters/character-plugin-ordering.test.ts",
        "packages/core/src/__tests__/character-builder.test.ts",
        "packages/core/src/character.ts",
        "packages/core/src/index.ts",
        "packages/server/src/__tests__/bootstrap-autoload.test.ts",
        "packages/server/src/characters/default.ts"
      ]
    },
    {
      "title": "fix: current chat and user messages filters in memory viewer",
      "prNumber": 6067,
      "type": "bugfix",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Convert channelId to agent-unique roomId in room memories endpoint and add/use entityId in memory types/mapping to correctly distinguish user vs agent messages.\n> \n> - **Backend**:\n>   - **Room Memories E",
      "files": [
        "packages/api-client/src/__tests__/services/memory.test.ts",
        "packages/api-client/src/types/memory.ts",
        "packages/client/src/lib/api-type-mappers.ts",
        "packages/server/src/api/memory/agents.ts"
      ]
    },
    {
      "title": "feat: make evaluators run asynchronously in background",
      "prNumber": 6066,
      "type": "feature",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Evaluators now run asynchronously with robust error handling/logging, and the bootstrap message flow triggers evaluator execution non-blockingly with streamlined logging.\n> \n> - **Core (`packages/core/src",
      "files": [
        "packages/core/src/runtime.ts",
        "packages/plugin-bootstrap/src/index.ts"
      ]
    },
    {
      "title": "fix(docs) misleading comment in MessageBusService callback",
      "prNumber": 6072,
      "type": "bugfix",
      "body": "",
      "files": [
        "packages/server/src/services/message.ts"
      ]
    },
    {
      "title": "fix: plugin documentation and scaffolding issues",
      "prNumber": 6071,
      "type": "bugfix",
      "body": "- Fix template lookup paths to include monorepo package directories as fallback\r\n- Fix incorrect CLI command syntax in documentation across multiple README files\r\n- Support both —type and —t\r\n- Update agent lifecycle and help messages with ",
      "files": [
        "packages/cli/README.md",
        "packages/cli/src/commands/agent/actions/lifecycle.ts",
        "packages/cli/src/commands/agent/index.ts",
        "packages/cli/src/commands/create/index.ts",
        "packages/cli/src/utils/copy-template.ts",
        "packages/cli/tests/commands/create.test.ts",
        "packages/cli/tests/utils/copy-template.test.ts",
        "packages/plugin-starter/README.md",
        "packages/project-starter/README.md",
        "packages/test-utils/README.md"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 209.38437053692056,
      "prScore": 193.44437053692053,
      "issueScore": 0,
      "reviewScore": 15,
      "commentScore": 0.94,
      "summary": null
    },
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 154.14616884076486,
      "prScore": 148.20616884076486,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.94,
      "summary": null
    },
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 107.4391704034946,
      "prScore": 93.7391704034946,
      "issueScore": 0,
      "reviewScore": 13.5,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "madjin",
      "avatarUrl": "https://avatars.githubusercontent.com/u/32600939?u=cdcf89f44c7a50906c7a80d889efa85023af2049&v=4",
      "totalScore": 68.04746482760808,
      "prScore": 51.409464827608076,
      "issueScore": 16.2,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": null
    },
    {
      "username": "tylermcwilliams",
      "avatarUrl": "https://avatars.githubusercontent.com/u/39647101?u=03be301adc18b501478fe28dc7e921763a8ecf9f&v=4",
      "totalScore": 47.68866136776995,
      "prScore": 47.25066136776995,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": null
    },
    {
      "username": "5c0",
      "avatarUrl": "https://avatars.githubusercontent.com/u/93293719?u=8ccc6529b05747344b11a1a1fd4597a111be441b&v=4",
      "totalScore": 45.50684885022568,
      "prScore": 45.50684885022568,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 34.259428746164986,
      "prScore": 34.05942874616498,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "yungalgo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/113615973?u=92e0f29f7e2fbb8ce46ed13c51f692ca803de02d&v=4",
      "totalScore": 21.962918433002166,
      "prScore": 21.962918433002166,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "matteo-brandolino",
      "avatarUrl": "https://avatars.githubusercontent.com/u/49117857?u=28be1833532b4c849d42f50867bd960807756272&v=4",
      "totalScore": 7.001573590279973,
      "prScore": 7.001573590279973,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "0xRabbidfly",
      "avatarUrl": "https://avatars.githubusercontent.com/u/93952856?v=4",
      "totalScore": 6,
      "prScore": 0,
      "issueScore": 6,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "douglasg14b",
      "avatarUrl": "https://avatars.githubusercontent.com/u/1400380?u=9c769fb37bf91378e109637db82591816eac7502&v=4",
      "totalScore": 4.3,
      "prScore": 0,
      "issueScore": 4.1,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "ryanmstokes",
      "avatarUrl": "https://avatars.githubusercontent.com/u/4103619?u=fc6560a14f83b275fdc9442d884182000fb818e1&v=4",
      "totalScore": 4.2,
      "prScore": 0,
      "issueScore": 4.2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "kempsterrrr",
      "avatarUrl": "https://avatars.githubusercontent.com/u/9025997?u=948aa0d0ac15ae42fd8099afac5351798044f74e&v=4",
      "totalScore": 4,
      "prScore": 0,
      "issueScore": 4,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "n1n-api",
      "avatarUrl": "https://avatars.githubusercontent.com/u/227003775?u=0230fac354b6d67db954e33b17282018cca32ee9&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "borisudovicic",
      "avatarUrl": "https://avatars.githubusercontent.com/u/31806472?u=8935f4d43fd7e4eb9bf5ff92d54d4d2f8ac8a786&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "ChristopherTrimboli",
      "avatarUrl": "https://avatars.githubusercontent.com/u/27584221?u=0d816ce1dcdea8f925aba18bb710153d4a87a719&v=4",
      "totalScore": 0.33999999999999997,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.33999999999999997,
      "summary": null
    }
  ],
  "newPRs": 9,
  "mergedPRs": 11,
  "newIssues": 5,
  "closedIssues": 9,
  "activeContributors": 13
}