@aws/agentcore 1.0.0-rc.1 → 1.0.0-rc.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/LICENSE +175 -0
  2. package/README.md +93 -985
  3. package/dist/assets/agent-inspector/index.js.asset +1 -1
  4. package/dist/assets/cdk/README.md +42 -19
  5. package/dist/assets/cdk/bin/cdk.ts +22 -173
  6. package/dist/assets/cdk/lib/cdk-stack.ts +18 -80
  7. package/dist/assets/cdk/package.json +3 -10
  8. package/dist/assets/cdk/tsconfig.json +1 -1
  9. package/dist/assets/evaluators/python-lambda/README.md +5 -1
  10. package/dist/assets/templates/a2a-python-strands/pyproject.toml +1 -1
  11. package/dist/assets/templates/agent-python-langchain/README.md +5 -4
  12. package/dist/assets/templates/agent-python-langchain/main.py +7 -11
  13. package/dist/assets/templates/agent-python-strands/README.md +16 -2
  14. package/dist/assets/templates/agent-python-strands/main.py +40 -81
  15. package/dist/assets/templates/agent-python-strands/memory/session.py +1 -5
  16. package/dist/assets/templates/agent-python-strands/model/load.py +4 -4
  17. package/dist/assets/templates/agent-python-strands/parse.py +41 -0
  18. package/dist/assets/templates/agent-typescript-strands/README.md +23 -2
  19. package/dist/assets/templates/agent-typescript-strands/main.ts +4 -13
  20. package/dist/assets/templates/agent-typescript-strands/memory/memory.ts +1 -12
  21. package/dist/assets/templates/agent-typescript-strands/package.json.template +0 -1
  22. package/dist/assets/templates/agui-python-strands/README.md +1 -1
  23. package/dist/assets/templates/agui-python-strands/pyproject.toml +1 -1
  24. package/dist/assets/templates/export-harness-python/model/load.py +3 -3
  25. package/dist/assets/templates/harness/harness.yaml +225 -0
  26. package/dist/main.js +728 -220
  27. package/package.json +13 -6
  28. package/dist/assets/cdk/.prettierrc +0 -8
  29. package/dist/assets/cdk/jest.config.js +0 -9
  30. package/dist/assets/cdk/npmignore.template +0 -6
  31. package/dist/assets/cdk/test/cdk.test.ts +0 -120
  32. package/dist/assets/evaluators/autoevals-lambda/README.md +0 -23
  33. package/dist/assets/evaluators/autoevals-lambda/execution-role-policy.json +0 -15
  34. package/dist/assets/evaluators/autoevals-lambda/lambda_function.py +0 -37
  35. package/dist/assets/evaluators/autoevals-lambda/pyproject.toml +0 -23
  36. package/dist/assets/evaluators/deepeval-lambda/README.md +0 -23
  37. package/dist/assets/evaluators/deepeval-lambda/execution-role-policy.json +0 -15
  38. package/dist/assets/evaluators/deepeval-lambda/lambda_function.py +0 -29
  39. package/dist/assets/evaluators/deepeval-lambda/pyproject.toml +0 -22
  40. package/dist/assets/templates/agent-typescript-strands/mcp_client/client.ts +0 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws/agentcore",
3
- "version": "1.0.0-rc.1",
3
+ "version": "1.0.0-rc.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/aws/agentcore-cli.git"
@@ -16,7 +16,8 @@
16
16
  "node": ">=20.12.0"
17
17
  },
18
18
  "files": [
19
- "dist"
19
+ "dist",
20
+ "!dist/bin"
20
21
  ],
21
22
  "scripts": {
22
23
  "build": "bun scripts/build.ts bundle",
@@ -29,6 +30,7 @@
29
30
  "compile:windows-arm64": "bun scripts/build.ts compile bun-windows-arm64",
30
31
  "start": "bun run src/index.ts",
31
32
  "test": "bun test",
33
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
32
34
  "typecheck": "tsc --noEmit",
33
35
  "lint": "oxlint --fix",
34
36
  "lint:check": "oxlint",
@@ -55,21 +57,25 @@
55
57
  "lint-staged": "^17.0.8",
56
58
  "oxlint": "^1.73.0",
57
59
  "prettier": "^3.8.4",
58
- "secretlint": "^12.2.0"
60
+ "secretlint": "^12.2.0",
61
+ "vitest": "^4.1.0"
59
62
  },
