@aws/agentcore 1.0.0-preview.9 → 1.0.0-rc.1

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 (389) hide show
  1. package/README.md +978 -145
  2. package/dist/assets/agent-inspector/index.css.asset +1 -0
  3. package/dist/assets/agent-inspector/index.js.asset +289 -0
  4. package/dist/assets/cdk/README.md +3 -0
  5. package/dist/assets/cdk/bin/cdk.ts +109 -59
  6. package/dist/assets/cdk/lib/cdk-stack.ts +30 -19
  7. package/dist/assets/cdk/package.json +9 -9
  8. package/dist/assets/cdk/test/cdk.test.ts +94 -2
  9. package/dist/assets/evaluators/autoevals-lambda/README.md +23 -0
  10. package/dist/assets/evaluators/autoevals-lambda/execution-role-policy.json +15 -0
  11. package/dist/assets/evaluators/autoevals-lambda/lambda_function.py +37 -0
  12. package/dist/assets/evaluators/autoevals-lambda/pyproject.toml +23 -0
  13. package/dist/assets/evaluators/deepeval-lambda/README.md +23 -0
  14. package/dist/assets/evaluators/deepeval-lambda/execution-role-policy.json +15 -0
  15. package/dist/assets/evaluators/deepeval-lambda/lambda_function.py +29 -0
  16. package/dist/assets/evaluators/deepeval-lambda/pyproject.toml +22 -0
  17. package/dist/assets/evaluators/python-lambda/README.md +28 -0
  18. package/dist/assets/evaluators/python-lambda/pyproject.toml +1 -1
  19. package/dist/assets/templates/a2a-python-strands/README.md +31 -0
  20. package/dist/assets/templates/a2a-python-strands/main.py +100 -0
  21. package/dist/assets/templates/a2a-python-strands/memory/session.py +35 -0
  22. package/dist/assets/templates/a2a-python-strands/model/load.py +6 -0
  23. package/dist/assets/templates/a2a-python-strands/pyproject.toml +20 -0
  24. package/dist/assets/templates/agent-python-langchain/README.md +55 -0
  25. package/dist/assets/{python/a2a/googleadk/base → templates/agent-python-langchain}/gitignore.template +1 -1
  26. package/dist/assets/templates/agent-python-langchain/main.py +54 -0
  27. package/dist/assets/templates/agent-python-langchain/model/load.py +9 -0
  28. package/dist/assets/templates/agent-python-langchain/pyproject.toml +21 -0
  29. package/dist/assets/templates/agent-python-minimal/README.md +31 -0
  30. package/dist/assets/templates/agent-python-minimal/main.py +13 -0
  31. package/dist/assets/templates/agent-python-minimal/pyproject.toml +18 -0
  32. package/dist/assets/{container/python/Dockerfile → templates/agent-python-strands/Dockerfile.template} +3 -1
  33. package/dist/assets/templates/agent-python-strands/README.md +46 -0
  34. package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-strands}/gitignore.template +1 -1
  35. package/dist/assets/templates/agent-python-strands/main.py +106 -0
  36. package/dist/assets/templates/agent-python-strands/memory/__init__.py +0 -0
  37. package/dist/assets/templates/agent-python-strands/memory/session.py +35 -0
  38. package/dist/assets/{python/http/strands/base → templates/agent-python-strands}/model/load.py +46 -0
  39. package/dist/assets/templates/agent-python-strands/pyproject.toml +24 -0
  40. package/dist/assets/templates/agent-typescript-strands/README.md +29 -0
  41. package/dist/assets/templates/agent-typescript-strands/gitignore.template +22 -0
  42. package/dist/assets/templates/agent-typescript-strands/main.ts +86 -0
  43. package/dist/assets/templates/agent-typescript-strands/mcp_client/client.ts +11 -0
  44. package/dist/assets/templates/agent-typescript-strands/memory/memory.ts +44 -0
  45. package/dist/assets/templates/agent-typescript-strands/model/load.ts +5 -0
  46. package/dist/assets/templates/agent-typescript-strands/package.json.template +29 -0
  47. package/dist/assets/templates/agent-typescript-strands/tsconfig.json +19 -0
  48. package/dist/assets/templates/agent-typescript-vercel/README.md +22 -0
  49. package/dist/assets/templates/agent-typescript-vercel/gitignore.template +22 -0
  50. package/dist/assets/templates/agent-typescript-vercel/main.ts +35 -0
  51. package/dist/assets/templates/agent-typescript-vercel/package.json.template +24 -0
  52. package/dist/assets/templates/agent-typescript-vercel/tsconfig.json +19 -0
  53. package/dist/assets/templates/agui-python-strands/README.md +39 -0
  54. package/dist/assets/{python/a2a/strands/base → templates/agui-python-strands}/gitignore.template +1 -1
  55. package/dist/assets/{python/agui/strands/base → templates/agui-python-strands}/main.py +11 -14
  56. package/dist/assets/templates/agui-python-strands/memory/__init__.py +0 -0
  57. package/dist/assets/templates/agui-python-strands/memory/session.py +35 -0
  58. package/dist/assets/templates/agui-python-strands/model/load.py +6 -0
  59. package/dist/assets/templates/agui-python-strands/pyproject.toml +22 -0
  60. package/dist/assets/{python/http/strands/base → templates/export-harness-python}/README.md +15 -8
  61. package/dist/assets/templates/export-harness-python/gitignore.template +41 -0
  62. package/dist/assets/templates/export-harness-python/main.py +584 -0
  63. package/dist/assets/templates/export-harness-python/mcp_client/client.py +63 -0
  64. package/dist/assets/templates/export-harness-python/memory/__init__.py +0 -0
  65. package/dist/assets/templates/export-harness-python/memory/session.py +47 -0
  66. package/dist/assets/templates/export-harness-python/model/load.py +249 -0
  67. package/dist/assets/templates/export-harness-python/model/mantle_compat.py +21 -0
  68. package/dist/assets/templates/export-harness-python/pyproject.toml +22 -0
  69. package/dist/assets/templates/export-harness-python/skills/fetcher.py +279 -0
  70. package/dist/assets/templates/mcp-python-fastmcp/README.md +32 -0
  71. package/dist/assets/templates/mcp-python-fastmcp/gitignore.template +41 -0
  72. package/dist/assets/templates/mcp-python-fastmcp/main.py +83 -0
  73. package/dist/assets/{python/mcp/standalone/base → templates/mcp-python-fastmcp}/pyproject.toml +3 -2
  74. package/dist/assets/templates/shared/env.local.template +11 -0
  75. package/dist/assets/templates/shared/gitignore.template +19 -0
  76. package/dist/index.js +4 -27
  77. package/dist/main.js +1190 -0
  78. package/package.json +75 -149
  79. package/LICENSE +0 -175
  80. package/dist/agent-inspector/index.css +0 -1
  81. package/dist/agent-inspector/index.js +0 -279
  82. package/dist/assets/README.md +0 -104
  83. package/dist/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap +0 -5673
  84. package/dist/assets/__tests__/__snapshots__/dockerfile-render.test.ts.snap +0 -77
  85. package/dist/assets/__tests__/assets.snapshot.test.ts +0 -125
  86. package/dist/assets/__tests__/dockerfile-render.test.ts +0 -24
  87. package/dist/assets/agents/AGENTS.md +0 -141
  88. package/dist/assets/harness/invoke.py.template +0 -74
  89. package/dist/assets/mcp/python/README.md +0 -27
  90. package/dist/assets/mcp/python/pyproject.toml +0 -22
  91. package/dist/assets/mcp/python/server.py +0 -117
  92. package/dist/assets/mcp/python-lambda/README.md +0 -22
  93. package/dist/assets/mcp/python-lambda/handler.py +0 -144
  94. package/dist/assets/mcp/python-lambda/pyproject.toml +0 -15
  95. package/dist/assets/python/a2a/googleadk/base/README.md +0 -22
  96. package/dist/assets/python/a2a/googleadk/base/main.py +0 -110
  97. package/dist/assets/python/a2a/googleadk/base/model/load.py +0 -41
  98. package/dist/assets/python/a2a/googleadk/base/pyproject.toml +0 -20
  99. package/dist/assets/python/a2a/langchain_langgraph/base/README.md +0 -22
  100. package/dist/assets/python/a2a/langchain_langgraph/base/main.py +0 -130
  101. package/dist/assets/python/a2a/langchain_langgraph/base/model/load.py +0 -123
  102. package/dist/assets/python/a2a/langchain_langgraph/base/pyproject.toml +0 -25
  103. package/dist/assets/python/a2a/strands/base/README.md +0 -22
  104. package/dist/assets/python/a2a/strands/base/main.py +0 -107
  105. package/dist/assets/python/a2a/strands/base/model/load.py +0 -123
  106. package/dist/assets/python/a2a/strands/base/pyproject.toml +0 -23
  107. package/dist/assets/python/a2a/strands/capabilities/memory/session.py +0 -43
  108. package/dist/assets/python/agui/googleadk/base/README.md +0 -30
  109. package/dist/assets/python/agui/googleadk/base/gitignore.template +0 -41
  110. package/dist/assets/python/agui/googleadk/base/main.py +0 -31
  111. package/dist/assets/python/agui/googleadk/base/model/load.py +0 -41
  112. package/dist/assets/python/agui/googleadk/base/pyproject.toml +0 -24
  113. package/dist/assets/python/agui/langchain_langgraph/base/README.md +0 -22
  114. package/dist/assets/python/agui/langchain_langgraph/base/gitignore.template +0 -41
  115. package/dist/assets/python/agui/langchain_langgraph/base/main.py +0 -74
  116. package/dist/assets/python/agui/langchain_langgraph/base/model/load.py +0 -123
  117. package/dist/assets/python/agui/langchain_langgraph/base/pyproject.toml +0 -30
  118. package/dist/assets/python/agui/strands/base/README.md +0 -22
  119. package/dist/assets/python/agui/strands/base/gitignore.template +0 -41
  120. package/dist/assets/python/agui/strands/base/model/__init__.py +0 -1
  121. package/dist/assets/python/agui/strands/base/model/load.py +0 -123
  122. package/dist/assets/python/agui/strands/base/pyproject.toml +0 -27
  123. package/dist/assets/python/agui/strands/capabilities/memory/__init__.py +0 -1
  124. package/dist/assets/python/agui/strands/capabilities/memory/session.py +0 -43
  125. package/dist/assets/python/http/autogen/base/README.md +0 -39
  126. package/dist/assets/python/http/autogen/base/gitignore.template +0 -41
  127. package/dist/assets/python/http/autogen/base/main.py +0 -112
  128. package/dist/assets/python/http/autogen/base/mcp_client/__init__.py +0 -1
  129. package/dist/assets/python/http/autogen/base/mcp_client/client.py +0 -28
  130. package/dist/assets/python/http/autogen/base/model/__init__.py +0 -1
  131. package/dist/assets/python/http/autogen/base/model/load.py +0 -136
  132. package/dist/assets/python/http/autogen/base/pyproject.toml +0 -34
  133. package/dist/assets/python/http/googleadk/base/README.md +0 -39
  134. package/dist/assets/python/http/googleadk/base/gitignore.template +0 -41
  135. package/dist/assets/python/http/googleadk/base/main.py +0 -160
  136. package/dist/assets/python/http/googleadk/base/mcp_client/__init__.py +0 -1
  137. package/dist/assets/python/http/googleadk/base/mcp_client/client.py +0 -75
  138. package/dist/assets/python/http/googleadk/base/model/__init__.py +0 -1
  139. package/dist/assets/python/http/googleadk/base/model/load.py +0 -41
  140. package/dist/assets/python/http/googleadk/base/pyproject.toml +0 -22
  141. package/dist/assets/python/http/langchain_langgraph/base/README.md +0 -39
  142. package/dist/assets/python/http/langchain_langgraph/base/gitignore.template +0 -41
  143. package/dist/assets/python/http/langchain_langgraph/base/main.py +0 -176
  144. package/dist/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +0 -1
  145. package/dist/assets/python/http/langchain_langgraph/base/mcp_client/client.py +0 -77
  146. package/dist/assets/python/http/langchain_langgraph/base/model/__init__.py +0 -1
  147. package/dist/assets/python/http/langchain_langgraph/base/model/load.py +0 -123
  148. package/dist/assets/python/http/langchain_langgraph/base/pyproject.toml +0 -37
  149. package/dist/assets/python/http/openaiagents/base/README.md +0 -39
  150. package/dist/assets/python/http/openaiagents/base/gitignore.template +0 -41
  151. package/dist/assets/python/http/openaiagents/base/main.py +0 -169
  152. package/dist/assets/python/http/openaiagents/base/mcp_client/__init__.py +0 -1
  153. package/dist/assets/python/http/openaiagents/base/mcp_client/client.py +0 -74
  154. package/dist/assets/python/http/openaiagents/base/model/__init__.py +0 -1
  155. package/dist/assets/python/http/openaiagents/base/model/load.py +0 -37
  156. package/dist/assets/python/http/openaiagents/base/pyproject.toml +0 -21
  157. package/dist/assets/python/http/strands/base/main.py +0 -217
  158. package/dist/assets/python/http/strands/base/mcp_client/__init__.py +0 -1
  159. package/dist/assets/python/http/strands/base/mcp_client/client.py +0 -73
  160. package/dist/assets/python/http/strands/base/model/__init__.py +0 -1
  161. package/dist/assets/python/http/strands/base/pyproject.toml +0 -25
  162. package/dist/assets/python/http/strands/capabilities/memory/__init__.py +0 -1
  163. package/dist/assets/python/http/strands/capabilities/memory/session.py +0 -44
  164. package/dist/assets/python/mcp/standalone/base/README.md +0 -36
  165. package/dist/assets/python/mcp/standalone/base/gitignore.template +0 -41
  166. package/dist/assets/python/mcp/standalone/base/main.py +0 -25
  167. package/dist/cli/index.mjs +0 -1718
  168. package/dist/index.d.ts +0 -9
  169. package/dist/index.d.ts.map +0 -1
  170. package/dist/index.js.map +0 -1
  171. package/dist/lib/constants.d.ts +0 -37
  172. package/dist/lib/constants.d.ts.map +0 -1
  173. package/dist/lib/constants.js +0 -69
  174. package/dist/lib/constants.js.map +0 -1
  175. package/dist/lib/errors/config.d.ts +0 -49
  176. package/dist/lib/errors/config.d.ts.map +0 -1
  177. package/dist/lib/errors/config.js +0 -170
  178. package/dist/lib/errors/config.js.map +0 -1
  179. package/dist/lib/errors/index.d.ts +0 -2
  180. package/dist/lib/errors/index.d.ts.map +0 -1
  181. package/dist/lib/errors/index.js +0 -18
  182. package/dist/lib/errors/index.js.map +0 -1
  183. package/dist/lib/index.d.ts +0 -7
  184. package/dist/lib/index.d.ts.map +0 -1
  185. package/dist/lib/index.js +0 -44
  186. package/dist/lib/index.js.map +0 -1
  187. package/dist/lib/packaging/build-args.d.ts +0 -6
  188. package/dist/lib/packaging/build-args.d.ts.map +0 -1
  189. package/dist/lib/packaging/build-args.js +0 -18
  190. package/dist/lib/packaging/build-args.js.map +0 -1
  191. package/dist/lib/packaging/container.d.ts +0 -10
  192. package/dist/lib/packaging/container.d.ts.map +0 -1
  193. package/dist/lib/packaging/container.js +0 -78
  194. package/dist/lib/packaging/container.js.map +0 -1
  195. package/dist/lib/packaging/errors.d.ts +0 -16
  196. package/dist/lib/packaging/errors.d.ts.map +0 -1
  197. package/dist/lib/packaging/errors.js +0 -36
  198. package/dist/lib/packaging/errors.js.map +0 -1
  199. package/dist/lib/packaging/helpers.d.ts +0 -54
  200. package/dist/lib/packaging/helpers.d.ts.map +0 -1
  201. package/dist/lib/packaging/helpers.js +0 -463
  202. package/dist/lib/packaging/helpers.js.map +0 -1
  203. package/dist/lib/packaging/index.d.ts +0 -40
  204. package/dist/lib/packaging/index.d.ts.map +0 -1
  205. package/dist/lib/packaging/index.js +0 -98
  206. package/dist/lib/packaging/index.js.map +0 -1
  207. package/dist/lib/packaging/node.d.ts +0 -22
  208. package/dist/lib/packaging/node.d.ts.map +0 -1
  209. package/dist/lib/packaging/node.js +0 -109
  210. package/dist/lib/packaging/node.js.map +0 -1
  211. package/dist/lib/packaging/python.d.ts +0 -23
  212. package/dist/lib/packaging/python.d.ts.map +0 -1
  213. package/dist/lib/packaging/python.js +0 -165
  214. package/dist/lib/packaging/python.js.map +0 -1
  215. package/dist/lib/packaging/types/index.d.ts +0 -2
  216. package/dist/lib/packaging/types/index.d.ts.map +0 -1
  217. package/dist/lib/packaging/types/index.js +0 -3
  218. package/dist/lib/packaging/types/index.js.map +0 -1
  219. package/dist/lib/packaging/types/packaging.d.ts +0 -57
  220. package/dist/lib/packaging/types/packaging.d.ts.map +0 -1
  221. package/dist/lib/packaging/types/packaging.js +0 -3
  222. package/dist/lib/packaging/types/packaging.js.map +0 -1
  223. package/dist/lib/packaging/uv.d.ts +0 -7
  224. package/dist/lib/packaging/uv.d.ts.map +0 -1
  225. package/dist/lib/packaging/uv.js +0 -40
  226. package/dist/lib/packaging/uv.js.map +0 -1
  227. package/dist/lib/schemas/io/config-io.d.ts +0 -119
  228. package/dist/lib/schemas/io/config-io.d.ts.map +0 -1
  229. package/dist/lib/schemas/io/config-io.js +0 -323
  230. package/dist/lib/schemas/io/config-io.js.map +0 -1
  231. package/dist/lib/schemas/io/global-config.d.ts +0 -33
  232. package/dist/lib/schemas/io/global-config.d.ts.map +0 -1
  233. package/dist/lib/schemas/io/global-config.js +0 -89
  234. package/dist/lib/schemas/io/global-config.js.map +0 -1
  235. package/dist/lib/schemas/io/index.d.ts +0 -3
  236. package/dist/lib/schemas/io/index.d.ts.map +0 -1
  237. package/dist/lib/schemas/io/index.js +0 -18
  238. package/dist/lib/schemas/io/index.js.map +0 -1
  239. package/dist/lib/schemas/io/path-resolver.d.ts +0 -119
  240. package/dist/lib/schemas/io/path-resolver.d.ts.map +0 -1
  241. package/dist/lib/schemas/io/path-resolver.js +0 -207
  242. package/dist/lib/schemas/io/path-resolver.js.map +0 -1
  243. package/dist/lib/utils/aws-account.d.ts +0 -7
  244. package/dist/lib/utils/aws-account.d.ts.map +0 -1
  245. package/dist/lib/utils/aws-account.js +0 -24
  246. package/dist/lib/utils/aws-account.js.map +0 -1
  247. package/dist/lib/utils/credentials.d.ts +0 -86
  248. package/dist/lib/utils/credentials.d.ts.map +0 -1
  249. package/dist/lib/utils/credentials.js +0 -153
  250. package/dist/lib/utils/credentials.js.map +0 -1
  251. package/dist/lib/utils/env.d.ts +0 -22
  252. package/dist/lib/utils/env.d.ts.map +0 -1
  253. package/dist/lib/utils/env.js +0 -65
  254. package/dist/lib/utils/env.js.map +0 -1
  255. package/dist/lib/utils/index.d.ts +0 -9
  256. package/dist/lib/utils/index.d.ts.map +0 -1
  257. package/dist/lib/utils/index.js +0 -27
  258. package/dist/lib/utils/index.js.map +0 -1
  259. package/dist/lib/utils/json-rpc.d.ts +0 -3
  260. package/dist/lib/utils/json-rpc.d.ts.map +0 -1
  261. package/dist/lib/utils/json-rpc.js +0 -27
  262. package/dist/lib/utils/json-rpc.js.map +0 -1
  263. package/dist/lib/utils/platform.d.ts +0 -63
  264. package/dist/lib/utils/platform.d.ts.map +0 -1
  265. package/dist/lib/utils/platform.js +0 -88
  266. package/dist/lib/utils/platform.js.map +0 -1
  267. package/dist/lib/utils/subprocess.d.ts +0 -29
  268. package/dist/lib/utils/subprocess.d.ts.map +0 -1
  269. package/dist/lib/utils/subprocess.js +0 -116
  270. package/dist/lib/utils/subprocess.js.map +0 -1
  271. package/dist/lib/utils/time-parser.d.ts +0 -11
  272. package/dist/lib/utils/time-parser.d.ts.map +0 -1
  273. package/dist/lib/utils/time-parser.js +0 -47
  274. package/dist/lib/utils/time-parser.js.map +0 -1
  275. package/dist/lib/utils/zod.d.ts +0 -14
  276. package/dist/lib/utils/zod.d.ts.map +0 -1
  277. package/dist/lib/utils/zod.js +0 -32
  278. package/dist/lib/utils/zod.js.map +0 -1
  279. package/dist/schema/constants.d.ts +0 -119
  280. package/dist/schema/constants.d.ts.map +0 -1
  281. package/dist/schema/constants.js +0 -170
  282. package/dist/schema/constants.js.map +0 -1
  283. package/dist/schema/index.d.ts +0 -4
  284. package/dist/schema/index.d.ts.map +0 -1
  285. package/dist/schema/index.js +0 -21
  286. package/dist/schema/index.js.map +0 -1
  287. package/dist/schema/schemas/agent-env.d.ts +0 -186
  288. package/dist/schema/schemas/agent-env.d.ts.map +0 -1
  289. package/dist/schema/schemas/agent-env.js +0 -240
  290. package/dist/schema/schemas/agent-env.js.map +0 -1
  291. package/dist/schema/schemas/agentcore-project.d.ts +0 -838
  292. package/dist/schema/schemas/agentcore-project.d.ts.map +0 -1
  293. package/dist/schema/schemas/agentcore-project.js +0 -335
  294. package/dist/schema/schemas/agentcore-project.js.map +0 -1
  295. package/dist/schema/schemas/auth.d.ts +0 -140
  296. package/dist/schema/schemas/auth.d.ts.map +0 -1
  297. package/dist/schema/schemas/auth.js +0 -114
  298. package/dist/schema/schemas/auth.js.map +0 -1
  299. package/dist/schema/schemas/aws-targets.d.ts +0 -71
  300. package/dist/schema/schemas/aws-targets.d.ts.map +0 -1
  301. package/dist/schema/schemas/aws-targets.js +0 -57
  302. package/dist/schema/schemas/aws-targets.js.map +0 -1
  303. package/dist/schema/schemas/deployed-state.d.ts +0 -725
  304. package/dist/schema/schemas/deployed-state.d.ts.map +0 -1
  305. package/dist/schema/schemas/deployed-state.js +0 -218
  306. package/dist/schema/schemas/deployed-state.js.map +0 -1
  307. package/dist/schema/schemas/index.d.ts +0 -9
  308. package/dist/schema/schemas/index.d.ts.map +0 -1
  309. package/dist/schema/schemas/index.js +0 -26
  310. package/dist/schema/schemas/index.js.map +0 -1
  311. package/dist/schema/schemas/mcp-defs.d.ts +0 -52
  312. package/dist/schema/schemas/mcp-defs.d.ts.map +0 -1
  313. package/dist/schema/schemas/mcp-defs.js +0 -50
  314. package/dist/schema/schemas/mcp-defs.js.map +0 -1
  315. package/dist/schema/schemas/mcp.d.ts +0 -820
  316. package/dist/schema/schemas/mcp.d.ts.map +0 -1
  317. package/dist/schema/schemas/mcp.js +0 -564
  318. package/dist/schema/schemas/mcp.js.map +0 -1
  319. package/dist/schema/schemas/primitives/ab-test.d.ts +0 -141
  320. package/dist/schema/schemas/primitives/ab-test.d.ts.map +0 -1
  321. package/dist/schema/schemas/primitives/ab-test.js +0 -97
  322. package/dist/schema/schemas/primitives/ab-test.js.map +0 -1
  323. package/dist/schema/schemas/primitives/config-bundle.d.ts +0 -31
  324. package/dist/schema/schemas/primitives/config-bundle.d.ts.map +0 -1
  325. package/dist/schema/schemas/primitives/config-bundle.js +0 -38
  326. package/dist/schema/schemas/primitives/config-bundle.js.map +0 -1
  327. package/dist/schema/schemas/primitives/evaluator.d.ts +0 -102
  328. package/dist/schema/schemas/primitives/evaluator.d.ts.map +0 -1
  329. package/dist/schema/schemas/primitives/evaluator.js +0 -84
  330. package/dist/schema/schemas/primitives/evaluator.js.map +0 -1
  331. package/dist/schema/schemas/primitives/harness.d.ts +0 -363
  332. package/dist/schema/schemas/primitives/harness.d.ts.map +0 -1
  333. package/dist/schema/schemas/primitives/harness.js +0 -261
  334. package/dist/schema/schemas/primitives/harness.js.map +0 -1
  335. package/dist/schema/schemas/primitives/http-gateway.d.ts +0 -21
  336. package/dist/schema/schemas/primitives/http-gateway.d.ts.map +0 -1
  337. package/dist/schema/schemas/primitives/http-gateway.js +0 -34
  338. package/dist/schema/schemas/primitives/http-gateway.js.map +0 -1
  339. package/dist/schema/schemas/primitives/index.d.ts +0 -15
  340. package/dist/schema/schemas/primitives/index.d.ts.map +0 -1
  341. package/dist/schema/schemas/primitives/index.js +0 -61
  342. package/dist/schema/schemas/primitives/index.js.map +0 -1
  343. package/dist/schema/schemas/primitives/memory.d.ts +0 -51
  344. package/dist/schema/schemas/primitives/memory.d.ts.map +0 -1
  345. package/dist/schema/schemas/primitives/memory.js +0 -73
  346. package/dist/schema/schemas/primitives/memory.js.map +0 -1
  347. package/dist/schema/schemas/primitives/online-eval-config.d.ts +0 -14
  348. package/dist/schema/schemas/primitives/online-eval-config.d.ts.map +0 -1
  349. package/dist/schema/schemas/primitives/online-eval-config.js +0 -30
  350. package/dist/schema/schemas/primitives/online-eval-config.js.map +0 -1
  351. package/dist/schema/schemas/primitives/policy.d.ts +0 -49
  352. package/dist/schema/schemas/primitives/policy.d.ts.map +0 -1
  353. package/dist/schema/schemas/primitives/policy.js +0 -62
  354. package/dist/schema/schemas/primitives/policy.js.map +0 -1
  355. package/dist/schema/schemas/primitives/tags.d.ts +0 -6
  356. package/dist/schema/schemas/primitives/tags.d.ts.map +0 -1
  357. package/dist/schema/schemas/primitives/tags.js +0 -27
  358. package/dist/schema/schemas/primitives/tags.js.map +0 -1
  359. package/dist/schema/schemas/zod-util.d.ts +0 -10
  360. package/dist/schema/schemas/zod-util.d.ts.map +0 -1
  361. package/dist/schema/schemas/zod-util.js +0 -23
  362. package/dist/schema/schemas/zod-util.js.map +0 -1
  363. package/dist/schema/types/index.d.ts +0 -2
  364. package/dist/schema/types/index.d.ts.map +0 -1
  365. package/dist/schema/types/index.js +0 -18
  366. package/dist/schema/types/index.js.map +0 -1
  367. package/dist/schema/types/path.d.ts +0 -27
  368. package/dist/schema/types/path.d.ts.map +0 -1
  369. package/dist/schema/types/path.js +0 -13
  370. package/dist/schema/types/path.js.map +0 -1
  371. package/scripts/bump-version.ts +0 -393
  372. package/scripts/bundle.mjs +0 -219
  373. package/scripts/check-old-cli.lib.mjs +0 -102
  374. package/scripts/check-old-cli.mjs +0 -10
  375. package/scripts/copy-assets.mjs +0 -64
  376. package/scripts/generate-schema.mjs +0 -40
  377. package/scripts/run-e2e-local.sh +0 -112
  378. package/scripts/start-tui-harness.sh +0 -90
  379. /package/dist/{agent-inspector/favicon.svg → assets/agent-inspector/favicon.svg.asset} +0 -0
  380. /package/dist/{agent-inspector/index.html → assets/agent-inspector/index.html.asset} +0 -0
  381. /package/dist/assets/{python/http/strands/base → templates/a2a-python-strands}/gitignore.template +0 -0
  382. /package/dist/assets/{typescript/.gitkeep → templates/a2a-python-strands/memory/__init__.py} +0 -0
  383. /package/dist/assets/{python/a2a/googleadk/base → templates/a2a-python-strands}/model/__init__.py +0 -0
  384. /package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-langchain}/model/__init__.py +0 -0
  385. /package/dist/assets/{container/python → templates/agent-python-strands}/dockerignore.template +0 -0
  386. /package/dist/assets/{python/a2a/strands/base → templates/agent-python-strands}/model/__init__.py +0 -0
  387. /package/dist/assets/{python/a2a/strands/capabilities/memory → templates/agui-python-strands/model}/__init__.py +0 -0
  388. /package/dist/assets/{python/agui/googleadk/base/model → templates/export-harness-python/mcp_client}/__init__.py +0 -0
  389. /package/dist/assets/{python/agui/langchain_langgraph/base → templates/export-harness-python}/model/__init__.py +0 -0
