agentcore-cli 0.31.1__py3-none-any.whl

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 (655) hide show
  1. agentcore/__init__.py +1 -0
  2. agentcore/agent_inspector/NOTICE +9 -0
  3. agentcore/agent_inspector/favicon.svg +60 -0
  4. agentcore/agent_inspector/index.css +1 -0
  5. agentcore/agent_inspector/index.html +14 -0
  6. agentcore/agent_inspector/index.js +289 -0
  7. agentcore/assets/AGENTS.md +60 -0
  8. agentcore/assets/README.md +108 -0
  9. agentcore/assets/agents/AGENTS.md +218 -0
  10. agentcore/assets/cdk/.prettierrc +8 -0
  11. agentcore/assets/cdk/README.md +26 -0
  12. agentcore/assets/cdk/bin/cdk.ts +216 -0
  13. agentcore/assets/cdk/cdk.json +88 -0
  14. agentcore/assets/cdk/gitignore.template +9 -0
  15. agentcore/assets/cdk/jest.config.js +9 -0
  16. agentcore/assets/cdk/lib/cdk-stack.ts +291 -0
  17. agentcore/assets/cdk/npmignore.template +6 -0
  18. agentcore/assets/cdk/package.json +30 -0
  19. agentcore/assets/cdk/test/cdk.test.ts +31 -0
  20. agentcore/assets/cdk/tsconfig.json +28 -0
  21. agentcore/assets/container/python/Dockerfile +47 -0
  22. agentcore/assets/container/python/dockerignore.template +27 -0
  23. agentcore/assets/container/typescript/Dockerfile +25 -0
  24. agentcore/assets/container/typescript/dockerignore.template +24 -0
  25. agentcore/assets/datasets/predefined-v1.jsonl +3 -0
  26. agentcore/assets/datasets/simulated-v1.jsonl +3 -0
  27. agentcore/assets/evaluators/autoevals-lambda/execution-role-policy.json +15 -0
  28. agentcore/assets/evaluators/autoevals-lambda/lambda_function.py +37 -0
  29. agentcore/assets/evaluators/autoevals-lambda/pyproject.toml +22 -0
  30. agentcore/assets/evaluators/deepeval-lambda/execution-role-policy.json +15 -0
  31. agentcore/assets/evaluators/deepeval-lambda/lambda_function.py +29 -0
  32. agentcore/assets/evaluators/deepeval-lambda/pyproject.toml +19 -0
  33. agentcore/assets/evaluators/python-lambda/execution-role-policy.json +10 -0
  34. agentcore/assets/evaluators/python-lambda/lambda_function.py +19 -0
  35. agentcore/assets/evaluators/python-lambda/pyproject.toml +15 -0
  36. agentcore/assets/harness/invoke.py.template +74 -0
  37. agentcore/assets/mcp/python/README.md +27 -0
  38. agentcore/assets/mcp/python/pyproject.toml +22 -0
  39. agentcore/assets/mcp/python/server.py +117 -0
  40. agentcore/assets/mcp/python-lambda/README.md +22 -0
  41. agentcore/assets/mcp/python-lambda/handler.py +144 -0
  42. agentcore/assets/mcp/python-lambda/pyproject.toml +15 -0
  43. agentcore/assets/python/a2a/googleadk/base/README.md +22 -0
  44. agentcore/assets/python/a2a/googleadk/base/gitignore.template +41 -0
  45. agentcore/assets/python/a2a/googleadk/base/main.py +124 -0
  46. agentcore/assets/python/a2a/googleadk/base/model/__init__.py +1 -0
  47. agentcore/assets/python/a2a/googleadk/base/model/load.py +41 -0
  48. agentcore/assets/python/a2a/googleadk/base/pyproject.toml +22 -0
  49. agentcore/assets/python/a2a/langchain_langgraph/base/README.md +22 -0
  50. agentcore/assets/python/a2a/langchain_langgraph/base/gitignore.template +41 -0
  51. agentcore/assets/python/a2a/langchain_langgraph/base/main.py +144 -0
  52. agentcore/assets/python/a2a/langchain_langgraph/base/model/__init__.py +1 -0
  53. agentcore/assets/python/a2a/langchain_langgraph/base/model/load.py +123 -0
  54. agentcore/assets/python/a2a/langchain_langgraph/base/pyproject.toml +26 -0
  55. agentcore/assets/python/a2a/strands/base/README.md +22 -0
  56. agentcore/assets/python/a2a/strands/base/gitignore.template +41 -0
  57. agentcore/assets/python/a2a/strands/base/main.py +113 -0
  58. agentcore/assets/python/a2a/strands/base/model/__init__.py +1 -0
  59. agentcore/assets/python/a2a/strands/base/model/load.py +123 -0
  60. agentcore/assets/python/a2a/strands/base/pyproject.toml +23 -0
  61. agentcore/assets/python/a2a/strands/capabilities/memory/__init__.py +1 -0
  62. agentcore/assets/python/a2a/strands/capabilities/memory/session.py +46 -0
  63. agentcore/assets/python/agui/googleadk/base/README.md +30 -0
  64. agentcore/assets/python/agui/googleadk/base/gitignore.template +41 -0
  65. agentcore/assets/python/agui/googleadk/base/main.py +91 -0
  66. agentcore/assets/python/agui/googleadk/base/model/__init__.py +1 -0
  67. agentcore/assets/python/agui/googleadk/base/model/load.py +41 -0
  68. agentcore/assets/python/agui/googleadk/base/pyproject.toml +25 -0
  69. agentcore/assets/python/agui/langchain_langgraph/base/README.md +22 -0
  70. agentcore/assets/python/agui/langchain_langgraph/base/gitignore.template +41 -0
  71. agentcore/assets/python/agui/langchain_langgraph/base/main.py +130 -0
  72. agentcore/assets/python/agui/langchain_langgraph/base/model/__init__.py +1 -0
  73. agentcore/assets/python/agui/langchain_langgraph/base/model/load.py +123 -0
  74. agentcore/assets/python/agui/langchain_langgraph/base/pyproject.toml +31 -0
  75. agentcore/assets/python/agui/strands/base/README.md +22 -0
  76. agentcore/assets/python/agui/strands/base/gitignore.template +41 -0
  77. agentcore/assets/python/agui/strands/base/main.py +105 -0
  78. agentcore/assets/python/agui/strands/base/model/__init__.py +1 -0
  79. agentcore/assets/python/agui/strands/base/model/load.py +123 -0
  80. agentcore/assets/python/agui/strands/base/pyproject.toml +27 -0
  81. agentcore/assets/python/agui/strands/capabilities/memory/__init__.py +1 -0
  82. agentcore/assets/python/agui/strands/capabilities/memory/session.py +46 -0
  83. agentcore/assets/python/http/autogen/base/README.md +45 -0
  84. agentcore/assets/python/http/autogen/base/gitignore.template +41 -0
  85. agentcore/assets/python/http/autogen/base/main.py +145 -0
  86. agentcore/assets/python/http/autogen/base/mcp_client/__init__.py +1 -0
  87. agentcore/assets/python/http/autogen/base/mcp_client/client.py +28 -0
  88. agentcore/assets/python/http/autogen/base/model/__init__.py +1 -0
  89. agentcore/assets/python/http/autogen/base/model/load.py +136 -0
  90. agentcore/assets/python/http/autogen/base/pyproject.toml +34 -0
  91. agentcore/assets/python/http/bma/base/Dockerfile +41 -0
  92. agentcore/assets/python/http/bma/base/README.md +178 -0
  93. agentcore/assets/python/http/bma/base/client.py +200 -0
  94. agentcore/assets/python/http/bma/base/lifecycle/server.py +641 -0
  95. agentcore/assets/python/http/bma/base/otel/collector.yaml +69 -0
  96. agentcore/assets/python/http/bma/base/plugins/acr-report/.codex-plugin/plugin.json +6 -0
  97. agentcore/assets/python/http/bma/base/plugins/acr-report/skills/acr-report/SKILL.md +16 -0
  98. agentcore/assets/python/http/bma/base/policies/bma-acr-policy.json +11 -0
  99. agentcore/assets/python/http/bma/base/policies/bma-session-policy.json +35 -0
  100. agentcore/assets/python/http/bma/base/policies/bma-session-trust.json +20 -0
  101. agentcore/assets/python/http/bma/base/pyproject.toml +21 -0
  102. agentcore/assets/python/http/googleadk/base/README.md +45 -0
  103. agentcore/assets/python/http/googleadk/base/gitignore.template +41 -0
  104. agentcore/assets/python/http/googleadk/base/main.py +207 -0
  105. agentcore/assets/python/http/googleadk/base/mcp_client/__init__.py +1 -0
  106. agentcore/assets/python/http/googleadk/base/mcp_client/client.py +75 -0
  107. agentcore/assets/python/http/googleadk/base/model/__init__.py +1 -0
  108. agentcore/assets/python/http/googleadk/base/model/load.py +41 -0
  109. agentcore/assets/python/http/googleadk/base/pyproject.toml +24 -0
  110. agentcore/assets/python/http/langchain_langgraph/base/README.md +45 -0
  111. agentcore/assets/python/http/langchain_langgraph/base/gitignore.template +41 -0
  112. agentcore/assets/python/http/langchain_langgraph/base/main.py +227 -0
  113. agentcore/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +1 -0
  114. agentcore/assets/python/http/langchain_langgraph/base/mcp_client/client.py +79 -0
  115. agentcore/assets/python/http/langchain_langgraph/base/model/__init__.py +1 -0
  116. agentcore/assets/python/http/langchain_langgraph/base/model/load.py +123 -0
  117. agentcore/assets/python/http/langchain_langgraph/base/pyproject.toml +38 -0
  118. agentcore/assets/python/http/openaiagents/base/README.md +45 -0
  119. agentcore/assets/python/http/openaiagents/base/gitignore.template +41 -0
  120. agentcore/assets/python/http/openaiagents/base/main.py +200 -0
  121. agentcore/assets/python/http/openaiagents/base/mcp_client/__init__.py +1 -0
  122. agentcore/assets/python/http/openaiagents/base/mcp_client/client.py +74 -0
  123. agentcore/assets/python/http/openaiagents/base/model/__init__.py +1 -0
  124. agentcore/assets/python/http/openaiagents/base/model/load.py +37 -0
  125. agentcore/assets/python/http/openaiagents/base/pyproject.toml +21 -0
  126. agentcore/assets/python/http/strands/base/README.md +46 -0
  127. agentcore/assets/python/http/strands/base/gitignore.template +41 -0
  128. agentcore/assets/python/http/strands/base/main.py +714 -0
  129. agentcore/assets/python/http/strands/base/mcp_client/__init__.py +1 -0
  130. agentcore/assets/python/http/strands/base/mcp_client/client.py +116 -0
  131. agentcore/assets/python/http/strands/base/model/__init__.py +1 -0
  132. agentcore/assets/python/http/strands/base/model/load.py +239 -0
  133. agentcore/assets/python/http/strands/base/model/mantle_compat.py +21 -0
  134. agentcore/assets/python/http/strands/base/pyproject.toml +31 -0
  135. agentcore/assets/python/http/strands/base/skills/fetcher.py +279 -0
  136. agentcore/assets/python/http/strands/capabilities/execution-limits/hooks/execution_limits.py +54 -0
  137. agentcore/assets/python/http/strands/capabilities/memory/__init__.py +1 -0
  138. agentcore/assets/python/http/strands/capabilities/memory/session.py +47 -0
  139. agentcore/assets/python/http/strands/capabilities/payments/__init__.py +4 -0
  140. agentcore/assets/python/http/strands/capabilities/payments/payments.py +142 -0
  141. agentcore/assets/python/mcp/standalone/base/README.md +36 -0
  142. agentcore/assets/python/mcp/standalone/base/gitignore.template +41 -0
  143. agentcore/assets/python/mcp/standalone/base/main.py +83 -0
  144. agentcore/assets/python/mcp/standalone/base/pyproject.toml +16 -0
  145. agentcore/assets/typescript/.gitkeep +0 -0
  146. agentcore/assets/typescript/http/strands/base/README.md +42 -0
  147. agentcore/assets/typescript/http/strands/base/gitignore.template +22 -0
  148. agentcore/assets/typescript/http/strands/base/main.ts +149 -0
  149. agentcore/assets/typescript/http/strands/base/mcp_client/client.ts +11 -0
  150. agentcore/assets/typescript/http/strands/base/model/load.ts +102 -0
  151. agentcore/assets/typescript/http/strands/base/package.json +38 -0
  152. agentcore/assets/typescript/http/strands/base/tsconfig.json +19 -0
  153. agentcore/assets/typescript/http/strands/capabilities/memory/memory.ts +52 -0
  154. agentcore/assets/typescript/http/vercelai/base/README.md +42 -0
  155. agentcore/assets/typescript/http/vercelai/base/gitignore.template +22 -0
  156. agentcore/assets/typescript/http/vercelai/base/main.ts +70 -0
  157. agentcore/assets/typescript/http/vercelai/base/model/load.ts +121 -0
  158. agentcore/assets/typescript/http/vercelai/base/package.json +35 -0
  159. agentcore/assets/typescript/http/vercelai/base/tsconfig.json +19 -0
  160. agentcore/aws/__init__.py +263 -0
  161. agentcore/aws/_aws_errors.py +72 -0
  162. agentcore/aws/_http.py +176 -0
  163. agentcore/aws/_util.py +37 -0
  164. agentcore/aws/account.py +165 -0
  165. agentcore/aws/agentcore.py +971 -0
  166. agentcore/aws/agentcore_ab_tests.py +230 -0
  167. agentcore/aws/agentcore_batch_evaluation.py +227 -0
  168. agentcore/aws/agentcore_config_bundles.py +220 -0
  169. agentcore/aws/agentcore_control.py +994 -0
  170. agentcore/aws/agentcore_datasets.py +222 -0
  171. agentcore/aws/agentcore_harness.py +330 -0
  172. agentcore/aws/agentcore_payments.py +430 -0
  173. agentcore/aws/agentcore_recommendation.py +140 -0
  174. agentcore/aws/agui_parser.py +131 -0
  175. agentcore/aws/agui_types.py +342 -0
  176. agentcore/aws/api_client.py +87 -0
  177. agentcore/aws/arn.py +18 -0
  178. agentcore/aws/aws_context.py +23 -0
  179. agentcore/aws/bedrock.py +44 -0
  180. agentcore/aws/bedrock_agent.py +129 -0
  181. agentcore/aws/bedrock_import.py +252 -0
  182. agentcore/aws/bedrock_import_types.py +111 -0
  183. agentcore/aws/cloudwatch.py +136 -0
  184. agentcore/aws/connect_shell.py +266 -0
  185. agentcore/aws/iam.py +41 -0
  186. agentcore/aws/partition.py +58 -0
  187. agentcore/aws/policy_generation.py +116 -0
  188. agentcore/aws/region.py +54 -0
  189. agentcore/aws/retry.py +27 -0
  190. agentcore/aws/shell_framer.py +136 -0
  191. agentcore/aws/stage_endpoint.py +39 -0
  192. agentcore/aws/target_region.py +54 -0
  193. agentcore/aws/transaction_search.py +97 -0
  194. agentcore/cdk/__init__.py +10 -0
  195. agentcore/cdk/constants.py +13 -0
  196. agentcore/cdk/local_cdk_project.py +48 -0
  197. agentcore/cdk/toolkit.py +706 -0
  198. agentcore/cli/__init__.py +0 -0
  199. agentcore/cli/commands/__init__.py +0 -0
  200. agentcore/cli/commands/_jobs_common.py +39 -0
  201. agentcore/cli/commands/_run_wizards.py +639 -0
  202. agentcore/cli/commands/add/__init__.py +37 -0
  203. agentcore/cli/commands/add/_commander.py +52 -0
  204. agentcore/cli/commands/add/_common.py +47 -0
  205. agentcore/cli/commands/add/agent_wizard.py +528 -0
  206. agentcore/cli/commands/add/auth_options.py +154 -0
  207. agentcore/cli/commands/add/skill_action.py +105 -0
  208. agentcore/cli/commands/add/skill_command.py +87 -0
  209. agentcore/cli/commands/add/tool_action.py +160 -0
  210. agentcore/cli/commands/add/tool_command.py +117 -0
  211. agentcore/cli/commands/add/validate.py +333 -0
  212. agentcore/cli/commands/capacity_provider/__init__.py +86 -0
  213. agentcore/cli/commands/capacity_provider/action.py +114 -0
  214. agentcore/cli/commands/capacity_provider/constants.py +22 -0
  215. agentcore/cli/commands/config.py +91 -0
  216. agentcore/cli/commands/config_bundle.py +251 -0
  217. agentcore/cli/commands/create/__init__.py +643 -0
  218. agentcore/cli/commands/create/action.py +406 -0
  219. agentcore/cli/commands/create/dependencies.py +91 -0
  220. agentcore/cli/commands/create/harness_validate.py +82 -0
  221. agentcore/cli/commands/create/validate.py +195 -0
  222. agentcore/cli/commands/create/wizard.py +127 -0
  223. agentcore/cli/commands/dataset.py +119 -0
  224. agentcore/cli/commands/deploy/__init__.py +31 -0
  225. agentcore/cli/commands/deploy/_guards.py +25 -0
  226. agentcore/cli/commands/deploy/actions.py +840 -0
  227. agentcore/cli/commands/deploy/command.py +349 -0
  228. agentcore/cli/commands/deploy/progress.py +115 -0
  229. agentcore/cli/commands/deploy/types.py +68 -0
  230. agentcore/cli/commands/deploy/utils.py +43 -0
  231. agentcore/cli/commands/deploy/validate.py +21 -0
  232. agentcore/cli/commands/dev/__init__.py +5 -0
  233. agentcore/cli/commands/dev/_deps.py +50 -0
  234. agentcore/cli/commands/dev/browser_mode.py +270 -0
  235. agentcore/cli/commands/dev/command.py +450 -0
  236. agentcore/cli/commands/dev/terminal_mode.py +379 -0
  237. agentcore/cli/commands/exec/__init__.py +29 -0
  238. agentcore/cli/commands/exec/action.py +442 -0
  239. agentcore/cli/commands/exec/command.py +206 -0
  240. agentcore/cli/commands/exec/types.py +35 -0
  241. agentcore/cli/commands/export/__init__.py +114 -0
  242. agentcore/cli/commands/export/constants.py +21 -0
  243. agentcore/cli/commands/export/fetch_harness_spec.py +234 -0
  244. agentcore/cli/commands/export/harness_action.py +385 -0
  245. agentcore/cli/commands/export/harness_mapper.py +868 -0
  246. agentcore/cli/commands/export/harness_resolver.py +95 -0
  247. agentcore/cli/commands/export/types.py +90 -0
  248. agentcore/cli/commands/export/wizard.py +97 -0
  249. agentcore/cli/commands/feedback/__init__.py +69 -0
  250. agentcore/cli/commands/feedback/action.py +30 -0
  251. agentcore/cli/commands/feedback/consent_prompt.py +35 -0
  252. agentcore/cli/commands/feedback/wizard.py +49 -0
  253. agentcore/cli/commands/fetch/__init__.py +69 -0
  254. agentcore/cli/commands/fetch/action.py +62 -0
  255. agentcore/cli/commands/help.py +65 -0
  256. agentcore/cli/commands/import_/__init__.py +167 -0
  257. agentcore/cli/commands/import_/_js.py +72 -0
  258. agentcore/cli/commands/import_/actions.py +457 -0
  259. agentcore/cli/commands/import_/constants.py +45 -0
  260. agentcore/cli/commands/import_/import_evaluator.py +140 -0
  261. agentcore/cli/commands/import_/import_gateway.py +520 -0
  262. agentcore/cli/commands/import_/import_memory.py +128 -0
  263. agentcore/cli/commands/import_/import_online_eval.py +165 -0
  264. agentcore/cli/commands/import_/import_pipeline.py +145 -0
  265. agentcore/cli/commands/import_/import_runtime.py +214 -0
  266. agentcore/cli/commands/import_/import_utils.py +410 -0
  267. agentcore/cli/commands/import_/phase1_update.py +110 -0
  268. agentcore/cli/commands/import_/phase2_import.py +206 -0
  269. agentcore/cli/commands/import_/resource_import.py +228 -0
  270. agentcore/cli/commands/import_/template_utils.py +148 -0
  271. agentcore/cli/commands/import_/types.py +150 -0
  272. agentcore/cli/commands/import_/yaml_parser.py +265 -0
  273. agentcore/cli/commands/init.py +196 -0
  274. agentcore/cli/commands/invoke/__init__.py +32 -0
  275. agentcore/cli/commands/invoke/_deps.py +73 -0
  276. agentcore/cli/commands/invoke/action.py +840 -0
  277. agentcore/cli/commands/invoke/command.py +490 -0
  278. agentcore/cli/commands/invoke/constants.py +40 -0
  279. agentcore/cli/commands/invoke/guards.py +23 -0
  280. agentcore/cli/commands/invoke/interactive.py +604 -0
  281. agentcore/cli/commands/invoke/resolve.py +149 -0
  282. agentcore/cli/commands/invoke/resolve_prompt.py +60 -0
  283. agentcore/cli/commands/invoke/types.py +61 -0
  284. agentcore/cli/commands/invoke/validate.py +33 -0
  285. agentcore/cli/commands/job_actions.py +239 -0
  286. agentcore/cli/commands/job_history.py +380 -0
  287. agentcore/cli/commands/logs/__init__.py +53 -0
  288. agentcore/cli/commands/logs/action.py +159 -0
  289. agentcore/cli/commands/logs/filter_pattern.py +17 -0
  290. agentcore/cli/commands/logs/guards.py +51 -0
  291. agentcore/cli/commands/logs_evals.py +42 -0
  292. agentcore/cli/commands/package.py +118 -0
  293. agentcore/cli/commands/remove/__init__.py +172 -0
  294. agentcore/cli/commands/remove/skill_command.py +131 -0
  295. agentcore/cli/commands/remove/tool_command.py +59 -0
  296. agentcore/cli/commands/run.py +808 -0
  297. agentcore/cli/commands/run_ingest.py +97 -0
  298. agentcore/cli/commands/shared/__init__.py +0 -0
  299. agentcore/cli/commands/shared/arn_utils.py +9 -0
  300. agentcore/cli/commands/shared/filesystem_utils.py +421 -0
  301. agentcore/cli/commands/shared/header_utils.py +87 -0
  302. agentcore/cli/commands/shared/indexed_key_parser.py +76 -0
  303. agentcore/cli/commands/shared/lifecycle_utils.py +72 -0
  304. agentcore/cli/commands/shared/region_utils.py +20 -0
  305. agentcore/cli/commands/shared/vpc_utils.py +99 -0
  306. agentcore/cli/commands/status/__init__.py +30 -0
  307. agentcore/cli/commands/status/_guards.py +25 -0
  308. agentcore/cli/commands/status/action.py +741 -0
  309. agentcore/cli/commands/status/command.py +321 -0
  310. agentcore/cli/commands/status/constants.py +36 -0
  311. agentcore/cli/commands/status/format_knowledge_base.py +111 -0
  312. agentcore/cli/commands/telemetry.py +79 -0
  313. agentcore/cli/commands/traces/__init__.py +155 -0
  314. agentcore/cli/commands/traces/action.py +123 -0
  315. agentcore/cli/commands/update/__init__.py +63 -0
  316. agentcore/cli/commands/update/action.py +164 -0
  317. agentcore/cli/commands/validate.py +165 -0
  318. agentcore/cli/constants.py +96 -0
  319. agentcore/cli/errors.py +118 -0
  320. agentcore/cli/external_requirements/__init__.py +67 -0
  321. agentcore/cli/external_requirements/checks.py +280 -0
  322. agentcore/cli/external_requirements/detect.py +55 -0
  323. agentcore/cli/external_requirements/versions.py +57 -0
  324. agentcore/cli/groups.py +23 -0
  325. agentcore/cli/interactive.py +85 -0
  326. agentcore/cli/main.py +137 -0
  327. agentcore/cli/naming.py +11 -0
  328. agentcore/cli/notices.py +42 -0
  329. agentcore/cli/project.py +34 -0
  330. agentcore/cli/run_command.py +27 -0
  331. agentcore/cli/tree.py +135 -0
  332. agentcore/cli/update_notifier.py +123 -0
  333. agentcore/cli/variadic.py +50 -0
  334. agentcore/cloudformation/__init__.py +84 -0
  335. agentcore/cloudformation/bootstrap.py +64 -0
  336. agentcore/cloudformation/logical_ids.py +37 -0
  337. agentcore/cloudformation/outputs.py +566 -0
  338. agentcore/cloudformation/stack_discovery.py +75 -0
  339. agentcore/cloudformation/stack_events.py +107 -0
  340. agentcore/cloudformation/stack_status.py +98 -0
  341. agentcore/cloudformation/types.py +44 -0
  342. agentcore/lib/__init__.py +68 -0
  343. agentcore/lib/constants.py +77 -0
  344. agentcore/lib/dependency_management/__init__.py +23 -0
  345. agentcore/lib/dependency_management/messages.py +92 -0
  346. agentcore/lib/dependency_management/plan.py +98 -0
  347. agentcore/lib/dependency_management/semver.py +137 -0
  348. agentcore/lib/dependency_management/sync.py +139 -0
  349. agentcore/lib/dependency_management/types.py +56 -0
  350. agentcore/lib/errors/__init__.py +5 -0
  351. agentcore/lib/errors/types.py +352 -0
  352. agentcore/lib/errors/validation.py +121 -0
  353. agentcore/lib/packaging/__init__.py +81 -0
  354. agentcore/lib/packaging/build_args.py +23 -0
  355. agentcore/lib/packaging/build_context.py +26 -0
  356. agentcore/lib/packaging/build_context_dockerignore.py +45 -0
  357. agentcore/lib/packaging/container.py +95 -0
  358. agentcore/lib/packaging/helpers.py +289 -0
  359. agentcore/lib/packaging/node.py +153 -0
  360. agentcore/lib/packaging/python.py +135 -0
  361. agentcore/lib/packaging/types.py +69 -0
  362. agentcore/lib/packaging/uv.py +45 -0
  363. agentcore/lib/result.py +104 -0
  364. agentcore/lib/schemas/__init__.py +1 -0
  365. agentcore/lib/schemas/io/__init__.py +27 -0
  366. agentcore/lib/schemas/io/config_io.py +458 -0
  367. agentcore/lib/schemas/io/global_config.py +239 -0
  368. agentcore/lib/schemas/io/path_resolver.py +132 -0
  369. agentcore/lib/secrets/__init__.py +18 -0
  370. agentcore/lib/secrets/cipher.py +70 -0
  371. agentcore/lib/secrets/key_provider.py +163 -0
  372. agentcore/lib/secrets/sensitive_keys.py +55 -0
  373. agentcore/lib/time_constants.py +4 -0
  374. agentcore/lib/utils/__init__.py +47 -0
  375. agentcore/lib/utils/aws_account.py +15 -0
  376. agentcore/lib/utils/credentials.py +68 -0
  377. agentcore/lib/utils/dotenv.py +32 -0
  378. agentcore/lib/utils/env.py +105 -0
  379. agentcore/lib/utils/json_format.py +29 -0
  380. agentcore/lib/utils/json_rpc.py +22 -0
  381. agentcore/lib/utils/platform.py +33 -0
  382. agentcore/lib/utils/polling.py +86 -0
  383. agentcore/lib/utils/subprocess.py +135 -0
  384. agentcore/lib/utils/time_parser.py +48 -0
  385. agentcore/lib/utils/validation.py +106 -0
  386. agentcore/logging/__init__.py +10 -0
  387. agentcore/logging/_common.py +77 -0
  388. agentcore/logging/cdk_io_host.py +36 -0
  389. agentcore/logging/create_logger.py +107 -0
  390. agentcore/logging/dev_logger.py +63 -0
  391. agentcore/logging/exec_logger.py +159 -0
  392. agentcore/logging/invoke_logger.py +154 -0
  393. agentcore/logging/remove_logger.py +95 -0
  394. agentcore/operations/__init__.py +0 -0
  395. agentcore/operations/agent/__init__.py +0 -0
  396. agentcore/operations/agent/config_bundle_defaults.py +31 -0
  397. agentcore/operations/agent/generate/__init__.py +28 -0
  398. agentcore/operations/agent/generate/schema_mapper.py +319 -0
  399. agentcore/operations/agent/generate/types.py +172 -0
  400. agentcore/operations/agent/generate/write_agent_to_project.py +67 -0
  401. agentcore/operations/agent/import_/__init__.py +31 -0
  402. agentcore/operations/agent/import_/base_translator.py +449 -0
  403. agentcore/operations/agent/import_/constants.py +23 -0
  404. agentcore/operations/agent/import_/execute.py +127 -0
  405. agentcore/operations/agent/import_/langgraph_translator.py +294 -0
  406. agentcore/operations/agent/import_/pyproject_generator.py +73 -0
  407. agentcore/operations/agent/import_/strands_translator.py +289 -0
  408. agentcore/operations/config_bundle/__init__.py +1 -0
  409. agentcore/operations/config_bundle/bundle_name_variants.py +9 -0
  410. agentcore/operations/config_bundle/diff_versions.py +52 -0
  411. agentcore/operations/config_bundle/resolve_bundle.py +65 -0
  412. agentcore/operations/connectors/__init__.py +3 -0
  413. agentcore/operations/connectors/translators.py +63 -0
  414. agentcore/operations/dataset/__init__.py +21 -0
  415. agentcore/operations/dataset/delete.py +7 -0
  416. agentcore/operations/dataset/publish.py +16 -0
  417. agentcore/operations/dataset/pull.py +21 -0
  418. agentcore/operations/dataset/push.py +201 -0
  419. agentcore/operations/dataset/resolve_dataset.py +65 -0
  420. agentcore/operations/dataset/status.py +18 -0
  421. agentcore/operations/dataset/wait.py +25 -0
  422. agentcore/operations/deploy/__init__.py +152 -0
  423. agentcore/operations/deploy/backfill_vpc_id.py +90 -0
  424. agentcore/operations/deploy/change_detection.py +84 -0
  425. agentcore/operations/deploy/constants.py +58 -0
  426. agentcore/operations/deploy/dependency_sync.py +105 -0
  427. agentcore/operations/deploy/ensure_target.py +30 -0
  428. agentcore/operations/deploy/gateway_status.py +44 -0
  429. agentcore/operations/deploy/managed_memory_notice.py +36 -0
  430. agentcore/operations/deploy/payment_connector_authorization.py +106 -0
  431. agentcore/operations/deploy/post_deploy_datasets.py +96 -0
  432. agentcore/operations/deploy/post_deploy_knowledge_bases.py +104 -0
  433. agentcore/operations/deploy/post_deploy_observability.py +28 -0
  434. agentcore/operations/deploy/post_deploy_online_evals.py +60 -0
  435. agentcore/operations/deploy/pre_deploy_identity.py +505 -0
  436. agentcore/operations/deploy/preflight.py +385 -0
  437. agentcore/operations/deploy/region_override.py +45 -0
  438. agentcore/operations/deploy/teardown.py +153 -0
  439. agentcore/operations/dev/__init__.py +61 -0
  440. agentcore/operations/dev/_http.py +79 -0
  441. agentcore/operations/dev/_server.py +165 -0
  442. agentcore/operations/dev/codezip_dev_server.py +151 -0
  443. agentcore/operations/dev/config.py +128 -0
  444. agentcore/operations/dev/constants.py +9 -0
  445. agentcore/operations/dev/container_dev_server.py +237 -0
  446. agentcore/operations/dev/container_runtime.py +37 -0
  447. agentcore/operations/dev/dev_server.py +244 -0
  448. agentcore/operations/dev/gateway_env.py +25 -0
  449. agentcore/operations/dev/invoke.py +214 -0
  450. agentcore/operations/dev/invoke_a2a.py +204 -0
  451. agentcore/operations/dev/invoke_agui.py +88 -0
  452. agentcore/operations/dev/invoke_mcp.py +145 -0
  453. agentcore/operations/dev/invoke_types.py +30 -0
  454. agentcore/operations/dev/load_dev_env.py +26 -0
  455. agentcore/operations/dev/memory_env.py +19 -0
  456. agentcore/operations/dev/otel/__init__.py +5 -0
  457. agentcore/operations/dev/otel/collector.py +234 -0
  458. agentcore/operations/dev/otel/transforms.py +331 -0
  459. agentcore/operations/dev/payment_env.py +50 -0
  460. agentcore/operations/dev/server.py +28 -0
  461. agentcore/operations/dev/sse_transform.py +30 -0
  462. agentcore/operations/dev/utils.py +152 -0
  463. agentcore/operations/dev/web_ui/__init__.py +31 -0
  464. agentcore/operations/dev/web_ui/constants.py +25 -0
  465. agentcore/operations/dev/web_ui/handlers/__init__.py +36 -0
  466. agentcore/operations/dev/web_ui/handlers/_common.py +36 -0
  467. agentcore/operations/dev/web_ui/handlers/_deployed.py +37 -0
  468. agentcore/operations/dev/web_ui/handlers/a2a_proxy.py +37 -0
  469. agentcore/operations/dev/web_ui/handlers/cloudwatch_traces.py +71 -0
  470. agentcore/operations/dev/web_ui/handlers/harness_invocation.py +89 -0
  471. agentcore/operations/dev/web_ui/handlers/harness_utils.py +95 -0
  472. agentcore/operations/dev/web_ui/handlers/invocations.py +327 -0
  473. agentcore/operations/dev/web_ui/handlers/mcp_proxy.py +119 -0
  474. agentcore/operations/dev/web_ui/handlers/memory.py +84 -0
  475. agentcore/operations/dev/web_ui/handlers/resources.py +351 -0
  476. agentcore/operations/dev/web_ui/handlers/start.py +182 -0
  477. agentcore/operations/dev/web_ui/handlers/status.py +25 -0
  478. agentcore/operations/dev/web_ui/handlers/traces.py +50 -0
  479. agentcore/operations/dev/web_ui/run_web_ui.py +60 -0
  480. agentcore/operations/dev/web_ui/web_server.py +297 -0
  481. agentcore/operations/eval/__init__.py +8 -0
  482. agentcore/operations/eval/list_eval_runs.py +18 -0
  483. agentcore/operations/eval/logs_eval.py +119 -0
  484. agentcore/operations/eval/pause_resume.py +90 -0
  485. agentcore/operations/eval/run_eval.py +354 -0
  486. agentcore/operations/eval/shared/__init__.py +0 -0
  487. agentcore/operations/eval/shared/dataset_loader.py +68 -0
  488. agentcore/operations/eval/shared/dataset_session_provider.py +122 -0
  489. agentcore/operations/eval/shared/evaluator_runner.py +89 -0
  490. agentcore/operations/eval/shared/scenario_executor.py +71 -0
  491. agentcore/operations/eval/shared/span_collector.py +255 -0
  492. agentcore/operations/eval/storage.py +67 -0
  493. agentcore/operations/feedback/__init__.py +21 -0
  494. agentcore/operations/feedback/aperture_client.py +98 -0
  495. agentcore/operations/feedback/build_payload.py +97 -0
  496. agentcore/operations/feedback/constants.py +26 -0
  497. agentcore/operations/feedback/submit_feedback.py +150 -0
  498. agentcore/operations/fetch_access/__init__.py +36 -0
  499. agentcore/operations/fetch_access/_target.py +17 -0
  500. agentcore/operations/fetch_access/fetch_gateway_token.py +75 -0
  501. agentcore/operations/fetch_access/fetch_harness_token.py +72 -0
  502. agentcore/operations/fetch_access/fetch_runtime_token.py +76 -0
  503. agentcore/operations/fetch_access/list_agents.py +18 -0
  504. agentcore/operations/fetch_access/list_gateways.py +26 -0
  505. agentcore/operations/fetch_access/list_harnesses.py +23 -0
  506. agentcore/operations/fetch_access/oauth_token.py +162 -0
  507. agentcore/operations/fetch_access/types.py +34 -0
  508. agentcore/operations/harness/__init__.py +1 -0
  509. agentcore/operations/harness/orphan.py +84 -0
  510. agentcore/operations/harness/skill_utils.py +56 -0
  511. agentcore/operations/identity/__init__.py +33 -0
  512. agentcore/operations/identity/api_key_credential_provider.py +68 -0
  513. agentcore/operations/identity/oauth2_credential_provider.py +95 -0
  514. agentcore/operations/ingest/__init__.py +184 -0
  515. agentcore/operations/init/__init__.py +3 -0
  516. agentcore/operations/init/files.py +59 -0
  517. agentcore/operations/insights/__init__.py +21 -0
  518. agentcore/operations/insights/insights_storage.py +67 -0
  519. agentcore/operations/insights/run_insights.py +148 -0
  520. agentcore/operations/invoke/__init__.py +5 -0
  521. agentcore/operations/invoke/resolve_agent_context.py +85 -0
  522. agentcore/operations/jobs/__init__.py +38 -0
  523. agentcore/operations/jobs/ab_test/__init__.py +0 -0
  524. agentcore/operations/jobs/ab_test/build_options.py +126 -0
  525. agentcore/operations/jobs/ab_test/format.py +121 -0
  526. agentcore/operations/jobs/ab_test/handler.py +412 -0
  527. agentcore/operations/jobs/ab_test/promote.py +142 -0
  528. agentcore/operations/jobs/ab_test/resolve.py +221 -0
  529. agentcore/operations/jobs/batch_evaluation/__init__.py +0 -0
  530. agentcore/operations/jobs/batch_evaluation/build_source.py +68 -0
  531. agentcore/operations/jobs/batch_evaluation/dataset_phase1.py +95 -0
  532. agentcore/operations/jobs/batch_evaluation/format.py +58 -0
  533. agentcore/operations/jobs/batch_evaluation/handler.py +203 -0
  534. agentcore/operations/jobs/insights/__init__.py +0 -0
  535. agentcore/operations/jobs/insights/format.py +65 -0
  536. agentcore/operations/jobs/insights/handler.py +178 -0
  537. agentcore/operations/jobs/recommendation/__init__.py +0 -0
  538. agentcore/operations/jobs/recommendation/apply_to_bundle.py +76 -0
  539. agentcore/operations/jobs/recommendation/build_config.py +271 -0
  540. agentcore/operations/jobs/recommendation/fetch_session_spans.py +93 -0
  541. agentcore/operations/jobs/recommendation/format.py +77 -0
  542. agentcore/operations/jobs/recommendation/handler.py +331 -0
  543. agentcore/operations/jobs/shared/__init__.py +0 -0
  544. agentcore/operations/jobs/shared/constants.py +85 -0
  545. agentcore/operations/jobs/shared/engine.py +187 -0
  546. agentcore/operations/jobs/shared/format.py +104 -0
  547. agentcore/operations/jobs/shared/region.py +34 -0
  548. agentcore/operations/jobs/shared/resolve_agent_state.py +30 -0
  549. agentcore/operations/jobs/shared/storage.py +117 -0
  550. agentcore/operations/jobs/shared/wait.py +30 -0
  551. agentcore/operations/knowledge_base/__init__.py +33 -0
  552. agentcore/operations/knowledge_base/connector_config.py +105 -0
  553. agentcore/operations/knowledge_base/hydrate_data_sources.py +59 -0
  554. agentcore/operations/mcp/__init__.py +4 -0
  555. agentcore/operations/memory/__init__.py +13 -0
  556. agentcore/operations/memory/_records.py +72 -0
  557. agentcore/operations/memory/list_memory_records.py +45 -0
  558. agentcore/operations/memory/retrieve_memory_records.py +52 -0
  559. agentcore/operations/node/__init__.py +15 -0
  560. agentcore/operations/node/setup.py +36 -0
  561. agentcore/operations/python/__init__.py +17 -0
  562. agentcore/operations/python/setup.py +47 -0
  563. agentcore/operations/resolve_agent.py +159 -0
  564. agentcore/operations/session/__init__.py +86 -0
  565. agentcore/operations/traces/__init__.py +29 -0
  566. agentcore/operations/traces/get_trace.py +202 -0
  567. agentcore/operations/traces/insights_query.py +74 -0
  568. agentcore/operations/traces/list_traces.py +46 -0
  569. agentcore/operations/traces/trace_url.py +25 -0
  570. agentcore/operations/traces/types.py +55 -0
  571. agentcore/primitives/__init__.py +0 -0
  572. agentcore/primitives/_gateway_target_wizard.py +293 -0
  573. agentcore/primitives/_gateway_validation.py +442 -0
  574. agentcore/primitives/_harness_cli.py +557 -0
  575. agentcore/primitives/_harness_validation.py +163 -0
  576. agentcore/primitives/_harness_wizard.py +726 -0
  577. agentcore/primitives/_knowledge_base_wizard.py +259 -0
  578. agentcore/primitives/_payment_wizard.py +331 -0
  579. agentcore/primitives/_policy_form.py +160 -0
  580. agentcore/primitives/agent.py +817 -0
  581. agentcore/primitives/auth_utils.py +77 -0
  582. agentcore/primitives/base.py +178 -0
  583. agentcore/primitives/capacity_provider.py +501 -0
  584. agentcore/primitives/config_bundle.py +329 -0
  585. agentcore/primitives/credential.py +387 -0
  586. agentcore/primitives/credential_utils.py +45 -0
  587. agentcore/primitives/dataset.py +211 -0
  588. agentcore/primitives/deployed_gateways.py +34 -0
  589. agentcore/primitives/evaluator.py +909 -0
  590. agentcore/primitives/gateway.py +496 -0
  591. agentcore/primitives/gateway_target.py +988 -0
  592. agentcore/primitives/harness.py +706 -0
  593. agentcore/primitives/knowledge_base.py +477 -0
  594. agentcore/primitives/memory.py +387 -0
  595. agentcore/primitives/online_eval_config.py +365 -0
  596. agentcore/primitives/online_insights.py +275 -0
  597. agentcore/primitives/payment_connector.py +427 -0
  598. agentcore/primitives/payment_eligible.py +20 -0
  599. agentcore/primitives/payment_manager.py +605 -0
  600. agentcore/primitives/payment_validation.py +68 -0
  601. agentcore/primitives/policy.py +622 -0
  602. agentcore/primitives/policy_engine.py +358 -0
  603. agentcore/primitives/registry.py +56 -0
  604. agentcore/primitives/runtime_endpoint.py +361 -0
  605. agentcore/primitives/secret_flag_warning.py +17 -0
  606. agentcore/schema/__init__.py +14 -0
  607. agentcore/schema/_zod.py +395 -0
  608. agentcore/schema/constants.py +306 -0
  609. agentcore/schema/schemas/__init__.py +40 -0
  610. agentcore/schema/schemas/agent_env.py +545 -0
  611. agentcore/schema/schemas/agentcore_project.py +530 -0
  612. agentcore/schema/schemas/auth.py +286 -0
  613. agentcore/schema/schemas/aws_targets.py +72 -0
  614. agentcore/schema/schemas/connections.py +187 -0
  615. agentcore/schema/schemas/deployed_state.py +322 -0
  616. agentcore/schema/schemas/mcp.py +650 -0
  617. agentcore/schema/schemas/mcp_defs.py +54 -0
  618. agentcore/schema/schemas/primitives/__init__.py +52 -0
  619. agentcore/schema/schemas/primitives/ab_test.py +162 -0
  620. agentcore/schema/schemas/primitives/capacity_provider.py +214 -0
  621. agentcore/schema/schemas/primitives/config_bundle.py +48 -0
  622. agentcore/schema/schemas/primitives/dataset.py +55 -0
  623. agentcore/schema/schemas/primitives/evaluator.py +171 -0
  624. agentcore/schema/schemas/primitives/harness.py +710 -0
  625. agentcore/schema/schemas/primitives/knowledge_base.py +90 -0
  626. agentcore/schema/schemas/primitives/memory.py +113 -0
  627. agentcore/schema/schemas/primitives/online_eval_config.py +77 -0
  628. agentcore/schema/schemas/primitives/payment.py +114 -0
  629. agentcore/schema/schemas/primitives/policy.py +83 -0
  630. agentcore/schema/schemas/primitives/tags.py +50 -0
  631. agentcore/schema/schemas/zod_util.py +5 -0
  632. agentcore/schema/types/__init__.py +3 -0
  633. agentcore/schema/types/path.py +16 -0
  634. agentcore/templates/__init__.py +115 -0
  635. agentcore/templates/_handlebars.py +782 -0
  636. agentcore/templates/_js.py +164 -0
  637. agentcore/templates/base_renderer.py +107 -0
  638. agentcore/templates/cdk_renderer.py +129 -0
  639. agentcore/templates/evaluator_renderer.py +39 -0
  640. agentcore/templates/gateway_target_renderer.py +69 -0
  641. agentcore/templates/llm_context/README.md +16 -0
  642. agentcore/templates/llm_context/agentcore.ts +685 -0
  643. agentcore/templates/llm_context/aws-targets.ts +51 -0
  644. agentcore/templates/profiles.py +151 -0
  645. agentcore/templates/render.py +92 -0
  646. agentcore/templates/renderers.py +83 -0
  647. agentcore/templates/schema_assets.py +23 -0
  648. agentcore/templates/template_root.py +28 -0
  649. agentcore/templates/types.py +192 -0
  650. agentcore_cli-0.31.1.dist-info/METADATA +84 -0
  651. agentcore_cli-0.31.1.dist-info/RECORD +655 -0
  652. agentcore_cli-0.31.1.dist-info/WHEEL +4 -0
  653. agentcore_cli-0.31.1.dist-info/entry_points.txt +2 -0
  654. agentcore_cli-0.31.1.dist-info/licenses/LICENSE +175 -0
  655. agentcore_cli-0.31.1.dist-info/licenses/NOTICE +88 -0