60
63
  "peerDependencies": {
61
64
  "typescript": "^5"
62
65
  },
63
66
  "dependencies": {
64
67
  "@aws-cdk/toolkit-lib": "1.38.2",
68
+ "@aws-sdk/client-application-signals": "^3.1092.0",
65
69
  "@aws-sdk/client-bedrock-agent": "^3.1092.0",
66
- "@aws-sdk/client-bedrock-agentcore": "^3.1092.0",
67
- "@aws-sdk/client-bedrock-agentcore-control": "^3.1102.0",
70
+ "@aws-sdk/client-bedrock-agentcore": "^3.1135.0",
71
+ "@aws-sdk/client-bedrock-agentcore-control": "^3.1129.0",
68
72
  "@aws-sdk/client-cloudformation": "^3.1092.0",
69
73
  "@aws-sdk/client-cloudwatch-logs": "^3.1092.0",
70
74
  "@aws-sdk/client-iam": "^3.1080.0",
71
75
  "@aws-sdk/client-sts": "^3.1092.0",
72
- "@aws/agent-inspector": "0.6.1",
76
+ "@aws-sdk/client-xray": "^3.1092.0",
77
+ "@aws-sdk/util-endpoints": "^3.996.44",
78
+ "@aws/agent-inspector": "0.6.2",
73
79
  "@opentelemetry/api": "^1.9.1",
74
80
  "@opentelemetry/exporter-metrics-otlp-http": "^0.221.0",
75
81
  "@opentelemetry/otlp-transformer": "0.214.0",
@@ -91,6 +97,7 @@
91
97
  "string-width": "^8.2.2",
92
98
  "winston": "^3.19.0",
93
99
  "winston-daily-rotate-file": "^5.0.0",
100
+ "yaml": "^2.8.1",
94
101
  "zod": "^4.4.3"
95
102
  },
