{
  "interval": {
    "intervalStart": "2025-08-10T00:00:00.000Z",
    "intervalEnd": "2025-08-17T00:00:00.000Z",
    "intervalType": "week"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2025-08-10 to 2025-08-17, elizaos/eliza had 13 new PRs (10 merged), 28 new issues, and 16 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7ELgn4",
      "title": "Calling `startAgent` from CLI command start - hangs early when `@elizaos/plugin-bootstrap` is omitted & hangs later when it is included",
      "author": "monilpat",
      "number": 5719,
      "repository": "elizaos/eliza",
      "body": "**Describe the bug**\n\n`packages/cli/src/commands/start/actions/agent-start.ts` is exported and re-used in CLI commands with  \n\n```ts\nimport { startAgent } from '../commands/start';\n```\n\nWhen I call `startAgent` from `runtime-factory.ts` / `initializeAgent()`:\n\n```ts\nconst runtime = await startAgent(\n  encryptedCharacter(character),\n  server,\n  undefined,\n  [],                       // <-- intentionally no bootstrap plugin\n  { isTestMode: false }\n);\n```\n\ninitialization hangs almost immediately (before plugin dependency resolution).\n\nIf I add `@elizaos/plugin-bootstrap` back:\n\n```ts\nconst runtime = await startAgent(\n  encryptedCharacter(character),\n  server,\n  undefined,\n  ['@elizaos/plugin-bootstrap'],\n  { isTestMode: false }\n);\n```\n\ninitialization gets past early steps, loads **all** plugins, but then hangs right after the bootstrap plugin finishes loading.\n\n---\n\n**To Reproduce**\n\n1. Build the CLI (`cd packages/cli && bun x tsup`).\n2. From `packages/cli` run a scenario that relies on `initializeAgent`, e.g.:\n\n```bash\nbun run src/index.ts scenario run \\\n  src/commands/scenario/examples/e2b-test.scenario.yaml\n```\n\n3. Edit `runtime-factory.ts` ➜ `initializeAgent()` and comment the bootstrap plugin in the `character.plugins` array (lines 411-415).\n4. Re-run the same command – observe early hang.\n5. Re-enable the bootstrap plugin and re-run – observe later hang.\n\n---\n\n**Expected behavior**\n\n`startAgent` should finish initializing an agent regardless of whether `@elizaos/plugin-bootstrap` is present.  \nIf the bootstrap plugin is mandatory there should be a clear validation error, not a silent hang.\n\n---\n\n**Logs / Screenshots**\n\n<details>\n<summary>1️⃣ Hang without bootstrap plugin (early-stage)</summary>\n\n```\n[2025-08-04 02:47:47] INFO: [startAgent] Step 1 – Starting agent initialization\n[2025-08-04 02:47:47] INFO: [startAgent] Step 2 – Character ID set\n[2025-08-04 02:47:47] INFO: [startAgent] Step 3 – Checking character secrets\n[2025-08-04 02:47:47] INFO: [startAgent] Step 3c – Character already has secrets\n[2025-08-04 02:47:47] INFO: [startAgent] Step 4 – Initializing plugin loading\n[2025-08-04 02:47:47] INFO: [startAgent] Step 4a – SQL plugin loaded\n[2025-08-04 02:47:47] INFO: [startAgent] Step 4b – Character plugins: [\"@elizaos/plugin-e2b\",\"@elizaos/plugin-openai\"]\n... nothing further – process hangs here ...\n```\n</details>\n\n<details>\n<summary>2️⃣ Hang with bootstrap plugin (late-stage)</summary>\n\n```\n[2025-08-04 02:52:47] INFO: [loadAndPreparePlugin] Step 1 – Starting to load plugin: @elizaos/plugin-bootstrap\n[2025-08-04 02:52:47] SUCCESS: Successfully loaded plugin '@elizaos/plugin-bootstrap' using workspace dependency\n[2025-08-04 02:52:47] INFO: [loadAndPreparePlugin] Step 4e – Found valid plugin export\n[2025-08-04 02:52:47] INFO: [startAgent] Step 5d – Successfully loaded plugin: bootstrap\n... no further output – runtime hangs right after this point ...\n```\n</details>\n\n---\n\n**Additional context**\n\n* The call site is `packages/cli/src/scenarios/runtime-factory.ts` → `initializeAgent()`.\n* `startAgent` is imported with  \n  `import { startAgent } from '../commands/start';`\n* Hangs occur both in **local** and **E2B** scenarios.\n* Database migrations complete successfully; the hang happens after plugin loading.\n* Removing *all* plugins except SQL reproduces the *early* hang; adding any plugin that has bootstrap as a dep reproduces the *late* hang.\n* The same code path works in commit `510b8aac2e0b20cc3d176093a58143c26e838e65` (July 25 commit) but fails from `d84963ef3d5f5cccfef461350175dc1bc9b77b58` onward.\n\nPlease review my branch and the file for the associated changes. I review the plugin loading stack trace loadAndPreparePlugin -> loadPluginModule -> strategy.tryImport (which is where it hangs \n\n```\n */\nconst importStrategies: ImportStrategy[] = [\n  // Try local development first - this is the most important for plugin testing\n  {\n    name: 'local development plugin',\n    tryImport: async (repository: string) => {\n      const context = detectPluginContext(repository);\n\n      if (context.isLocalDevelopment) {\n        logger.debug(`Detected local development for plugin: ${repository}`);\n\n        // Ensure the plugin is built\n        const isBuilt = await ensurePluginBuilt(context);\n        if (!isBuilt) {\n          provideLocalPluginGuidance(repository, context);\n          return null;\n        }\n\n        // Try to load from built output\n        if (context.localPath && existsSync(context.localPath)) {\n          logger.info(`Loading local development plugin: ${repository}`);\n          return tryImporting(context.localPath, 'local development plugin', repository);\n        }\n\n        // This shouldn't happen if ensurePluginBuilt succeeded, but handle it gracefully\n        logger.warn(`Plugin built but output not found at expected path: ${context.localPath}`);\n        provideLocalPluginGuidance(repository, context);\n        return null;\n      }\n\n      return null;\n    },\n  },\n  // Try workspace dependencies (for monorepo packages)\n  {\n    name: 'workspace dependency',\n    tryImport: async (repository: string) => {\n      if (repository.startsWith('@elizaos/plugin-')) {\n        // Try to find the plugin in the workspace\n        const pluginName = repository.replace('@elizaos/', '');\n        const workspacePath = path.resolve(process.cwd(), '..', pluginName, 'dist', 'index.js');\n        if (existsSync(workspacePath)) {\n          return tryImporting(workspacePath, 'workspace dependency', repository);\n        }\n      }\n      return null;\n    },\n  },\n  {\n    name: 'direct path',\n    tryImport: async (repository: string) => tryImporting(repository, 'direct path', repository),\n  },\n  {\n    name: 'local node_modules',\n    tryImport: async (repository: string) =>\n      tryImporting(resolveNodeModulesPath(repository), 'local node_modules', repository),\n  },\n  {\n    name: 'global node_modules',\n    tryImport: async (repository: string) => {\n      const globalPath = path.resolve(getGlobalNodeModulesPath(), repository);\n      if (!existsSync(path.dirname(globalPath))) {\n        logger.debug(\n          `Global node_modules directory not found at ${path.dirname(globalPath)}, skipping for ${repository}`\n        );\n        return null;\n      }\n      return tryImporting(globalPath, 'global node_modules', repository);\n    },\n  },\n  {\n    name: 'package.json entry',\n    tryImport: async (repository: string) => {\n      const packageJson = await readPackageJson(repository);\n      if (!packageJson) return null;\n\n      const entryPoint = packageJson.module || packageJson.main || DEFAULT_ENTRY_POINT;\n      return tryImporting(\n        resolveNodeModulesPath(repository, entryPoint),\n        `package.json entry (${entryPoint})`,\n        repository\n      );\n    },\n  },\n  {\n    name: 'common dist pattern',\n    tryImport: async (repository: string) => {\n      const packageJson = await readPackageJson(repository);\n      if (packageJson?.main === DEFAULT_ENTRY_POINT) return null;\n\n      return tryImporting(\n        resolveNodeModulesPath(repository, DEFAULT_ENTRY_POINT),\n        'common dist pattern',\n        repository\n      );\n    },\n  },\n];\n``` in load-plugin.ts  BRANCH in question: https://github.com/elizaOS/eliza/blob/scenarios-cli/packages/cli/src/scenarios/runtime-factory.ts\n\n\nbut startAgent is in develop and is having issues when its being called. ",
      "createdAt": "2025-08-05T02:45:31Z",
      "closedAt": "2025-08-14T02:44:06Z",
      "state": "CLOSED",
      "commentCount": 2
    },
    {
      "id": "I_kwDOMT5cIs7FTvRT",
      "title": "Critical: Plugin Publishing Fails with False Success Reports",
      "author": "monilpat",
      "number": 5754,
      "repository": "elizaos/eliza",
      "body": "## Issue Summary\nThe `elizaos publish --npm` command reports successful publishing but the plugin is not actually published to npm, despite showing success messages. The npm publish is failing with a 404 error, but the ElizaOS CLI incorrectly reports success.\n\n## Key Problems Identified\n\n### 1. Critical NPM Publishing Failure\n- **Error**: `npm error 404 Not Found - PUT https://registry.npmjs.org/@elizaos%2fplugin-polygon - Not found`\n- **Issue**: The package scope `@elizaos` doesn't exist on npm, preventing publishing\n- **Impact**: Package cannot be published to npm, but CLI reports success\n\n### 2. False Success Reporting\n- **Issue**: CLI reports `[√] Successfully published @elizaos/plugin-polygon@1.0.0 to npm`\n- **Reality**: npm publish failed with 404 error\n- **Impact**: Developers believe their plugin is published when it's not\n\n### 3. Registry Repository Mismatch\n- **Expected**: Should create PR against `https://github.com/elizaos-plugins/registry`\n- **Actual**: Still references old registry `https://github.com/elizaos/registry`\n- **Impact**: Plugin won't appear in the official ElizaOS registry\n\n## Steps to Reproduce\n\n```bash\n# Navigate to the plugin directory\ncd packages/plugin-polygon\n\n# Ensure you're on the correct branch with the changes\ngit checkout polygon\n\n# Run the publish command\nelizaos publish --npm\n\n# Verify the success message appears\n# [√] Successfully published @elizaos/plugin-polygon@1.0.0 to npm\n\n# Check if package actually exists on npm\nnpm view @elizaos/plugin-polygon@1.0.0\n# Result: 404 Not Found - '@elizaos/plugin-polygon@1.0.0' is not in this registry\n```\n\n## Technical Details\n\n### NPM Error Analysis\nThe npm logs show the root cause:\n```\nhttp fetch PUT 404 https://registry.npmjs.org/@elizaos%2fplugin-polygon 507ms\nerror 404 Not Found - PUT https://registry.npmjs.org/@elizaos%2fplugin-polygon - Not found\n```\n\nThis indicates that the `@elizaos` scope doesn't exist on npm, which is required for publishing scoped packages.\n\n### CLI Error Handling Failure\nThe ElizaOS CLI is not properly parsing npm error codes:\n- npm returns exit code 1 (failure)\n- CLI ignores the error and reports success\n- No validation that the package actually exists on npm\n\n## Expected Behavior\n1. CLI should detect npm publish failures (exit code 1)\n2. CLI should fail with clear error message when package scope doesn't exist\n3. CLI should validate that package actually exists on npm after publishing\n4. CLI should create PRs against the correct registry repository\n\n## Recommended Fixes\n\n### 1. Fix NPM Error Detection\n```typescript\n// In the publish command, check npm exit code\nconst npmResult = await exec('npm publish', { cwd: pluginDir });\nif (npmResult.exitCode !== 0) {\n  throw new Error(`NPM publish failed: ${npmResult.stderr}`);\n}\n```\n\n### 2. Add Package Scope Validation\n```typescript\n// Before publishing, check if scope exists\nconst scopeExists = await checkNpmScope('@elizaos');\nif (!scopeExists) {\n  throw new Error('Package scope @elizaos does not exist on npm. Contact npm support to create the scope.');\n}\n```\n\n### 3. Add Post-Publish Validation\n```typescript\n// After publishing, verify package exists\nconst packageExists = await checkPackageExists(packageName, version);\nif (!packageExists) {\n  throw new Error(`Package was not published successfully. Check npm logs for details.`);\n}\n```\n\n## Priority\n**Critical** - This completely blocks plugin publishing and creates false success reports.\n\n## Affected Components\n- `packages/cli/src/commands/publish.ts`\n- NPM publishing logic\n- Error handling and success reporting\n- Package scope validation\n- Registry repository configuration\n\n## Immediate Action Required\n1. **Create the `@elizaos` scope on npm** or use an existing scope\n2. Update CLI to properly detect and handle npm publish failures\n3. Add post-publish validation to ensure packages actually exist on npm\n4. Update registry repository configuration\n\n## Alternative Solutions\n1. **Use existing scope**: Change package name to `@monilpat/plugin-polygon`\n2. **Create organization scope**: Set up `@elizaos` organization on npm\n3. **Use unscoped package**: Publish as `elizaos-plugin-polygon`\n\nThis issue is critically blocking plugin developers from successfully publishing their work and needs immediate attention from the ElizaOS team.\n",
      "createdAt": "2025-08-11T14:20:08Z",
      "closedAt": "2025-08-15T03:19:49Z",
      "state": "CLOSED",
      "commentCount": 2
    },
    {
      "id": "I_kwDOMT5cIs7F1A2h",
      "title": "I need Your Guidance",
      "author": "1BDO",
      "number": 5770,
      "repository": "elizaos/eliza",
      "body": "i build a Plugin & in Testing this same error Give 5 to 7 times. what do i do??\n\nError: root@DESKTOP-VJVJ4O4:/mnt/e/V.ON/plugin-delta# bun test\nbun test v1.2.19 (aad3abea)\n\nsrc/__tests__/actions.test.ts:\n✓ Actions > should execute getProductsAction [5.52ms]\n✓ Actions > should execute getTickerAction [1.26ms]\n70 |       {} as any,\n71 |       callback\n72 |     );\n73 |\n74 |     expect(result?.success).toBe(true);\n75 |     expect(placeOrderMock).toHaveBeenCalledWith({\n                                ^\nerror: expect(received).toHaveBeenCalledWith(expected)\n\nNumber of calls: 1\n\n      at <anonymous> (/mnt/e/V.ON/plugin-delta/src/__tests__/actions.test.ts:75:28)\n✗ Actions > should execute placeOrderAction [3.97ms]\n✓ Actions > should execute cancelOrderAction [0.48ms]\n✓ Actions > should execute getOptionChainAction [1.05ms]\n✓ Actions > should execute cancelAllOrdersAction [0.92ms]\n✓ Actions > should execute setOrderLeverageAction [1.02ms]\n✓ Actions > should execute getOrderbookAction [0.55ms]\n✓ Actions > should execute getMarginsAction [0.63ms]\n✓ Actions > should execute editOrderAction [0.72ms]\n✓ Actions > should execute closeAllAction [0.54ms]\n✓ Actions > should execute createDeadmanAction [0.60ms]\n✓ Actions > should execute ackDeadmanAction [0.45ms]\n✓ Actions > should execute getDeadmanStatusAction [0.59ms]\n✓ Actions > should execute updateMmpAction [0.39ms]\n✓ Actions > should execute resetMmpAction [0.53ms]\n\nsrc/__tests__/DeltaRestClient.test.ts:\n✓ DeltaRestClient > should fetch products [1.13ms]\n✓ DeltaRestClient > should fetch ticker by symbol [0.40ms]\n✓ DeltaRestClient > should place an order [0.66ms]\n✓ DeltaRestClient > should cancel an order [0.20ms]\n✓ DeltaRestClient > should get option chain [0.35ms]\n✓ DeltaRestClient > should handle API errors [1.12ms]\n✓ DeltaRestClient > should generate a valid signature [0.11ms]\n\nsrc/__tests__/DeltaWebSocketService.test.ts:\nDelta WebSocket error: ErrorEvent {\n  type: \"error\",\n  message: \"WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\",\n  error: error: WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\n,\n}\nAttempting to reconnect in 5000ms (attempt 1/5)\nDelta WebSocket disconnected\n41 | \n42 |   it('connects and authenticates', async () => {\n43 |     svc.connect();\n44 |     await new Promise(r => setTimeout(r, 10));\n45 |     const ws = (svc as any).ws as MockWebSocket;\n46 |     expect(ws.send).toHaveBeenCalledWith(expect.stringContaining('\"type\":\"auth\"'));\n                         ^\nerror: Expected value must be a mock function: bun.js.bindings.JSValue.JSValue(138306506951456)\n      at <anonymous> (/mnt/e/V.ON/plugin-delta/src/__tests__/DeltaWebSocketService.test.ts:46:21)\n✗ DeltaWebSocketService > connects and authenticates [13.99ms]\nDelta WebSocket error: ErrorEvent {\n  type: \"error\",\n  message: \"WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\",\n  error: error: WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\n,\n}\nAttempting to reconnect in 5000ms (attempt 1/5)\nDelta WebSocket disconnected\n50 |     svc.connect();\n51 |     await new Promise(r => setTimeout(r, 10));\n52 |     const spy = mock();\n53 |     svc.onTicker(spy);\n54 |     const ws = (svc as any).ws as MockWebSocket;\n55 |     ws.triggerMessage({ type: 'ticker', symbol: 'BTCUSD', price: 50000 });\n            ^\nTypeError: ws.triggerMessage is not a function. (In 'ws.triggerMessage({ type: \"ticker\", symbol: \"BTCUSD\", price: 50000 })', 'ws.triggerMessage' is undefined)\n      at <anonymous> (/mnt/e/V.ON/plugin-delta/src/__tests__/DeltaWebSocketService.test.ts:55:8)\n✗ DeltaWebSocketService > handles incoming messages [15.00ms]\nDelta WebSocket error: ErrorEvent {\n  type: \"error\",\n  message: \"WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\",\n  error: error: WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\n,\n}\nAttempting to reconnect in 5000ms (attempt 1/5)\nDelta WebSocket disconnected\nCannot subscribe to v2/ticker. WebSocket is not open.\n59 |   it('subscribes to a channel', async () => {\n60 |     svc.connect();\n61 |     await new Promise(r => setTimeout(r, 10));\n62 |     svc.subscribeTicker(['BTCUSD']);\n63 |     const ws = (svc as any).ws as MockWebSocket;\n64 |     expect(ws.send).toHaveBeenCalledWith(JSON.stringify({\n                         ^\nerror: Expected value must be a mock function: bun.js.bindings.JSValue.JSValue(138306506951456)\n      at <anonymous> (/mnt/e/V.ON/plugin-delta/src/__tests__/DeltaWebSocketService.test.ts:64:21)\n✗ DeltaWebSocketService > subscribes to a channel [14.46ms]\nDelta WebSocket error: ErrorEvent {\n  type: \"error\",\n  message: \"WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\",\n  error: error: WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\n,\n}\nAttempting to reconnect in 5000ms (attempt 1/5)\nDelta WebSocket disconnected\nCannot unsubscribe from v2/ticker. WebSocket is not open.\n70 |   it('unsubscribes from a channel', async () => {\n71 |     svc.connect();\n72 |     await new Promise(r => setTimeout(r, 10));\n73 |     svc.unsubscribeTicker();\n74 |     const ws = (svc as any).ws as MockWebSocket;\n75 |     expect(ws.send).toHaveBeenCalledWith(JSON.stringify({\n                         ^\nerror: Expected value must be a mock function: bun.js.bindings.JSValue.JSValue(138306506951456)\n      at <anonymous> (/mnt/e/V.ON/plugin-delta/src/__tests__/DeltaWebSocketService.test.ts:75:21)\n✗ DeltaWebSocketService > unsubscribes from a channel [13.42ms]\nDelta WebSocket error: ErrorEvent {\n  type: \"error\",\n  message: \"WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\",\n  error: error: WebSocket connection to 'ws://localhost:8080/' failed: Failed to connect\n,\n}\nAttempting to reconnect in 5000ms (attempt 1/5)\nDelta WebSocket disconnected\n82 |     svc.connect();\n83 |     await new Promise(r => setTimeout(r, 10));\n84 |     const reconnectSpy = mock();\n85 |     (svc as any).reconnect = reconnectSpy;\n86 |     const ws = (svc as any).ws as MockWebSocket;\n87 |     ws.triggerClose();\n            ^\nTypeError: ws.triggerClose is not a function. (In 'ws.triggerClose()', 'ws.triggerClose' is undefined)\n      at <anonymous> (/mnt/e/V.ON/plugin-delta/src/__tests__/DeltaWebSocketService.test.ts:87:8)\n✗ DeltaWebSocketService > attempts reconnect on close [13.07ms]\n\nsrc/__tests__/evaluators.test.ts:\n✓ Evaluators > should execute executionHealthEvaluator [0.23ms]\n✓ Evaluators > should execute riskWatchdogEvaluator [0.51ms]\n\nsrc/__tests__/providers.test.ts:\n✓ Providers > should execute marketStateProvider [0.24ms]\n✓ Providers > should execute accountStateProvider [0.38ms]\n✓ Providers > should execute riskStateProvider [0.24ms]\n✓ Providers > should execute marketStatusProvider [0.19ms]\n\n6 tests failed:\n✗ Actions > should execute placeOrderAction [3.97ms]\n✗ DeltaWebSocketService > connects and authenticates [13.99ms]\n✗ DeltaWebSocketService > handles incoming messages [15.00ms]\n✗ DeltaWebSocketService > subscribes to a channel [14.46ms]\n✗ DeltaWebSocketService > unsubscribes from a channel [13.42ms]\n✗ DeltaWebSocketService > attempts reconnect on close [13.07ms]\n---------------------------------------|---------|---------|-------------------\nFile                                   | % Funcs | % Lines | Uncovered Line #s\n---------------------------------------|---------|---------|-------------------\nAll files                              |   64.71 |   79.89 |\n src/__tests__/test-utils.ts           |    1.22 |   78.05 | 7-12,17-37\n src/actions/ackDeadman.ts             |   66.67 |   76.92 | 23,30,34,45-53\n src/actions/cancelAllOrders.ts        |   75.00 |   85.14 | 37,44,71-79\n src/actions/cancelOrder.ts            |   66.67 |   81.54 | 36,43,48,61-69\n src/actions/closeAll.ts               |   66.67 |   77.08 | 23,30,41-49\n src/actions/createDeadman.ts          |   66.67 |   76.92 | 23,30,34,45-53\n src/actions/editOrder.ts              |   80.00 |   78.95 | 23,30,40,55-63\n src/actions/getDeadmanStatus.ts       |   66.67 |   77.55 | 23,30,42-50\n src/actions/getMargins.ts             |   66.67 |   77.08 | 23,30,41-49\n src/actions/getOptionChain.ts         |   75.00 |   82.86 | 37,44,54,67-75\n src/actions/getOrderbook.ts           |   66.67 |   80.85 | 24,31,35,43-48\n src/actions/getProducts.ts            |   66.67 |   77.08 | 23,30,43-51\n src/actions/getTicker.ts              |   66.67 |   87.67 | 50,57,61,70-75\n src/actions/placeOrder.ts             |   83.33 |   86.81 | 50,57,69,90-98\n src/actions/resetMmp.ts               |   66.67 |   76.92 | 23,30,34,45-53\n src/actions/setOrderLeverage.ts       |   80.00 |   82.43 | 37,44,52,59,73-81\n src/actions/updateMmp.ts              |   66.67 |   77.55 | 23,30,43-51\n src/evaluators/executionHealth.ts     |   66.67 |  100.00 | \n src/evaluators/riskWatchdog.ts        |   66.67 |   90.00 | 29-30\n src/providers/accountState.ts         |   40.00 |   96.77 | \n src/providers/marketState.ts          |   66.67 |   90.91 | 12\n src/providers/marketStatus.ts         |  100.00 |   94.74 | \n src/providers/riskState.ts            |   66.67 |   90.91 | 12\n src/services/DeltaRestClient.ts       |   32.50 |   26.95 | 29-53,123-280,303-485\n src/services/DeltaWebSocketService.ts |   15.38 |   36.52 | 76-84,89-102,111-115,119-120,167-168,173-179,190-277,318-320,324-327,343-345,349-351,355-357,361-363,367-369,373-375,379-381,385-387,397-398,402-403,407-408,412-413,418,422,426,431-433,437-439,443-445,449-451,455-457,461-463,467-469,473-475,479-481,485-487,491-493,497-499,503-505,509-511,515-517,521-523,527-529,533-535,539-541,545-547,551-553,557-559,563-565,569-571,576,580,584,588,592,596,600-601,605-606,610-611,615-616,620-621,625-626,630-631,635-636,640-641,645-646,650-651,655-656,660-661,665-679,683-697,701-706,710-715,719-728\n src/utils/instrument-parser.ts        |  100.00 |   88.89 | 19,34\n---------------------------------------|---------|---------|-------------------\n\n 28 pass\n 6 fail\n 60 expect() calls\nRan 34 tests across 5 files. [2.57s]\nroot@DESKTOP-VJVJ4O4:/mnt/e/V.ON/plugin-delta#",
      "createdAt": "2025-08-13T16:00:51Z",
      "closedAt": "2025-08-15T16:07:09Z",
      "state": "CLOSED",
      "commentCount": 2
    },
    {
      "id": "I_kwDOMT5cIs7EwwuN",
      "title": "Eliza CLI failed to build project",
      "author": "Kemystra",
      "number": 5734,
      "repository": "elizaos/eliza",
      "body": "**Describe the bug**\n\nOn project creation, ElizaOS CLI fails with the following error:\n```\n◇  Failed to build project\nstdout: src/index.ts(7,25): error TS2345: Argument of type 'string' is not assignable to parameter of type 'undefined'.\nstderr: $ tsc --noEmit && vite build && tsup\n```\n\n**To Reproduce**\n\n- Install ElizaOS through `bun`\n```\nbun i -g @elizaos/cli\n```\n- Create new ElizaOS project\n```\nelizaos create abcde\n```\n\n**Expected behavior**\n\nProject built successfully\n\n**Screenshots**\n\n<img width=\"1095\" height=\"572\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/967dd6a2-0d70-4e2e-8019-85a2eab5f225\" />\n\n**Additional context**\n\nElizaOS CLI version: `1.3.2`\n",
      "createdAt": "2025-08-07T16:14:00Z",
      "closedAt": "2025-08-14T07:09:33Z",
      "state": "CLOSED",
      "commentCount": 1
    },
    {
      "id": "I_kwDOMT5cIs7Eng6F",
      "title": "feat(scenarios): Implement natural language agent interaction and response validation",
      "author": "monilpat",
      "number": 5727,
      "repository": "elizaos/eliza",
      "body": "# feat(scenarios): Implement natural language agent interaction and response validation\n\n## Description\n\nThis ticket enables scenarios to test agent behavior through natural language interactions rather than direct code execution. This allows testing of agent reasoning, decision-making, and response generation in realistic conversation contexts with proper evaluation of agent responses.\n\n## Acceptance Criteria\n\n1. Scenario `run` blocks support `input` field for natural language prompts to agents\n2. Agent responses are captured and available for evaluation (text, thoughts, actions)\n3. Evaluators can access both agent response text and execution context\n4. Support for multi-turn conversations in scenarios\n5. Agent responses include thought process and action decisions\n6. Integration with existing evaluation engine for response validation\n7. Support for conversation context across multiple steps\n8. Agent response timing and performance metrics\n\n## Technical Approach\n\n### 1. Enhanced Run Step Schema\n```typescript\n// packages/cli/src/scenarios/schema.ts\nconst RunStepSchema = z.object({\n  name: z.string().optional(),\n  // Natural language input to agent\n  input: z.string().optional(),\n  // Direct code execution (existing)\n  lang: z.string().optional(),\n  code: z.string().optional(),\n  // Agent interaction specific\n  agent_context: z.object({\n    conversation_id: z.string().optional(),\n    user_id: z.string().optional(),\n    room_id: z.string().optional(),\n  }).optional(),\n  evaluations: z.array(EvaluationSchema),\n});\n```\n\n### 2. Agent Interaction Engine\n```typescript\n// packages/cli/src/scenarios/agent-interaction.ts\nexport class AgentInteractionEngine {\n  constructor(private runtime: IAgentRuntime) {}\n\n  async interactWithAgent(input: string, context?: AgentContext): Promise<AgentResponse> {\n    // Create message for agent\n    const message: Memory = {\n      entityId: context?.user_id || 'scenario-user',\n      roomId: context?.room_id || 'scenario-room',\n      content: {\n        type: 'text',\n        text: input,\n      },\n      metadata: {\n        type: 'message',\n        conversationId: context?.conversation_id,\n      },\n    };\n\n    // Send to agent and capture response\n    const startTime = Date.now();\n    const response = await this.runtime.processMessage(message);\n    const endTime = Date.now();\n\n    return {\n      text: response.text,\n      thoughts: response.thoughts,\n      actions: response.actions,\n      timing: {\n        startTime,\n        endTime,\n        duration: endTime - startTime,\n      },\n      context: {\n        conversationId: context?.conversation_id,\n        messageId: message.id,\n      },\n    };\n  }\n}\n```\n\n### 3. Enhanced Execution Result\n```typescript\n// packages/cli/src/scenarios/providers.ts\nexport interface ExecutionResult {\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n  files: Record<string, string>;\n  // New: Agent interaction results\n  agentResponse?: AgentResponse;\n  conversationHistory?: AgentResponse[];\n}\n```\n\n## Test Scenario\n\nCreate `agent-interaction-test.scenario.yaml`:\n```yaml\nname: \"Agent Interaction Test\"\ndescription: \"Tests natural language interaction with agents\"\n\nplugins:\n  - \"@elizaos/plugin-github\"\n  - \"@elizaos/plugin-evm\"\n\nenvironment:\n  type: e2b\n\nsetup:\n  mocks:\n    - service: \"github-service\"\n      method: \"searchIssues\"\n      response:\n        - title: \"Implement Dark Mode\"\n          number: 123\n          state: \"open\"\n          labels: [\"feature\", \"ui\"]\n    - service: \"evm-service\"\n      method: \"getBalancesForAddress\"\n      response:\n        - chain: \"ethereum\"\n          balances:\n            - symbol: \"ETH\"\n              amount: \"2.5\"\n\nrun:\n  - name: \"Ask agent about roadmap\"\n    input: \"What new features are you planning to add?\"\n    agent_context:\n      conversation_id: \"roadmap-conversation\"\n      user_id: \"test-user\"\n    evaluations:\n      - type: \"trajectory_contains_action\"\n        action: \"github-service.searchIssues\"\n        description: \"Verify agent searched for issues\"\n      \n      - type: \"string_contains\"\n        value: \"Dark Mode\"\n        description: \"Verify agent mentioned the mocked issue\"\n      \n      - type: \"llm_judge\"\n        prompt: \"Did the agent provide a helpful and coherent response about new features?\"\n        expected: \"yes\"\n        description: \"Verify agent response quality\"\n\n  - name: \"Ask agent about wallet\"\n    input: \"What's my current wallet balance?\"\n    agent_context:\n      conversation_id: \"wallet-conversation\"\n      user_id: \"test-user\"\n    evaluations:\n      - type: \"trajectory_contains_action\"\n        action: \"evm-service.getBalancesForAddress\"\n        description: \"Verify agent checked wallet balance\"\n      \n      - type: \"string_contains\"\n        value: \"2.5 ETH\"\n        description: \"Verify agent reported the correct balance\"\n      \n      - type: \"llm_judge\"\n        prompt: \"Did the agent clearly explain the wallet balance information?\"\n        expected: \"yes\"\n\n  - name: \"Multi-turn conversation\"\n    input: \"Can you help me with both my wallet and roadmap?\"\n    agent_context:\n      conversation_id: \"multi-turn-conversation\"\n      user_id: \"test-user\"\n    evaluations:\n      - type: \"trajectory_contains_action\"\n        action: \"evm-service.getBalancesForAddress\"\n      - type: \"trajectory_contains_action\"\n        action: \"github-service.searchIssues\"\n      - type: \"string_contains\"\n        value: \"ETH\"\n      - type: \"string_contains\"\n        value: \"Dark Mode\"\n      - type: \"llm_judge\"\n        prompt: \"Did the agent address both wallet and roadmap questions comprehensively?\"\n        expected: \"yes\"\n\njudgment:\n  strategy: all_pass\n```\n\n## Testing Strategy\n\n1. **Single Turn**: Test basic agent interaction and response\n2. **Multi-turn**: Test conversation context across steps\n3. **Action Tracking**: Verify agent uses appropriate actions\n4. **Response Quality**: Test LLM judge evaluation of responses\n5. **Performance**: Test response timing and metrics\n6. **Error Handling**: Test agent behavior with invalid inputs\n\n## Dependencies\n\n- Requires plugin system integration (Ticket 1)\n- Builds on advanced mocking system (Ticket 2)\n- Integrates with existing evaluation engine\n- Depends on agent runtime message processing",
      "createdAt": "2025-08-07T02:49:34Z",
      "closedAt": "2025-08-12T04:21:31Z",
      "state": "CLOSED",
      "commentCount": 1
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs6bjrTf",
      "title": "Next",
      "author": "lalalune",
      "number": 5242,
      "body": "Roads? Where we're going, we don't need roads!",
      "repository": "elizaos/eliza",
      "createdAt": "2025-06-22T16:11:08Z",
      "mergedAt": null,
      "additions": 1367486,
      "deletions": 69177
    },
    {
      "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": 717,
      "deletions": 125
    },
    {
      "id": "PR_kwDOMT5cIs6joaWa",
      "title": "fix: correct comma placement when adding entries to registry index.json",
      "author": "yungalgo",
      "number": 5774,
      "body": "## Description\r\n\r\n### Problem\r\nThe `elizaos publish` command incorrectly handled commas when adding new plugin entries to the registry's `index.json` file:\r\n- Did not add a comma to the previously last entry\r\n- Incorrectly added a comma to the new entry when it became the last entry\r\n\r\nThis resulted in invalid JSON:\r\n```json\r\n\"@elizaos/plugin-action-bench\": \"github:elizaos-plugins/plugin-action-bench\"\r\n\"plugin-fal-ai\": \"github:yungalgo/plugin-fal-ai\",\r\n```\r\n\r\n### Solution\r\nModified the insertion logic in `publishToGitHub` function to:\r\n1. Detect if inserting before the closing `}` brace (last entry position)\r\n2. When inserting as last entry:\r\n   - Add comma to the previous entry if it doesn't have one\r\n   - Remove comma from the new entry\r\n3. When inserting in the middle: keep comma on new entry\r\n\r\n### Result\r\nProduces valid JSON:\r\n```json\r\n\"@elizaos/plugin-action-bench\": \"github:elizaos-plugins/plugin-action-bench\",\r\n\"plugin-fal-ai\": \"github:yungalgo/plugin-fal-ai\"\r\n```\r\n\r\n### Changes\r\n- `packages/cli/src/utils/publisher.ts`: Updated comma handling logic in lines 444-470\r\n\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n\n## Summary by CodeRabbit\n\n* **Bug Fixes**\n  * Resolved an issue where the last item added during publishing could produce invalid JSON due to misplaced commas.\n  * Improved handling of comma placement when inserting the final entry in the index to ensure consistently valid JSON.\n  * Prevents intermittent publish failures and parsing errors caused by trailing comma mistakes.\n\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-14T07:58:40Z",
      "mergedAt": "2025-08-18T09:25:22Z",
      "additions": 479,
      "deletions": 4
    },
    {
      "id": "PR_kwDOMT5cIs6jBhZB",
      "title": "feat: add EVM plugin and tools",
      "author": "wtfsayo",
      "number": 5752,
      "body": "This pull request introduces a new EVM (Ethereum Virtual Machine) plugin, integrating wallet and blockchain tooling into the application. It adds a modular service for managing EVM chains and clients, several tools for interacting with wallets and tokens, and updates the main application to initialize and use these tools when a private key is provided. The changes are grouped below by theme.\r\n\r\n**EVM Plugin Implementation**\r\n\r\n* Added the `EVMService` singleton class in `services/index.ts` to manage EVM clients, chain configuration, and wallet initialization, supporting multiple chains and private key management.\r\n* Created tools for wallet and token operations: `getWalletAddress`, `getWalletBalance`, `getTokenBalance`, and `getEVMChains`, each exposing a typed and documented API for agent use. [[1]](diffhunk://#diff-e1cc64e72e760fcd6abb43875bb23467454be701262c5956359b002f7779db31R1-R21) [[2]](diffhunk://#diff-d4a4b475e04d621fe0a29bb3c16ed8bf86ed271be701116ecde2d78a0b8885deR1-R30) [[3]](diffhunk://#diff-e75f9b72cf42c4737b0a53c8e997a259af26c7f13bcf9b38ff36e903371430f3R1-R55) [[4]](diffhunk://#diff-5e0f2d1cf5ea5545068eccb1825093cc7a938c7ba2f542391726376a3a2b22b7R1-R49)\r\n* Exported all tools and the EVM service from the plugin entry point for external consumption.\r\n\r\n**Project Setup and Configuration**\r\n\r\n* Added `package.json` and `tsconfig.json` for the new plugin, specifying dependencies (`viem`, `zod`, etc.), build scripts, and TypeScript settings. [[1]](diffhunk://#diff-d3f83e69e38803d41e055612ff11506ba082953cbeadcae56a3bca418d30c54bR1-R26) [[2]](diffhunk://#diff-3af2426805243a2b3ebf4d3f1a7877df9ef4685384a163bd203f9e3ce6c534a1R1-R17)\r\n\r\n**Main Application Integration**\r\n\r\n* Imported EVM tools and service into the main application (`src/index.ts`).\r\n* On startup, if `WALLET_PRIVATE_KEY` is set, initialized the EVM service and registered the EVM tools for agent use.\r\n* Added example agent prompts to demonstrate EVM wallet address retrieval, chain listing, native balance fetching, and ERC20 token balance querying, with results logged to the console.",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-11T11:09:57Z",
      "mergedAt": "2025-08-11T16:02:10Z",
      "additions": 446,
      "deletions": 1
    },
    {
      "id": "PR_kwDOMT5cIs6jG9KE",
      "title": "feat: Add character type system with JesseXBT character and improve API consistency",
      "author": "wtfsayo",
      "number": 5756,
      "body": "# Character Type System and Jesse Pollak Character Implementation\n\nThis PR introduces a comprehensive character type system using Zod validation and implements a new Jesse Pollak (jesseXBT) character focused on Base ecosystem support.\n\n## Key Changes\n\n### 🏗️ Character Type System (`lib/core/character.ts`)\n- **Complete Zod Schema Validation**: Robust runtime validation for character definitions\n- **TypeScript Type Safety**: Proper types with discriminated unions for complex data structures  \n- **Circular Reference Support**: Handles directory structures in knowledge base items\n- **Comprehensive Coverage**: Validation for all character properties including:\n  - UUID identifiers and usernames\n  - Bio arrays and message examples\n  - Knowledge base items (strings, directories, or path objects)\n  - Settings and secrets with flexible value types\n  - Style guides for different communication contexts\n  - Template systems for consistent responses\n\n### 👤 Jesse Pollak Character (`characters/jessexbt.json`)\n- **Base Ecosystem Expert**: Specialized character for Base Layer 2 development support\n- **Comprehensive Profile**: 126 lines of detailed character configuration\n- **Response Templates**: Pre-defined templates for Base documentation, ecosystem navigation\n- **Message Examples**: Natural conversation flows for Base-related queries\n- **System Integration**: Character system prompt applied to default agent\n\n### 🔧 API Improvements (`src/server.ts`)\n- **Character Loading**: Automatic character validation and loading on server startup\n- **System Prompt Integration**: Character system prompts properly applied to agents\n- **Tool Call Consistency**: Standardized tool argument handling (`toolCall.input` vs mixed approaches)\n- **Response Structure**: Cleaner finish reason handling using `result.finishReason`\n- **Error Handling**: Improved tool result processing and response formatting\n\n### 📦 Module Organization (`lib/core/index.ts`)\n- **Export Integration**: Character module and types properly exported from core\n- **Type Availability**: All character-related types accessible for external use\n\n## Benefits\n\n✅ **Type Safety**: Prevents runtime errors with comprehensive Zod validation  \n✅ **Extensibility**: Easy to add new characters with consistent schema  \n✅ **Specialization**: Jesse character provides expert Base ecosystem guidance  \n✅ **Developer Experience**: Better API consistency and error handling  \n✅ **Maintainability**: Clear separation of character data and validation logic  \n\n## Technical Details\n\n- **Schema Design**: Uses discriminated unions for knowledge base items to handle different data types safely\n- **Circular References**: Properly handles directory structures with `z.lazy()` for recursive schemas\n- **Validation Strategy**: Runtime validation with detailed error messages for debugging\n- **Character Integration**: Seamless loading and application of character data to AI agents\n\n## Files Changed\n- `lib/core/character.ts` (new file, 116 lines)\n- `characters/jessexbt.json` (new file, 126 lines) \n- `src/server.ts` (23 lines modified)\n- `lib/core/index.ts` (1 line added)\n\n**Total**: 258 additions, 8 deletions across 4 files\n\n## Backward Compatibility\n✅ All existing API endpoints remain functional  \n✅ No breaking changes to existing character loading  \n✅ Tool call improvements maintain compatibility  \n\n---\n\nThis PR establishes the foundation for a robust character system while providing immediate value through the specialized Jesse Pollak character for Base ecosystem support.",
      "repository": "elizaos/eliza",
      "createdAt": "2025-08-11T18:40:30Z",
      "mergedAt": "2025-08-11T19:25:47Z",
      "additions": 258,
      "deletions": 8
    }
  ],
  "codeChanges": {
    "additions": 1384,
    "deletions": 365,
    "files": 38,
    "commitCount": 39
  },
  "completedItems": [
    {
      "title": "fix: (project-starter) replace mock.module with spyOn for consistent logger testing",
      "prNumber": 5748,
      "type": "bugfix",
      "body": "## Description\r\n\r\nThis PR fixes failing component tests in the project-starter template by replacing `mock.module` with `spyOn` for logger mocking.\r\n\r\n## Problem\r\n\r\nThe project-starter template had 3 test files using `mock.module('@elizaos/",
      "files": [
        "packages/project-starter/src/__tests__/config.test.ts",
        "packages/project-starter/src/__tests__/error-handling.test.ts",
        "packages/project-starter/src/__tests__/events.test.ts"
      ]
    },
    {
      "title": "feat: Add character type system with JesseXBT character and improve API consistency",
      "prNumber": 5756,
      "type": "feature",
      "body": "# Character Type System and Jesse Pollak Character Implementation\n\nThis PR introduces a comprehensive character type system using Zod validation and implements a new Jesse Pollak (jesseXBT) character focused on Base ecosystem support.\n\n## K",
      "files": [
        "characters/jessexbt.json",
        "lib/core/character.ts",
        "lib/core/index.ts",
        "src/server.ts"
      ]
    },
    {
      "title": "feat: Add OpenAI-compliant tool calls visibility to chat completions",
      "prNumber": 5755,
      "type": "feature",
      "body": "## Summary\n\nThis PR adds support for viewing intermediate tool calls and results in the chat completions API while maintaining full OpenAI API compliance.\n\n## Changes\n\n- **OpenAI API Compliance**: Default responses remain fully compliant wi",
      "files": [
        "src/server.ts"
      ]
    },
    {
      "title": "feat: add Hono server, refactor ElizaOS agent registry",
      "prNumber": 5753,
      "type": "feature",
      "body": "This pull request introduces significant improvements to the agent management system and adds a new HTTP server for interacting with agents via an OpenAI-compatible API. The changes refactor how agents are stored and accessed, update relate",
      "files": [
        "bun.lock",
        "lib/core/elizaos.ts",
        "package.json",
        "src/index.ts",
        "src/server.ts"
      ]
    },
    {
      "title": "feat: add EVM plugin and tools",
      "prNumber": 5752,
      "type": "feature",
      "body": "This pull request introduces a new EVM (Ethereum Virtual Machine) plugin, integrating wallet and blockchain tooling into the application. It adds a modular service for managing EVM chains and clients, several tools for interacting with wall",
      "files": [
        ".env.example",
        "plugins/plugin-evm/bun.lock",
        "plugins/plugin-evm/index.ts",
        "plugins/plugin-evm/package.json",
        "plugins/plugin-evm/services/index.ts",
        "plugins/plugin-evm/tools/getEVMChains.ts",
        "plugins/plugin-evm/tools/getTokenBalance.ts",
        "plugins/plugin-evm/tools/getWalletAddress.ts",
        "plugins/plugin-evm/tools/getWalletBalance.ts",
        "plugins/plugin-evm/tsconfig.json",
        "src/index.ts"
      ]
    },
    {
      "title": "chore(imports): use @/ alias and barrels; add Cursor rule",
      "prNumber": 5751,
      "type": "other",
      "body": "- Converted relative imports to '@/'\n- Prefer barrels (e.g., '@/lib/core', '@/lib/db/schema')\n- Added Cursor rule: .cursor/rules/use-atslash-alias-imports.mdc\n- Verified build with Bun",
      "files": [
        ".cursor/rules/use-atslash-alias-imports.mdc",
        "lib/core/elizaos.ts",
        "lib/db/index.ts"
      ]
    },
    {
      "title": "revert: Use relative paths for imports",
      "prNumber": 5750,
      "type": "other",
      "body": "## Description\nThis PR ensures consistent use of relative paths for imports throughout the project.\n\n## Changes\n- ✅ Reverted import in `src/index.ts` to use relative path `../lib/core`\n- ✅ Removed path aliases configuration from `tsconfig.j",
      "files": [
        "src/index.ts",
        "tsconfig.json"
      ]
    },
    {
      "title": "fix: resolve `elizaos publish` command issues with --test and --npm flags",
      "prNumber": 5763,
      "type": "bugfix",
      "body": "This PR fixes two minor issues with the `elizaos publish` command:\r\n\r\n**1. Fix `elizaos publish --test` failing out of the box**\r\n\r\nWhen running `elizaos publish --test` OOTB, we get an error:\r\n```\r\n[2025-08-13 06:54:20] ERROR: Failed to up",
      "files": [
        "packages/cli/src/commands/publish/index.ts",
        "packages/cli/src/commands/publish/types.ts",
        "packages/cli/src/commands/publish/utils/metadata.ts",
        "packages/cli/src/utils/github.ts"
      ]
    },
    {
      "title": "chore(ci): adjust release workflow and package metadata",
      "prNumber": 5775,
      "type": "other",
      "body": "- Remove 'merge main to develop' step from  to avoid automatic branch merges in release job.\n- Minor metadata sync in various  files and .\n\nBase: develop\nHead: chore/release-workflow-tweaks",
      "files": [
        ".github/workflows/release.yaml",
        "bun.lock",
        "lerna.json",
        "packages/api-client/package.json",
        "packages/cli/package.json",
        "packages/plugin-bootstrap/package.json",
        "packages/plugin-dummy-services/package.json",
        "packages/plugin-sql/package.json",
        "packages/project-starter/src/__tests__/events.test.ts",
        "packages/server/package.json",
        "packages/test-utils/package.json"
      ]
    },
    {
      "title": "fix: bun run clean, bats-assert bad dep and polyfills",
      "prNumber": 5776,
      "type": "bugfix",
      "body": "This pull request updates dependencies in the project to improve compatibility and maintainability. The most important changes are grouped below by theme.\r\n\r\nDependency updates:\r\n\r\n* Upgraded the `vite-plugin-node-polyfills` package from ve",
      "files": [
        "bun.lock",
        "packages/cli/package.json",
        "packages/client/package.json"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "wtfsayo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/82053242?u=98209a1f10456f42d4d2fa71db4d5bf4a672cbc3&v=4",
      "totalScore": 373.45968270042715,
      "prScore": 367.0596827004272,
      "issueScore": 0,
      "reviewScore": 6,
      "commentScore": 0.4,
      "summary": null
    },
    {
      "username": "ChristopherTrimboli",
      "avatarUrl": "https://avatars.githubusercontent.com/u/27584221?u=0d816ce1dcdea8f925aba18bb710153d4a87a719&v=4",
      "totalScore": 109.40473147466538,
      "prScore": 69.70473147466538,
      "issueScore": 0,
      "reviewScore": 39.5,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "yungalgo",
      "avatarUrl": "https://avatars.githubusercontent.com/u/113615973?u=92e0f29f7e2fbb8ce46ed13c51f692ca803de02d&v=4",
      "totalScore": 57.72973866189474,
      "prScore": 56.98973866189474,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.74,
      "summary": null
    },
    {
      "username": "rejected-l",
      "avatarUrl": "https://avatars.githubusercontent.com/u/99460023?u=977f49541583c40f4fc5f6a9f11ca6c6a78b362a&v=4",
      "totalScore": 26.67920303898299,
      "prScore": 26.67920303898299,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "linear",
      "avatarUrl": "https://avatars.githubusercontent.com/in/20150?v=4",
      "totalScore": 24,
      "prScore": 0,
      "issueScore": 24,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "borisudovicic",
      "avatarUrl": "https://avatars.githubusercontent.com/u/31806472?u=27713fbe603baae91ef519990facbacd6c23e93d&v=4",
      "totalScore": 16,
      "prScore": 0,
      "issueScore": 16,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "monilpat",
      "avatarUrl": "https://avatars.githubusercontent.com/u/15067321?v=4",
      "totalScore": 14.438,
      "prScore": 0,
      "issueScore": 14,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": null
    },
    {
      "username": "0xbbjoker",
      "avatarUrl": "https://avatars.githubusercontent.com/u/54844437?u=90fe1762420de6ad493a1c1582f1f70c0d87d8e2&v=4",
      "totalScore": 5.2,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0.2,
      "summary": null
    },
    {
      "username": "HashWarlock",
      "avatarUrl": "https://avatars.githubusercontent.com/u/64296537?u=1d8228a93c06c603e08d438677b3f736d6b1ab22&v=4",
      "totalScore": 5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "github-advanced-security",
      "avatarUrl": "https://avatars.githubusercontent.com/in/57789?v=4",
      "totalScore": 4.5,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 4.5,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "ashuxshimra",
      "avatarUrl": "https://avatars.githubusercontent.com/u/105487009?u=23e8a61486d8a47efc1734ae7fdb61ccb191f349&v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "1BDO",
      "avatarUrl": "https://avatars.githubusercontent.com/u/210645034?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    },
    {
      "username": "0xRabbidfly",
      "avatarUrl": "https://avatars.githubusercontent.com/u/93952856?v=4",
      "totalScore": 2,
      "prScore": 0,
      "issueScore": 2,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": null
    }
  ],
  "newPRs": 13,
  "mergedPRs": 10,
  "newIssues": 28,
  "closedIssues": 9,
  "activeContributors": 16
}