@@ -0,0 +1,28 @@
1
+ # {{ Name }}
2
+
3
+ An AgentCore **code-based evaluator** — a Lambda that scores an agent session
4
+ with your own logic.
5
+
6
+ ## What's here
7
+
8
+ - `lambda_function.py` — the evaluator. The `@custom_code_based_evaluator()`
9
+ handler receives an `EvaluatorInput` (the session / trace / tool-call to
10
+ grade) and returns an `EvaluatorOutput` (`value` + `label`, or an error). It
11
+ ships as a stub that returns `Pass` for everything — replace the `TODO` with
12
+ your scoring logic.
13
+ - `pyproject.toml` — Python dependencies, managed with
14
+ [uv](https://docs.astral.sh/uv/).
15
+ - `execution-role-policy.json` — extra IAM the evaluator Lambda gets at runtime.
16
+ Add statements here for anything your logic calls (DynamoDB, S3, …).
17
+
18
+ ## Write your evaluator
19
+
20
+ ```python
21
+ @custom_code_based_evaluator()
22
+ def handler(input: EvaluatorInput, context) -> EvaluatorOutput:
23
+ # inspect input.session_spans / input.target_trace_id / input.target_span_id
24
+ return EvaluatorOutput(value=1.0, label="Pass", explanation="…")
25
+ ```
26
+
27
+ Then `agentcore project deploy` packages this directory into the evaluator
28
+ Lambda and registers the evaluator.
@@ -8,7 +8,7 @@ version = "0.1.0"
8
8
  description = "AgentCore Code-Based Evaluator"
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
11
- "bedrock-agentcore>=1.6.0",
11
+ "bedrock-agentcore>=1.6.0,<2.0.0",
12
12
  ]
