From 34bf37e82ef4574e2c9044d84193958d80ec90d4 Mon Sep 17 00:00:00 2001 From: Jesse Turner <57651174+jesseturner21@users.noreply.github.com> Date: Fri, 1 May 2026 10:56:02 -0400 Subject: [PATCH 1/7] docs: remove CrewAI from supported frameworks (#1059) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CrewAI is not implemented as a framework option in the CLI — it does not exist in SDKFrameworkSchema, has no template assets, and is not in the SDK_MODEL_PROVIDER_MATRIX. Remove it from README and docs/frameworks.md to match the actual CLI capabilities. Constraint: Only frameworks in src/schema/constants.ts SDKFrameworkSchema are valid Rejected: Mark CrewAI as "BYO only" | no special BYO treatment exists for it Confidence: high Scope-risk: narrow --- README.md | 1 - docs/frameworks.md | 30 +++++++----------------------- 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index af7769bfe..4abc7a033 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,6 @@ agentcore invoke | ------------------- | ----------------------------- | | Strands Agents | AWS-native, streaming support | | LangChain/LangGraph | Graph-based workflows | -| CrewAI | Multi-agent orchestration | | Google ADK | Gemini models only | | OpenAI Agents | OpenAI models only | diff --git a/docs/frameworks.md b/docs/frameworks.md index ec53a1354..673c3789d 100644 --- a/docs/frameworks.md +++ b/docs/frameworks.md @@ -9,7 +9,6 @@ for existing code. | ----------------------- | ---------------------------------- | | **Strands Agents** | Bedrock, Anthropic, OpenAI, Gemini | | **LangChain_LangGraph** | Bedrock, Anthropic, OpenAI, Gemini | -| **CrewAI** | Bedrock, Anthropic, OpenAI, Gemini | | **GoogleADK** | Gemini only | | **OpenAIAgents** | OpenAI only | @@ -62,21 +61,6 @@ Google's Agent Development Kit. agentcore create --framework GoogleADK --model-provider Gemini ``` -### CrewAI - -Multi-agent orchestration framework. - -**Best for:** - -- Multi-agent workflows with role-based collaboration -- Projects requiring agent coordination and task delegation - -**Model providers:** Bedrock, Anthropic, OpenAI, Gemini - -```bash -agentcore create --framework CrewAI --model-provider Bedrock -``` - ### OpenAIAgents OpenAI's native agent framework. @@ -167,12 +151,12 @@ agentcore add agent \ ## Framework Comparison -| Feature | Strands | LangChain | CrewAI | GoogleADK | OpenAIAgents | -| ---------------------- | ------- | --------- | -------- | --------- | ------------ | -| Multi-provider support | Yes | Yes | Yes | No | No | -| AWS Bedrock native | Yes | No | No | No | No | -| Tool ecosystem | Growing | Extensive | Moderate | Moderate | Moderate | -| Memory integration | Native | Via libs | Via libs | Via libs | Via libs | +| Feature | Strands | LangChain | GoogleADK | OpenAIAgents | +| ---------------------- | ------- | --------- | --------- | ------------ | +| Multi-provider support | Yes | Yes | No | No | +| AWS Bedrock native | Yes | No | No | No | +| Tool ecosystem | Growing | Extensive | Moderate | Moderate | +| Memory integration | Native | Via libs | Via libs | Via libs | ## Protocol Compatibility @@ -180,6 +164,6 @@ Not all frameworks support all protocol modes. MCP protocol is a standalone tool | Protocol | Supported Frameworks | | -------- | ------------------------------------------------------------- | -| **HTTP** | Strands, LangChain_LangGraph, CrewAI, GoogleADK, OpenAIAgents | +| **HTTP** | Strands, LangChain_LangGraph, GoogleADK, OpenAIAgents | | **MCP** | None (standalone tool server) | | **A2A** | Strands, GoogleADK, LangChain_LangGraph | From de149d29b42a5db95bc36a849b83b4509c1b9d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minoru=20Onda=EF=BC=88=E3=81=BF=E3=81=AE=E3=82=8B=E3=82=93?= =?UTF-8?q?=EF=BC=89?= <74597894+minorun365@users.noreply.github.com> Date: Sat, 2 May 2026 02:34:01 +0900 Subject: [PATCH 2/7] chore(deps): override glob to ^13 to silence install deprecation warning (#1008) Co-authored-by: minorun365 --- package-lock.json | 274 ++++------------------------------------------ package.json | 6 +- 2 files changed, 27 insertions(+), 253 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94ca256ca..72f94b4a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3907,75 +3907,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -4633,16 +4564,6 @@ "url": "https://github.com/sponsors/Boshen" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@pkgr/core": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", @@ -8598,12 +8519,6 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/editions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", @@ -9851,22 +9766,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -10052,21 +9951,17 @@ } }, "node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11312,21 +11207,6 @@ "node": ">= 0.4" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/javascript-natural-sort": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", @@ -13527,12 +13407,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13677,26 +13551,29 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, "node_modules/path-to-regexp": { "version": "8.4.0", @@ -14797,6 +14674,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -15056,51 +14934,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -15253,28 +15086,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -17014,45 +16825,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", diff --git a/package.json b/package.json index d8f91a656..893742e0f 100644 --- a/package.json +++ b/package.json @@ -150,12 +150,14 @@ "overridesComments": { "minimatch": "GHSA-7r86-cg39-jmmj, GHSA-23c5-xmqv-rm74: minimatch 10.0.0-10.2.2 has ReDoS vulnerabilities. Multiple transitive deps (eslint, typescript-eslint, eslint-plugin-import, eslint-plugin-react, prettier-plugin-sort-imports, aws-cdk-lib) pin older versions. Remove this override once upstream packages update their minimatch dependency to >=10.2.3.", "fast-xml-parser": "GHSA-8gc5-j5rx-235r, GHSA-jp2q-39xq-3w4g: fast-xml-parser <=5.5.6 has entity expansion bypass (CVE-2026-33036, CVE-2026-33349). Transitive via @aws-sdk/xml-builder. Remove once @aws-sdk updates to fast-xml-parser >=5.5.7.", - "@aws-sdk/xml-builder": "aws/aws-sdk-js-v3#7867: @aws-sdk/xml-builder <3.972.14 does not configure maxTotalExpansions on fast-xml-parser, causing 'Entity expansion limit exceeded' on large CloudFormation responses. Remove once @aws-sdk/client-* deps are bumped past 3.972.14." + "@aws-sdk/xml-builder": "aws/aws-sdk-js-v3#7867: @aws-sdk/xml-builder <3.972.14 does not configure maxTotalExpansions on fast-xml-parser, causing 'Entity expansion limit exceeded' on large CloudFormation responses. Remove once @aws-sdk/client-* deps are bumped past 3.972.14.", + "glob": "glob <12 is deprecated and emits npm install warnings (https://github.com/isaacs/node-glob). Pulled in transitively via archiver-utils@5.0.2 (latest), which still pins glob@^10.0.0. archiver-utils only uses glob.sync(pattern, options), which remains compatible in glob@13. Remove this override once archiver-utils updates its glob dependency." }, "overrides": { "minimatch": "10.2.4", "fast-xml-parser": "5.5.7", - "@aws-sdk/xml-builder": "3.972.15" + "@aws-sdk/xml-builder": "3.972.15", + "glob": "^13.0.0" }, "engines": { "node": ">=20" From 1abc59862591d70fcdb972665cb42b67b44d7707 Mon Sep 17 00:00:00 2001 From: Hweinstock <42325418+Hweinstock@users.noreply.github.com> Date: Fri, 1 May 2026 15:03:38 -0400 Subject: [PATCH 3/7] fix: address formatting failure in docs (#1080) --- docs/frameworks.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/frameworks.md b/docs/frameworks.md index 673c3789d..7d2b8658a 100644 --- a/docs/frameworks.md +++ b/docs/frameworks.md @@ -162,8 +162,8 @@ agentcore add agent \ Not all frameworks support all protocol modes. MCP protocol is a standalone tool server with no framework. -| Protocol | Supported Frameworks | -| -------- | ------------------------------------------------------------- | +| Protocol | Supported Frameworks | +| -------- | ----------------------------------------------------- | | **HTTP** | Strands, LangChain_LangGraph, GoogleADK, OpenAIAgents | -| **MCP** | None (standalone tool server) | -| **A2A** | Strands, GoogleADK, LangChain_LangGraph | +| **MCP** | None (standalone tool server) | +| **A2A** | Strands, GoogleADK, LangChain_LangGraph | From 5e1cd95be5b2b4e369965186618de30f38ade9ab Mon Sep 17 00:00:00 2001 From: Trirmadura J Ariyawansa Date: Fri, 1 May 2026 17:08:33 -0400 Subject: [PATCH 4/7] test: remove http-gateway-targets e2e test (#1090) HTTP gateways are created through the AB test flow (add ab-test --mode target-based), not via agentcore add gateway. The standalone test was using MCP gateway commands against placeholder URLs that caused AWS::BedrockAgentCore::GatewayTarget CREATE_FAILED errors. HTTP gateway coverage is provided by ab-test-target-based.test.ts. Co-authored-by: Claude Sonnet 4.6 (1M context) --- e2e-tests/http-gateway-targets.test.ts | 228 ------------------------- 1 file changed, 228 deletions(-) delete mode 100644 e2e-tests/http-gateway-targets.test.ts diff --git a/e2e-tests/http-gateway-targets.test.ts b/e2e-tests/http-gateway-targets.test.ts deleted file mode 100644 index c2bef22fb..000000000 --- a/e2e-tests/http-gateway-targets.test.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { parseJsonOutput, retry } from '../src/test-utils/index.js'; -import { - baseCanRun, - hasAws, - installCdkTarball, - runAgentCoreCLI, - teardownE2EProject, - writeAwsTargets, -} from './e2e-helper.js'; -import { randomUUID } from 'node:crypto'; -import { mkdir, rm } from 'node:fs/promises'; -import { tmpdir } from 'node:os'; -import { join } from 'node:path'; -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; - -const canRun = baseCanRun && hasAws; - -describe.sequential('e2e: HTTP gateway with targets lifecycle', () => { - let testDir: string; - let projectPath: string; - const agentName = `E2eGwTgt${String(Date.now()).slice(-8)}`; - const gatewayName = 'e2e-target-gw'; - - beforeAll(async () => { - if (!canRun) return; - - testDir = join(tmpdir(), `agentcore-e2e-gw-targets-${randomUUID()}`); - await mkdir(testDir, { recursive: true }); - - const result = await runAgentCoreCLI( - [ - 'create', - '--name', - agentName, - '--language', - 'Python', - '--framework', - 'Strands', - '--model-provider', - 'Bedrock', - '--memory', - 'none', - '--json', - ], - testDir - ); - expect(result.exitCode, `Create failed: ${result.stderr}`).toBe(0); - projectPath = (parseJsonOutput(result.stdout) as { projectPath: string }).projectPath; - - await writeAwsTargets(projectPath); - installCdkTarball(projectPath); - }, 300000); - - afterAll(async () => { - if (projectPath && hasAws) { - await teardownE2EProject(projectPath, agentName, 'Bedrock'); - } - if (testDir) await rm(testDir, { recursive: true, force: true, maxRetries: 3, retryDelay: 1000 }); - }, 600000); - - const run = (args: string[]) => runAgentCoreCLI(args, projectPath); - - it.skipIf(!canRun)( - 'adds runtime endpoints (prod, staging)', - async () => { - let result = await run([ - 'add', - 'runtime-endpoint', - '--runtime', - agentName, - '--endpoint', - 'prod', - '--version', - '1', - '--json', - ]); - expect(result.exitCode, `Add prod endpoint failed: ${result.stdout}`).toBe(0); - - result = await run([ - 'add', - 'runtime-endpoint', - '--runtime', - agentName, - '--endpoint', - 'staging', - '--version', - '1', - '--json', - ]); - expect(result.exitCode, `Add staging endpoint failed: ${result.stdout}`).toBe(0); - }, - 60000 - ); - - it.skipIf(!canRun)( - 'adds HTTP gateway with name', - async () => { - const result = await run(['add', 'gateway', '--name', gatewayName, '--json']); - expect(result.exitCode, `Add gateway failed: ${result.stdout}`).toBe(0); - const json = parseJsonOutput(result.stdout) as { success: boolean }; - expect(json.success).toBe(true); - }, - 60000 - ); - - it.skipIf(!canRun)( - 'adds gateway targets for prod and staging endpoints', - async () => { - let result = await run([ - 'add', - 'gateway-target', - '--name', - `${agentName}-prod`, - '--type', - 'mcp-server', - '--endpoint', - 'https://placeholder-prod.example.com', - '--gateway', - gatewayName, - '--json', - ]); - expect(result.exitCode, `Add prod target failed: ${result.stdout}`).toBe(0); - - result = await run([ - 'add', - 'gateway-target', - '--name', - `${agentName}-staging`, - '--type', - 'mcp-server', - '--endpoint', - 'https://placeholder-staging.example.com', - '--gateway', - gatewayName, - '--json', - ]); - expect(result.exitCode, `Add staging target failed: ${result.stdout}`).toBe(0); - }, - 60000 - ); - - it.skipIf(!canRun)( - 'deploys project with gateway and targets', - async () => { - await retry( - async () => { - const result = await run(['deploy', '--yes', '--json']); - if (result.exitCode !== 0) { - console.log('Deploy stdout:', result.stdout); - console.log('Deploy stderr:', result.stderr); - } - expect(result.exitCode, `Deploy failed (stderr: ${result.stderr})`).toBe(0); - const json = parseJsonOutput(result.stdout) as { success: boolean }; - expect(json.success).toBe(true); - }, - 2, - 30000 - ); - }, - 600000 - ); - - it.skipIf(!canRun)( - 'status shows gateway deployed', - async () => { - await retry( - async () => { - const result = await run(['status', '--json']); - expect(result.exitCode, `Status failed: ${result.stderr}`).toBe(0); - - const json = parseJsonOutput(result.stdout) as { - success: boolean; - resources: { resourceType: string; name: string; deploymentState: string; identifier?: string }[]; - }; - expect(json.success).toBe(true); - - // Agent should be deployed - const agent = json.resources.find(r => r.resourceType === 'agent' && r.name === agentName); - expect(agent, `Agent "${agentName}" should appear in status`).toBeDefined(); - expect(agent!.deploymentState).toBe('deployed'); - }, - 3, - 15000 - ); - }, - 120000 - ); - - it.skipIf(!canRun)( - 'invokes the deployed agent directly', - async () => { - await retry( - async () => { - const result = await run(['invoke', '--prompt', 'Say hello', '--runtime', agentName, '--json']); - expect(result.exitCode, `Invoke failed: ${result.stderr}`).toBe(0); - const json = parseJsonOutput(result.stdout) as { success: boolean }; - expect(json.success).toBe(true); - }, - 3, - 15000 - ); - }, - 180000 - ); - - it.skipIf(!canRun)( - 'removes gateway targets', - async () => { - let result = await run(['remove', 'gateway-target', '--name', `${agentName}-prod`, '--json']); - expect(result.exitCode, `Remove prod target failed: ${result.stderr}`).toBe(0); - - result = await run(['remove', 'gateway-target', '--name', `${agentName}-staging`, '--json']); - expect(result.exitCode, `Remove staging target failed: ${result.stderr}`).toBe(0); - }, - 60000 - ); - - it.skipIf(!canRun)( - 'removes gateway', - async () => { - const result = await run(['remove', 'gateway', '--name', gatewayName, '--json']); - expect(result.exitCode, `Remove gateway failed: ${result.stderr}`).toBe(0); - const json = parseJsonOutput(result.stdout) as { success: boolean }; - expect(json.success).toBe(true); - }, - 60000 - ); -}); From aca510298d997a9581d301a0b3bea569839f5e7d Mon Sep 17 00:00:00 2001 From: Trirmadura J Ariyawansa Date: Fri, 1 May 2026 18:23:20 -0400 Subject: [PATCH 5/7] fix: sync e2e IAM policy and fix run eval flag (#1092) --- docs/policies/iam-policy-user.json | 164 ++++++++++++++++++++++- e2e-tests/config-bundle-eval-rec.test.ts | 2 +- 2 files changed, 164 insertions(+), 2 deletions(-) diff --git a/docs/policies/iam-policy-user.json b/docs/policies/iam-policy-user.json index d2467a134..03bcafee7 100644 --- a/docs/policies/iam-policy-user.json +++ b/docs/policies/iam-policy-user.json @@ -62,6 +62,8 @@ "bedrock-agentcore:GetApiKeyCredentialProvider", "bedrock-agentcore:CreateApiKeyCredentialProvider", "bedrock-agentcore:UpdateApiKeyCredentialProvider", + "bedrock-agentcore:DeleteApiKeyCredentialProvider", + "bedrock-agentcore:ListApiKeyCredentialProviders", "bedrock-agentcore:GetOauth2CredentialProvider", "bedrock-agentcore:CreateOauth2CredentialProvider", "bedrock-agentcore:UpdateOauth2CredentialProvider", @@ -114,7 +116,7 @@ { "Sid": "BedrockModelInvocation", "Effect": "Allow", - "Action": "bedrock:InvokeModel", + "Action": ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"], "Resource": "*" }, { @@ -135,6 +137,166 @@ "s3:GetObject" ], "Resource": "*" + }, + { + "Sid": "AgentCoreResourceManagement", + "Effect": "Allow", + "Action": [ + "bedrock-agentcore:CreateAgentRuntime", + "bedrock-agentcore:UpdateAgentRuntime", + "bedrock-agentcore:DeleteAgentRuntime", + "bedrock-agentcore:ListAgentRuntimes", + "bedrock-agentcore:CreateAgentRuntimeEndpoint", + "bedrock-agentcore:CreateWorkloadIdentity", + "bedrock-agentcore:DeleteWorkloadIdentity", + "bedrock-agentcore:CreateMemory", + "bedrock-agentcore:GetMemory", + "bedrock-agentcore:UpdateMemory", + "bedrock-agentcore:DeleteMemory", + "bedrock-agentcore:ListMemories", + "bedrock-agentcore:CreateEvaluator", + "bedrock-agentcore:DeleteEvaluator", + "bedrock-agentcore:ListOnlineEvaluationConfigs", + "bedrock-agentcore:TagResource", + "bedrock-agentcore:ListTagsForResource", + "bedrock-agentcore:CreateGateway", + "bedrock-agentcore:UpdateGateway", + "bedrock-agentcore:DeleteGateway", + "bedrock-agentcore:GetGateway", + "bedrock-agentcore:ListGateways", + "bedrock-agentcore:CreateGatewayTarget", + "bedrock-agentcore:UpdateGatewayTarget", + "bedrock-agentcore:DeleteGatewayTarget", + "bedrock-agentcore:GetGatewayTarget", + "bedrock-agentcore:SynchronizeGatewayTargets" + ], + "Resource": "*" + }, + { + "Sid": "CloudFormationFull", + "Effect": "Allow", + "Action": "cloudformation:*", + "Resource": "*" + }, + { + "Sid": "SsmParameterLookup", + "Effect": "Allow", + "Action": ["ssm:GetParameters", "ssm:GetParameter"], + "Resource": "*" + }, + { + "Sid": "CloudFormationTemplateVerification", + "Effect": "Allow", + "Action": "cloudformation:GetTemplate", + "Resource": "*" + }, + { + "Sid": "ImportTestIam", + "Effect": "Allow", + "Action": ["iam:GetRole", "iam:CreateRole", "iam:AttachRolePolicy", "iam:PutRolePolicy"], + "Resource": "arn:aws:iam::ACCOUNT_ID:role/bugbash-agentcore-role" + }, + { + "Sid": "ImportTestPassRole", + "Effect": "Allow", + "Action": "iam:PassRole", + "Resource": "arn:aws:iam::ACCOUNT_ID:role/bugbash-agentcore-role", + "Condition": { + "StringEquals": { + "iam:PassedToService": "bedrock-agentcore.amazonaws.com" + } + } + }, + { + "Sid": "ImportTestS3", + "Effect": "Allow", + "Action": ["s3:ListBucket", "s3:CreateBucket", "s3:PutObject"], + "Resource": "*" + }, + { + "Sid": "SecretsManager", + "Effect": "Allow", + "Action": ["secretsmanager:GetSecretValue", "secretsmanager:CreateSecret", "secretsmanager:DeleteSecret"], + "Resource": "*" + }, + { + "Sid": "CustomJwtCognitoSetup", + "Effect": "Allow", + "Action": [ + "cognito-idp:CreateUserPool", + "cognito-idp:CreateUserPoolDomain", + "cognito-idp:CreateResourceServer", + "cognito-idp:CreateUserPoolClient", + "cognito-idp:DeleteResourceServer", + "cognito-idp:DeleteUserPoolDomain", + "cognito-idp:DeleteUserPool" + ], + "Resource": "*" + }, + { + "Sid": "HarnessManagement", + "Effect": "Allow", + "Action": [ + "bedrock-agentcore:CreateHarness", + "bedrock-agentcore:GetHarness", + "bedrock-agentcore:UpdateHarness", + "bedrock-agentcore:DeleteHarness", + "bedrock-agentcore:ListHarnesses", + "bedrock-agentcore:InvokeHarness" + ], + "Resource": "*" + }, + { + "Sid": "HarnessPassRole", + "Effect": "Allow", + "Action": "iam:PassRole", + "Resource": "arn:aws:iam::ACCOUNT_ID:role/*", + "Condition": { + "StringEquals": { + "iam:PassedToService": "bedrock-agentcore.amazonaws.com" + } + } + }, + { + "Sid": "ConfigBundleManagement", + "Effect": "Allow", + "Action": [ + "bedrock-agentcore:CreateConfigurationBundle", + "bedrock-agentcore:UpdateConfigurationBundle", + "bedrock-agentcore:DeleteConfigurationBundle", + "bedrock-agentcore:GetConfigurationBundle", + "bedrock-agentcore:GetConfigurationBundleVersion", + "bedrock-agentcore:ListConfigurationBundles", + "bedrock-agentcore:ListConfigurationBundleVersions" + ], + "Resource": "*" + }, + { + "Sid": "HttpGatewayIamRoleManagement", + "Effect": "Allow", + "Action": [ + "iam:CreateRole", + "iam:DeleteRole", + "iam:GetRole", + "iam:PutRolePolicy", + "iam:DeleteRolePolicy", + "iam:TagRole", + "iam:PassRole" + ], + "Resource": "arn:aws:iam::*:role/AgentCore-*" + }, + { + "Sid": "BatchEvalAndRecommendation", + "Effect": "Allow", + "Action": [ + "bedrock-agentcore:StartBatchEvaluation", + "bedrock-agentcore:GetBatchEvaluation", + "bedrock-agentcore:ListBatchEvaluations", + "bedrock-agentcore:StartRecommendation", + "bedrock-agentcore:GetRecommendation", + "bedrock-agentcore:ListRecommendations" + ], + "Resource": "*" } ] } diff --git a/e2e-tests/config-bundle-eval-rec.test.ts b/e2e-tests/config-bundle-eval-rec.test.ts index 8151ac586..e7792ebc0 100644 --- a/e2e-tests/config-bundle-eval-rec.test.ts +++ b/e2e-tests/config-bundle-eval-rec.test.ts @@ -446,7 +446,7 @@ describe.sequential('e2e: config bundles, batch evaluation, and recommendations' agentName, '--evaluator', 'Builtin.Faithfulness', - '--lookback', + '--days', '1', '--json', ]); From 44ef7baa78700aceb1eca9198c1179231f062554 Mon Sep 17 00:00:00 2001 From: Gitika <53349492+notgitika@users.noreply.github.com> Date: Fri, 1 May 2026 18:41:39 -0400 Subject: [PATCH 6/7] fix: align E2E batch eval and recommendation tests with current API (#1093) --- e2e-tests/config-bundle-eval-rec.test.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/e2e-tests/config-bundle-eval-rec.test.ts b/e2e-tests/config-bundle-eval-rec.test.ts index e7792ebc0..c8aac5dec 100644 --- a/e2e-tests/config-bundle-eval-rec.test.ts +++ b/e2e-tests/config-bundle-eval-rec.test.ts @@ -171,7 +171,14 @@ describe.sequential('e2e: config bundles, batch evaluation, and recommendations' async () => { await retry( async () => { - const result = await run(['invoke', '--prompt', 'Say hello', '--runtime', agentName, '--json']); + const result = await run([ + 'invoke', + '--prompt', + 'What is 3 + 5? Use the add_numbers tool.', + '--runtime', + agentName, + '--json', + ]); expect(result.exitCode, `Invoke failed: ${result.stderr}`).toBe(0); const json = parseJsonOutput(result.stdout) as { success: boolean }; expect(json.success).toBe(true); @@ -368,7 +375,7 @@ describe.sequential('e2e: config bundles, batch evaluation, and recommendations' ); const json = parseJsonOutput(result.stdout) as Record; expect(json).toHaveProperty('success', true); - expect(json).toHaveProperty('batchEvaluateId'); + expect(json).toHaveProperty('batchEvaluationId'); expect(json.status).toBeDefined(); expect(json.status).not.toBe('FAILED'); }, @@ -549,9 +556,7 @@ describe.sequential('e2e: config bundles, batch evaluation, and recommendations' '--runtime', agentName, '--tools', - 'search:Searches the web for information', - '--tools', - 'calculator:Performs mathematical calculations', + 'add_numbers:Adds two numbers together', '--lookback', '1', '--json', From af542083776336213057a658d2a75e5f723e2328 Mon Sep 17 00:00:00 2001 From: Gitika <53349492+notgitika@users.noreply.github.com> Date: Mon, 4 May 2026 14:30:09 -0400 Subject: [PATCH 7/7] fix: use correct resourceType for config bundle in E2E status test (#1094) The status command outputs resourceType as 'config-bundle' (hyphenated) but the test was checking for 'configBundle' (camelCase). --- e2e-tests/config-bundle-eval-rec.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/config-bundle-eval-rec.test.ts b/e2e-tests/config-bundle-eval-rec.test.ts index c8aac5dec..01e3287bf 100644 --- a/e2e-tests/config-bundle-eval-rec.test.ts +++ b/e2e-tests/config-bundle-eval-rec.test.ts @@ -206,7 +206,7 @@ describe.sequential('e2e: config bundles, batch evaluation, and recommendations' }; expect(json.success).toBe(true); - const bundle = json.resources.find(r => r.resourceType === 'configBundle' && r.name === bundleName); + const bundle = json.resources.find(r => r.resourceType === 'config-bundle' && r.name === bundleName); expect(bundle, `Config bundle "${bundleName}" should appear in status`).toBeDefined(); const evaluator = json.resources.find(r => r.resourceType === 'evaluator' && r.name === evalName);