{
  "interval": {
    "intervalStart": "2025-10-05T00:00:00.000Z",
    "intervalEnd": "2025-10-12T00:00:00.000Z",
    "intervalType": "week"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-10-05 to 2025-10-12, elizaos/eliza had 23 new PRs (16 merged), 5 new issues, and 13 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7PXS9F",
      "title": "Imports not found in index.ts with Eliza CLI 1.61",
      "author": "matteo-brandolino",
      "number": 6031,
      "repository": "elizaos/eliza",
      "body": "## Describe the bug\nWhen creating a new project using `elizaos create`, some imports in `index.ts` fail:\nModule '\"@Elizaos/core\"' has no exported member 'logger'.ts(2305) Module '\"@Elizaos/core\"' has no exported member 'IAgentRuntime'.ts(2305) Module '\"@Elizaos/core\"' has no exported member 'ProjectAgent'.ts(2305)\nCopy code\n\n## To Reproduce\n1. Install Eliza CLI 1.61.  \n2. Run `elizaos create` to generate a new project.  \n3. Open `index.ts` and try to import `logger`, `IAgentRuntime`, or `ProjectAgent` from `@Elizaos/core`.  \n\n## Expected behavior\nThese members should be correctly exported and importable from `@Elizaos/core` in a newly generated project.  \n\n## Screenshots\n<!-- Add screenshots if applicable -->\n\n## Additional context\n- Eliza CLI version: 1.61  \n- This occurs immediately after project creation without any modifications.  \n- Possible regression from previous versions of `@Elizaos/core`.",
      "createdAt": "2025-10-02T21:26:47Z",
      "closedAt": "2025-10-09T22:20:47Z",
      "state": "CLOSED",
      "commentCount": 11
    },
    {
      "id": "I_kwDOMT5cIs7HyidA",
      "title": "Analyze options for MCP Gateway, Add some MCP servers, add x402 layer",
      "author": "borisudovicic",
      "number": 5814,
      "repository": "elizaos/eliza",
      "body": "[https://hackmd.io/aM2pd2NbSmOMzD0X9GPYiQ](https://hackmd.io/aM2pd2NbSmOMzD0X9GPYiQ)",
      "createdAt": "2025-08-25T13:40:42Z",
      "closedAt": "2025-10-07T05:52:32Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7INMZr",
      "title": "Analyze options for MCP Gateway, Add some MCP servers, add x402 layer",
      "author": "borisudovicic",
      "number": 5830,
      "repository": "elizaos/eliza",
      "body": "",
      "createdAt": "2025-08-27T10:47:46Z",
      "closedAt": "2025-10-07T05:52:33Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7KjAf1",
      "title": "Developer Experience Enhancements",
      "author": "borisudovicic",
      "number": 5931,
      "repository": "elizaos/eliza",
      "body": "* Provide devtools overlay for debugging Eliza state in-browser.\n* Optimize bundle size (tree-shake unused code, check lightweight client).\n* Verify hooks integrate with Next.js / Vite.",
      "createdAt": "2025-09-09T12:17:22Z",
      "closedAt": "2025-10-08T07:06:09Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7Ki8ja",
      "title": "Testing & Validation",
      "author": "borisudovicic",
      "number": 5921,
      "repository": "elizaos/eliza",
      "body": "* Add tests for multi-agent messaging flows, SSE streaming, and recovery scenarios.\n* Verify performance improvements and lower complexity for external developers.",
      "createdAt": "2025-09-09T12:13:38Z",
      "closedAt": "2025-10-08T06:58:47Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6sm8l_",
      "title": "feat(core): add MessageService interface and default implementation",
      "author": "0xbbjoker",
      "number": 6048,
      "body": "",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-08T03:13:15Z",
      "mergedAt": "2025-10-19T12:24:07Z",
      "additions": 2282,
      "deletions": 1441
    },
    {
      "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_kwDOMT5cIs6sW7SH",
      "title": "feat(core): add config and plugin modules - phase 4 - refactor ElizaOS/Server",
      "author": "standujar",
      "number": 6037,
      "body": "\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n- New Features\n  - Added plugin management with auto-install, loading, validation, and dependency resolution.\n  - Introduced configuration utilities: character parsing/validation/defaults, environment variable loading from .env, and secrets population from local env files.\n  - Expanded public API to expose configuration and plugin modules.\n\n- Tests\n  - Added comprehensive test suites for plugin management, character config, environment loading, and secrets handling, including edge cases and dependency ordering.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-06T20:06:24Z",
      "mergedAt": "2025-10-09T09:23:41Z",
      "additions": 1582,
      "deletions": 1270
    },
    {
      "id": "PR_kwDOMT5cIs6s4Tj6",
      "title": "feat: elizaos deploy",
      "author": "ChristopherTrimboli",
      "number": 6052,
      "body": "## 📋 Summary\n\nImplements the `elizaos deploy` command for deploying ElizaOS projects to Cloudflare Workers via the ElizaOS Cloud platform. Users can now build Docker images locally, upload them through the cloud API, and deploy containers to Cloudflare—all with a single command.\n\n## 🎯 Motivation\n\nEnable ElizaOS developers to deploy their agents to production infrastructure without managing Cloudflare accounts directly. The platform acts as a managed service, handling image uploads, Worker creation, and container orchestration while providing billing, quotas, and monitoring.\n\n## 🚀 Changes\n\n### New Features\n\n#### 1. **Deploy Command** (`src/commands/deploy/`)\n- **Main command:** Full-featured deploy with options for name, port, instances, env vars\n- **Docker integration:** Builds images with platform targeting (linux/amd64)\n- **Image export:** Exports Docker images to tarballs for upload\n- **Cloud upload:** Uploads images to Cloudflare via cloud API\n- **Status polling:** Waits for deployment completion with progress updates\n\n#### 2. **Docker Utilities** (`src/commands/deploy/utils/docker.ts`)\n```typescript\n+ exportDockerImage(imageTag, outputPath?) → Promise<DockerExportResult>\n  - Exports Docker image to tarball\n  - Cross-platform temp directory handling\n  - File size reporting\n\n+ cleanupImageTarball(tarballPath) → Promise<void>\n  - Cleans up temporary tarball files\n  - Safe error handling\n```\n\n#### 3. **API Client** (`src/commands/deploy/utils/api-client.ts`)\n```typescript\n+ getQuota() → Promise<QuotaResponse>\n  - Pre-flight check for quotas and credits\n  - Shows user their limits before deploying\n\n+ uploadImage(imageName, imagePath) → Promise<UploadResponse>\n  - Uploads image tarball with 5-minute timeout\n  - Progress reporting\n  - Automatic abort on timeout\n\n+ createContainer(config) → Promise<ContainerResponse>\n+ getContainer(id) → Promise<ContainerResponse>\n+ waitForDeployment(id, options) → Promise<DeploymentResponse>\n```\n\n#### 4. **Types** (`src/commands/deploy/types.ts`)\n- Extended `CloudApiResponse` with credit/quota fields\n- Added `DockerExportResult` interface\n- Comprehensive type safety for all operations\n\n### Modified Files\n\n```\npackages/cli/src/commands/deploy/\n├── index.ts                    [EXISTING] Entry point\n├── README.md                   [EXISTING] Documentation\n├── actions/\n│   └── deploy.ts              [MODIFIED] +85 lines\n├── utils/\n│   ├── api-client.ts          [MODIFIED] +80 lines\n│   └── docker.ts              [MODIFIED] +60 lines\n└── types.ts                   [MODIFIED] +8 lines\n```\n\n### Key Implementation Details\n\n**Pre-Flight Checks:**\n```typescript\n// Check quota and credits before any operations\nconst quotaResponse = await apiClient.getQuota();\nif (quota.remaining === 0) {\n  return error(\"Container limit reached\");\n}\nif (credits.balance < totalCost) {\n  return error(\"Insufficient credits\");\n}\n```\n\n**Upload with Timeout:**\n```typescript\n// 5-minute timeout for large image uploads\nconst controller = new AbortController();\nconst timeoutId = setTimeout(() => controller.abort(), 5 * 60 * 1000);\n\nconst response = await fetch(url, {\n  body: imageBuffer,\n  signal: controller.signal\n});\n```\n\n**Cleanup on Failure:**\n```typescript\n// Always cleanup tarball, even on upload failure\ntry {\n  await apiClient.uploadImage(name, tarballPath);\n} finally {\n  await cleanupImageTarball(tarballPath);\n}\n```\n\n## 📊 User Experience\n\n### Successful Deployment\n\n```bash\n$ elizaos deploy\n\n🚀 Starting ElizaOS deployment...\n📦 Deploying project: my-agent\n💳 Checking account quota and credits...\n📊 Containers: 2/5 (3 remaining)\n💰 Credit balance: 10000 credits\n💸 Deployment cost: ~1500 credits\n🔨 Building Docker image...\n✅ Docker image built: elizaos/my-agent:latest\n📦 Exporting Docker image...\n✅ Image exported: /tmp/eliza-deploy-xxx/image.tar (250.00 MB)\n📤 Uploading image to cloud...\n💰 Credits deducted for upload: 500\n✅ Image uploaded: my-agent-cf123\n☁️  Deploying to Cloudflare Containers...\n💰 Credits deducted: 1000 (8500 remaining)\n✅ Container created: uuid-123\n⏳ Waiting for deployment to complete...\n✅ Deployment successful!\n📍 Container ID: uuid-123\n🌐 URL: https://my-agent-abc123.workers.dev\n```\n\n### Error Handling\n\n```bash\n# Quota exceeded\n⚠️  Container limit reached! You have 5/5 containers.\n   Delete unused containers or upgrade your plan.\n\n# Insufficient credits\n⚠️  Insufficient credits for deployment.\n   Required: 1500 credits\n   Available: 800 credits\n   Please add credits to your account.\n\n# Upload timeout\n❌ Upload timeout after 5 minutes. Please check your network connection.\n```\n\n## 🧪 Testing\n\n### Manual Testing\n\n```bash\n# 1. Setup cloud API\ncd eliza-cloud-v2\nexport CLOUDFLARE_ACCOUNT_ID=xxx\nexport CLOUDFLARE_API_TOKEN=xxx\nnpm run dev\n\n# 2. Get API key from dashboard\nopen http://localhost:3000/dashboard/api-keys\nexport ELIZAOS_API_KEY=eliza_xxxxx\n\n# 3. Deploy a project\ncd packages/project-starter\nelizaos deploy\n\n# 4. Verify deployment\nopen http://localhost:3000/dashboard/containers\n```\n\n### Test Cases Covered\n\n- ✅ Build Docker image with platform targeting\n- ✅ Export image to tarball (cross-platform)\n- ✅ Upload with timeout protection\n- ✅ Cleanup on failure\n- ✅ Pre-flight quota/credit checks\n- ✅ Status polling until completion\n- ✅ Error handling (quota, credits, network)\n- ✅ API key authentication\n- ✅ Environment variable parsing\n\n## 🔒 Security\n\n- API keys transmitted via `Authorization: Bearer` header\n- No secrets stored in code or logs\n- Temporary tarballs cleaned up after upload\n- Timeout protection prevents hanging connections\n- Proper error messages (no sensitive data leaked)\n\n## 📝 Documentation\n\n- ✅ Command help text with examples\n- ✅ README with usage guide\n- ✅ Type definitions with comments\n- ✅ Error messages with actionable guidance\n\n## ⚙️ Configuration\n\n### Required Environment Variables\n\n```bash\n# For deployment\nELIZAOS_API_KEY=eliza_xxxxx          # From cloud dashboard\n\n# Optional\nELIZAOS_API_URL=https://elizacloud.ai  # Defaults to production\n```\n\n### CLI Options\n\n```bash\nelizaos deploy [options]\n\nOptions:\n  -n, --name <name>              Deployment name\n  -p, --port <port>              Container port (default: 3000)\n  -m, --max-instances <count>    Max instances (default: 1)\n  -k, --api-key <key>            API key (or use ELIZAOS_API_KEY)\n  -u, --api-url <url>            API URL (default: https://elizacloud.ai)\n  -d, --dockerfile <path>        Dockerfile path (default: Dockerfile)\n  -e, --env <KEY=VALUE>          Environment variables (repeatable)\n  --no-build                     Skip Docker build\n  -t, --tag <tag>                Docker image tag\n```\n\n## 🎯 Breaking Changes\n\nNone - this is a new command with no impact on existing functionality.\n\n## 📦 Dependencies\n\nNo new external dependencies added. Uses existing:\n- `execa` - For Docker commands\n- `dotenv` - For environment loading\n- `@elizaos/core` - For logging\n\n## 🔄 Migration Guide\n\nN/A - New feature, no migration needed.\n\n## ✅ Checklist\n\n- [x] Code follows project style guidelines\n- [x] All linting passes\n- [x] TypeScript compilation successful\n- [x] Manual testing completed\n- [x] Documentation updated\n- [x] Error handling implemented\n- [x] Security best practices followed\n- [ ] Unit tests added (TODO)\n- [ ] E2E tests added (TODO)\n\n## 📚 Related\n\n- **SaaS PR:** Companion changes to eliza-cloud-v2 API endpoints\n- **Issue:** Implements container deployment feature\n- **Docs:** See `packages/cli/src/commands/deploy/README.md`\n\n## 🙏 Reviewer Notes\n\n**Key areas to review:**\n1. Error handling in upload timeout logic\n2. Try/finally cleanup pattern\n3. Pre-flight check implementation\n4. User-facing error messages\n5. Type safety in API responses\n\n**Questions for reviewers:**\n- Should we add progress indicators for uploads >100MB?\n- Should we implement retry logic for network failures?\n- Is 5-minute timeout appropriate for all image sizes?\n\n---\n\n**Ready for review!** This enables full end-to-end deployment from CLI to production Cloudflare infrastructure.\n\n",
      "repository": "elizaos/eliza",
      "createdAt": "2025-10-09T11:50:37Z",
      "mergedAt": null,
      "additions": 1345,
      "deletions": 43
    }
  ],
  "codeChanges": {
    "additions": 3845,
    "deletions": 1771,
    "files": 63,
    "commitCount": 139
  },
  "completedItems": [
    {
      "title": "docs: fix typo",
      "prNumber": 6000,
      "type": "bugfix",
      "body": "Occassionally -> Occasionally\r\n\r\n\r\n",
      "files": [
        "packages/cli/src/commands/scenario/docs/README.md"
      ]
    },
    {
      "title": "feat: Add mentionContext interface and improve shouldRespond logic",
      "prNumber": 6030,
      "type": "feature",
      "body": "# Relates to\r\n\r\nIssue discussing the need for platform-agnostic mention detection\r\n\r\n# Risks\r\n\r\n**Medium Risk**\r\n- Changes core message flow logic in bootstrap\r\n- Modifies shouldRespond template and provider\r\n- Affects LLM decision-making f",
      "files": [
        "bun.lock",
        "packages/core/src/__tests__/prompts.test.ts",
        "packages/core/src/prompts.ts",
        "packages/core/src/types/primitives.ts",
        "packages/plugin-bootstrap/src/__tests__/logic.test.ts",
        "packages/plugin-bootstrap/src/index.ts",
        "packages/plugin-bootstrap/src/providers/shouldRespond.ts",
        "packages/plugin-bootstrap/src/providers/index.ts"
      ]
    },
    {
      "title": "chore: modernize renovate configuration and add preset for plugins",
      "prNumber": 6033,
      "type": "other",
      "body": "\r\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\r\n\r\n## Summary by CodeRabbit\r\n\r\n- Chores\r\n  - Added a shared Renovate configuration preset to standardize dependency updates across plugins, with grouped rules for ",
      "files": [
        ".github/renovate-preset.json",
        "renovate.json"
      ]
    },
    {
      "title": "feat(plugin-sql): add offset parameter to getMemories for database-le…",
      "prNumber": 6032,
      "type": "feature",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Adds an optional offset to getMemories for pagination, applies limit/offset in SQL, validates non-negative values, and adds integration tests covering paging and edge cases.\n> \n> - **Core**:\n>   - Add `of",
      "files": [
        "packages/core/src/database.ts",
        "packages/core/src/types/database.ts",
        "packages/plugin-sql/src/__tests__/integration/memory.test.ts",
        "packages/plugin-sql/src/base.ts"
      ]
    },
    {
      "title": "fix: agent plugins not reloading on PATCH update and service stop race condition",
      "prNumber": 6040,
      "type": "bugfix",
      "body": "# Relates to\r\n\r\nFixes issue where agent plugins/services are not properly updated when using PATCH endpoint to modify agent configuration, and fixes race condition causing service initialization errors during agent restart.\r\n\r\n# Risks\r\n\r\n**",
      "files": [
        "bun.lock",
        "packages/server/src/api/agents/crud.ts",
        "packages/server/src/index.ts",
        "packages/server/src/__tests__/agent-plugin-reload.test.ts",
        "packages/server/src/__tests__/agent-server-constructor.test.ts",
        "packages/server/src/__tests__/agent-server-management.test.ts"
      ]
    },
    {
      "title": "support SERVER_PORT",
      "prNumber": 6038,
      "type": "other",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Add support for SERVER_PORT to configure the HTTP server port (falls back to --port or 3000).\n> \n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 43fe2b28976eb02a14595",
      "files": [
        "packages/cli/src/commands/start/index.ts"
      ]
    },
    {
      "title": "feat(core): add config and plugin modules - phase 4 - refactor ElizaOS/Server",
      "prNumber": 6037,
      "type": "feature",
      "body": "\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n- New Features\n  - Added plugin management with auto-install, loading, validation, and dependency resolution.\n  - Introduced configurati",
      "files": [
        "bun.lock",
        "packages/core/src/__tests__/plugin.test.ts",
        "packages/core/src/config/__tests__/character.test.ts",
        "packages/core/src/config/__tests__/environment.test.ts",
        "packages/core/src/config/__tests__/secrets.test.ts",
        "packages/core/src/config/character.ts",
        "packages/core/src/config/environment.ts",
        "packages/core/src/config/index.ts",
        "packages/core/src/config/secrets.ts",
        "packages/core/src/index.ts",
        "packages/core/src/plugin.ts",
        "packages/project-starter/tsconfig.json",
        "packages/core/src/__tests__/config/character.test.ts",
        "packages/core/src/__tests__/config/environment.test.ts",
        "packages/core/src/__tests__/config/secrets.test.ts",
        "packages/cli/src/commands/scenario/src/runtime-factory.ts",
        "packages/core/src/__tests__/character.test.ts",
        "packages/core/src/__tests__/secrets.test.ts",
        "packages/core/src/__tests__/utils/buffer.test.ts",
        "packages/core/src/__tests__/utils/environment.test.ts",
        "packages/core/src/__tests__/utils/paths.test.ts",
        "packages/core/src/__tests__/utils/stringToUuid.test.ts",
        "packages/core/src/character.ts",
        "packages/core/src/elizaos.ts",
        "packages/core/src/index.node.ts",
        "packages/core/src/secrets.ts",
        "packages/core/src/utils/__tests__/environment.test.ts",
        "packages/core/src/utils/environment.ts",
        "packages/server/src/__tests__/api.test.ts",
        "packages/server/src/index.ts",
        "packages/server/src/managers/ConfigManager.ts",
        "packages/server/src/managers/PluginInstaller.ts",
        "packages/server/src/managers/PluginLoader.ts",
        "packages/server/src/managers/__tests__/ConfigManager.test.ts",
        "packages/server/src/managers/__tests__/PluginInstaller.test.ts",
        "packages/server/src/managers/__tests__/PluginLoader.test.ts"
      ]
    },
    {
      "title": "fix(service-interfaces): skip test execution for types-only package",
      "prNumber": 6034,
      "type": "bugfix",
      "body": "The @elizaos/service-interfaces package contains only TypeScript interface\r\ndefinitions and has no runtime logic or tests. The test script was failing\r\nwhen running `bun run test` from the project root because bun test exits\r\nwith code 1 wh",
      "files": [
        "packages/service-interfaces/package.json"
      ]
    },
    {
      "title": "docs: fixed old and broken link",
      "prNumber": 6047,
      "type": "bugfix",
      "body": "<!-- Use this template by filling in information and copying and pasting relevant items out of the HTML comments. -->\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\r\n\r\n## What does thi",
      "files": [
        "packages/cli/README.md"
      ]
    },
    {
      "title": "fix: port validate",
      "prNumber": 6046,
      "type": "bugfix",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Improve port resolution in `start` by validating CLI `--port`, parsing `SERVER_PORT` with `validatePort`, and falling back to `3000` with a warning if invalid.\n> \n> <sup>Written by [Cursor Bugbot](https:/",
      "files": [
        "packages/cli/src/commands/start/index.ts"
      ]
    },
    {
      "title": "fix: expose state cache and fix bootstrap types",
      "prNumber": 6045,
      "type": "bugfix",
      "body": "<!-- CURSOR_SUMMARY -->\n> [!NOTE]\n> Expose runtime stateCache and refactor bootstrap multistep/type usage to consume it, with minor prompt and provider access fixes.\n> \n> - **Core**:\n>   - Expose `stateCache: Map<string, State>` on `IAgentR",
      "files": [
        "packages/core/src/prompts.ts",
        "packages/core/src/types/runtime.ts",
        "packages/plugin-bootstrap/src/index.ts"
      ]
    },
    {
      "title": "feat(core): improve character schema validation with comprehensive Zod schemas",
      "prNumber": 6044,
      "type": "feature",
      "body": "## Summary\n\nThis PR significantly improves the character schema validation system by adding comprehensive Zod schema definitions with detailed descriptions and better type safety.\n\n## Changes Made\n\n### Schema Improvements (packages/core/src",
      "files": [
        "packages/core/src/__tests__/character-validation.test.ts",
        "packages/core/src/schemas/character.ts"
      ]
    },
    {
      "title": "fix: handle when bool is passed into parseBooleanFromText",
      "prNumber": 6042,
      "type": "bugfix",
      "body": "Sometimes getSetting returns a bool, and sometimes it doesn't (like when you use `'YES', 'Y', 'T', '1', 'ON', 'ENABLE'`)\r\n\r\n<!-- CURSOR_SUMMARY -->\r\n> [!NOTE]\r\n> `parseBooleanFromText` now returns boolean inputs directly instead of treating",
      "files": [
        "packages/core/src/utils.ts"
      ]
    },
    {
      "title": "fix: fix BOOTSTRAP_KEEP_RESP",
      "prNumber": 6041,
      "type": "bugfix",
      "body": "make sure BOOTSTRAP_KEEP_RESP works even if not ignored\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> Applies `BOOTSTRAP_KEEP_RESP` to both reply and ignore paths to prevent discarding responses when newer messages arrive.\n> \n> - **Message hand",
      "files": [
        "packages/plugin-bootstrap/src/index.ts"
      ]
    },
    {
      "title": "fix(server): ensure agent exists in database before creating foreign key references",
      "prNumber": 6059,
      "type": "bugfix",
      "body": "## Summary\n\nFixes a foreign key violation error that occurred when starting agents in PostgreSQL environments.\n\n## Problem\n\nThe server was attempting to insert into the `server_agents` table before the agent record existed in the `agents` t",
      "files": [
        "packages/server/src/index.ts"
      ]
    },
    {
      "title": "fix: remove AgentManager references in e2e test infrastructure",
      "prNumber": 6056,
      "type": "bugfix",
      "body": "Fixed e2e test runner after AgentManager was removed from the server package.\r\nReplaced all AgentManager usages with AgentServer's built-in startAgents method.\r\n\r\nChanges:\r\n- Removed AgentManager import and instantiation in e2e-tests.ts\r\n- ",
      "files": [
        "packages/cli/src/commands/test/actions/e2e-tests.ts",
        "packages/cli/tests/unit/commands/test/e2e-tests.test.ts",
        "packages/core/src/elizaos.ts",
        "packages/server/src/index.ts"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 465.0515845926853,
      "prScore": 444.1315845926853,
      "issueScore": 0,
      "reviewScore": 19.5,
      "commentScore": 1.42,
      "summary": "0xbbjoker: Drove a significant architectural refactor across the Eliza ecosystem, merging 11 PRs focused on modernizing core components and plugins. They led this effort by introducing a new `MessageService` interface in a massive PR (#6048, +18k/-11k lines) and migrating the system to UUID-only agent identification (#6036). This work, primarily focused on bug fixes and feature implementation, also involved updating multiple plugins like Discord, Telegram, and Twitter to a new message handling runtime."
    },
    {
      "username": "standujar",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16385918?u=718bdcd1585be8447bdfffb8c11ce249baa7532d&v=4",
      "totalScore": 334.3955020282644,
      "prScore": 310.2175020282644,
      "issueScore": 0,
      "reviewScore": 23,
      "commentScore": 1.178,
      "summary": "standujar: Drove significant architectural improvements across the `elizaos` ecosystem, merging 7 PRs this week. Their most impactful contributions were two major features in `elizaos/eliza`: a large-scale refactor of core config and plugin modules (#6037) and a simplification of the CLI (#6060), which together introduced over 7,400 lines of new code. Alongside this feature work, they also resolved key bugs, including an agent plugin reloading issue (#6040), with their efforts balanced across bug fixes, refactoring, and extensive testing."
    },
    {
      "username": "ChristopherTrimboli",
      "avatarUrl": "https://avatars.githubusercontent.com/u/27584221?u=0d816ce1dcdea8f925aba18bb710153d4a87a719&v=4",
      "totalScore": 108.2875477931522,
      "prScore": 103.0875477931522,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.2,
      "summary": "ChristopherTrimboli: Focused on deployment systems within the `elizaos/eliza` repository, merging a substantial PR (#6058) that refactored deployment artifact styling with over 8,000 lines of changes. He has a related feature PR (#6052) still in progress and also provided one review for a teammate. His work was a blend of bug fixes and other enhancements, primarily impacting code files."
    },
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 104.86085540188445,
      "prScore": 99.46085540188444,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.4,
      "summary": "odilitime: Focused on delivering new features and addressing bugs, merging four pull requests across the ecosystem. Their most impactful contribution was a significant upgrade to the Solana plugin for \"token 2022\" support in `elizaos-plugins/plugin-solana#14` (+873/-91 lines), alongside adding server port configuration in `elizaos/eliza#6038`. This work, combined with two smaller bug fixes, shows a primary focus on both new feature development and maintaining application stability."
    },
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 90.51449268984148,
      "prScore": 83.87649268984147,
      "issueScore": 0,
      "reviewScore": 6,
      "commentScore": 0.6379999999999999,
      "summary": "wtfsayo: Focused on improving the core character schema in the `elizaos/eliza` repository, merging a feature to enhance validation (elizaos/eliza#6044). They also contributed to code quality by providing one review with change requests and commenting on several issues. This work was part of a substantial effort involving 37 commits that modified over 3,100 files, with a primary focus on bug fixes and configuration changes."
    },
    {
      "username": "tcm390",
      "avatarUrl": "https://avatars.githubusercontent.com/u/60634884?u=c6c41679b8322eaa0c81f72e0b4ed95e80f0ac16&v=4",
      "totalScore": 56.505057291354944,
      "prScore": 51.505057291354944,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": "tcm390: Focused on bug fixes within the elizaos/eliza repository this week, merging two pull requests. Their most notable contribution was resolving an issue with bootstrap types and exposing the state cache (elizaos/eliza#6045). Overall, their work consisted of 9 commits across 53 files, with a primary focus on bug fixes."
    },
    {
      "username": "letmehateu",
      "avatarUrl": "https://avatars.githubusercontent.com/u/133153661?u=2217cec1ebd7bf22a8e4e3ace28b3183720dd444&v=4",
      "totalScore": 37.77067403074471,
      "prScore": 37.57067403074471,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": "letmehateu: Focused on documentation maintenance in the elizaos/eliza repository this week. They merged one pull request to fix an old and broken link (#6047) and opened another to address similar issues. All of their contributions were concentrated on improving documentation."
    },
    {
      "username": "borisudovicic",
      "avatarUrl": "https://avatars.githubusercontent.com/u/31806472?u=8935f4d43fd7e4eb9bf5ff92d54d4d2f8ac8a786&v=4",
      "totalScore": 8,
      "prScore": 0,
      "issueScore": 8,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "borisudovicic: Focused on extensive project planning and task organization within the `elizaos/eliza` repository this week. They created 27 issues to structure a large-scale initiative, breaking down work into key areas like API Redesign (#5917), Modernization (#5919), and Testing & Validation (#5921). This work was centered on defining and organizing upcoming engineering efforts, with 24 of these planning issues subsequently closed."
    },
    {
      "username": "FellowTraveler",
      "avatarUrl": "https://avatars.githubusercontent.com/u/339191?u=236b9970b7c3ce1e3167921f25d32323f05d916f&v=4",
      "totalScore": 4,
      "prScore": 0,
      "issueScore": 4,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "FellowTraveler: Opened and closed an issue in the elizaos/eliza repository regarding a default port configuration (#6051)."
    },
    {
      "username": "TensorNull",
      "avatarUrl": "https://avatars.githubusercontent.com/u/129579691?u=fef786d866afd3d3a36397da036641c65906f3f2&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "TensorNull: This week, their focus was on future development for ElizaOS. They contributed by opening a feature request (elizaos/eliza#6055) to add CometAPI support to the project."
    }
  ],
  "newPRs": 23,
  "mergedPRs": 16,
  "newIssues": 5,
  "closedIssues": 28,
  "activeContributors": 13
}