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

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 (386) hide show
  1. package/README.md +1218 -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 +43 -17
  5. package/dist/assets/cdk/bin/cdk.ts +22 -123
  6. package/dist/assets/cdk/lib/cdk-stack.ts +18 -69
  7. package/dist/assets/cdk/package.json +6 -13
  8. package/dist/assets/cdk/tsconfig.json +1 -1
  9. package/dist/assets/evaluators/python-lambda/README.md +32 -0
  10. package/dist/assets/evaluators/python-lambda/pyproject.toml +1 -1
  11. package/dist/assets/templates/a2a-python-strands/README.md +31 -0
  12. package/dist/assets/templates/a2a-python-strands/main.py +100 -0
  13. package/dist/assets/templates/a2a-python-strands/memory/session.py +35 -0
  14. package/dist/assets/templates/a2a-python-strands/model/load.py +6 -0
  15. package/dist/assets/templates/a2a-python-strands/pyproject.toml +20 -0
  16. package/dist/assets/templates/agent-python-langchain/README.md +56 -0
  17. package/dist/assets/{python/a2a/googleadk/base → templates/agent-python-langchain}/gitignore.template +1 -1
  18. package/dist/assets/templates/agent-python-langchain/main.py +50 -0
  19. package/dist/assets/templates/agent-python-langchain/model/load.py +9 -0
  20. package/dist/assets/templates/agent-python-langchain/pyproject.toml +21 -0
  21. package/dist/assets/templates/agent-python-minimal/README.md +31 -0
  22. package/dist/assets/templates/agent-python-minimal/main.py +13 -0
  23. package/dist/assets/templates/agent-python-minimal/pyproject.toml +18 -0
  24. package/dist/assets/{container/python/Dockerfile → templates/agent-python-strands/Dockerfile.template} +3 -1
  25. package/dist/assets/templates/agent-python-strands/README.md +60 -0
  26. package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-strands}/gitignore.template +1 -1
  27. package/dist/assets/templates/agent-python-strands/main.py +65 -0
  28. package/dist/assets/templates/agent-python-strands/memory/__init__.py +0 -0
  29. package/dist/assets/templates/agent-python-strands/memory/session.py +31 -0
  30. package/dist/assets/{python/http/strands/base → templates/agent-python-strands}/model/load.py +49 -3
  31. package/dist/assets/templates/agent-python-strands/parse.py +41 -0
  32. package/dist/assets/templates/agent-python-strands/pyproject.toml +24 -0
  33. package/dist/assets/templates/agent-typescript-strands/README.md +50 -0
  34. package/dist/assets/templates/agent-typescript-strands/gitignore.template +22 -0
  35. package/dist/assets/templates/agent-typescript-strands/main.ts +77 -0
  36. package/dist/assets/templates/agent-typescript-strands/memory/memory.ts +33 -0
  37. package/dist/assets/templates/agent-typescript-strands/model/load.ts +5 -0
  38. package/dist/assets/templates/agent-typescript-strands/package.json.template +28 -0
  39. package/dist/assets/templates/agent-typescript-strands/tsconfig.json +19 -0
  40. package/dist/assets/templates/agent-typescript-vercel/README.md +22 -0
  41. package/dist/assets/templates/agent-typescript-vercel/gitignore.template +22 -0
  42. package/dist/assets/templates/agent-typescript-vercel/main.ts +35 -0
  43. package/dist/assets/templates/agent-typescript-vercel/package.json.template +24 -0
  44. package/dist/assets/templates/agent-typescript-vercel/tsconfig.json +19 -0
  45. package/dist/assets/templates/agui-python-strands/README.md +39 -0
  46. package/dist/assets/{python/a2a/strands/base → templates/agui-python-strands}/gitignore.template +1 -1
  47. package/dist/assets/{python/agui/strands/base → templates/agui-python-strands}/main.py +11 -14
  48. package/dist/assets/templates/agui-python-strands/memory/__init__.py +0 -0
  49. package/dist/assets/templates/agui-python-strands/memory/session.py +35 -0
  50. package/dist/assets/templates/agui-python-strands/model/load.py +6 -0
  51. package/dist/assets/templates/agui-python-strands/pyproject.toml +22 -0
  52. package/dist/assets/{python/http/strands/base → templates/export-harness-python}/README.md +15 -8
  53. package/dist/assets/templates/export-harness-python/gitignore.template +41 -0
  54. package/dist/assets/templates/export-harness-python/main.py +584 -0
  55. package/dist/assets/templates/export-harness-python/mcp_client/client.py +63 -0
  56. package/dist/assets/templates/export-harness-python/memory/__init__.py +0 -0
  57. package/dist/assets/templates/export-harness-python/memory/session.py +47 -0
  58. package/dist/assets/templates/export-harness-python/model/load.py +249 -0
  59. package/dist/assets/templates/export-harness-python/model/mantle_compat.py +21 -0
  60. package/dist/assets/templates/export-harness-python/pyproject.toml +22 -0
  61. package/dist/assets/templates/export-harness-python/skills/fetcher.py +279 -0
  62. package/dist/assets/templates/harness/harness.yaml +157 -0
  63. package/dist/assets/templates/mcp-python-fastmcp/README.md +32 -0
  64. package/dist/assets/templates/mcp-python-fastmcp/gitignore.template +41 -0
  65. package/dist/assets/templates/mcp-python-fastmcp/main.py +83 -0
  66. package/dist/assets/{python/mcp/standalone/base → templates/mcp-python-fastmcp}/pyproject.toml +3 -2
  67. package/dist/assets/templates/shared/env.local.template +11 -0
  68. package/dist/assets/templates/shared/gitignore.template +19 -0
  69. package/dist/index.js +4 -27
  70. package/dist/main.js +1582 -0
  71. package/package.json +76 -148
  72. package/LICENSE +0 -175
  73. package/dist/agent-inspector/index.css +0 -1
  74. package/dist/agent-inspector/index.js +0 -279
  75. package/dist/assets/README.md +0 -104
  76. package/dist/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap +0 -5673
  77. package/dist/assets/__tests__/__snapshots__/dockerfile-render.test.ts.snap +0 -77
  78. package/dist/assets/__tests__/assets.snapshot.test.ts +0 -125
  79. package/dist/assets/__tests__/dockerfile-render.test.ts +0 -24
  80. package/dist/assets/agents/AGENTS.md +0 -141
  81. package/dist/assets/cdk/.prettierrc +0 -8
  82. package/dist/assets/cdk/jest.config.js +0 -9
  83. package/dist/assets/cdk/npmignore.template +0 -6
  84. package/dist/assets/cdk/test/cdk.test.ts +0 -28
  85. package/dist/assets/harness/invoke.py.template +0 -74
  86. package/dist/assets/mcp/python/README.md +0 -27
  87. package/dist/assets/mcp/python/pyproject.toml +0 -22
  88. package/dist/assets/mcp/python/server.py +0 -117
  89. package/dist/assets/mcp/python-lambda/README.md +0 -22
  90. package/dist/assets/mcp/python-lambda/handler.py +0 -144
  91. package/dist/assets/mcp/python-lambda/pyproject.toml +0 -15
  92. package/dist/assets/python/a2a/googleadk/base/README.md +0 -22
  93. package/dist/assets/python/a2a/googleadk/base/main.py +0 -110
  94. package/dist/assets/python/a2a/googleadk/base/model/load.py +0 -41
  95. package/dist/assets/python/a2a/googleadk/base/pyproject.toml +0 -20
  96. package/dist/assets/python/a2a/langchain_langgraph/base/README.md +0 -22
  97. package/dist/assets/python/a2a/langchain_langgraph/base/main.py +0 -130
  98. package/dist/assets/python/a2a/langchain_langgraph/base/model/load.py +0 -123
  99. package/dist/assets/python/a2a/langchain_langgraph/base/pyproject.toml +0 -25
  100. package/dist/assets/python/a2a/strands/base/README.md +0 -22
  101. package/dist/assets/python/a2a/strands/base/main.py +0 -107
  102. package/dist/assets/python/a2a/strands/base/model/load.py +0 -123
  103. package/dist/assets/python/a2a/strands/base/pyproject.toml +0 -23
  104. package/dist/assets/python/a2a/strands/capabilities/memory/session.py +0 -43
  105. package/dist/assets/python/agui/googleadk/base/README.md +0 -30
  106. package/dist/assets/python/agui/googleadk/base/gitignore.template +0 -41
  107. package/dist/assets/python/agui/googleadk/base/main.py +0 -31
  108. package/dist/assets/python/agui/googleadk/base/model/load.py +0 -41
  109. package/dist/assets/python/agui/googleadk/base/pyproject.toml +0 -24
  110. package/dist/assets/python/agui/langchain_langgraph/base/README.md +0 -22
  111. package/dist/assets/python/agui/langchain_langgraph/base/gitignore.template +0 -41
  112. package/dist/assets/python/agui/langchain_langgraph/base/main.py +0 -74
  113. package/dist/assets/python/agui/langchain_langgraph/base/model/load.py +0 -123
  114. package/dist/assets/python/agui/langchain_langgraph/base/pyproject.toml +0 -30
  115. package/dist/assets/python/agui/strands/base/README.md +0 -22
  116. package/dist/assets/python/agui/strands/base/gitignore.template +0 -41
  117. package/dist/assets/python/agui/strands/base/model/__init__.py +0 -1
  118. package/dist/assets/python/agui/strands/base/model/load.py +0 -123
  119. package/dist/assets/python/agui/strands/base/pyproject.toml +0 -27
  120. package/dist/assets/python/agui/strands/capabilities/memory/__init__.py +0 -1
  121. package/dist/assets/python/agui/strands/capabilities/memory/session.py +0 -43
  122. package/dist/assets/python/http/autogen/base/README.md +0 -39
  123. package/dist/assets/python/http/autogen/base/gitignore.template +0 -41
  124. package/dist/assets/python/http/autogen/base/main.py +0 -112
  125. package/dist/assets/python/http/autogen/base/mcp_client/__init__.py +0 -1
  126. package/dist/assets/python/http/autogen/base/mcp_client/client.py +0 -28
  127. package/dist/assets/python/http/autogen/base/model/__init__.py +0 -1
  128. package/dist/assets/python/http/autogen/base/model/load.py +0 -136
  129. package/dist/assets/python/http/autogen/base/pyproject.toml +0 -34
  130. package/dist/assets/python/http/googleadk/base/README.md +0 -39
  131. package/dist/assets/python/http/googleadk/base/gitignore.template +0 -41
  132. package/dist/assets/python/http/googleadk/base/main.py +0 -160
  133. package/dist/assets/python/http/googleadk/base/mcp_client/__init__.py +0 -1
  134. package/dist/assets/python/http/googleadk/base/mcp_client/client.py +0 -75
  135. package/dist/assets/python/http/googleadk/base/model/__init__.py +0 -1
  136. package/dist/assets/python/http/googleadk/base/model/load.py +0 -41
  137. package/dist/assets/python/http/googleadk/base/pyproject.toml +0 -22
  138. package/dist/assets/python/http/langchain_langgraph/base/README.md +0 -39
  139. package/dist/assets/python/http/langchain_langgraph/base/gitignore.template +0 -41
  140. package/dist/assets/python/http/langchain_langgraph/base/main.py +0 -176
  141. package/dist/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +0 -1
  142. package/dist/assets/python/http/langchain_langgraph/base/mcp_client/client.py +0 -77
  143. package/dist/assets/python/http/langchain_langgraph/base/model/__init__.py +0 -1
  144. package/dist/assets/python/http/langchain_langgraph/base/model/load.py +0 -123
  145. package/dist/assets/python/http/langchain_langgraph/base/pyproject.toml +0 -37
  146. package/dist/assets/python/http/openaiagents/base/README.md +0 -39
  147. package/dist/assets/python/http/openaiagents/base/gitignore.template +0 -41
  148. package/dist/assets/python/http/openaiagents/base/main.py +0 -169
  149. package/dist/assets/python/http/openaiagents/base/mcp_client/__init__.py +0 -1
  150. package/dist/assets/python/http/openaiagents/base/mcp_client/client.py +0 -74
  151. package/dist/assets/python/http/openaiagents/base/model/__init__.py +0 -1
  152. package/dist/assets/python/http/openaiagents/base/model/load.py +0 -37
  153. package/dist/assets/python/http/openaiagents/base/pyproject.toml +0 -21
  154. package/dist/assets/python/http/strands/base/main.py +0 -217
  155. package/dist/assets/python/http/strands/base/mcp_client/__init__.py +0 -1
  156. package/dist/assets/python/http/strands/base/mcp_client/client.py +0 -73
  157. package/dist/assets/python/http/strands/base/model/__init__.py +0 -1
  158. package/dist/assets/python/http/strands/base/pyproject.toml +0 -25
  159. package/dist/assets/python/http/strands/capabilities/memory/__init__.py +0 -1
  160. package/dist/assets/python/http/strands/capabilities/memory/session.py +0 -44
  161. package/dist/assets/python/mcp/standalone/base/README.md +0 -36
  162. package/dist/assets/python/mcp/standalone/base/gitignore.template +0 -41
  163. package/dist/assets/python/mcp/standalone/base/main.py +0 -25
  164. package/dist/cli/index.mjs +0 -1718
  165. package/dist/index.d.ts +0 -9
  166. package/dist/index.d.ts.map +0 -1
  167. package/dist/index.js.map +0 -1
  168. package/dist/lib/constants.d.ts +0 -37
  169. package/dist/lib/constants.d.ts.map +0 -1
  170. package/dist/lib/constants.js +0 -69
  171. package/dist/lib/constants.js.map +0 -1
  172. package/dist/lib/errors/config.d.ts +0 -49
  173. package/dist/lib/errors/config.d.ts.map +0 -1
  174. package/dist/lib/errors/config.js +0 -170
  175. package/dist/lib/errors/config.js.map +0 -1
  176. package/dist/lib/errors/index.d.ts +0 -2
  177. package/dist/lib/errors/index.d.ts.map +0 -1
  178. package/dist/lib/errors/index.js +0 -18
  179. package/dist/lib/errors/index.js.map +0 -1
  180. package/dist/lib/index.d.ts +0 -7
  181. package/dist/lib/index.d.ts.map +0 -1
  182. package/dist/lib/index.js +0 -44
  183. package/dist/lib/index.js.map +0 -1
  184. package/dist/lib/packaging/build-args.d.ts +0 -6
  185. package/dist/lib/packaging/build-args.d.ts.map +0 -1
  186. package/dist/lib/packaging/build-args.js +0 -18
  187. package/dist/lib/packaging/build-args.js.map +0 -1
  188. package/dist/lib/packaging/container.d.ts +0 -10
  189. package/dist/lib/packaging/container.d.ts.map +0 -1
  190. package/dist/lib/packaging/container.js +0 -78
  191. package/dist/lib/packaging/container.js.map +0 -1
  192. package/dist/lib/packaging/errors.d.ts +0 -16
  193. package/dist/lib/packaging/errors.d.ts.map +0 -1
  194. package/dist/lib/packaging/errors.js +0 -36
  195. package/dist/lib/packaging/errors.js.map +0 -1
  196. package/dist/lib/packaging/helpers.d.ts +0 -54
  197. package/dist/lib/packaging/helpers.d.ts.map +0 -1
  198. package/dist/lib/packaging/helpers.js +0 -463
  199. package/dist/lib/packaging/helpers.js.map +0 -1
  200. package/dist/lib/packaging/index.d.ts +0 -40
  201. package/dist/lib/packaging/index.d.ts.map +0 -1
  202. package/dist/lib/packaging/index.js +0 -98
  203. package/dist/lib/packaging/index.js.map +0 -1
  204. package/dist/lib/packaging/node.d.ts +0 -22
  205. package/dist/lib/packaging/node.d.ts.map +0 -1
  206. package/dist/lib/packaging/node.js +0 -109
  207. package/dist/lib/packaging/node.js.map +0 -1
  208. package/dist/lib/packaging/python.d.ts +0 -23
  209. package/dist/lib/packaging/python.d.ts.map +0 -1
  210. package/dist/lib/packaging/python.js +0 -165
  211. package/dist/lib/packaging/python.js.map +0 -1
  212. package/dist/lib/packaging/types/index.d.ts +0 -2
  213. package/dist/lib/packaging/types/index.d.ts.map +0 -1
  214. package/dist/lib/packaging/types/index.js +0 -3
  215. package/dist/lib/packaging/types/index.js.map +0 -1
  216. package/dist/lib/packaging/types/packaging.d.ts +0 -57
  217. package/dist/lib/packaging/types/packaging.d.ts.map +0 -1
  218. package/dist/lib/packaging/types/packaging.js +0 -3
  219. package/dist/lib/packaging/types/packaging.js.map +0 -1
  220. package/dist/lib/packaging/uv.d.ts +0 -7
  221. package/dist/lib/packaging/uv.d.ts.map +0 -1
  222. package/dist/lib/packaging/uv.js +0 -40
  223. package/dist/lib/packaging/uv.js.map +0 -1
  224. package/dist/lib/schemas/io/config-io.d.ts +0 -119
  225. package/dist/lib/schemas/io/config-io.d.ts.map +0 -1
  226. package/dist/lib/schemas/io/config-io.js +0 -323
  227. package/dist/lib/schemas/io/config-io.js.map +0 -1
  228. package/dist/lib/schemas/io/global-config.d.ts +0 -33
  229. package/dist/lib/schemas/io/global-config.d.ts.map +0 -1
  230. package/dist/lib/schemas/io/global-config.js +0 -89
  231. package/dist/lib/schemas/io/global-config.js.map +0 -1
  232. package/dist/lib/schemas/io/index.d.ts +0 -3
  233. package/dist/lib/schemas/io/index.d.ts.map +0 -1
  234. package/dist/lib/schemas/io/index.js +0 -18
  235. package/dist/lib/schemas/io/index.js.map +0 -1
  236. package/dist/lib/schemas/io/path-resolver.d.ts +0 -119
  237. package/dist/lib/schemas/io/path-resolver.d.ts.map +0 -1
  238. package/dist/lib/schemas/io/path-resolver.js +0 -207
  239. package/dist/lib/schemas/io/path-resolver.js.map +0 -1
  240. package/dist/lib/utils/aws-account.d.ts +0 -7
  241. package/dist/lib/utils/aws-account.d.ts.map +0 -1
  242. package/dist/lib/utils/aws-account.js +0 -24
  243. package/dist/lib/utils/aws-account.js.map +0 -1
  244. package/dist/lib/utils/credentials.d.ts +0 -86
  245. package/dist/lib/utils/credentials.d.ts.map +0 -1
  246. package/dist/lib/utils/credentials.js +0 -153
  247. package/dist/lib/utils/credentials.js.map +0 -1
  248. package/dist/lib/utils/env.d.ts +0 -22
  249. package/dist/lib/utils/env.d.ts.map +0 -1
  250. package/dist/lib/utils/env.js +0 -65
  251. package/dist/lib/utils/env.js.map +0 -1
  252. package/dist/lib/utils/index.d.ts +0 -9
  253. package/dist/lib/utils/index.d.ts.map +0 -1
  254. package/dist/lib/utils/index.js +0 -27
  255. package/dist/lib/utils/index.js.map +0 -1
  256. package/dist/lib/utils/json-rpc.d.ts +0 -3
  257. package/dist/lib/utils/json-rpc.d.ts.map +0 -1
  258. package/dist/lib/utils/json-rpc.js +0 -27
  259. package/dist/lib/utils/json-rpc.js.map +0 -1
  260. package/dist/lib/utils/platform.d.ts +0 -63
  261. package/dist/lib/utils/platform.d.ts.map +0 -1
  262. package/dist/lib/utils/platform.js +0 -88
  263. package/dist/lib/utils/platform.js.map +0 -1
  264. package/dist/lib/utils/subprocess.d.ts +0 -29
  265. package/dist/lib/utils/subprocess.d.ts.map +0 -1
  266. package/dist/lib/utils/subprocess.js +0 -116
  267. package/dist/lib/utils/subprocess.js.map +0 -1
  268. package/dist/lib/utils/time-parser.d.ts +0 -11
  269. package/dist/lib/utils/time-parser.d.ts.map +0 -1
  270. package/dist/lib/utils/time-parser.js +0 -47
  271. package/dist/lib/utils/time-parser.js.map +0 -1
  272. package/dist/lib/utils/zod.d.ts +0 -14
  273. package/dist/lib/utils/zod.d.ts.map +0 -1
  274. package/dist/lib/utils/zod.js +0 -32
  275. package/dist/lib/utils/zod.js.map +0 -1
  276. package/dist/schema/constants.d.ts +0 -119
  277. package/dist/schema/constants.d.ts.map +0 -1
  278. package/dist/schema/constants.js +0 -170
  279. package/dist/schema/constants.js.map +0 -1
  280. package/dist/schema/index.d.ts +0 -4
  281. package/dist/schema/index.d.ts.map +0 -1
  282. package/dist/schema/index.js +0 -21
  283. package/dist/schema/index.js.map +0 -1
  284. package/dist/schema/schemas/agent-env.d.ts +0 -186
  285. package/dist/schema/schemas/agent-env.d.ts.map +0 -1
  286. package/dist/schema/schemas/agent-env.js +0 -240
  287. package/dist/schema/schemas/agent-env.js.map +0 -1
  288. package/dist/schema/schemas/agentcore-project.d.ts +0 -838
  289. package/dist/schema/schemas/agentcore-project.d.ts.map +0 -1
  290. package/dist/schema/schemas/agentcore-project.js +0 -335
  291. package/dist/schema/schemas/agentcore-project.js.map +0 -1
  292. package/dist/schema/schemas/auth.d.ts +0 -140
  293. package/dist/schema/schemas/auth.d.ts.map +0 -1
  294. package/dist/schema/schemas/auth.js +0 -114
  295. package/dist/schema/schemas/auth.js.map +0 -1
  296. package/dist/schema/schemas/aws-targets.d.ts +0 -71
  297. package/dist/schema/schemas/aws-targets.d.ts.map +0 -1
  298. package/dist/schema/schemas/aws-targets.js +0 -57
  299. package/dist/schema/schemas/aws-targets.js.map +0 -1
  300. package/dist/schema/schemas/deployed-state.d.ts +0 -725
  301. package/dist/schema/schemas/deployed-state.d.ts.map +0 -1
  302. package/dist/schema/schemas/deployed-state.js +0 -218
  303. package/dist/schema/schemas/deployed-state.js.map +0 -1
  304. package/dist/schema/schemas/index.d.ts +0 -9
  305. package/dist/schema/schemas/index.d.ts.map +0 -1
  306. package/dist/schema/schemas/index.js +0 -26
  307. package/dist/schema/schemas/index.js.map +0 -1
  308. package/dist/schema/schemas/mcp-defs.d.ts +0 -52
  309. package/dist/schema/schemas/mcp-defs.d.ts.map +0 -1
  310. package/dist/schema/schemas/mcp-defs.js +0 -50
  311. package/dist/schema/schemas/mcp-defs.js.map +0 -1
  312. package/dist/schema/schemas/mcp.d.ts +0 -820
  313. package/dist/schema/schemas/mcp.d.ts.map +0 -1
  314. package/dist/schema/schemas/mcp.js +0 -564
  315. package/dist/schema/schemas/mcp.js.map +0 -1
  316. package/dist/schema/schemas/primitives/ab-test.d.ts +0 -141
  317. package/dist/schema/schemas/primitives/ab-test.d.ts.map +0 -1
  318. package/dist/schema/schemas/primitives/ab-test.js +0 -97
  319. package/dist/schema/schemas/primitives/ab-test.js.map +0 -1
  320. package/dist/schema/schemas/primitives/config-bundle.d.ts +0 -31
  321. package/dist/schema/schemas/primitives/config-bundle.d.ts.map +0 -1
  322. package/dist/schema/schemas/primitives/config-bundle.js +0 -38
  323. package/dist/schema/schemas/primitives/config-bundle.js.map +0 -1
  324. package/dist/schema/schemas/primitives/evaluator.d.ts +0 -102
  325. package/dist/schema/schemas/primitives/evaluator.d.ts.map +0 -1
  326. package/dist/schema/schemas/primitives/evaluator.js +0 -84
  327. package/dist/schema/schemas/primitives/evaluator.js.map +0 -1
  328. package/dist/schema/schemas/primitives/harness.d.ts +0 -363
  329. package/dist/schema/schemas/primitives/harness.d.ts.map +0 -1
  330. package/dist/schema/schemas/primitives/harness.js +0 -261
  331. package/dist/schema/schemas/primitives/harness.js.map +0 -1
  332. package/dist/schema/schemas/primitives/http-gateway.d.ts +0 -21
  333. package/dist/schema/schemas/primitives/http-gateway.d.ts.map +0 -1
  334. package/dist/schema/schemas/primitives/http-gateway.js +0 -34
  335. package/dist/schema/schemas/primitives/http-gateway.js.map +0 -1
  336. package/dist/schema/schemas/primitives/index.d.ts +0 -15
  337. package/dist/schema/schemas/primitives/index.d.ts.map +0 -1
  338. package/dist/schema/schemas/primitives/index.js +0 -61
  339. package/dist/schema/schemas/primitives/index.js.map +0 -1
  340. package/dist/schema/schemas/primitives/memory.d.ts +0 -51
  341. package/dist/schema/schemas/primitives/memory.d.ts.map +0 -1
  342. package/dist/schema/schemas/primitives/memory.js +0 -73
  343. package/dist/schema/schemas/primitives/memory.js.map +0 -1
  344. package/dist/schema/schemas/primitives/online-eval-config.d.ts +0 -14
  345. package/dist/schema/schemas/primitives/online-eval-config.d.ts.map +0 -1
  346. package/dist/schema/schemas/primitives/online-eval-config.js +0 -30
  347. package/dist/schema/schemas/primitives/online-eval-config.js.map +0 -1
  348. package/dist/schema/schemas/primitives/policy.d.ts +0 -49
  349. package/dist/schema/schemas/primitives/policy.d.ts.map +0 -1
  350. package/dist/schema/schemas/primitives/policy.js +0 -62
  351. package/dist/schema/schemas/primitives/policy.js.map +0 -1
  352. package/dist/schema/schemas/primitives/tags.d.ts +0 -6
  353. package/dist/schema/schemas/primitives/tags.d.ts.map +0 -1
  354. package/dist/schema/schemas/primitives/tags.js +0 -27
  355. package/dist/schema/schemas/primitives/tags.js.map +0 -1
  356. package/dist/schema/schemas/zod-util.d.ts +0 -10
  357. package/dist/schema/schemas/zod-util.d.ts.map +0 -1
  358. package/dist/schema/schemas/zod-util.js +0 -23
  359. package/dist/schema/schemas/zod-util.js.map +0 -1
  360. package/dist/schema/types/index.d.ts +0 -2
  361. package/dist/schema/types/index.d.ts.map +0 -1
  362. package/dist/schema/types/index.js +0 -18
  363. package/dist/schema/types/index.js.map +0 -1
  364. package/dist/schema/types/path.d.ts +0 -27
  365. package/dist/schema/types/path.d.ts.map +0 -1
  366. package/dist/schema/types/path.js +0 -13
  367. package/dist/schema/types/path.js.map +0 -1
  368. package/scripts/bump-version.ts +0 -393
  369. package/scripts/bundle.mjs +0 -219
  370. package/scripts/check-old-cli.lib.mjs +0 -102
  371. package/scripts/check-old-cli.mjs +0 -10
  372. package/scripts/copy-assets.mjs +0 -64
  373. package/scripts/generate-schema.mjs +0 -40
  374. package/scripts/run-e2e-local.sh +0 -112
  375. package/scripts/start-tui-harness.sh +0 -90
  376. /package/dist/{agent-inspector/favicon.svg → assets/agent-inspector/favicon.svg.asset} +0 -0
  377. /package/dist/{agent-inspector/index.html → assets/agent-inspector/index.html.asset} +0 -0
  378. /package/dist/assets/{python/http/strands/base → templates/a2a-python-strands}/gitignore.template +0 -0
  379. /package/dist/assets/{typescript/.gitkeep → templates/a2a-python-strands/memory/__init__.py} +0 -0
  380. /package/dist/assets/{python/a2a/googleadk/base → templates/a2a-python-strands}/model/__init__.py +0 -0
  381. /package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-langchain}/model/__init__.py +0 -0
  382. /package/dist/assets/{container/python → templates/agent-python-strands}/dockerignore.template +0 -0
  383. /package/dist/assets/{python/a2a/strands/base → templates/agent-python-strands}/model/__init__.py +0 -0
  384. /package/dist/assets/{python/a2a/strands/capabilities/memory → templates/agui-python-strands/model}/__init__.py +0 -0
  385. /package/dist/assets/{python/agui/googleadk/base/model → templates/export-harness-python/mcp_client}/__init__.py +0 -0
  386. /package/dist/assets/{python/agui/langchain_langgraph/base → templates/export-harness-python}/model/__init__.py +0 -0
