Skip to content

Commit 02f4e8e

Browse files
committed
fix: hide CrewAI from customer-facing framework list until platform support is verified
1 parent 5e0f584 commit 02f4e8e

6 files changed

Lines changed: 18 additions & 26 deletions

File tree

docs/commands.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ agentcore create \
7272
| `--no-agent` | Skip agent creation |
7373
| `--type <type>` | `create` (default) or `import` |
7474
| `--language <lang>` | `Python` (default) |
75-
| `--framework <fw>` | `Strands`, `LangChain_LangGraph`, `CrewAI`, `GoogleADK`, `OpenAIAgents` |
75+
| `--framework <fw>` | `Strands`, `LangChain_LangGraph`, `GoogleADK`, `OpenAIAgents` |
7676
| `--model-provider <p>` | `Bedrock`, `Anthropic`, `OpenAI`, `Gemini` |
7777
| `--build <type>` | `CodeZip` (default) or `Container` (see [Container Builds](container-builds.md)) |
7878
| `--api-key <key>` | API key for non-Bedrock providers |
@@ -199,7 +199,7 @@ agentcore add agent \
199199
| `--type <type>` | `create` (default), `byo`, or `import` |
200200
| `--build <type>` | `CodeZip` (default) or `Container` (see [Container Builds](container-builds.md)) |
201201
| `--language <lang>` | `Python` (create); `Python`, `TypeScript`, `Other` (BYO) |
202-
| `--framework <fw>` | `Strands`, `LangChain_LangGraph`, `CrewAI`, `GoogleADK`, `OpenAIAgents` |
202+
| `--framework <fw>` | `Strands`, `LangChain_LangGraph`, `GoogleADK`, `OpenAIAgents` |
203203
| `--model-provider <p>` | `Bedrock`, `Anthropic`, `OpenAI`, `Gemini` |
204204
| `--api-key <key>` | API key for non-Bedrock providers |
205205
| `--memory <opt>` | `none`, `shortTerm`, `longAndShortTerm` (create and import; see [Memory Shorthand Mapping](memory.md#--memory-shorthand-mapping)) |

src/cli/commands/add/__tests__/validate.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,18 +1141,18 @@ describe('validate', () => {
11411141
expect(result.valid).toBe(true);
11421142
});
11431143

1144-
it('A2A: fails with --framework CrewAI', () => {
1144+
it('A2A: fails with --framework CrewAI (hidden framework)', () => {
11451145
const result = validateAddAgentOptions({
11461146
name: 'A2aAgent',
11471147
type: 'byo',
11481148
language: 'Python',
11491149
protocol: 'A2A',
1150-
framework: 'CrewAI',
1150+
framework: 'CrewAI' as never,
11511151
modelProvider: 'Bedrock',
11521152
codeLocation: '/path/to/code',
11531153
});
11541154
expect(result.valid).toBe(false);
1155-
expect(result.error).toContain('does not support A2A protocol');
1155+
expect(result.error).toContain('Invalid framework');
11561156
});
11571157

11581158
it('A2A: fails with --framework OpenAIAgents', () => {

src/cli/primitives/AgentPrimitive.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,7 @@ export class AgentPrimitive extends BasePrimitive<AddAgentOptions, RemovableReso
202202
.option('--type <type>', 'Agent type: create, byo, or import [non-interactive]', 'create')
203203
.option('--build <type>', 'Build type: CodeZip or Container (default: CodeZip) [non-interactive]')
204204
.option('--language <lang>', 'Language: Python (create), or Python/TypeScript/Other (BYO) [non-interactive]')
205-
.option(
206-
'--framework <fw>',
207-
'Framework: Strands, LangChain_LangGraph, CrewAI, GoogleADK, OpenAIAgents [non-interactive]'
208-
)
205+
.option('--framework <fw>', 'Framework: Strands, LangChain_LangGraph, GoogleADK, OpenAIAgents [non-interactive]')
209206
.option('--model-provider <provider>', 'Model provider: Bedrock, Anthropic, OpenAI, Gemini [non-interactive]')
210207
.option('--api-key <key>', 'API key for non-Bedrock providers [non-interactive]')
211208
.option(

src/cli/templates/index.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { BaseRenderer } from './BaseRenderer';
2-
import { CrewAIRenderer } from './CrewAIRenderer';
2+
// CrewAI hidden — uncomment when re-enabling: import { CrewAIRenderer } from './CrewAIRenderer';
33
import { GoogleADKRenderer } from './GoogleADKRenderer';
44
import { LangGraphRenderer } from './LangGraphRenderer';
55
import { McpRenderer } from './McpRenderer';
@@ -30,8 +30,6 @@ export function createRenderer(config: AgentRenderConfig): BaseRenderer {
3030
switch (config.sdkFramework) {
3131
case 'Strands':
3232
return new StrandsRenderer(config);
33-
case 'CrewAI':
34-
return new CrewAIRenderer(config);
3533
case 'GoogleADK':
3634
return new GoogleADKRenderer(config);
3735
case 'LangChain_LangGraph':

src/schema/__tests__/constants.test.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ describe('matchEnumValue', () => {
3939
});
4040

4141
describe('SDKFrameworkSchema', () => {
42-
it.each(['Strands', 'LangChain_LangGraph', 'CrewAI', 'GoogleADK', 'OpenAIAgents'])('accepts "%s"', framework => {
42+
it.each(['Strands', 'LangChain_LangGraph', 'GoogleADK', 'OpenAIAgents'])('accepts "%s"', framework => {
4343
expect(SDKFrameworkSchema.safeParse(framework).success).toBe(true);
4444
});
4545

4646
it('rejects invalid framework', () => {
4747
expect(SDKFrameworkSchema.safeParse('AutoGen').success).toBe(false);
4848
expect(SDKFrameworkSchema.safeParse('strands').success).toBe(false); // case-sensitive
49+
expect(SDKFrameworkSchema.safeParse('CrewAI').success).toBe(false); // hidden until verified
4950
});
5051
});
5152

@@ -167,20 +168,19 @@ describe('PROTOCOL_FRAMEWORK_MATRIX', () => {
167168
expect(Object.keys(PROTOCOL_FRAMEWORK_MATRIX)).toHaveLength(3);
168169
});
169170

170-
it('HTTP supports all frameworks', () => {
171+
it('HTTP supports all visible frameworks', () => {
171172
expect(PROTOCOL_FRAMEWORK_MATRIX.HTTP).toEqual(
172-
expect.arrayContaining(['Strands', 'LangChain_LangGraph', 'CrewAI', 'GoogleADK', 'OpenAIAgents'])
173+
expect.arrayContaining(['Strands', 'LangChain_LangGraph', 'GoogleADK', 'OpenAIAgents'])
173174
);
174175
});
175176

176177
it('MCP returns empty frameworks array', () => {
177178
expect(PROTOCOL_FRAMEWORK_MATRIX.MCP).toEqual([]);
178179
});
179180

180-
it('A2A includes Strands and GoogleADK but not CrewAI or OpenAIAgents', () => {
181+
it('A2A includes Strands and GoogleADK but not OpenAIAgents', () => {
181182
expect(PROTOCOL_FRAMEWORK_MATRIX.A2A).toContain('Strands');
182183
expect(PROTOCOL_FRAMEWORK_MATRIX.A2A).toContain('GoogleADK');
183-
expect(PROTOCOL_FRAMEWORK_MATRIX.A2A).not.toContain('CrewAI');
184184
expect(PROTOCOL_FRAMEWORK_MATRIX.A2A).not.toContain('OpenAIAgents');
185185
});
186186
});
@@ -189,7 +189,6 @@ describe('getSupportedFrameworksForProtocol', () => {
189189
it('returns all frameworks for HTTP', () => {
190190
const frameworks = getSupportedFrameworksForProtocol('HTTP');
191191
expect(frameworks).toContain('Strands');
192-
expect(frameworks).toContain('CrewAI');
193192
expect(frameworks.length).toBeGreaterThan(0);
194193
});
195194

@@ -213,16 +212,12 @@ describe('isFrameworkSupportedForProtocol', () => {
213212
expect(isFrameworkSupportedForProtocol('A2A', 'Strands')).toBe(true);
214213
});
215214

216-
it('returns false for CrewAI + A2A', () => {
217-
expect(isFrameworkSupportedForProtocol('A2A', 'CrewAI')).toBe(false);
218-
});
219-
220215
it('returns false for OpenAIAgents + A2A', () => {
221216
expect(isFrameworkSupportedForProtocol('A2A', 'OpenAIAgents')).toBe(false);
222217
});
223218

224219
it('returns false for any framework + MCP', () => {
225220
expect(isFrameworkSupportedForProtocol('MCP', 'Strands')).toBe(false);
226-
expect(isFrameworkSupportedForProtocol('MCP', 'CrewAI')).toBe(false);
221+
expect(isFrameworkSupportedForProtocol('MCP', 'OpenAIAgents')).toBe(false);
227222
});
228223
});

src/schema/constants.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import { z } from 'zod';
44
// Feature Constants (shared across all schemas)
55
// ============================================================================
66

7-
export const SDKFrameworkSchema = z.enum(['Strands', 'LangChain_LangGraph', 'CrewAI', 'GoogleADK', 'OpenAIAgents']);
7+
// CrewAI: hidden until platform compatibility is verified (lancedb transitive dep requires newer glibc).
8+
// Templates and renderer are preserved — re-add 'CrewAI' here to re-enable.
9+
export const SDKFrameworkSchema = z.enum(['Strands', 'LangChain_LangGraph', 'GoogleADK', 'OpenAIAgents']);
810
export type SDKFramework = z.infer<typeof SDKFrameworkSchema>;
911

1012
export const TargetLanguageSchema = z.enum(['Python', 'TypeScript', 'Other']);
@@ -45,7 +47,7 @@ export const DEFAULT_MODEL_IDS: Record<ModelProvider, string> = {
4547
export const SDK_MODEL_PROVIDER_MATRIX: Record<SDKFramework, readonly ModelProvider[]> = {
4648
Strands: ['Bedrock', 'Anthropic', 'OpenAI', 'Gemini'] as const,
4749
LangChain_LangGraph: ['Bedrock', 'Anthropic', 'OpenAI', 'Gemini'] as const,
48-
CrewAI: ['Bedrock', 'Anthropic', 'OpenAI', 'Gemini'] as const,
50+
// CrewAI: ['Bedrock', 'Anthropic', 'OpenAI', 'Gemini'] as const, // hidden — re-add when re-enabling CrewAI
4951
GoogleADK: ['Gemini'] as const,
5052
OpenAIAgents: ['OpenAI'] as const,
5153
};
@@ -165,7 +167,7 @@ export type ProtocolMode = z.infer<typeof ProtocolModeSchema>;
165167
* MCP is a standalone tool server with no framework.
166168
*/
167169
export const PROTOCOL_FRAMEWORK_MATRIX: Record<ProtocolMode, readonly SDKFramework[]> = {
168-
HTTP: ['Strands', 'LangChain_LangGraph', 'CrewAI', 'GoogleADK', 'OpenAIAgents'] as const,
170+
HTTP: ['Strands', 'LangChain_LangGraph', 'GoogleADK', 'OpenAIAgents'] as const, // CrewAI hidden — re-add when re-enabling
169171
MCP: [] as const,
170172
A2A: ['Strands', 'GoogleADK', 'LangChain_LangGraph'] as const,
171173
};

0 commit comments

Comments
 (0)