13
13
 
14
14
  [tool.hatch.build.targets.wheel]
@@ -0,0 +1,31 @@
1
+ # {{ name }}
2
+
3
+ An A2A (Agent-to-Agent) agent deployed on Amazon Bedrock AgentCore using the Strands SDK.
4
+
5
+ ## Overview
6
+
7
+ This agent speaks the A2A protocol. Other agents discover it via its agent card at
8
+ `/.well-known/agent-card.json` and invoke it with JSON-RPC (`message/send`, `message/stream`)
9
+ at the server root, matching the AgentCore Runtime A2A service contract.
10
+
11
+ ## Adding Tools
12
+
13
+ Define tools with the `@tool` decorator in `main.py` and add them to the `tools` list:
14
+
15
+ ```python
16
+ @tool
17
+ def my_tool(param: str) -> str:
18
+ """Description of what the tool does."""
19
+ return f"Result: {param}"
20
+ ```
21
+
22
+ ## Developing locally
23
+
24
+ `agentcore project dev` starts the agent locally on `0.0.0.0:9000`. Fetch its agent card at
25
+ `http://127.0.0.1:9000/.well-known/agent-card.json` and send it messages by posting A2A
26
+ JSON-RPC to `http://127.0.0.1:9000/`.
27
+
28
+ ## Deployment
29
+
30
+ `agentcore project deploy` deploys the agent into Amazon Bedrock AgentCore. Invoke it with the
31
+ AWS CLI (`bedrock-agentcore invoke-agent-runtime`) using an A2A JSON-RPC payload.
@@ -0,0 +1,100 @@
1
+ from strands import Agent, tool
2
+ from strands.multiagent.a2a.executor import StrandsA2AExecutor
3
+ from bedrock_agentcore.runtime import serve_a2a
4
+ from model.load import load_model
5
+ from memory.session import get_memory_session_manager
6
+ {{#if needsOs}}
7
+ import os
8
+ {{/if}}
9
+
10
+
11
+ @tool
12
+ def add_numbers(a: int, b: int) -> int:
13
+ """Return the sum of two numbers."""
14
+ return a + b
15
+
16
+
17
+ tools = [add_numbers]
18
+
19
+ {{#if needsOs}}
20
+ _MOUNT_PATHS = [
21
+ {{#if sessionStorageMountPath}}"{{sessionStorageMountPath}}",{{/if}}
22
+ {{#each efsMounts}}"{{mountPath}}",{{/each}}
23
+ {{#each s3Mounts}}"{{mountPath}}",{{/each}}
24
+ ]
25
+
26
+ def _safe_resolve(path: str) -> str:
27
+ resolved = os.path.realpath(path)
28
+ if not any(resolved == os.path.realpath(m) or resolved.startswith(os.path.realpath(m) + os.sep) for m in _MOUNT_PATHS):
29
+ raise ValueError(f"Path '{path}' is not within any configured mount ({', '.join(_MOUNT_PATHS)})")
30
+ return resolved
31
+
32
+ @tool
33
+ def file_read(path: str) -> str:
34
+ """Read a file from a mounted filesystem. Use the absolute path (e.g. /mnt/tools/data.txt)."""
35
+ try:
36
+ full_path = _safe_resolve(path)
37
+ with open(full_path) as f:
38
+ return f.read()
39
+ except ValueError as e:
40
+ return str(e)
41
+ except OSError as e:
42
+ return f"Error reading '{path}': {e.strerror}"
43
+
44
+ @tool
45
+ def file_write(path: str, content: str) -> str:
46
+ """Write a file to a mounted filesystem. Use the absolute path (e.g. /mnt/tools/data.txt)."""
47
+ try:
48
+ full_path = _safe_resolve(path)
49
+ parent = os.path.dirname(full_path)
50
+ if parent:
51
+ os.makedirs(parent, exist_ok=True)
52
+ with open(full_path, "w") as f:
53
+ f.write(content)
54
+ return f"Written to {path}"
55
+ except ValueError as e:
56
+ return str(e)
57
+ except OSError as e:
58
+ return f"Error writing '{path}': {e.strerror}"
59
+
60
+ @tool
61
+ def list_files(path: str) -> str:
62
+ """List files in a mounted filesystem directory. Use the absolute path (e.g. /mnt/tools)."""
63
+ try:
64
+ full_path = _safe_resolve(path)
65
+ entries = os.listdir(full_path)
66
+ return "\n".join(entries) if entries else "(empty directory)"
67
+ except ValueError as e:
68
+ return str(e)
69
+ except OSError as e:
70
+ return f"Error listing '{path}': {e.strerror}"
71
+
72
+ tools.extend([file_read, file_write, list_files])
73
+ {{/if}}
74
+
75
+ SYSTEM_PROMPT = """
76
+ You are a helpful assistant. Use tools when appropriate.
77
+ {{#if needsOs}}
78
+ You have access to the following mounted filesystems. Use file_read, file_write, and list_files with full absolute paths:
79
+ {{#if sessionStorageMountPath}}- {{sessionStorageMountPath}}: ephemeral session storage (lost when session ends)
80
+ {{/if}}{{#each efsMounts}}- {{mountPath}}: EFS persistent storage (persists across sessions and agent restarts)
81
+ {{/each}}{{#each s3Mounts}}- {{mountPath}}: S3 Files persistent storage (durable, backed by S3)
82
+ {{/each}}{{/if}}
83
+ """
84
+
85
+ # serve_a2a serves one agent instance, so it is bound to a fixed session and
86
+ # actor; get_memory_session_manager returns None (in-process history only) until
87
+ # the deployed MEMORY_ID env var is set by the CDK.
88
+ agent = Agent(
89
+ name="{{ name }}",
90
+ model=load_model(),
91
+ session_manager=get_memory_session_manager("default-session", "default-user"),
92
+ system_prompt=SYSTEM_PROMPT,
93
+ tools=tools,
94
+ )
95
+
96
+ # serve_a2a binds 0.0.0.0:9000 in the container (the AgentCore A2A service
97
+ # contract) and publishes the agent card at /.well-known/agent-card.json. The
98
+ # card is derived by introspecting the executor's agent.
99
+ if __name__ == "__main__":
100
+ serve_a2a(StrandsA2AExecutor(agent))
@@ -0,0 +1,35 @@
1
+ import os
2
+ import uuid
3
+ from typing import Optional
4
+
5
+ from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig
6
+ from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
7
+
8
+ MEMORY_ID = os.getenv("{{memoryEnvVarName}}")
9
+ REGION = os.getenv("AWS_REGION")
10
+
11
+
12
+ def get_memory_session_manager(
13
+ session_id: Optional[str], actor_id: str
14
+ ) -> Optional[AgentCoreMemorySessionManager]:
15
+ if not MEMORY_ID:
16
+ return None
17
+
18
+ session_id = session_id or uuid.uuid4().hex
19
+
20
+ retrieval_config = {
21
+ f"/users/{actor_id}/facts": RetrievalConfig(top_k=3, relevance_score=0.5),
22
+ f"/users/{actor_id}/preferences": RetrievalConfig(top_k=3, relevance_score=0.5),
23
+ f"/episodes/{actor_id}/{session_id}": RetrievalConfig(top_k=5, relevance_score=0.5),
24
+ f"/summaries/{actor_id}": RetrievalConfig(top_k=3, relevance_score=0.5),
25
+ }
26
+
27
+ return AgentCoreMemorySessionManager(
28
+ AgentCoreMemoryConfig(
29
+ memory_id=MEMORY_ID,
30
+ session_id=session_id,
31
+ actor_id=actor_id,
32
+ retrieval_config=retrieval_config,
33
+ ),
34
+ REGION,
35
+ )
@@ -0,0 +1,6 @@
1
+ from strands.models.bedrock import BedrockModel
2
+
3
+
4
+ def load_model() -> BedrockModel:
5
+ """Get Bedrock model client using IAM credentials."""
6
+ return BedrockModel(model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0")
@@ -0,0 +1,20 @@
1
+ [build-system]
2
+ requires = ["hatchling ~= 1.27.0"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "{{ name }}"
7
+ version = "0.1.0"
8
+ description = "AgentCore A2A Agent using Strands SDK"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "a2a-sdk[all] ~= 0.3.0",
13
+ "aws-opentelemetry-distro ~= 0.17.0",
14
+ "bedrock-agentcore[a2a] ~= 1.9.1",
15
+ "botocore[crt] ~= 1.43.0",
16
+ "strands-agents ~= 1.15.0",
17
+ ]
18
+
19
+ [tool.hatch.build.targets.wheel]
20
+ packages = ["."]
@@ -0,0 +1,55 @@
1
+ # agent-python-langchain
2
+
3
+ A LangChain agent on AgentCore Runtime, calling Claude through Amazon Bedrock.
4
+ The agent is built with `create_agent`, keeps conversation history per Runtime
5
+ session, and streams its response.
6
+
7
+ ## What's here
8
+
9
+ - `main.py`: the agent. A `BedrockAgentCoreApp` wraps an async entrypoint
10
+ that reads `prompt` from the payload, runs the agent, and streams each model
11
+ chunk back as a JSON event of content blocks. An `InMemorySaver` checkpointer
12
+ keyed on the Runtime session id carries history between turns.
13
+ - `model/load.py`: creates the Bedrock chat model with `init_chat_model`.
14
+ - `pyproject.toml`: Python dependencies, managed with
15
+ [uv](https://docs.astral.sh/uv/). `agentcore project create` has already run
16
+ `uv sync` for you (unless you passed `--skip-install`), so `.venv/` is ready.
17
+
18
+ ## Develop
19
+
20
+ Run the agent locally from the project root:
21
+
22
+ ```bash
23
+ agentcore project dev
24
+ agentcore project invoke runtime --local --payload '{"prompt":"What is 2 plus 3?"}'
25
+ ```
26
+
27
+ Environment variables for local development go in `agentcore/.env.local`
28
+ (gitignored).
29
+
30
+ ## Deploy
31
+
32
+ ```bash
33
+ agentcore project deploy
34
+ agentcore project invoke runtime --payload '{"prompt":"Hello!"}'
35
+ ```
36
+
37
+ Traces are collected automatically: AgentCore Runtime starts the agent under
38
+ `opentelemetry-instrument`, which picks up `opentelemetry-instrumentation-langchain`
39
+ from the dependencies.
40
+
41
+ ## Extending
42
+
43
+ Everything hangs off the `create_agent` call in `main.py`.
44
+
45
+ - **Tools.** Add a function decorated with `@tool` and append it to `tools`.
46
+ - **Middleware.** Hook the agent loop with `langchain.agents.middleware`, for
47
+ example a `@before_model` function passed as `middleware=[...]`.
48
+ - **Durable memory.** Replace `InMemorySaver()` with `AgentCoreMemorySaver`
49
+ from `langgraph-checkpoint-aws` and add `actor_id` next to `thread_id` in the
50
+ `configurable` config to persist history in AgentCore Memory.
51
+ - **Structured output.** Pass a Pydantic model as `response_format=` and read
52
+ `structured_response` from the final state.
53
+
54
+ See the [LangChain agents documentation](https://docs.langchain.com/oss/python/langchain/agents)
55
+ for the full `create_agent` surface.
@@ -38,4 +38,4 @@ env/
38
38
 
39
39
  # OS
40
40
  .DS_Store
41
- Thumbs.db
41
+ Thumbs.db
@@ -0,0 +1,54 @@
1
+ from langchain.agents import create_agent
2
+ from langchain.tools import tool
3
+ from langchain_core.messages import AIMessageChunk
4
+ from langgraph.checkpoint.memory import InMemorySaver
5
+ from bedrock_agentcore.runtime import BedrockAgentCoreApp
6
+ from model.load import load_model
7
+
8
+ app = BedrockAgentCoreApp()
9
+
10
+ SYSTEM_PROMPT = "You are a helpful assistant. Use tools when appropriate."
11
+
12
+
13
+ @tool
14
+ def add_numbers(a: int, b: int) -> int:
15
+ """Return the sum of two numbers"""
16
+ return a + b
17
+
18
+
19
+ tools = [add_numbers]
20
+
21
+ agent = create_agent(
22
+ model=load_model(),
23
+ tools=tools,
24
+ system_prompt=SYSTEM_PROMPT,
25
+ checkpointer=InMemorySaver(),
26
+ )
27
+
28
+
29
+ @app.entrypoint
30
+ async def invoke(payload, context):
31
+ prompt = payload.get("prompt") if isinstance(payload, dict) else None
32
+ if not isinstance(prompt, str) or not prompt:
33
+ yield {"error": "payload must be a JSON object with a non-empty string 'prompt'"}
34
+ return
35
+
36
+ session_id = context.session_id or "default-session"
37
+ config = {"configurable": {"thread_id": session_id}}
38
+
39
+ async for event in agent.astream(
40
+ {"messages": [{"role": "user", "content": prompt}]},
41
+ config,
42
+ stream_mode="messages",
43
+ version="v2",
44
+ ):
45
+ message, metadata = event["data"]
46
+ if not isinstance(message, AIMessageChunk):
47
+ continue
48
+ blocks = message.content_blocks
49
+ if blocks:
50
+ yield {"node": metadata["langgraph_node"], "content": blocks}
51
+
52
+
53
+ if __name__ == "__main__":
54
+ app.run()
@@ -0,0 +1,9 @@
1
+ from langchain.chat_models import init_chat_model
2
+ from langchain_core.language_models import BaseChatModel
3
+
4
+ MODEL_ID = "global.anthropic.claude-sonnet-4-5-20250929-v1:0"
5
+
6
+
7
+ def load_model() -> BaseChatModel:
8
+ """Get a Bedrock chat model using IAM credentials."""
9
+ return init_chat_model(MODEL_ID, model_provider="bedrock_converse")
@@ -0,0 +1,21 @@
1
+ [build-system]
2
+ requires = ["hatchling ~= 1.27.0"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "{{ name }}"
7
+ version = "0.1.0"
8
+ description = "AgentCore Runtime Application using LangChain"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "aws-opentelemetry-distro ~= 0.19.0",
13
+ "bedrock-agentcore ~= 1.22.0",
14
+ "langchain ~= 1.4.0",
15
+ "langchain-aws ~= 1.7.5",
16
+ "langgraph ~= 1.2.11",
17
+ "opentelemetry-instrumentation-langchain ~= 0.62.3",
18
+ ]
19
+
20
+ [tool.hatch.build.targets.wheel]
21
+ packages = ["."]
@@ -0,0 +1,31 @@
1
+ # agent-python-minimal
2
+
3
+ A minimal AgentCore Runtime HTTP agent with no agent framework. Its
4
+ `@app.entrypoint` returns a fixed `Hello, world!` message for every
5
+ invocation — a starting point you own and grow into a real agent.
6
+
7
+ ## What's here
8
+
9
+ - `main.py` — the agent. A `BedrockAgentCoreApp` wraps the entrypoint that
10
+ receives each invocation payload and returns the response.
11
+ - `pyproject.toml` — Python dependencies, managed with
12
+ [uv](https://docs.astral.sh/uv/). `agentcore project create` has already run
13
+ `uv sync` for you (unless you passed `--skip-install`), so `.venv/` is ready.
14
+
15
+ ## Develop
16
+
17
+ Run the agent locally from the project root:
18
+
19
+ ```bash
20
+ agentcore project dev
21
+ ```
22
+
23
+ Environment variables for local development go in `agentcore/.env.local`
24
+ (gitignored).
25
+
26
+ ## Deploy
27
+
28
+ ```bash
29
+ agentcore project deploy
30
+ agentcore project invoke runtime --payload '{"prompt":"Hello!"}'
31
+ ```
@@ -0,0 +1,13 @@
1
+ from bedrock_agentcore.runtime import BedrockAgentCoreApp
2
+
3
+ app = BedrockAgentCoreApp()
4
+
5
+
6
+ @app.entrypoint
7
+ def invoke(payload, context):
8
+ """Add agent logic here"""
9
+ return {"message": "Hello, world!"}
10
+
11
+
12
+ if __name__ == "__main__":
13
+ app.run()
@@ -0,0 +1,18 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "agent-python-minimal"
7
+ version = "0.1.0"
8
+ description = "Minimal AgentCore Runtime HTTP agent"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "aws-opentelemetry-distro ~= 0.18.0",
13
+ "bedrock-agentcore ~= 1.9.1",
14
+ "botocore[crt] ~= 1.43.0",
15
+ ]
16
+
17
+ [tool.hatch.build.targets.wheel]
18
+ packages = ["."]
@@ -1,4 +1,6 @@
1
- FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim
1
+ FROM public.ecr.aws/docker/library/python:3.12-slim-trixie
2
+
3
+ RUN pip install --no-cache-dir uv
2
4
 
3
5
  ARG UV_DEFAULT_INDEX
4
6
  ARG UV_INDEX
@@ -0,0 +1,46 @@
1
+ This is a project generated by the AgentCore CLI!
2
+
3
+ # Layout
4
+
5
+ The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
6
+ `agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
7
+ commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.
8
+
9
+ ## Agent Root
10
+
11
+ The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
12
+ file defines a Starlette ASGI app with the Strands Agent SDK running within.
13
+
14
+ `model/load.py` instantiates the chosen model provider.
15
+
16
+ ## Input Validation
17
+
18
+ Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
19
+ caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
20
+ invoking the agent.
21
+
22
+ ## Environment Variables
23
+
24
+ | Variable | Required | Description |
25
+ | --- | --- | --- |
26
+ {{#if identityProviders.[0]}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
27
+ {{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |
28
+
29
+ # Developing locally
30
+
31
+ If installation was successful, a virtual environment is already created with dependencies installed.
32
+
33
+ Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
34
+ Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.
35
+
36
+ `agentcore project dev` will start a local server on 0.0.0.0:8080.
37
+
38
+ # Deployment
39
+
40
+ After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41
+
42
+ Invoke the deployed Runtime with its native payload:
43
+
44
+ ```bash
45
+ agentcore project invoke runtime --payload '{"prompt":"Hello!"}'
46
+ ```
@@ -38,4 +38,4 @@ env/
38
38
 
39
39
  # OS
40
40
  .DS_Store
41
- Thumbs.db
41
+ Thumbs.db
@@ -0,0 +1,106 @@
1
+ from typing import Any
2
+
3
+ from strands import Agent, tool
4
+ from strands.agent.conversation_manager.null_conversation_manager import NullConversationManager
5
+ from bedrock_agentcore.runtime import BedrockAgentCoreApp
6
+ from model.load import load_model
7
+ from memory.session import get_memory_session_manager
8
+
9
+ app = BedrockAgentCoreApp()
10
+ log = app.logger
11
+
12
+ DEFAULT_SYSTEM_PROMPT = "You are a helpful assistant. Use tools when appropriate."
13
+
14
+ # Define a collection of tools used by the model
15
+ tools = []
16
+
17
+
18
+ # Define a simple function tool
19
+ @tool
20
+ def add_numbers(a: int, b: int) -> int:
21
+ """Return the sum of two numbers"""
22
+ return a + b
23
+
24
+
25
+ tools.append(add_numbers)
26
+
27
+
28
+ def _make_conversation_manager():
29
+ return NullConversationManager()
30
+
31
+
32
+ def agent_factory():
33
+ cache = {}
34
+ def get_or_create_agent(session_id, user_id):
35
+ key = f"{session_id}/{user_id}"
36
+ if key not in cache:
37
+ cache[key] = Agent(
38
+ model=load_model(),
39
+ session_manager=get_memory_session_manager(session_id, user_id),
40
+ conversation_manager=_make_conversation_manager(),
41
+ system_prompt=DEFAULT_SYSTEM_PROMPT,
42
+ tools=tools,
43
+ )
44
+ return cache[key]
45
+ return get_or_create_agent
46
+ get_or_create_agent = agent_factory()
47
+
48
+
49
+ def strip_trailing_tool_use(messages: Any) -> list[dict]:
50
+ """Strip toolUse blocks from the tail until the last message has none."""
51
+ if not isinstance(messages, list):
52
+ raise ValueError("messages must be a list")
53
+
54
+ messages = list(messages)
55
+ while messages:
56
+ last = messages[-1]
57
+ if not isinstance(last, dict):
58
+ raise ValueError("each message must be an object")
59
+ original_content = last.get("content", [])
60
+ if not isinstance(original_content, list) or not all(isinstance(block, dict) for block in original_content):
61
+ raise ValueError("each message content value must be a list of content blocks")
62
+
63
+ content = [block for block in original_content if "toolUse" not in block]
64
+ if len(content) == len(original_content):
65
+ break
66
+ if content:
67
+ messages[-1] = {**last, "content": content}
68
+ break
69
+ messages.pop()
70
+
71
+ return messages
72
+
73
+
74
+ def _extract_prompt(payload: dict):
75
+ """Accept a caller-supplied message history or a plain prompt string."""
76
+ if not isinstance(payload, dict):
77
+ raise ValueError("payload must be a JSON object")
78
+ if "messages" in payload:
79
+ return strip_trailing_tool_use(payload["messages"])
80
+ prompt = payload.get("prompt", "")
81
+ if not isinstance(prompt, str):
82
+ raise ValueError("prompt must be a string")
83
+ return prompt
84
+
85
+
86
+ @app.entrypoint
87
+ async def invoke(payload, context):
88
+ log.info("Invoking Agent.....")
89
+
90
+ session_id = getattr(context, "session_id", "default-session")
91
+ user_id = getattr(context, "user_id", "default-user")
92
+ agent = get_or_create_agent(session_id, user_id)
93
+
94
+ prompt = _extract_prompt(payload)
95
+
96
+ async for event in agent.stream_async(prompt):
97
+ if not isinstance(event, dict) or "event" not in event:
98
+ continue
99
+ cbs = event["event"].get("contentBlockStart")
100
+ if cbs is not None and not cbs.get("start"):
101
+ continue
102
+ yield event
103
+
104
+
105
+ if __name__ == "__main__":
106
+ app.run()
@@ -0,0 +1,35 @@
1
+ import os
2
+ import uuid
3
+ from typing import Optional
4
+
5
+ from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig
6
+ from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
7
+
8
+ MEMORY_ID = os.getenv("{{memoryEnvVarName}}")
9
+ REGION = os.getenv("AWS_REGION")
10
+
11
+
12
+ def get_memory_session_manager(
13
+ session_id: Optional[str], actor_id: str
14
+ ) -> Optional[AgentCoreMemorySessionManager]:
15
+ if not MEMORY_ID:
16
+ return None
17
+
18
+ session_id = session_id or uuid.uuid4().hex
19
+
20
+ retrieval_config = {
21
+ f"/users/{actor_id}/facts": RetrievalConfig(top_k=3, relevance_score=0.5),
22
+ f"/users/{actor_id}/preferences": RetrievalConfig(top_k=3, relevance_score=0.5),
23
+ f"/episodes/{actor_id}/{session_id}": RetrievalConfig(top_k=5, relevance_score=0.5),
24
+ f"/summaries/{actor_id}": RetrievalConfig(top_k=3, relevance_score=0.5),
25
+ }
26
+
27
+ return AgentCoreMemorySessionManager(
28
+ AgentCoreMemoryConfig(
29
+ memory_id=MEMORY_ID,
30
+ session_id=session_id,
31
+ actor_id=actor_id,
32
+ retrieval_config=retrieval_config,
33
+ ),
34
+ REGION,
35
+ )