@@ -0,0 +1,410 @@
1
+ """Shared import helpers (port of commands/import/import-utils.ts).
2
+
3
+ Project specs and targets are handled as camelCase JSON dicts, as upstream treats them as plain objects.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import os
9
+ import re
10
+ import shutil
11
+ from collections.abc import Callable
12
+ from dataclasses import dataclass
13
+ from typing import Any
14
+
15
+ from agentcore.aws import account as aws_account
16
+ from agentcore.cli.constants import ANSI
17
+ from agentcore.lib.constants import APP_DIR
18
+ from agentcore.lib.errors.types import NoProjectError, ValidationError
19
+ from agentcore.lib.schemas.io.config_io import ConfigIO, to_jsonable
20
+ from agentcore.lib.schemas.io.path_resolver import find_config_root
21
+ from agentcore.logging.exec_logger import ExecLogger
22
+
23
+ from .types import ImportableResourceType, ImportResourceOptions, ImportResourceResult
24
+
25
+
26
+ def strip_reserved_tags(tags: dict[str, str] | None) -> dict[str, str] | None:
27
+ """Drop AWS-reserved ``aws:*`` tags; None when nothing user-owned remains."""
28
+ if not tags:
29
+ return None
30
+ user_tags = {k: v for k, v in tags.items() if not k.startswith("aws:")}
31
+ return user_tags or None
32
+
33
+
34
+ # ============================================================================
35
+ # Project context / import context
36
+ # ============================================================================
37
+
38
+
39
+ @dataclass
40
+ class ProjectContext:
41
+ project_root: str
42
+ config_root: str
43
+ config_io: ConfigIO
44
+ project_name: str
45
+
46
+
47
+ @dataclass
48
+ class ImportContext:
49
+ ctx: ProjectContext
50
+ target: dict[str, Any]
51
+ logger: ExecLogger
52
+ on_progress: Callable[[str], None]
53
+
54
+
55
+ def default_on_progress(message: str) -> None:
56
+ print(f"{ANSI.green}[done]{ANSI.reset} {message}", flush=True)
57
+
58
+
59
+ def resolve_project_context() -> ProjectContext:
60
+ config_root = find_config_root(os.getcwd())
61
+ if not config_root:
62
+ raise NoProjectError(
63
+ "No agentcore project found in the current directory.\n"
64
+ "Run `agentcore create <name>` first, then run import from inside the project."
65
+ )
66
+ config_io = ConfigIO(base_dir=config_root)
67
+ spec = config_io.read_project_spec()
68
+ return ProjectContext(os.path.dirname(config_root), config_root, config_io, spec.name)
69
+
70
+
71
+ def resolve_import_context(options: ImportResourceOptions, command: str) -> ImportContext:
72
+ logger = ExecLogger(command)
73
+ on_progress = options.on_progress or default_on_progress
74
+
75
+ logger.start_step("Validate project context")
76
+ ctx = resolve_project_context()
77
+ logger.end_step("success")
78
+
79
+ logger.start_step("Resolve deployment target")
80
+ target = resolve_import_target(ctx.config_io, options.target, options.arn, on_progress)
81
+ logger.end_step("success")
82
+ return ImportContext(ctx, target, logger, on_progress)
83
+
84
+
85
+ def fail_result(
86
+ logger: ExecLogger, error: str, resource_type: ImportableResourceType, resource_name: str
87
+ ) -> ImportResourceResult:
88
+ logger.end_step("error", error)
89
+ logger.finalize(False)
90
+ return ImportResourceResult(
91
+ success=False,
92
+ error=ValidationError(error),
93
+ resource_type=resource_type,
94
+ resource_name=resource_name,
95
+ log_path=logger.get_relative_log_path(),
96
+ )
97
+
98
+
99
+ # ============================================================================
100
+ # Target resolution
101
+ # ============================================================================
102
+
103
+ _ANY_ARN = re.compile(
104
+ r"^arn:[^:]+:bedrock-agentcore:([^:]+):([^:]+):(runtime|memory|evaluator|online-evaluation-config|gateway)/(.+)$"
105
+ )
106
+ _ARN_REGION_ACCOUNT = re.compile(r"^arn:[^:]+:bedrock-agentcore:([^:]+):([^:]+):")
107
+
108
+
109
+ def _targets_as_dicts(config_io: ConfigIO) -> list[dict[str, Any]]:
110
+ return [to_jsonable(t) for t in config_io.read_aws_deployment_targets()]
111
+
112
+
113
+ def resolve_import_target(
114
+ config_io: ConfigIO,
115
+ target_name: str | None = None,
116
+ arn: str | None = None,
117
+ on_progress: Callable[[str], None] | None = None,
118
+ ) -> dict[str, Any]:
119
+ """Resolve the deployment target (account + region) and validate AWS credentials against it."""
120
+ if arn and not _ANY_ARN.match(arn):
121
+ raise ValidationError(
122
+ f'Not a valid ARN: "{arn}".\nExpected format: arn:<partition>:bedrock-agentcore:<region>:<account>:'
123
+ "<runtime|memory|evaluator|online-evaluation-config|gateway>/<id>"
124
+ )
125
+
126
+ if arn:
127
+ m = _ARN_REGION_ACCOUNT.match(arn)
128
+ arn_region = m.group(1) if m else None
129
+ env_region = os.environ.get("AWS_REGION") or os.environ.get("AWS_DEFAULT_REGION")
130
+ if arn_region and env_region and env_region != arn_region:
131
+ raise ValidationError(
132
+ f'Region mismatch: AWS_REGION is "{env_region}" but the ARN is in "{arn_region}". '
133
+ f"Either re-run with AWS_REGION={arn_region} or pass an ARN from {env_region}."
134
+ )
135
+
136
+ targets = _targets_as_dicts(config_io)
137
+ if not targets:
138
+ if not arn:
139
+ raise ValidationError(
140
+ "No deployment targets found in project.\nRun `agentcore deploy` first to set up a target, or use "
141
+ "--arn so a target can be created automatically."
142
+ )
143
+ m = _ARN_REGION_ACCOUNT.match(arn)
144
+ if not m:
145
+ raise ValidationError(
146
+ "No deployment targets found in project and could not parse region/account from ARN.\n"
147
+ "Run `agentcore deploy` first to set up a target, then re-run import."
148
+ )
149
+ arn_region, arn_account = m.group(1), m.group(2)
150
+ new_target = {
151
+ "name": "default",
152
+ "description": f"Default target ({arn_region})",
153
+ "account": arn_account,
154
+ "region": arn_region,
155
+ }
156
+ if on_progress:
157
+ on_progress(
158
+ f"No deployment targets found. Creating default target from ARN ({arn_region}, {arn_account})..."
159
+ )
160
+ config_io.write_aws_deployment_targets([new_target])
161
+ targets = [new_target]
162
+
163
+ def listing() -> str:
164
+ return "\n".join(f" - {t['name']} ({t['region']}, {t['account']})" for t in targets)
165
+
166
+ if target_name:
167
+ target = next((t for t in targets if t["name"] == target_name), None)
168
+ if target is None:
169
+ raise ValidationError(f'Target "{target_name}" not found. Available targets:\n{listing()}')
170
+ elif len(targets) == 1:
171
+ target = targets[0]
172
+ else:
173
+ raise ValidationError(f"Multiple deployment targets found. Specify one with --target:\n{listing()}")
174
+
175
+ if on_progress:
176
+ on_progress(f"Using target: {target['name']} ({target['region']}, {target['account']})")
177
+ on_progress("Validating AWS credentials...")
178
+ aws_account.validate_aws_credentials()
179
+
180
+ caller = aws_account.detect_account()
181
+ if caller and target.get("account") and caller != target["account"]:
182
+ raise ValidationError(
183
+ f'Your AWS credentials are for account {caller}, but the target "{target["name"]}" is configured for '
184
+ f"account {target['account']}.\nEnsure your credentials match the deployment target."
185
+ )
186
+ return target
187
+
188
+
189
+ # ============================================================================
190
+ # ARN validation
191
+ # ============================================================================
192
+
193
+
194
+ @dataclass
195
+ class ParsedArn:
196
+ region: str
197
+ account: str
198
+ resource_type: str
199
+ resource_id: str
200
+
201
+
202
+ # Unified config for each importable resource type: ARN type and deployed-state location.
203
+ RESOURCE_TYPE_CONFIG: dict[str, dict[str, str]] = {
204
+ "runtime": {"arnType": "runtime", "collectionKey": "runtimes", "idField": "runtimeId"},
205
+ "memory": {"arnType": "memory", "collectionKey": "memories", "idField": "memoryId"},
206
+ "evaluator": {"arnType": "evaluator", "collectionKey": "evaluators", "idField": "evaluatorId"},
207
+ "online-eval": {
208
+ "arnType": "online-evaluation-config",
209
+ "collectionKey": "onlineEvalConfigs",
210
+ "idField": "onlineEvaluationConfigId",
211
+ },
212
+ "gateway": {"arnType": "gateway", "collectionKey": "mcp.gateways", "idField": "gatewayId"},
213
+ }
214
+
215
+
216
+ def parse_and_validate_arn(arn: str, expected_resource_type: str, target: dict[str, Any]) -> ParsedArn:
217
+ match = _ANY_ARN.match(arn)
218
+ expected = RESOURCE_TYPE_CONFIG[expected_resource_type]["arnType"]
219
+ if not match:
220
+ raise ValidationError(
221
+ f'Invalid ARN format: "{arn}". Expected format: arn:<partition>:bedrock-agentcore:<region>:<account>:'
222
+ f"{expected}/<id>"
223
+ )
224
+ region, account, resource_type, resource_id = match.groups()
225
+ if resource_type != expected:
226
+ raise ValidationError(f'ARN resource type "{resource_type}" does not match expected type "{expected}".')
227
+ if region != target["region"]:
228
+ raise ValidationError(
229
+ f'ARN region "{region}" does not match target region "{target["region"]}". Use --target to select a '
230
+ "different deployment target."
231
+ )
232
+ if account != target["account"]:
233
+ raise ValidationError(
234
+ f'ARN account "{account}" does not match target account "{target["account"]}". Ensure the ARN belongs '
235
+ "to the correct account."
236
+ )
237
+ return ParsedArn(region, account, resource_type, resource_id)
238
+
239
+
240
+ # ============================================================================
241
+ # Stack name / deployed state
242
+ # ============================================================================
243
+
244
+
245
+ def to_stack_name(project_name: str, target_name: str) -> str:
246
+ return f"AgentCore-{project_name.replace('_', '-')}-{target_name.replace('_', '-')}"
247
+
248
+
249
+ def _read_state_dict(config_io: ConfigIO) -> dict[str, Any]:
250
+ try:
251
+ return to_jsonable(config_io.read_deployed_state())
252
+ except Exception: # noqa: BLE001 - readDeployedState().catch(() => ({ targets: {} }))
253
+ return {"targets": {}}
254
+
255
+
256
+ def find_resource_in_deployed_state(
257
+ config_io: ConfigIO, target_name: str, resource_type: str, resource_id: str
258
+ ) -> str | None:
259
+ """The name a resource ID is tracked under in deployed-state.json for ``target_name``, if any."""
260
+ state = _read_state_dict(config_io)
261
+ target_state = (state.get("targets") or {}).get(target_name) or {}
262
+ collection: Any = target_state.get("resources")
263
+ if not collection:
264
+ return None
265
+ cfg = RESOURCE_TYPE_CONFIG[resource_type]
266
+ for key in cfg["collectionKey"].split("."):
267
+ collection = collection.get(key) if isinstance(collection, dict) else None
268
+ if not collection:
269
+ return None
270
+ for name, entry in collection.items():
271
+ if isinstance(entry, dict) and entry.get(cfg["idField"]) == resource_id:
272
+ return name
273
+ return None
274
+
275
+
276
+ @dataclass
277
+ class ImportedResource:
278
+ type: str
279
+ name: str
280
+ id: str
281
+ arn: str
282
+
283
+
284
+ def update_deployed_state(
285
+ config_io: ConfigIO, target_name: str, stack_name: str, resources: list[ImportedResource]
286
+ ) -> None:
287
+ state = _read_state_dict(config_io)
288
+ state.setdefault("targets", {})
289
+ target_state = state["targets"].get(target_name) or {"resources": {}}
290
+ res = target_state.setdefault("resources", {})
291
+ res["stackName"] = stack_name
292
+ for r in resources:
293
+ if r.type == "runtime":
294
+ res.setdefault("runtimes", {})[r.name] = {"runtimeId": r.id, "runtimeArn": r.arn, "roleArn": "imported"}
295
+ elif r.type == "memory":
296
+ res.setdefault("memories", {})[r.name] = {"memoryId": r.id, "memoryArn": r.arn}
297
+ elif r.type == "evaluator":
298
+ res.setdefault("evaluators", {})[r.name] = {"evaluatorId": r.id, "evaluatorArn": r.arn}
299
+ elif r.type == "online-eval":
300
+ res.setdefault("onlineEvalConfigs", {})[r.name] = {
301
+ "onlineEvaluationConfigId": r.id,
302
+ "onlineEvaluationConfigArn": r.arn,
303
+ }
304
+ elif r.type == "gateway":
305
+ res.setdefault("mcp", {}).setdefault("gateways", {})[r.name] = {"gatewayId": r.id, "gatewayArn": r.arn}
306
+ state["targets"][target_name] = target_state
307
+ config_io.write_deployed_state(state)
308
+
309
+
310
+ # ============================================================================
311
+ # Source code copy
312
+ # ============================================================================
313
+
314
+ COPY_EXCLUDE_DIRS = frozenset(
315
+ {
316
+ ".venv",
317
+ ".git",
318
+ "__pycache__",
319
+ "node_modules",
320
+ ".pytest_cache",
321
+ ".bedrock_agentcore",
322
+ ".mypy_cache",
323
+ ".ruff_cache",
324
+ }
325
+ )
326
+
327
+
328
+ def copy_dir_recursive(src: str, dest: str) -> None:
329
+ """Copy directory contents, skipping excluded directories and symlinks."""
330
+ for entry in os.scandir(src):
331
+ if entry.is_symlink():
332
+ continue
333
+ dest_path = os.path.join(dest, entry.name)
334
+ if entry.is_dir():
335
+ if entry.name in COPY_EXCLUDE_DIRS:
336
+ continue
337
+ os.makedirs(dest_path, exist_ok=True)
338
+ copy_dir_recursive(entry.path, dest_path)
339
+ else:
340
+ shutil.copyfile(entry.path, dest_path)
341
+
342
+
343
+ def fix_pyproject_for_setuptools(pyproject_path: str) -> None:
344
+ if not os.path.exists(pyproject_path):
345
+ return
346
+ with open(pyproject_path, encoding="utf-8") as fh:
347
+ content = fh.read()
348
+ if "[tool.setuptools]" in content:
349
+ return
350
+ with open(pyproject_path, "w", encoding="utf-8") as fh:
351
+ fh.write(content.rstrip() + "\n\n[tool.setuptools]\npy-modules = []\n")
352
+
353
+
354
+ def copy_agent_source(
355
+ source_path: str,
356
+ agent_name: str,
357
+ project_root: str,
358
+ build: str,
359
+ entrypoint: str | None = None,
360
+ on_progress: Callable[[str], None] | None = None,
361
+ ) -> None:
362
+ """Copy agent source into ``app/<name>/``; generate a Dockerfile / set up the Python env as needed."""
363
+ progress = on_progress or (lambda _m: None)
364
+ app_dir = os.path.join(project_root, APP_DIR, agent_name)
365
+ os.makedirs(app_dir, exist_ok=True)
366
+
367
+ if not os.path.exists(source_path):
368
+ raise ValidationError(f"Source path does not exist: {source_path}")
369
+
370
+ progress(f"Copying agent source from {source_path} to ./{APP_DIR}/{agent_name}")
371
+ copy_dir_recursive(source_path, app_dir)
372
+
373
+ parent_pyproject = os.path.join(os.path.dirname(source_path), "pyproject.toml")
374
+ dest_pyproject = os.path.join(app_dir, "pyproject.toml")
375
+ if os.path.exists(parent_pyproject) and not os.path.exists(dest_pyproject):
376
+ shutil.copyfile(parent_pyproject, dest_pyproject)
377
+
378
+ if build == "Container":
379
+ dest_dockerfile = os.path.join(app_dir, "Dockerfile")
380
+ if not os.path.exists(dest_dockerfile):
381
+ is_python = entrypoint.endswith(".py") if entrypoint is not None else True
382
+ if is_python:
383
+ from agentcore.templates.template_root import get_template_path
384
+
385
+ progress("Generating Dockerfile for Container build")
386
+ entry_module = os.path.basename(entrypoint or "main.py")
387
+ if entry_module.endswith(".py"):
388
+ entry_module = entry_module[:-3]
389
+ template = get_template_path("container", "python", "Dockerfile").read_text(encoding="utf-8")
390
+ with open(dest_dockerfile, "w", encoding="utf-8") as fh:
391
+ fh.write(template.replace("{{entrypoint}}", entry_module, 1))
392
+ else:
393
+ progress(
394
+ "No Dockerfile found. Please add a Dockerfile to the source directory for non-Python container "
395
+ "builds."
396
+ )
397
+
398
+ # Container agents install dependencies inside the Docker image.
399
+ if build != "Container":
400
+ from agentcore.operations.python.setup import setup_python_project
401
+
402
+ fix_pyproject_for_setuptools(dest_pyproject)
403
+ progress(f"Setting up Python environment for {agent_name}...")
404
+ result = setup_python_project(app_dir)
405
+ if result.status == "success":
406
+ progress(f"Python environment ready for {agent_name}")
407
+ elif result.status == "uv_not_found":
408
+ progress(f'Warning: uv not found — run "uv sync" manually in {APP_DIR}/{agent_name}')
409
+ else:
410
+ progress(f"Warning: Python setup failed for {agent_name}: {result.error or result.status}")
@@ -0,0 +1,110 @@
1
+ """Phase 1 of a CloudFormation import: deploy companion resources (port of commands/import/phase1-update.ts).
2
+
3
+ Creates the IAM roles/policies the imported primary resources reference by deploying a filtered
4
+ template that contains no ``AWS::BedrockAgentCore::*`` resources.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ import re
11
+ from collections.abc import Callable
12
+ from dataclasses import dataclass
13
+ from typing import Any
14
+
15
+ from agentcore.aws._aws_errors import get_error_message
16
+ from agentcore.aws.account import create_aws_client
17
+
18
+ from .template_utils import CfnTemplate, filter_companion_only_template
19
+
20
+ _WAITER_CONFIG = {"Delay": 5, "MaxAttempts": 120} # ~600s max wait, as upstream's maxWaitTime
21
+
22
+
23
+ @dataclass
24
+ class Phase1Result:
25
+ success: bool
26
+ stack_exists: bool
27
+ error: str | None = None
28
+
29
+
30
+ def _cfn(region: str) -> Any:
31
+ return create_aws_client("cloudformation", region)
32
+
33
+
34
+ def _does_stack_exist(cfn: Any, stack_name: str) -> bool:
35
+ try:
36
+ stacks = cfn.describe_stacks(StackName=stack_name).get("Stacks") or []
37
+ return bool(stacks) and stacks[0].get("StackStatus") != "DELETE_COMPLETE"
38
+ except Exception: # noqa: BLE001
39
+ return False
40
+
41
+
42
+ def get_deployed_template(region: str, stack_name: str) -> CfnTemplate | None:
43
+ try:
44
+ response = _cfn(region).get_template(StackName=stack_name, TemplateStage="Original")
45
+ except Exception: # noqa: BLE001
46
+ return None
47
+ body = response.get("TemplateBody")
48
+ if not body:
49
+ return None
50
+ # boto3 decodes JSON template bodies into dicts.
51
+ return body if isinstance(body, dict) else json.loads(body)
52
+
53
+
54
+ def execute_phase1(
55
+ region: str, stack_name: str, synth_template: CfnTemplate, on_progress: Callable[[str], None] | None = None
56
+ ) -> Phase1Result:
57
+ progress = on_progress or (lambda _m: None)
58
+ cfn = _cfn(region)
59
+ companion = filter_companion_only_template(synth_template)
60
+
61
+ if not companion["Resources"]:
62
+ progress("No companion resources needed, skipping Phase 1")
63
+ return Phase1Result(True, _does_stack_exist(cfn, stack_name))
64
+
65
+ template_body = json.dumps(companion)
66
+ stack_exists = _does_stack_exist(cfn, stack_name)
67
+
68
+ if stack_exists:
69
+ # Keep previously imported primary resources, or CloudFormation would delete them.
70
+ deployed = get_deployed_template(region, stack_name)
71
+ if deployed:
72
+ for logical_id, resource in deployed.get("Resources", {}).items():
73
+ if logical_id not in companion["Resources"]:
74
+ companion["Resources"][logical_id] = resource
75
+ progress(f"Updating stack {stack_name} with companion resources...")
76
+ try:
77
+ cfn.update_stack(
78
+ StackName=stack_name,
79
+ TemplateBody=json.dumps(companion),
80
+ Capabilities=["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
81
+ )
82
+ progress("Waiting for stack update to complete...")
83
+ cfn.get_waiter("stack_update_complete").wait(StackName=stack_name, WaiterConfig=_WAITER_CONFIG)
84
+ progress("Phase 1 UPDATE complete")
85
+ except Exception as exc: # noqa: BLE001
86
+ message = get_error_message(exc)
87
+ if "No updates are to be performed" in message:
88
+ progress("Stack already has companion resources, no update needed")
89
+ return Phase1Result(True, True)
90
+ return Phase1Result(False, True, message)
91
+ else:
92
+ progress(f"Creating stack {stack_name} with companion resources...")
93
+ try:
94
+ project = re.sub(r"-[^-]+$", "", re.sub(r"^AgentCore-", "", stack_name))
95
+ cfn.create_stack(
96
+ StackName=stack_name,
97
+ TemplateBody=template_body,
98
+ Capabilities=["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
99
+ Tags=[
100
+ {"Key": "agentcore:project-name", "Value": project},
101
+ {"Key": "agentcore:target-name", "Value": "default"},
102
+ ],
103
+ )
104
+ progress("Waiting for stack creation to complete...")
105
+ cfn.get_waiter("stack_create_complete").wait(StackName=stack_name, WaiterConfig=_WAITER_CONFIG)
106
+ progress("Phase 1 CREATE complete")
107
+ except Exception as exc: # noqa: BLE001
108
+ return Phase1Result(False, False, get_error_message(exc))
109
+
110
+ return Phase1Result(True, stack_exists)