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,457 @@
1
+ """Starter-toolkit YAML import, `agentcore import --source` (port of commands/import/actions.ts)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import copy
6
+ import os
7
+ import shutil
8
+ from collections.abc import Callable
9
+ from dataclasses import dataclass
10
+ from typing import Any
11
+
12
+ from agentcore.aws import account as aws_account
13
+ from agentcore.aws.partition import arn_prefix
14
+ from agentcore.cli.commands.shared import vpc_utils
15
+ from agentcore.cli.constants import ANSI
16
+ from agentcore.lib.constants import APP_DIR
17
+ from agentcore.lib.errors.types import NoProjectError, ValidationError, to_error
18
+ from agentcore.lib.schemas.io.config_io import ConfigIO, to_jsonable
19
+ from agentcore.lib.schemas.io.path_resolver import find_config_root
20
+ from agentcore.logging.exec_logger import ExecLogger
21
+
22
+ from . import import_pipeline
23
+ from .import_utils import ImportedResource, copy_dir_recursive, fix_pyproject_for_setuptools, to_stack_name
24
+ from .template_utils import find_logical_id_by_property, find_logical_ids_by_type
25
+ from .types import (
26
+ ImportResult,
27
+ ParsedStarterToolkitAgent,
28
+ ParsedStarterToolkitCredential,
29
+ ParsedStarterToolkitMemory,
30
+ ResourceToImport,
31
+ )
32
+ from .yaml_parser import parse_starter_toolkit_yaml
33
+
34
+
35
+ @dataclass
36
+ class ImportOptions:
37
+ source: str
38
+ target: str | None = None
39
+ yes: bool | None = None
40
+ on_progress: Callable[[str], None] | None = None
41
+
42
+
43
+ def to_agent_env_spec(agent: ParsedStarterToolkitAgent) -> dict[str, Any]:
44
+ spec: dict[str, Any] = {
45
+ "name": agent.name,
46
+ "build": agent.build,
47
+ "entrypoint": os.path.basename(agent.entrypoint),
48
+ "codeLocation": os.path.join(APP_DIR, agent.name),
49
+ "runtimeVersion": agent.runtime_version or "PYTHON_3_12",
50
+ "protocol": agent.protocol,
51
+ "networkMode": agent.network_mode,
52
+ "instrumentation": {"enableOtel": False if agent.protocol == "MCP" else agent.enable_otel},
53
+ }
54
+ if agent.network_mode == "VPC" and agent.network_config:
55
+ spec["networkConfig"] = agent.network_config
56
+ if agent.execution_role_arn:
57
+ spec["executionRoleArn"] = agent.execution_role_arn
58
+ if agent.authorizer_type:
59
+ spec["authorizerType"] = agent.authorizer_type
60
+ if agent.authorizer_configuration:
61
+ spec["authorizerConfiguration"] = agent.authorizer_configuration
62
+ return spec
63
+
64
+
65
+ def to_memory_spec(mem: ParsedStarterToolkitMemory) -> dict[str, Any]:
66
+ strategies = (
67
+ [{"type": "SEMANTIC"}, {"type": "SUMMARIZATION"}, {"type": "USER_PREFERENCE"}]
68
+ if mem.mode == "STM_AND_LTM"
69
+ else []
70
+ )
71
+ return {"name": mem.name, "eventExpiryDuration": max(3, min(365, mem.event_expiry_days)), "strategies": strategies}
72
+
73
+
74
+ def to_credential_spec(cred: ParsedStarterToolkitCredential) -> dict[str, Any]:
75
+ if cred.provider_type == "api_key":
76
+ return {"authorizerType": "ApiKeyCredentialProvider", "name": cred.name}
77
+ # The provider already exists in Identity; discoveryUrl isn't in the YAML.
78
+ return {"authorizerType": "OAuthCredentialProvider", "name": cred.name, "vendor": "CustomOauth2"}
79
+
80
+
81
+ def _minimal_pyproject(name: str) -> str:
82
+ return "\n".join(
83
+ [
84
+ "[build-system]",
85
+ 'requires = ["setuptools>=68", "wheel"]',
86
+ 'build-backend = "setuptools.build_meta"',
87
+ "",
88
+ "[project]",
89
+ f'name = "{name}"',
90
+ 'version = "0.1.0"',
91
+ 'requires-python = ">=3.10"',
92
+ "dependencies = []",
93
+ "",
94
+ ]
95
+ )
96
+
97
+
98
+ def handle_import(options: ImportOptions) -> ImportResult: # noqa: C901, PLR0911, PLR0912, PLR0915
99
+ source, on_progress = options.source, options.on_progress
100
+ progress = on_progress or (lambda _m: None)
101
+ logger = ExecLogger("import")
102
+ config_io: ConfigIO | None = None
103
+ config_snapshot: dict[str, Any] | None = None
104
+ config_written = False
105
+
106
+ def rollback_config() -> None:
107
+ if not config_written or config_io is None:
108
+ return
109
+ try:
110
+ config_io.write_project_spec(config_snapshot)
111
+ progress("Rolling back config changes due to failure...")
112
+ logger.log("Rolled back config to pre-import state")
113
+ except Exception as exc: # noqa: BLE001
114
+ logger.log(f"Warning: config rollback failed: {exc}", "error")
115
+
116
+ def fail(error: BaseException) -> ImportResult:
117
+ logger.end_step("error", str(error))
118
+ logger.finalize(False)
119
+ return ImportResult(success=False, error=error, log_path=logger.get_relative_log_path())
120
+
121
+ def step_log(message: str, level: str | None = None) -> None:
122
+ logger.log(message, level) if level else logger.log(message)
123
+ progress(message)
124
+
125
+ try:
126
+ logger.start_step("Validate project context")
127
+ config_root = find_config_root(os.getcwd())
128
+ if not config_root:
129
+ return fail(
130
+ NoProjectError(
131
+ "No agentcore project found in the current directory.\n"
132
+ "Run `agentcore create <name>` first, then run import from inside the project."
133
+ )
134
+ )
135
+ project_root = os.path.dirname(config_root)
136
+ config_io = ConfigIO(base_dir=config_root)
137
+ logger.end_step("success")
138
+
139
+ logger.start_step("Read project config")
140
+ project_spec = to_jsonable(config_io.read_project_spec())
141
+ project_name = project_spec["name"]
142
+ step_log(f"Using existing project: {project_name}")
143
+ logger.end_step("success")
144
+ config_snapshot = copy.deepcopy(project_spec)
145
+
146
+ logger.start_step("Parse YAML")
147
+ step_log(f"Parsing {source}...")
148
+ parsed = parse_starter_toolkit_yaml(source)
149
+ if not parsed.agents:
150
+ return fail(ValidationError("No agents found in the YAML config"))
151
+ step_log(
152
+ f"Found {len(parsed.agents)} agent(s), {len(parsed.memories)} memory(ies), "
153
+ f"{len(parsed.credentials)} credential(s)"
154
+ )
155
+ logger.end_step("success")
156
+
157
+ has_physical_ids = any(a.physical_agent_id for a in parsed.agents) or any(
158
+ m.physical_memory_id for m in parsed.memories
159
+ )
160
+
161
+ logger.start_step("Resolve deployment target")
162
+ target: dict[str, Any] | None = None
163
+ yaml_account = parsed.aws_target.get("account")
164
+ yaml_region = parsed.aws_target.get("region")
165
+ if has_physical_ids:
166
+ # The YAML region is authoritative: readAWSDeploymentTargets() lets AWS_REGION override files.
167
+ if yaml_region:
168
+ os.environ["AWS_REGION"] = yaml_region
169
+ os.environ["AWS_DEFAULT_REGION"] = yaml_region
170
+ targets = [to_jsonable(t) for t in config_io.read_aws_deployment_targets()]
171
+ if not targets:
172
+ if not yaml_account or not yaml_region:
173
+ return fail(
174
+ ValidationError(
175
+ "No deployment targets found in project and YAML has no AWS account/region info.\n"
176
+ "Run `agentcore deploy` first to set up a target, then re-run import."
177
+ )
178
+ )
179
+ default_target = {"name": "default", "account": yaml_account, "region": yaml_region}
180
+ config_io.write_aws_deployment_targets([default_target])
181
+ targets = [default_target]
182
+ step_log(f"Created default target from YAML: {yaml_region}, {yaml_account}")
183
+
184
+ listing = "\n".join(f" - {t['name']} ({t['region']}, {t['account']})" for t in targets)
185
+ if options.target:
186
+ target = next((t for t in targets if t["name"] == options.target), None)
187
+ if target is None:
188
+ return fail(ValidationError(f'Target "{options.target}" not found. Available targets:\n{listing}'))
189
+ elif len(targets) == 1:
190
+ target = targets[0]
191
+ else:
192
+ return fail(
193
+ ValidationError(f"Multiple deployment targets found. Specify one with --target:\n{listing}")
194
+ )
195
+
196
+ step_log(f"Using target: {target['name']} ({target['region']}, {target['account']})")
197
+ if yaml_account and yaml_account != target["account"]:
198
+ step_log(
199
+ f"Warning: YAML account ({yaml_account}) differs from target account ({target['account']})", "warn"
200
+ )
201
+ if yaml_region and yaml_region != target["region"]:
202
+ step_log(
203
+ f"Warning: YAML region ({yaml_region}) differs from target region ({target['region']})", "warn"
204
+ )
205
+ step_log("Validating AWS credentials...")
206
+ aws_account.validate_aws_credentials()
207
+ else:
208
+ # Without physical IDs the target only feeds the stack name.
209
+ try:
210
+ targets = [to_jsonable(t) for t in config_io.read_aws_deployment_targets()]
211
+ except Exception: # noqa: BLE001
212
+ targets = []
213
+ if len(targets) == 1:
214
+ target = targets[0]
215
+ elif options.target:
216
+ target = next((t for t in targets if t["name"] == options.target), None)
217
+ logger.end_step("success")
218
+
219
+ logger.start_step("Merge agents and memories")
220
+ step_log("Merging into existing project...")
221
+ existing_agents = {a["name"] for a in project_spec.get("runtimes", [])}
222
+ added_agents: set[str] = set()
223
+ for agent in parsed.agents:
224
+ if agent.name not in existing_agents:
225
+ project_spec.setdefault("runtimes", []).append(to_agent_env_spec(agent))
226
+ added_agents.add(agent.name)
227
+ else:
228
+ step_log(f'Skipping agent "{agent.name}" (already exists in project)')
229
+
230
+ existing_memories = {m["name"] for m in project_spec.get("memories") or []}
231
+ added_memories: set[str] = set()
232
+ for mem in parsed.memories:
233
+ if mem.name not in existing_memories:
234
+ project_spec.setdefault("memories", []).append(to_memory_spec(mem))
235
+ added_memories.add(mem.name)
236
+ else:
237
+ step_log(f'Skipping memory "{mem.name}" (already exists in project)')
238
+
239
+ for mem in parsed.memories:
240
+ env_var = "MEMORY_" + mem.name.upper().replace(".", "_").replace("-", "_") + "_ID"
241
+ logger.log(f'Memory "{mem.name}" env var must be updated: use {env_var}', "warn")
242
+ progress(
243
+ f'Warning: Memory "{mem.name}" env var must be updated in your agent code:\n'
244
+ f' {ANSI.red}- MEMORY_ID = os.getenv("BEDROCK_AGENTCORE_MEMORY_ID"){ANSI.reset}\n'
245
+ f' {ANSI.green}+ MEMORY_ID = os.getenv("{env_var}"){ANSI.reset}'
246
+ )
247
+
248
+ existing_creds = {c["name"] for c in project_spec.get("credentials") or []}
249
+ for cred in parsed.credentials:
250
+ if cred.name not in existing_creds:
251
+ project_spec.setdefault("credentials", []).append(to_credential_spec(cred))
252
+ step_log(f'Added credential "{cred.name}" ({cred.provider_type})')
253
+ else:
254
+ step_log(f'Skipping credential "{cred.name}" (already exists in project)')
255
+
256
+ # The starter-toolkit YAML omits vpc_id; resolve it from the first subnet.
257
+ import_region = yaml_region or (target or {}).get("region")
258
+ for spec in project_spec.get("runtimes", []):
259
+ net = spec.get("networkConfig")
260
+ if (
261
+ spec.get("build") == "Container"
262
+ and spec.get("networkMode") == "VPC"
263
+ and net
264
+ and net.get("subnets")
265
+ and not net.get("vpcId")
266
+ ):
267
+ if not import_region:
268
+ return fail(
269
+ ValidationError(
270
+ f'Cannot resolve VPC ID for agent "{spec["name"]}": no AWS region available. Add an '
271
+ "aws.region to the YAML or set up a deployment target first."
272
+ )
273
+ )
274
+ net["vpcId"] = vpc_utils.resolve_vpc_id_from_subnets(net["subnets"], import_region)
275
+ step_log(f'Resolved vpcId for agent "{spec["name"]}": {net["vpcId"]}')
276
+
277
+ config_io.write_project_spec(project_spec)
278
+ config_written = True
279
+ logger.end_step("success")
280
+
281
+ logger.start_step("Copy agent source and setup Python")
282
+ for agent in parsed.agents:
283
+ if agent.name in existing_agents:
284
+ step_log(f'Skipping source copy for agent "{agent.name}" (already exists in project)')
285
+ continue
286
+ app_dir = os.path.join(project_root, APP_DIR, agent.name)
287
+ os.makedirs(app_dir, exist_ok=True)
288
+ if agent.source_path and os.path.exists(agent.source_path):
289
+ step_log(f"Copying agent source from {agent.source_path} to ./{APP_DIR}/{agent.name}")
290
+ copy_dir_recursive(agent.source_path, app_dir)
291
+ parent_pyproject = os.path.join(os.path.dirname(agent.source_path), "pyproject.toml")
292
+ dest_pyproject = os.path.join(app_dir, "pyproject.toml")
293
+ if os.path.exists(parent_pyproject) and not os.path.exists(dest_pyproject):
294
+ shutil.copyfile(parent_pyproject, dest_pyproject)
295
+ if agent.build == "Container":
296
+ dest_dockerfile = os.path.join(app_dir, "Dockerfile")
297
+ if not os.path.exists(dest_dockerfile):
298
+ toolkit_dockerfile = os.path.join(
299
+ os.path.dirname(agent.source_path), ".bedrock_agentcore", agent.name, "Dockerfile"
300
+ )
301
+ if os.path.exists(toolkit_dockerfile):
302
+ step_log("Copying Dockerfile from starter toolkit config")
303
+ shutil.copyfile(toolkit_dockerfile, dest_dockerfile)
304
+ else:
305
+ from agentcore.templates.render import copy_and_render_dir
306
+ from agentcore.templates.template_root import get_template_path
307
+
308
+ step_log("Generating Dockerfile for Container build")
309
+ entry_module = os.path.basename(agent.entrypoint)
310
+ if entry_module.endswith(".py"):
311
+ entry_module = entry_module[:-3]
312
+ copy_and_render_dir(
313
+ get_template_path("container", "python"),
314
+ app_dir,
315
+ {"entrypoint": entry_module, "enableOtel": True},
316
+ exclude={".dockerignore"},
317
+ )
318
+ else:
319
+ pyproject_path = os.path.join(app_dir, "pyproject.toml")
320
+ if not os.path.exists(pyproject_path):
321
+ step_log(f"Creating minimal pyproject.toml at {app_dir}")
322
+ with open(pyproject_path, "w", encoding="utf-8") as fh:
323
+ fh.write(_minimal_pyproject(agent.name))
324
+
325
+ if agent.build != "Container":
326
+ from agentcore.operations.python.setup import setup_python_project
327
+
328
+ fix_pyproject_for_setuptools(os.path.join(app_dir, "pyproject.toml"))
329
+ step_log(f"Setting up Python environment for {agent.name}...")
330
+ result = setup_python_project(app_dir)
331
+ if result.status == "success":
332
+ step_log(f"Python environment ready for {agent.name}")
333
+ elif result.status == "uv_not_found":
334
+ step_log(f'Warning: uv not found — run "uv sync" manually in {APP_DIR}/{agent.name}', "warn")
335
+ else:
336
+ step_log(f"Warning: Python setup failed for {agent.name}: {result.error or result.status}", "warn")
337
+ logger.end_step("success")
338
+
339
+ logger.start_step("Determine resources to import")
340
+ agents_to_import = [a for a in parsed.agents if a.physical_agent_id and a.name in added_agents]
341
+ memories_to_import = [m for m in parsed.memories if m.physical_memory_id and m.name in added_memories]
342
+ target_name = (target or {}).get("name") or "default"
343
+ stack_name = to_stack_name(project_name, target_name)
344
+
345
+ if not agents_to_import and not memories_to_import:
346
+ step_log(
347
+ "No deployed resources found to import (no agent_id or memory_id in YAML). "
348
+ "Run `agentcore deploy` to create new resources."
349
+ )
350
+ logger.end_step("success")
351
+ logger.finalize(True)
352
+ return ImportResult(
353
+ success=True,
354
+ project_spec=project_spec,
355
+ imported_agents=[],
356
+ imported_memories=[],
357
+ stack_name=stack_name,
358
+ log_path=logger.get_relative_log_path(),
359
+ )
360
+
361
+ step_log(f"Will import: {len(agents_to_import)} agent(s), {len(memories_to_import)} memory(ies)")
362
+ if target is None:
363
+ return fail(ValidationError("No deployment target available for import."))
364
+ logger.end_step("success")
365
+
366
+ logger.start_step("Build and import via CDK")
367
+ region, account = target["region"], target["account"]
368
+ imported = [
369
+ ImportedResource(
370
+ "runtime",
371
+ a.name,
372
+ a.physical_agent_id,
373
+ a.physical_agent_arn
374
+ or f"{arn_prefix(region)}:bedrock-agentcore:{region}:{account}:runtime/{a.physical_agent_id}",
375
+ )
376
+ for a in agents_to_import
377
+ ] + [
378
+ ImportedResource(
379
+ "memory",
380
+ m.name,
381
+ m.physical_memory_id,
382
+ m.physical_memory_arn
383
+ or f"{arn_prefix(region)}:bedrock-agentcore:{region}:{account}:memory/{m.physical_memory_id}",
384
+ )
385
+ for m in memories_to_import
386
+ ]
387
+
388
+ def build_resources(synth: dict[str, Any], deployed: dict[str, Any]) -> list[ResourceToImport]:
389
+ resources: list[ResourceToImport] = []
390
+ deployed_ids = set(deployed.get("Resources", {}).keys())
391
+ rt_type, mem_type = "AWS::BedrockAgentCore::Runtime", "AWS::BedrockAgentCore::Memory"
392
+ for agent in agents_to_import:
393
+ candidates = [i for i in find_logical_ids_by_type(synth, rt_type) if i not in deployed_ids]
394
+ logical_id = find_logical_id_by_property(
395
+ synth, rt_type, "AgentRuntimeName", f"{project_name}_{agent.name}", exclude_logical_ids=deployed_ids
396
+ )
397
+ if not logical_id and len(candidates) == 1:
398
+ logical_id = candidates[0]
399
+ if not logical_id:
400
+ step_log(f"Warning: Could not find logical ID for agent {agent.name}, skipping", "warn")
401
+ continue
402
+ resources.append(ResourceToImport(rt_type, logical_id, {"AgentRuntimeId": agent.physical_agent_id}))
403
+ for memory in memories_to_import:
404
+ candidates = [i for i in find_logical_ids_by_type(synth, mem_type) if i not in deployed_ids]
405
+ logical_id = find_logical_id_by_property(
406
+ synth, mem_type, "Name", memory.name, exclude_logical_ids=deployed_ids
407
+ ) or find_logical_id_by_property(
408
+ synth, mem_type, "Name", f"{project_name}_{memory.name}", exclude_logical_ids=deployed_ids
409
+ )
410
+ if not logical_id and len(candidates) == 1:
411
+ logical_id = candidates[0]
412
+ if not logical_id:
413
+ step_log(f"Warning: Could not find logical ID for memory {memory.name}, skipping", "warn")
414
+ continue
415
+ resources.append(ResourceToImport(mem_type, logical_id, {"MemoryId": memory.physical_memory_id}))
416
+ return resources
417
+
418
+ pipeline = import_pipeline.execute_cdk_import_pipeline(
419
+ project_root=project_root,
420
+ stack_name=stack_name,
421
+ target=target,
422
+ config_io=config_io,
423
+ target_name=target_name,
424
+ on_progress=progress,
425
+ build_resources_to_import=build_resources,
426
+ deployed_state_entries=imported,
427
+ )
428
+ if pipeline.no_resources:
429
+ step_log("No resources could be matched for import")
430
+ logger.end_step("success")
431
+ logger.finalize(True)
432
+ return ImportResult(
433
+ success=True,
434
+ project_spec=project_spec,
435
+ imported_agents=[],
436
+ imported_memories=[],
437
+ stack_name=stack_name,
438
+ log_path=logger.get_relative_log_path(),
439
+ )
440
+ if not pipeline.success:
441
+ rollback_config()
442
+ return fail(Exception(pipeline.error))
443
+ logger.end_step("success")
444
+ logger.finalize(True)
445
+ return ImportResult(
446
+ success=True,
447
+ project_spec=project_spec,
448
+ imported_agents=[a.name for a in agents_to_import],
449
+ imported_memories=[m.name for m in memories_to_import],
450
+ stack_name=stack_name,
451
+ log_path=logger.get_relative_log_path(),
452
+ )
453
+ except Exception as exc: # noqa: BLE001
454
+ rollback_config()
455
+ logger.log(str(exc), "error")
456
+ logger.finalize(False)
457
+ return ImportResult(success=False, error=to_error(exc), log_path=logger.get_relative_log_path())
@@ -0,0 +1,45 @@
1
+ """Port of commands/import/constants.ts."""
2
+
3
+ import re
4
+ from typing import Final
5
+
6
+ # Name validation regex used by all import handlers.
7
+ NAME_REGEX: Final = re.compile(r"^[a-zA-Z][a-zA-Z0-9_]{0,47}$")
8
+
9
+ # CloudFormation resource type to identifier key mapping for IMPORT.
10
+ CFN_RESOURCE_IDENTIFIERS: Final[dict[str, list[str]]] = {
11
+ "AWS::BedrockAgentCore::Runtime": ["AgentRuntimeId"],
12
+ "AWS::BedrockAgentCore::Memory": ["MemoryId"],
13
+ "AWS::BedrockAgentCore::Gateway": ["GatewayIdentifier"],
14
+ "AWS::BedrockAgentCore::GatewayTarget": ["GatewayIdentifier", "TargetId"],
15
+ "AWS::BedrockAgentCore::Evaluator": ["EvaluatorId"],
16
+ "AWS::BedrockAgentCore::OnlineEvaluationConfig": ["OnlineEvaluationConfigId"],
17
+ "AWS::BedrockAgentCore::Harness": ["HarnessId"],
18
+ }
19
+
20
+ # CloudFormation resource types that are primary (importable) resources. Everything else is a companion.
21
+ PRIMARY_RESOURCE_TYPES: Final[tuple[str, ...]] = (
22
+ "AWS::BedrockAgentCore::Runtime",
23
+ "AWS::BedrockAgentCore::Memory",
24
+ "AWS::BedrockAgentCore::Gateway",
25
+ "AWS::BedrockAgentCore::GatewayTarget",
26
+ "AWS::BedrockAgentCore::Evaluator",
27
+ "AWS::BedrockAgentCore::OnlineEvaluationConfig",
28
+ "AWS::BedrockAgentCore::RuntimeEndpoint",
29
+ "AWS::BedrockAgentCore::WorkloadIdentity",
30
+ "AWS::BedrockAgentCore::BrowserCustom",
31
+ "AWS::BedrockAgentCore::BrowserProfile",
32
+ "AWS::BedrockAgentCore::CodeInterpreterCustom",
33
+ "AWS::BedrockAgentCore::Policy",
34
+ "AWS::BedrockAgentCore::PolicyEngine",
35
+ "AWS::BedrockAgentCore::Harness",
36
+ )
37
+
38
+ # Map from starter toolkit runtime_type to CLI runtimeVersion.
39
+ RUNTIME_TYPE_MAP: Final[dict[str, str]] = {
40
+ "PYTHON_3_10": "PYTHON_3_10",
41
+ "PYTHON_3_11": "PYTHON_3_11",
42
+ "PYTHON_3_12": "PYTHON_3_12",
43
+ "PYTHON_3_13": "PYTHON_3_13",
44
+ "PYTHON_3_14": "PYTHON_3_14",
45
+ }
@@ -0,0 +1,140 @@
1
+ """`agentcore import evaluator` (port of commands/import/import-evaluator.ts)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ import typer
8
+
9
+ from agentcore.aws import agentcore_control
10
+ from agentcore.aws._aws_errors import is_not_found_error
11
+ from agentcore.cli.constants import ANSI
12
+ from agentcore.lib.errors.types import ValidationError
13
+ from agentcore.lib.result import Err, Ok
14
+
15
+ from .import_runtime import print_failure, print_success
16
+ from .import_utils import ImportedResource, fail_result, parse_and_validate_arn, strip_reserved_tags
17
+ from .resource_import import execute_resource_import
18
+ from .types import BeforeWriteContext, ImportResourceOptions, ImportResourceResult, ResourceImportDescriptor
19
+
20
+
21
+ def to_evaluator_spec(detail: dict[str, Any], local_name: str) -> Ok[dict[str, Any]] | Err[Exception]:
22
+ """Map a GetEvaluator response to the local Evaluator spec (``Ok({"evaluator": ...})``)."""
23
+ level = detail.get("level") or "SESSION"
24
+ cfg = detail.get("evaluatorConfig") or {}
25
+ if cfg.get("llmAsAJudge"):
26
+ llm = cfg["llmAsAJudge"]
27
+ judge: dict[str, Any] = {}
28
+ if llm.get("modelProvider"):
29
+ judge["modelProvider"] = llm["modelProvider"]
30
+ judge.update(
31
+ {"model": llm.get("model"), "instructions": llm.get("instructions"), "ratingScale": llm.get("ratingScale")}
32
+ )
33
+ config: dict[str, Any] = {"llmAsAJudge": judge}
34
+ elif cfg.get("codeBased"):
35
+ config = {"codeBased": {"external": {"lambdaArn": cfg["codeBased"].get("lambdaArn")}}}
36
+ else:
37
+ return Err(
38
+ ValidationError(
39
+ f'Evaluator "{detail.get("evaluatorName")}" has no recognizable config. '
40
+ "Only LLM-as-a-Judge and code-based evaluators can be imported."
41
+ )
42
+ )
43
+ evaluator: dict[str, Any] = {"name": local_name, "level": level}
44
+ if detail.get("description"):
45
+ evaluator["description"] = detail["description"]
46
+ evaluator["config"] = config
47
+ if detail.get("kmsKeyArn"):
48
+ evaluator["kmsKeyArn"] = detail["kmsKeyArn"]
49
+ tags = strip_reserved_tags(detail.get("tags"))
50
+ if tags:
51
+ evaluator["tags"] = tags
52
+ return Ok({"evaluator": evaluator})
53
+
54
+
55
+ def _add(detail: Any, local_name: str, spec: dict[str, Any]) -> ImportResourceResult:
56
+ result = to_evaluator_spec(detail, local_name)
57
+ if not result.success:
58
+ return ImportResourceResult(
59
+ success=False, error=result.error, resource_type="evaluator", resource_name=local_name
60
+ )
61
+ spec.setdefault("evaluators", []).append(result.value["evaluator"])
62
+ return ImportResourceResult(success=True, resource_type="evaluator", resource_name=local_name)
63
+
64
+
65
+ def _before_write(c: BeforeWriteContext[Any]) -> ImportResourceResult | None:
66
+ # CFN IMPORT of an evaluator locked by an online eval config always fails.
67
+ c.logger.start_step("Check for online eval config references")
68
+ c.on_progress("Checking if evaluator is referenced by an online eval config...")
69
+ region = c.target["region"]
70
+ summaries = agentcore_control.list_all_online_evaluation_configs(region=region)
71
+ details = []
72
+ for s in summaries:
73
+ try:
74
+ details.append(
75
+ agentcore_control.get_online_evaluation_config(region=region, config_id=s["onlineEvaluationConfigId"])
76
+ )
77
+ except Exception as exc:
78
+ if is_not_found_error(exc): # deleted between list and get
79
+ continue
80
+ raise
81
+ referencing = next((d for d in details if c.detail["evaluatorId"] in (d.get("evaluatorIds") or [])), None)
82
+ if referencing:
83
+ return fail_result(
84
+ c.logger,
85
+ f'Evaluator "{c.local_name}" is referenced by online eval config "{referencing["configName"]}" and cannot '
86
+ "be imported directly (locked by CloudFormation).\n"
87
+ "To import this evaluator along with its online eval config, run:\n"
88
+ f" agentcore import online-eval --arn {referencing['configArn']}",
89
+ "evaluator",
90
+ c.local_name,
91
+ )
92
+ c.logger.end_step("success")
93
+ return None
94
+
95
+
96
+ EVALUATOR_DESCRIPTOR: ResourceImportDescriptor[Any, Any] = ResourceImportDescriptor(
97
+ resource_type="evaluator",
98
+ display_name="evaluator",
99
+ log_command="import-evaluator",
100
+ list_resources=lambda region: agentcore_control.list_all_evaluators(region=region),
101
+ get_detail=lambda region, eid: agentcore_control.get_evaluator(region=region, evaluator_id=eid),
102
+ parse_resource_id=lambda arn, target: parse_and_validate_arn(arn, "evaluator", target).resource_id,
103
+ extract_summary_id=lambda s: s["evaluatorId"],
104
+ format_list_item=lambda s, i: (
105
+ f" {ANSI.dim}[{i + 1}]{ANSI.reset} {s['evaluatorName']} — {s['status']}\n"
106
+ f" {ANSI.dim}{s['evaluatorArn']}{ANSI.reset}"
107
+ ),
108
+ format_auto_select_message=lambda s: (
109
+ f"Found 1 evaluator: {s['evaluatorName']} ({s['evaluatorId']}). Auto-selecting."
110
+ ),
111
+ extract_detail_name=lambda d: d["evaluatorName"],
112
+ extract_detail_arn=lambda d: d["evaluatorArn"],
113
+ ready_status="ACTIVE",
114
+ extract_detail_status=lambda d: d["status"],
115
+ get_existing_names=lambda spec: [e["name"] for e in spec.get("evaluators") or []],
116
+ add_to_project_spec=_add,
117
+ cfn_resource_type="AWS::BedrockAgentCore::Evaluator",
118
+ cfn_name_property="EvaluatorName",
119
+ cfn_identifier_key="EvaluatorId",
120
+ build_deployed_state_entry=lambda name, eid, d: ImportedResource("evaluator", name, eid, d["evaluatorArn"]),
121
+ before_config_write=_before_write,
122
+ )
123
+
124
+
125
+ def handle_import_evaluator(options: ImportResourceOptions) -> ImportResourceResult:
126
+ return execute_resource_import(EVALUATOR_DESCRIPTOR, options)
127
+
128
+
129
+ def register_import_evaluator(import_app: typer.Typer) -> None:
130
+ @import_app.command("evaluator", help="Import an existing AgentCore Evaluator from your AWS account")
131
+ def import_evaluator(
132
+ arn: str | None = typer.Option(None, "--arn", help="Evaluator ARN to import"),
133
+ name: str | None = typer.Option(None, "--name", help="Local name for the imported evaluator"),
134
+ yes: bool = typer.Option(False, "-y", "--yes", help="Auto-confirm prompts"),
135
+ ) -> None:
136
+ result = handle_import_evaluator(ImportResourceOptions(arn=arn, name=name, yes=yes or None))
137
+ if result.success:
138
+ print_success("Evaluator", result, [])
139
+ else:
140
+ print_failure(result)