@@ -38,4 +38,4 @@ env/
38
38
 
39
39
  # OS
40
40
  .DS_Store
41
- Thumbs.db
41
+ Thumbs.db
@@ -0,0 +1,50 @@
1
+ from langchain.agents import create_agent
2
+ from langchain.tools import tool
3
+ from langgraph.checkpoint.memory import InMemorySaver
4
+ from bedrock_agentcore.runtime import BedrockAgentCoreApp
5
+ from model.load import load_model
6
+
7
+ app = BedrockAgentCoreApp()
8
+
9
+ SYSTEM_PROMPT = "You are a helpful assistant. Use tools when appropriate."
10
+
11
+
12
+ @tool
13
+ def add_numbers(a: int, b: int) -> int:
14
+ """Return the sum of two numbers"""
15
+ return a + b
16
+
17
+
18
+ tools = [add_numbers]
19
+
20
+ agent = create_agent(
21
+ model=load_model(),
22
+ tools=tools,
23
+ system_prompt=SYSTEM_PROMPT,
24
+ checkpointer=InMemorySaver(),
25
+ )
26
+
27
+
28
+ @app.entrypoint
29
+ async def invoke(payload, context):
30
+ prompt = payload.get("prompt") if isinstance(payload, dict) else None
31
+ if not isinstance(prompt, str) or not prompt:
32
+ yield {"error": "payload must be a JSON object with a non-empty string 'prompt'"}
33
+ return
34
+
35
+ session_id = context.session_id or "default-session"
36
+ config = {"configurable": {"thread_id": session_id}}
37
+
38
+ async with await agent.astream_events(
39
+ {"messages": [{"role": "user", "content": prompt}]},
40
+ config,
41
+ version="v3",
42
+ ) as stream:
43
+ async for message in stream.messages:
44
+ blocks = (await message.output).content_blocks
45
+ if blocks:
46
+ yield {"node": message.node, "content": blocks}
47
+
48
+
49
+ if __name__ == "__main__":
50
+ 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,60 @@
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()` in `parse.py`, which normalizes the history tail
20
+ before invoking the agent.
21
+
22
+ ## Payload
23
+
24
+ The Runtime accepts a JSON object. `parse_payload()` reads:
25
+
26
+ - `prompt` (string) — a single user message. Used when `messages` is absent; defaults to `""`.
27
+ - `messages` (array) — a full conversation history (`[{"role": ..., "content": [...]}]`). Takes precedence over `prompt`; trailing `toolUse` blocks are stripped before the agent runs.
28
+ - `actorId` (string, optional) — identifies the end user for Memory scoping (e.g. `/users/{actorId}/facts`). Defaults to `"default"`.
29
+
30
+ Provide either `prompt` or `messages`. The `session_id` is not in the body — it comes from the `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header (`context.session_id`); reuse it to continue a conversation.
31
+
32
+ ```json
33
+ { "prompt": "What's the weather?", "actorId": "user-123" }
34
+ ```
35
+
36
+ ## Environment Variables
37
+
38
+ | Variable | Required | Description |
39
+ | --- | --- | --- |
40
+ {{#if identityProviders.[0]}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
41
+ {{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |
42
+
43
+ # Developing locally
44
+
45
+ If installation was successful, a virtual environment is already created with dependencies installed.
46
+
47
+ Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
48
+ Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.
49
+
50
+ `agentcore project dev` will start a local server on 0.0.0.0:8080.
51
+
52
+ # Deployment
53
+
54
+ After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
55
+
56
+ Invoke the deployed Runtime with its native payload:
57
+
58
+ ```bash
59
+ agentcore project invoke runtime --payload '{"prompt":"Hello!"}'
60
+ ```
@@ -38,4 +38,4 @@ env/
38
38
 
39
39
  # OS
40
40
  .DS_Store
41
- Thumbs.db
41
+ Thumbs.db
@@ -0,0 +1,65 @@
1
+ from functools import lru_cache
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 parse import parse_payload
8
+ from memory.session import get_memory_session_manager
9
+
10
+ DEFAULT_SYSTEM_PROMPT = "You are a helpful assistant. Use tools when appropriate."
11
+
12
+ # Define a collection of tools used by the model
13
+ tools = []
14
+
15
+ # Define a simple function tool
16
+ @tool
17
+ def add_numbers(a: int, b: int) -> int:
18
+ """Return the sum of two numbers"""
19
+ return a + b
20
+
21
+ tools.append(add_numbers)
22
+
23
+ def _make_conversation_manager():
24
+ return NullConversationManager()
25
+
26
+ @lru_cache(maxsize=128)
27
+ def _get_agent(session_id: str, actor_id: str) -> Agent:
28
+ """Given a session_id and actor_id, return or construct the corresponding Strands agent.
29
+ Note: caching helps avoid repeated identity fetches on non-bedrock model loads
30
+ and supports in-memory session management for local dev."""
31
+ return Agent(
32
+ model=load_model(),
33
+ session_manager=get_memory_session_manager(session_id, actor_id),
34
+ conversation_manager=_make_conversation_manager(),
35
+ system_prompt=DEFAULT_SYSTEM_PROMPT,
36
+ tools=tools,
37
+ )
38
+
39
+ def create_app():
40
+ app = BedrockAgentCoreApp()
41
+ log = app.logger
42
+
43
+ @app.entrypoint
44
+ async def invoke(payload, context):
45
+ log.info("Invoking Agent.....")
46
+
47
+ session_id = getattr(context, "session_id", None) or "default-session"
48
+ prompt, actor_id = parse_payload(payload)
49
+
50
+ log.info(f"Invoking with session_id={session_id} and actor_id={actor_id}")
51
+ agent = _get_agent(session_id, actor_id)
52
+
53
+ async for event in agent.stream_async(prompt):
54
+ if not isinstance(event, dict) or "event" not in event:
55
+ continue
56
+ cbs = event["event"].get("contentBlockStart")
57
+ if cbs is not None and not cbs.get("start"):
58
+ continue
59
+ yield event
60
+
61
+ return app
62
+
63
+ app = create_app()
64
+ if __name__ == "__main__":
65
+ app.run()
@@ -0,0 +1,31 @@
1
+ import os
2
+ from typing import Optional
3
+
4
+ from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig
5
+ from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager
6
+
7
+ MEMORY_ID = os.getenv("{{memoryEnvVarName}}")
8
+ REGION = os.getenv("AWS_REGION")
9
+
10
+ def get_memory_session_manager(
11
+ session_id: str, actor_id: str,
12
+ ) -> Optional[AgentCoreMemorySessionManager]:
13
+ if not MEMORY_ID:
14
+ return None
15
+
16
+ retrieval_config = {
17
+ f"/users/{actor_id}/facts": RetrievalConfig(top_k=3, relevance_score=0.5),
18
+ f"/users/{actor_id}/preferences": RetrievalConfig(top_k=3, relevance_score=0.5),
19
+ f"/episodes/{actor_id}/{session_id}": RetrievalConfig(top_k=5, relevance_score=0.5),
20
+ f"/summaries/{actor_id}": RetrievalConfig(top_k=3, relevance_score=0.5),
21
+ }
22
+
23
+ return AgentCoreMemorySessionManager(
24
+ AgentCoreMemoryConfig(
25
+ memory_id=MEMORY_ID,
26
+ session_id=session_id,
27
+ actor_id=actor_id,
28
+ retrieval_config=retrieval_config,
29
+ ),
30
+ REGION,
31
+ )
@@ -12,7 +12,7 @@ import os
12
12
  from strands.models.anthropic import AnthropicModel
13
13
  from bedrock_agentcore.identity.auth import requires_api_key
14
14
 
15
- IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
15
+ IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
16
16
  IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
17
17
 
18
18
 
@@ -51,7 +51,7 @@ import os
51
51
  from strands.models.openai import OpenAIModel
52
52
  from bedrock_agentcore.identity.auth import requires_api_key
53
53
 
54
- IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
54
+ IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
55
55
  IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
56
56
 
57
57
 
@@ -89,7 +89,7 @@ import os
89
89
  from strands.models.gemini import GeminiModel
90
90
  from bedrock_agentcore.identity.auth import requires_api_key
91
91
 
92
- IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
92
+ IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
93
93
  IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
94
94
 
95
95
 
@@ -121,3 +121,49 @@ def load_model() -> GeminiModel:
121
121
  model_id="gemini-2.5-flash",
122
122
  )
123
123
  {{/if}}
124
+ {{#if (eq modelProvider "LiteLLM")}}
125
+ {{#if identityProviders.[0].name}}
126
+ import os
127
+
128
+ {{/if}}
129
+ from strands.models.litellm import LiteLLMModel
130
+ {{#if identityProviders.[0].name}}
131
+ from bedrock_agentcore.identity.auth import requires_api_key
132
+
133
+ IDENTITY_PROVIDER_NAME = os.environ.get("{{identityProviders.[0].envVarName}}_NAME", "{{identityProviders.[0].name}}")
134
+ IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
135
+
136
+
137
+ @requires_api_key(provider_name=IDENTITY_PROVIDER_NAME)
138
+ def _agentcore_identity_api_key_provider(api_key: str) -> str:
139
+ """Fetch API key from AgentCore Identity."""
140
+ return api_key
141
+
142
+
143
+ def _get_api_key() -> str:
144
+ """
145
+ Uses AgentCore Identity for API key management in deployed environments.
146
+ For local development, run via 'agentcore dev' which loads agentcore/.env.
147
+ """
148
+ if os.getenv("LOCAL_DEV") == "1":
149
+ api_key = os.getenv(IDENTITY_ENV_VAR)
150
+ if not api_key:
151
+ raise RuntimeError(
152
+ f"{IDENTITY_ENV_VAR} not found. Add {IDENTITY_ENV_VAR}=your-key to .env.local"
153
+ )
154
+ return api_key
155
+ return _agentcore_identity_api_key_provider()
156
+ {{/if}}
157
+
158
+
159
+ def load_model() -> LiteLLMModel:
160
+ """Get a LiteLLM model client (proxies to the provider encoded in model_id)."""
161
+ client_args = {}
162
+ {{#if identityProviders.[0].name}}
163
+ client_args["api_key"] = _get_api_key()
164
+ {{/if}}
165
+ return LiteLLMModel(
166
+ client_args=client_args,
167
+ model_id="bedrock/us.anthropic.claude-sonnet-4-5-20250514-v1:0",
168
+ )
169
+ {{/if}}
@@ -0,0 +1,41 @@
1
+ from typing import Any
2
+
3
+ def _strip_trailing_tool_use(messages: Any) -> list[dict]:
4
+ """Strip toolUse blocks from the tail until the last message has none."""
5
+ if not isinstance(messages, list):
6
+ raise ValueError("messages must be a list")
7
+
8
+ messages = list(messages)
9
+ while messages:
10
+ last = messages[-1]
11
+ if not isinstance(last, dict):
12
+ raise ValueError("each message must be an object")
13
+ original_content = last.get("content", [])
14
+ if not isinstance(original_content, list) or not all(isinstance(block, dict) for block in original_content):
15
+ raise ValueError("each message content value must be a list of content blocks")
16
+
17
+ content = [block for block in original_content if "toolUse" not in block]
18
+ if len(content) == len(original_content):
19
+ break
20
+ if content:
21
+ messages[-1] = {**last, "content": content}
22
+ break
23
+ messages.pop()
24
+
25
+ return messages
26
+
27
+ def parse_payload(payload: dict):
28
+ """Accept a caller-supplied message history or a plain prompt string."""
29
+ if not isinstance(payload, dict):
30
+ raise ValueError("payload must be a JSON object")
31
+ actor_id = payload.get("actorId", "default")
32
+ if not isinstance(actor_id, str):
33
+ raise ValueError("actorId must be a string")
34
+ if not actor_id:
35
+ actor_id = "default"
36
+ if "messages" in payload:
37
+ return _strip_trailing_tool_use(payload["messages"]), actor_id
38
+ prompt = payload.get("prompt", "")
39
+ if not isinstance(prompt, str):
40
+ raise ValueError("prompt must be a string")
41
+ return prompt, actor_id
@@ -0,0 +1,24 @@
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 Strands SDK"
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
+ {{#if (eq modelProvider "Anthropic")}}"strands-agents[anthropic] ~= 1.15.0",
16
+ {{else}}{{#if (eq modelProvider "OpenAI")}}"strands-agents[openai] ~= 1.15.0",
17
+ {{else}}{{#if (eq modelProvider "Gemini")}}"strands-agents[gemini] ~= 1.15.0",
18
+ {{else}}{{#if (eq modelProvider "LiteLLM")}}"strands-agents[litellm] ~= 1.15.0",
19
+ {{else}}"strands-agents ~= 1.15.0",
20
+ {{/if}}{{/if}}{{/if}}{{/if}}
21
+ ]
22
+
23
+ [tool.hatch.build.targets.wheel]
24
+ packages = ["."]
@@ -0,0 +1,50 @@
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.ts`. Using the AgentCore SDK `BedrockAgentCoreApp`, this file
12
+ defines an HTTP server that streams tokens from your chosen Agent framework SDK.
13
+
14
+ `model/load.ts` instantiates your chosen model provider.
15
+
16
+ ## Input Validation
17
+
18
+ The generated Zod request schema keeps the prompt and actor ID typed as strings before forwarding them to Strands.
19
+ Retain this validation when extending the request shape, and pass only prompt text to the agent.
20
+
21
+ ## Payload
22
+
23
+ The Runtime accepts a JSON object with:
24
+
25
+ - `prompt` (string) — a single user message; defaults to `""`.
26
+ - `actorId` (string, optional) — identifies the end user for Memory scoping (for example,
27
+ `/users/{actorId}/facts`); defaults to `"default"`.
28
+
29
+ The `sessionId` is not in the body. It comes from the
30
+ `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header (`context.sessionId`); reuse it to continue a conversation.
31
+
32
+ ```json
33
+ { "prompt": "What's the weather?", "actorId": "user-123" }
34
+ ```
35
+
36
+ # Developing locally
37
+
38
+ If installation was successful, `node_modules/` is already populated with dependencies.
39
+
40
+ `agentcore project dev` will start a local server using `tsx watch main.ts` for hot reload on 0.0.0.0:8080.
41
+
42
+ # Deployment
43
+
44
+ After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
45
+
46
+ Invoke the deployed Runtime with its native payload:
47
+
48
+ ```bash
49
+ agentcore project invoke runtime --payload '{"prompt":"Hello!","actorId":"user-123"}'
50
+ ```
@@ -0,0 +1,22 @@
1
+ # Environment variables
2
+ .env
3
+ .env.*
4
+
5
+ # Node
6
+ node_modules/
7
+ dist/
8
+ *.log
9
+ npm-debug.log*
10
+ yarn-debug.log*
11
+ yarn-error.log*
12
+
13
+ # IDE
14
+ .vscode/
15
+ .idea/
16
+ *.swp
17
+ *.swo
18
+ *~
19
+
20
+ # OS
21
+ .DS_Store
22
+ Thumbs.db
@@ -0,0 +1,77 @@
1
+ import { BedrockAgentCoreApp } from 'bedrock-agentcore/runtime';
2
+ import { Agent, tool, type ToolList } from '@strands-agents/sdk';
3
+ import { z } from 'zod';
4
+ import { loadModel } from './model/load.js';
5
+ import { getOrCreateMemoryManager } from './memory/memory.js';
6
+
7
+ // Define a collection of tools used by the model
8
+ const tools: ToolList = [];
9
+
10
+ // Define a simple function tool — the Zod schema gives us type inference and runtime validation for free
11
+ const addNumbers = tool({
12
+ name: 'add_numbers',
13
+ description: 'Return the sum of two numbers',
14
+ inputSchema: z.object({
15
+ a: z.number(),
16
+ b: z.number(),
17
+ }),
18
+ callback: async ({ a, b }) => a + b,
19
+ });
20
+ tools.push(addNumbers);
21
+
22
+ const SYSTEM_PROMPT = `
23
+ You are a helpful assistant. Use tools when appropriate.
24
+ `;
25
+
26
+ const requestSchema = z.object({
27
+ prompt: z.string().default(''),
28
+ actorId: z.string().default('default').transform((actorId) => actorId || 'default'),
29
+ });
30
+
31
+ const agentCache = new Map<string, Agent>();
32
+
33
+ async function getOrCreateAgent(sessionId: string, actorId: string): Promise<Agent> {
34
+ const key = `${actorId}:${sessionId}`;
35
+ let agent = agentCache.get(key);
36
+ if (agent) return agent;
37
+
38
+ const model = await loadModel();
39
+ agent = new Agent({
40
+ model,
41
+ systemPrompt: SYSTEM_PROMPT,
42
+ tools,
43
+ memoryManager: getOrCreateMemoryManager(sessionId, actorId) ?? undefined,
44
+ });
45
+ agentCache.set(key, agent);
46
+ return agent;
47
+ }
48
+
49
+ const app = new BedrockAgentCoreApp({
50
+ invocationHandler: {
51
+ requestSchema,
52
+ async *process(payload, context) {
53
+ const sessionId = context?.sessionId ?? 'default-session';
54
+ const actorId = payload.actorId;
55
+ const agent = await getOrCreateAgent(sessionId, actorId);
56
+
57
+ try {
58
+ for await (const event of agent.stream(payload.prompt)) {
59
+ if (
60
+ event.type === 'modelStreamUpdateEvent' &&
61
+ event.event?.type === 'modelContentBlockDeltaEvent' &&
62
+ event.event.delta?.type === 'textDelta'
63
+ ) {
64
+ yield { data: event.event.delta.text };
65
+ }
66
+ }
67
+ } finally {
68
+ // Drain in-flight createEvent calls before the runtime can reclaim
69
+ // the session microVM. flush() is the durability mechanism — without
70
+ // it, an idle reclamation can lose the tail of the conversation.
71
+ await agent.memoryManager?.flush();
72
+ }
73
+ },
74
+ },
75
+ });
76
+
77
+ app.run({ port: parseInt(process.env.PORT ?? '8080') });
@@ -0,0 +1,33 @@
1
+ import { MemoryManager } from '@strands-agents/sdk';
2
+ import { createAgentCoreMemoryStores } from 'bedrock-agentcore/experimental/memory/strands';
3
+
4
+ const MEMORY_ID = process.env.{{memoryEnvVarName}};
5
+
6
+ const memoryManagerCache = new Map<string, MemoryManager>();
7
+
8
+ export function getOrCreateMemoryManager(sessionId: string, actorId: string): MemoryManager | null {
9
+ if (!MEMORY_ID) return null;
10
+
11
+ const key = `${actorId}:${sessionId}`;
12
+ let manager = memoryManagerCache.get(key);
13
+ if (manager) return manager;
14
+
15
+ const stores = createAgentCoreMemoryStores({
16
+ memoryId: MEMORY_ID,
17
+ actorId,
18
+ sessionId,
19
+ namespaces: [
20
+ { namespace: '/users/{actorId}/facts' },
21
+ { namespace: '/users/{actorId}/preferences' },
22
+ { namespace: '/episodes/{actorId}/{sessionId}' },
23
+ { namespace: '/summaries/{actorId}' },
24
+ ],
25
+ // readMode defaults to 'per-namespace' (one retrieve call per namespace).
26
+ // Switch to 'subtree' to consolidate to a single hierarchical recall call.
27
+ extraction: true,
28
+ });
29
+
30
+ manager = new MemoryManager({ stores });
31
+ memoryManagerCache.set(key, manager);
32
+ return manager;
33
+ }
@@ -0,0 +1,5 @@
1
+ import { BedrockModel } from '@strands-agents/sdk/models/bedrock';
2
+
3
+ export function loadModel(): BedrockModel {
4
+ return new BedrockModel({ modelId: 'global.anthropic.claude-sonnet-4-5-20250929-v1:0' });
5
+ }