96
103
  "overrides": {
@@ -1,8 +0,0 @@
1
- {
2
- "trailingComma": "es5",
3
- "printWidth": 120,
4
- "tabWidth": 2,
5
- "semi": true,
6
- "singleQuote": true,
7
- "arrowParens": "avoid"
8
- }
@@ -1,9 +0,0 @@
1
- module.exports = {
2
- testEnvironment: 'node',
3
- roots: ['<rootDir>/test'],
4
- testMatch: ['**/*.test.ts'],
5
- transform: {
6
- '^.+\\.tsx?$': 'ts-jest',
7
- },
8
- setupFilesAfterEnv: ['aws-cdk-lib/testhelpers/jest-autoclean'],
9
- };
@@ -1,6 +0,0 @@
1
- *.ts
2
- !*.d.ts
3
-
4
- # CDK asset staging directory
5
- .cdk.staging
6
- cdk.out
@@ -1,120 +0,0 @@
1
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
2
- import { tmpdir } from 'node:os';
3
- import { join } from 'node:path';
4
- import * as cdk from 'aws-cdk-lib';
5
- import { Match, Template } from 'aws-cdk-lib/assertions';
6
-
7
- const originalCwd = process.cwd();
8
- const originalInitCwd = process.env.INIT_CWD;
9
- const testRoot = mkdtempSync(join(tmpdir(), 'agentcore-cdk-test-'));
10
- const testConfigDir = join(testRoot, 'agentcore');
11
- let AgentCoreStack: typeof import('../lib/cdk-stack').AgentCoreStack;
12
-
13
- beforeAll(async () => {
14
- process.chdir(testRoot);
15
- process.env.INIT_CWD = testRoot;
16
- mkdirSync(testConfigDir, { recursive: true });
17
- writeFileSync(join(testConfigDir, 'agentcore.json'), '{}');
18
- ({ AgentCoreStack } = await import('../lib/cdk-stack'));
19
- });
20
-
21
- afterAll(() => {
22
- process.chdir(originalCwd);
23
- if (originalInitCwd === undefined) delete process.env.INIT_CWD;
24
- else process.env.INIT_CWD = originalInitCwd;
25
- rmSync(testRoot, { recursive: true, force: true });
26
- });
27
-
28
- test('AgentCoreStack synthesizes with empty spec', () => {
29
- const app = new cdk.App();
30
- const stack = new AgentCoreStack(app, 'TestStack', {
31
- spec: {
32
- name: 'testproject',
33
- version: 1,
34
- managedBy: 'CDK' as const,
35
- runtimes: [],
36
- memories: [],
37
- credentials: [],
38
- evaluators: [],
39
- onlineEvalConfigs: [],
40
- configBundles: [],
41
- policyEngines: [],
42
- payments: [],
43
- agentCoreGateways: [],
44
- mcpRuntimeTools: [],
45
- unassignedTargets: [],
46
- datasets: [],
47
- knowledgeBases: [],
48
- },
49
- });
50
- const template = Template.fromStack(stack);
51
- template.hasOutput('StackNameOutput', {
52
- Description: 'Name of the CloudFormation Stack',
53
- });
54
- });
55
-
56
- test('AgentCoreStack synthesizes manual and Quick Create payment connectors', () => {
57
- const app = new cdk.App();
58
- const stack = new AgentCoreStack(app, 'TestStack', {
59
- spec: {
60
- name: 'testproject',
61
- version: 1,
62
- managedBy: 'CDK' as const,
63
- runtimes: [],
64
- memories: [],
65
- credentials: [
66
- {
67
- authorizerType: 'PaymentCredentialProvider',
68
- name: 'coinbase',
69
- provider: 'CoinbaseCDP',
70
- },
71
- ],
72
- evaluators: [],
73
- onlineEvalConfigs: [],
74
- configBundles: [],
75
- policyEngines: [],
76
- payments: [
77
- {
78
- name: 'Payments',
79
- authorizerType: 'AWS_IAM',
80
- connectors: [
81
- {
82
- name: 'Manual',
83
- provider: 'CoinbaseCDP',
84
- credentialName: 'coinbase',
85
- },
86
- {
87
- name: 'Quick',
88
- provider: 'CoinbaseCDP',
89
- provisionMode: 'QUICK_CREATE',
90
- },
91
- ],
92
- },
93
- ],
94
- agentCoreGateways: [],
95
- mcpRuntimeTools: [],
96
- unassignedTargets: [],
97
- datasets: [],
98
- knowledgeBases: [],
99
- },
100
- credentials: {
101
- coinbase: {
102
- credentialProviderArn:
103
- 'arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/default/paymentcredentialprovider/coinbase',
104
- },
105
- },
106
- });
107
- const template = Template.fromStack(stack);
108
-
109
- template.resourceCountIs('AWS::BedrockAgentCore::PaymentConnector', 2);
110
- template.hasResourceProperties('AWS::BedrockAgentCore::PaymentConnector', {
111
- ConnectorName: 'Manual',
112
- ProvisionMode: Match.absent(),
113
- });
114
- template.hasResourceProperties('AWS::BedrockAgentCore::PaymentConnector', {
115
- ConnectorName: 'Quick',
116
- ConnectorType: 'CoinbaseCDP',
117
- ProvisionMode: 'QUICK_CREATE',
118
- CredentialProviderConfigurations: [],
119
- });
120
- });
@@ -1,23 +0,0 @@
1
- # {{ Name }}
2
-
3
- An AgentCore **code-based evaluator** backed by
4
- [autoevals](https://github.com/braintrustdata/autoevals) — scores each session
5
- with autoevals' `{{ EvaluatorClass }}` scorer.
6
-
7
- ## What's here
8
-
9
- - `lambda_function.py` — wraps `{{ EvaluatorClass }}` in an `AutoEvalsAdapter`
10
- behind the standard `@custom_code_based_evaluator()` handler. With a Bedrock
11
- judge model set, autoevals grades via a LiteLLM client → Bedrock.
12
- - `pyproject.toml` — autoevals + judge dependencies, managed with
13
- [uv](https://docs.astral.sh/uv/).
14
- - `execution-role-policy.json` — grants the Lambda `bedrock:InvokeModel` for the
15
- judge model.
16
-
17
- ## Customize
18
-
19
- - Change the scorer or its arguments in `lambda_function.py`.
20
- - Scorers like `Factuality` / `ClosedQA` / `SQL` need an expected/reference
21
- output — provide it when you invoke the evaluator.
22
-
23
- `agentcore project deploy` packages this directory into the evaluator Lambda.
@@ -1,15 +0,0 @@
1
- {
2
- "Version": "2012-10-17",
3
- "Statement": [
4
- {
5
- "Effect": "Allow",
6
- "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
7
- "Resource": "arn:*:logs:*:*:log-group:/aws/lambda/*"
8
- },
9
- {
10
- "Effect": "Allow",
11
- "Action": ["bedrock:InvokeModel"],
12
- "Resource": "*"
13
- }
14
- ]
15
- }
@@ -1,37 +0,0 @@
1
- {{#if ModelProviderBedrock}}
2
- import os
3
-
4
- # litellm's Bedrock provider reads AWS_REGION_NAME; Lambda only sets AWS_REGION/AWS_DEFAULT_REGION.
5
- os.environ.setdefault("AWS_REGION_NAME", os.environ.get("AWS_REGION", "us-west-2"))
6
-
7
- from autoevals import {{ EvaluatorClass }}, init
8
- from autoevals.litellm import LiteLLMClient
9
-
10
- from bedrock_agentcore.evaluation.custom_code_based_evaluators import (
11
- EvaluatorInput,
12
- EvaluatorOutput,
13
- custom_code_based_evaluator,
14
- )
15
- from bedrock_agentcore.evaluation.custom_code_based_evaluators.third_party.autoevals import AutoEvalsAdapter
16
-
17
- client = LiteLLMClient()
18
- init(client=client, default_model="bedrock/{{ Model }}")
19
-
20
- adapter = AutoEvalsAdapter(metric={{ EvaluatorClass }}(client=client, model="bedrock/{{ Model }}"){{#if EvaluatorParams}}, {{{ EvaluatorParams }}}{{/if}})
21
- {{else}}
22
- from autoevals import {{ EvaluatorClass }}
23
-
24
- from bedrock_agentcore.evaluation.custom_code_based_evaluators import (
25
- EvaluatorInput,
26
- EvaluatorOutput,
27
- custom_code_based_evaluator,
28
- )
29
- from bedrock_agentcore.evaluation.custom_code_based_evaluators.third_party.autoevals import AutoEvalsAdapter
30
-
31
- adapter = AutoEvalsAdapter(metric={{ EvaluatorClass }}({{#if Model}}model="{{ Model }}"{{/if}}){{#if EvaluatorParams}}, {{{ EvaluatorParams }}}{{/if}})
32
- {{/if}}
33
-
34
-
35
- @custom_code_based_evaluator()
36
- def handler(evaluator_input: EvaluatorInput, context) -> EvaluatorOutput:
37
- return adapter(evaluator_input, context)
@@ -1,23 +0,0 @@
1
- [build-system]
2
- requires = ["hatchling"]
3
- build-backend = "hatchling.build"
4
-
5
- [project]
6
- name = "{{ Name }}"
7
- version = "0.1.0"
8
- description = "AgentCore Code-Based Evaluator (Autoevals)"
9
- requires-python = ">=3.10"
10
- dependencies = [
11
- # 1.20.0 is the first release shipping third_party.autoevals.AutoEvalsAdapter;
12
- # the extra owns the autoevals version, so pinning it here only conflicts.
13
- "bedrock-agentcore[autoevals]>=1.20.0,<2.0.0",
14
- {{#if ModelProviderBedrock}}
15
- # autoevals grades via LiteLLMClient -> Bedrock (Converse); litellm replaces the openai judge
16
- "litellm>=1.60,<1.85",
17
- {{else}}
18
- "openai>=1.0.0,<2.0.0",
19
- {{/if}}
20
- ]
21
-
22
- [tool.hatch.build.targets.wheel]
23
- packages = ["."]
@@ -1,23 +0,0 @@
1
- # {{ Name }}
2
-
3
- An AgentCore **code-based evaluator** backed by
4
- [DeepEval](https://docs.confident-ai.com/) — scores each session with DeepEval's
5
- `{{ EvaluatorClass }}` metric, judged by Amazon Bedrock.
6
-
7
- ## What's here
8
-
9
- - `lambda_function.py` — wraps `{{ EvaluatorClass }}` in a `DeepEvalAdapter`
10
- behind the standard `@custom_code_based_evaluator()` handler.
11
- - `pyproject.toml` — DeepEval + Bedrock dependencies, managed with
12
- [uv](https://docs.astral.sh/uv/).
13
- - `execution-role-policy.json` — grants the Lambda `bedrock:InvokeModel` for the
14
- judge model; add more if your metric needs it.
15
-
16
- ## Customize
17
-
18
- - Swap the metric or tune its threshold in `lambda_function.py`.
19
- - Some DeepEval metrics need retrieval context or a reference/expected output —
20
- supply those when you invoke the evaluator, or the metric returns
21
- `MISSING_REQUIRED_FIELD`.
22
-
23
- `agentcore project deploy` packages this directory into the evaluator Lambda.
@@ -1,15 +0,0 @@
1
- {
2
- "Version": "2012-10-17",
3
- "Statement": [
4
- {
5
- "Effect": "Allow",
6
- "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
7
- "Resource": "arn:*:logs:*:*:log-group:/aws/lambda/*"
8
- },
9
- {
10
- "Effect": "Allow",
11
- "Action": ["bedrock:InvokeModel"],
12
- "Resource": "*"
13
- }
14
- ]
15
- }
@@ -1,29 +0,0 @@
1
- import os
2
-
3
- os.environ.setdefault("DEEPEVAL_RESULTS_FOLDER", "/tmp/.deepeval")
4
- os.environ.setdefault("DEEPEVAL_TELEMETRY_OPT_OUT", "YES")
5
- os.chdir("/tmp")
6
-
7
- {{#if ModelProviderBedrock}}
8
- from deepeval.models import AmazonBedrockModel
9
- {{/if}}
10
- from deepeval.metrics import {{ EvaluatorClass }}
11
-
12
- from bedrock_agentcore.evaluation.custom_code_based_evaluators import (
13
- EvaluatorInput,
14
- EvaluatorOutput,
15
- custom_code_based_evaluator,
16
- )
17
- from bedrock_agentcore.evaluation.custom_code_based_evaluators.third_party.deepeval import DeepEvalAdapter
18
-
19
- {{#if ModelProviderBedrock}}
20
- model = AmazonBedrockModel(model="{{ Model }}", region=os.environ.get("AWS_REGION", "us-west-2"))
21
- adapter = DeepEvalAdapter(metric={{ EvaluatorClass }}(model=model{{#if EvaluatorParams}}, {{{ EvaluatorParams }}}{{/if}}))
22
- {{else}}
23
- adapter = DeepEvalAdapter(metric={{ EvaluatorClass }}({{{ EvaluatorParams }}}))
24
- {{/if}}
25
-
26
-
27
- @custom_code_based_evaluator()
28
- def handler(evaluator_input: EvaluatorInput, context) -> EvaluatorOutput:
29
- return adapter(evaluator_input, context)
@@ -1,22 +0,0 @@
1
- [build-system]
2
- requires = ["hatchling"]
3
- build-backend = "hatchling.build"
4
-
5
- [project]
6
- name = "{{ Name }}"
7
- version = "0.1.0"
8
- description = "AgentCore Code-Based Evaluator (DeepEval)"
9
- requires-python = ">=3.10"
10
- dependencies = [
11
- # 1.20.0 is the first release shipping third_party.deepeval.DeepEvalAdapter;
12
- # the extra owns the deepeval version, so pinning it here only conflicts.
13
- "bedrock-agentcore[deepeval]>=1.20.0,<2.0.0",
14
- {{#if ModelProviderBedrock}}
15
- # deepeval's AmazonBedrockModel imports aiobotocore at runtime; only 3.x
16
- # allows the botocore that bedrock-agentcore requires.
17
- "aiobotocore>=3.0.0,<4.0.0",
18
- {{/if}}
19
- ]
20
-
21
- [tool.hatch.build.targets.wheel]
22
- packages = ["."]
@@ -1,11 +0,0 @@
1
- import { McpClient } from '@strands-agents/sdk';
2
- import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
3
-
4
- // ExaAI provides information about code through web searches, crawling and code context searches through their platform. Requires no authentication
5
- const EXAMPLE_MCP_ENDPOINT = 'https://mcp.exa.ai/mcp';
6
-
7
- export function getStreamableHttpMcpClient(): McpClient {
8
- // to use an MCP server that supports bearer authentication, add a headers() callback to requestInit
9
- const transport = new StreamableHTTPClientTransport(new URL(EXAMPLE_MCP_ENDPOINT));
10
- return new McpClient({ transport });
11
- }