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,107 @@
1
+ """Poll CloudFormation stack events for deploy progress.
2
+
3
+ Upstream receives resource-level progress from ``@aws-cdk/toolkit-lib``'s stack activity monitor
4
+ (``CDK_TOOLKIT_I5502`` messages). The Python port drives the ``cdk`` CLI as a subprocess, so it
5
+ reproduces that stream by polling ``DescribeStackEvents`` while the deploy runs.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from dataclasses import dataclass, field
11
+ from datetime import UTC, datetime
12
+ from typing import Any
13
+
14
+ from agentcore.aws.account import create_aws_client
15
+ from agentcore.cloudformation.types import is_failure_event
16
+
17
+ # Clock skew allowance when deciding whether an event belongs to the current operation.
18
+ _SKEW_SECONDS = 5
19
+
20
+
21
+ def format_event_time(ts: datetime) -> str:
22
+ """``Date#toLocaleTimeString()`` in en-US form (``3:04:05 PM``)."""
23
+ local = ts.astimezone()
24
+ hour = local.hour % 12 or 12
25
+ return f"{hour}:{local.minute:02d}:{local.second:02d} {'AM' if local.hour < 12 else 'PM'}"
26
+
27
+
28
+ def format_stack_event(stack_name: str, event: dict[str, Any], completed: int, total: int) -> str:
29
+ """One activity line shaped like CDK's: ``Stack | 3/12 | 3:04:05 PM | STATUS | Type | LogicalId``."""
30
+ ts = event.get("Timestamp")
31
+ time_text = format_event_time(ts) if isinstance(ts, datetime) else ""
32
+ status = event.get("ResourceStatus") or ""
33
+ line = (
34
+ f"{stack_name} | {completed}/{total} | {time_text} | {status:<20} | "
35
+ f"{event.get('ResourceType') or ''} | {event.get('LogicalResourceId') or ''}"
36
+ )
37
+ reason = event.get("ResourceStatusReason")
38
+ if reason and is_failure_event(event):
39
+ line += f" {reason}"
40
+ return line
41
+
42
+
43
+ @dataclass
44
+ class StackEventPoller:
45
+ """Incrementally fetch new events for one stack, oldest first, starting at ``since``."""
46
+
47
+ region: str
48
+ stack_name: str
49
+ since: datetime = field(default_factory=lambda: datetime.now(UTC))
50
+ seen: set[str] = field(default_factory=set)
51
+ failures: list[dict[str, Any]] = field(default_factory=list)
52
+ _client: Any = None
53
+
54
+ def _cfn(self) -> Any:
55
+ if self._client is None:
56
+ self._client = create_aws_client("cloudformation", self.region)
57
+ return self._client
58
+
59
+ def poll(self) -> list[dict[str, Any]]:
60
+ """New events since the last poll (best effort: a missing stack or API error yields ``[]``)."""
61
+ fresh: list[dict[str, Any]] = []
62
+ token: str | None = None
63
+ try:
64
+ while True:
65
+ params: dict[str, Any] = {"StackName": self.stack_name}
66
+ if token:
67
+ params["NextToken"] = token
68
+ response = self._cfn().describe_stack_events(**params)
69
+ stop = False
70
+ for event in response.get("StackEvents") or []: # newest first
71
+ event_id = event.get("EventId")
72
+ ts = event.get("Timestamp")
73
+ if isinstance(ts, datetime):
74
+ aware = ts if ts.tzinfo else ts.replace(tzinfo=UTC)
75
+ if (self.since - aware).total_seconds() > _SKEW_SECONDS:
76
+ stop = True
77
+ break
78
+ if not event_id or event_id in self.seen:
79
+ stop = True
80
+ break
81
+ fresh.append(event)
82
+ token = response.get("NextToken")
83
+ if stop or not token:
84
+ break
85
+ except Exception: # noqa: BLE001 - progress is best-effort (ValidationError: stack not created yet)
86
+ return []
87
+ fresh.reverse()
88
+ for event in fresh:
89
+ self.seen.add(event["EventId"])
90
+ if is_failure_event(event):
91
+ self.failures.append(event)
92
+ return fresh
93
+
94
+
95
+ def describe_failures(failures: list[dict[str, Any]]) -> str:
96
+ """Human summary of failed resource events (empty string when none)."""
97
+ lines = []
98
+ for event in failures:
99
+ reason = event.get("ResourceStatusReason") or "(no reason given)"
100
+ lines.append(
101
+ f" {event.get('LogicalResourceId') or '?'} ({event.get('ResourceType') or '?'}) "
102
+ f"{event.get('ResourceStatus') or ''}: {reason}"
103
+ )
104
+ return "\n".join(lines)
105
+
106
+
107
+ __all__ = ["StackEventPoller", "describe_failures", "format_event_time", "format_stack_event"]
@@ -0,0 +1,98 @@
1
+ """Stack deployability checks (port of ``cloudformation/stack-status.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+
7
+ from agentcore.aws._aws_errors import aws_error_name
8
+ from agentcore.aws.account import create_aws_client
9
+
10
+ # Transitional states: the stack can't be updated until the current operation completes.
11
+ IN_PROGRESS_STATUSES = frozenset(
12
+ {
13
+ "CREATE_IN_PROGRESS",
14
+ "UPDATE_IN_PROGRESS",
15
+ "DELETE_IN_PROGRESS",
16
+ "ROLLBACK_IN_PROGRESS",
17
+ "UPDATE_ROLLBACK_IN_PROGRESS",
18
+ "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS",
19
+ "DELETE_COMPLETE_CLEANUP_IN_PROGRESS",
20
+ "REVIEW_IN_PROGRESS",
21
+ "IMPORT_IN_PROGRESS",
22
+ "IMPORT_ROLLBACK_IN_PROGRESS",
23
+ }
24
+ )
25
+
26
+ # Failed states that may require manual intervention.
27
+ FAILED_STATUSES = frozenset(
28
+ {"CREATE_FAILED", "ROLLBACK_FAILED", "DELETE_FAILED", "UPDATE_ROLLBACK_FAILED", "IMPORT_ROLLBACK_FAILED"}
29
+ )
30
+
31
+
32
+ @dataclass(frozen=True)
33
+ class StackStatusResult:
34
+ can_deploy: bool
35
+ exists: bool
36
+ status: str | None = None
37
+ message: str | None = None
38
+
39
+
40
+ @dataclass(frozen=True)
41
+ class BlockingStack:
42
+ stack_name: str
43
+ result: StackStatusResult
44
+
45
+
46
+ def check_stack_status(region: str, stack_name: str) -> StackStatusResult:
47
+ """Whether ``stack_name`` can be deployed to (missing or stable stacks can)."""
48
+ cfn = create_aws_client("cloudformation", region)
49
+ try:
50
+ resp = cfn.describe_stacks(StackName=stack_name)
51
+ except Exception as exc:
52
+ # Stack doesn't exist - safe to deploy (will create new stack)
53
+ if aws_error_name(exc) == "ValidationError":
54
+ return StackStatusResult(can_deploy=True, exists=False)
55
+ raise
56
+
57
+ stacks = resp.get("Stacks") or []
58
+ status = stacks[0].get("StackStatus") if stacks else None
59
+ if not status:
60
+ return StackStatusResult(can_deploy=True, exists=True)
61
+
62
+ if status in IN_PROGRESS_STATUSES:
63
+ return StackStatusResult(
64
+ can_deploy=False,
65
+ exists=True,
66
+ status=status,
67
+ message=(
68
+ f'Stack "{stack_name}" is currently in {status} state. '
69
+ "Please wait for the operation to complete before deploying."
70
+ ),
71
+ )
72
+ if status in FAILED_STATUSES:
73
+ return StackStatusResult(
74
+ can_deploy=False,
75
+ exists=True,
76
+ status=status,
77
+ message=f'Stack "{stack_name}" is in {status} state. Manual intervention may be required before deploying.',
78
+ )
79
+ return StackStatusResult(can_deploy=True, exists=True, status=status)
80
+
81
+
82
+ def check_stacks_status(region: str, stack_names: list[str]) -> BlockingStack | None:
83
+ """The first stack that blocks deployment, or None when all are deployable."""
84
+ for stack_name in stack_names:
85
+ result = check_stack_status(region, stack_name)
86
+ if not result.can_deploy:
87
+ return BlockingStack(stack_name=stack_name, result=result)
88
+ return None
89
+
90
+
91
+ __all__ = [
92
+ "FAILED_STATUSES",
93
+ "IN_PROGRESS_STATUSES",
94
+ "BlockingStack",
95
+ "StackStatusResult",
96
+ "check_stack_status",
97
+ "check_stacks_status",
98
+ ]
@@ -0,0 +1,44 @@
1
+ """Stack status helpers shared by progress rendering (port of ``cloudformation/types.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Literal
6
+
7
+ TERMINAL_STACK_STATUSES = frozenset(
8
+ {
9
+ "CREATE_COMPLETE",
10
+ "UPDATE_COMPLETE",
11
+ "UPDATE_ROLLBACK_COMPLETE",
12
+ "ROLLBACK_COMPLETE",
13
+ "CREATE_FAILED",
14
+ "DELETE_FAILED",
15
+ "DELETE_COMPLETE",
16
+ "UPDATE_ROLLBACK_FAILED",
17
+ "ROLLBACK_FAILED",
18
+ "IMPORT_COMPLETE",
19
+ "IMPORT_ROLLBACK_COMPLETE",
20
+ "IMPORT_ROLLBACK_FAILED",
21
+ }
22
+ )
23
+
24
+
25
+ def failure_like(status: str | None) -> bool:
26
+ """Port of ``FAILURE_LIKE``."""
27
+ return bool(status) and (status.endswith("_FAILED") or "ROLLBACK" in status or status == "DELETE_FAILED")
28
+
29
+
30
+ def get_status_color(status: str) -> Literal["green", "red", "yellow", "white"]:
31
+ if "COMPLETE" in status and "ROLLBACK" not in status:
32
+ return "green"
33
+ if "FAILED" in status or "ROLLBACK" in status:
34
+ return "red"
35
+ if "PROGRESS" in status:
36
+ return "yellow"
37
+ return "white"
38
+
39
+
40
+ def is_failure_event(event: dict[str, Any]) -> bool:
41
+ return (event.get("ResourceStatus") or "").endswith("FAILED")
42
+
43
+
44
+ __all__ = ["TERMINAL_STACK_STATUSES", "failure_like", "get_status_color", "is_failure_event"]
@@ -0,0 +1,68 @@
1
+ """Shared library layer (port of upstream ``src/lib``).
2
+
3
+ Schema models are not re-exported here (upstream re-exports ``src/schema``); import them from
4
+ ``agentcore.schema``.
5
+ """
6
+
7
+ from agentcore.lib.constants import (
8
+ APP_DIR,
9
+ CLI_LOGS_DIR,
10
+ CLI_SYSTEM_DIR,
11
+ CONFIG_DIR,
12
+ CONFIG_FILES,
13
+ CONTAINER_INTERNAL_PORT,
14
+ CONTAINER_RUNTIMES,
15
+ DEFAULT_PYTHON_PLATFORM,
16
+ DOCKERFILE_NAME,
17
+ ENV_FILE,
18
+ MCP_APP_SUBDIR,
19
+ ONE_GB,
20
+ UV_INSTALL_HINT,
21
+ ContainerRuntime,
22
+ get_artifact_zip_name,
23
+ get_dockerfile_path,
24
+ )
25
+ from agentcore.lib.errors import * # noqa: F403
26
+ from agentcore.lib.errors import __all__ as _errors_all
27
+ from agentcore.lib.packaging import * # noqa: F403
28
+ from agentcore.lib.packaging import __all__ as _packaging_all
29
+ from agentcore.lib.result import Err, Ok, Result, err, ok, serialize_result, unwrap_result
30
+ from agentcore.lib.schemas.io import * # noqa: F403
31
+ from agentcore.lib.schemas.io import __all__ as _io_all
32
+ from agentcore.lib.time_constants import ONE_DAY_MS, ONE_HOUR_MS, ONE_MINUTE_MS, ONE_SECOND_MS
33
+ from agentcore.lib.utils import * # noqa: F403
34
+ from agentcore.lib.utils import __all__ as _utils_all
35
+
36
+ __all__ = [
37
+ "APP_DIR",
38
+ "CLI_LOGS_DIR",
39
+ "CLI_SYSTEM_DIR",
40
+ "CONFIG_DIR",
41
+ "CONFIG_FILES",
42
+ "CONTAINER_INTERNAL_PORT",
43
+ "CONTAINER_RUNTIMES",
44
+ "DEFAULT_PYTHON_PLATFORM",
45
+ "DOCKERFILE_NAME",
46
+ "ENV_FILE",
47
+ "MCP_APP_SUBDIR",
48
+ "ONE_DAY_MS",
49
+ "ONE_GB",
50
+ "ONE_HOUR_MS",
51
+ "ONE_MINUTE_MS",
52
+ "ONE_SECOND_MS",
53
+ "UV_INSTALL_HINT",
54
+ "ContainerRuntime",
55
+ "Err",
56
+ "Ok",
57
+ "Result",
58
+ "err",
59
+ "get_artifact_zip_name",
60
+ "get_dockerfile_path",
61
+ "ok",
62
+ "serialize_result",
63
+ "unwrap_result",
64
+ *_errors_all,
65
+ *_packaging_all,
66
+ *_io_all,
67
+ *_utils_all,
68
+ ]
@@ -0,0 +1,77 @@
1
+ """Shared constants (port of ``src/lib/constants.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ import re
7
+ from typing import Final, Literal
8
+
9
+ # Configuration directory and file names
10
+ CONFIG_DIR: Final = "agentcore"
11
+
12
+ # Application code directory (for generated agents and MCP tools)
13
+ APP_DIR: Final = "app"
14
+ MCP_APP_SUBDIR: Final = "mcp"
15
+
16
+ HARNESS_DIR: Final = "harnesses"
17
+
18
+ # CLI system subdirectory (inside CONFIG_DIR)
19
+ CLI_SYSTEM_DIR: Final = ".cli"
20
+ CLI_LOGS_DIR: Final = "logs"
21
+
22
+
23
+ class CONFIG_FILES: # noqa: N801 - mirrors the upstream constant object
24
+ AGENT_ENV: Final = "agentcore.json"
25
+ AWS_TARGETS: Final = "aws-targets.json"
26
+ DEPLOYED_STATE: Final = "deployed-state.json"
27
+ MCP_DEFS: Final = "mcp-defs.json"
28
+
29
+
30
+ # Environment file for secrets (API keys, etc.) - local only, not committed
31
+ ENV_FILE: Final = ".env.local"
32
+
33
+
34
+ def get_artifact_zip_name(name: str) -> str:
35
+ return f"{name}.zip"
36
+
37
+
38
+ UV_INSTALL_HINT: Final = "Install uv from https://github.com/astral-sh/uv#installation and ensure it is on your PATH."
39
+ NPM_INSTALL_HINT: Final = "Install npm from https://nodejs.org/ and ensure it is on your PATH."
40
+ DEFAULT_PYTHON_PLATFORM: Final = "aarch64-manylinux2014"
41
+
42
+ # Container constants
43
+ ONE_GB: Final = 1024 * 1024 * 1024
44
+ DOCKERFILE_NAME: Final = "Dockerfile"
45
+ CONTAINER_INTERNAL_PORT: Final = 8080
46
+
47
+ ContainerRuntime = Literal["docker", "podman", "finch"]
48
+ # Supported container runtimes in order of preference.
49
+ CONTAINER_RUNTIMES: Final[tuple[ContainerRuntime, ...]] = ("docker", "podman", "finch")
50
+
51
+ _DOCKERFILE_PATH_ALLOWED_CHARS = re.compile(r"[A-Za-z0-9._/-]+")
52
+
53
+
54
+ def is_valid_dockerfile_path(p: str) -> bool:
55
+ """Same rule as the schema's ``isValidDockerfilePath``: a safe relative path in the build context."""
56
+ try:
57
+ from agentcore.schema import is_valid_dockerfile_path as schema_check # type: ignore[attr-defined]
58
+ except Exception: # schema package absent or not importable
59
+ schema_check = None
60
+ if schema_check is not None:
61
+ return bool(schema_check(p))
62
+ if not _DOCKERFILE_PATH_ALLOWED_CHARS.fullmatch(p):
63
+ return False
64
+ if p.startswith("/"):
65
+ return False
66
+ return not any(segment in ("", "..") for segment in p.split("/"))
67
+
68
+
69
+ def get_dockerfile_path(build_context: str, dockerfile: str | None = None) -> str:
70
+ """Resolve the Dockerfile path against the Docker build context, rejecting escapes."""
71
+ name = dockerfile if dockerfile is not None else DOCKERFILE_NAME
72
+ if not is_valid_dockerfile_path(name):
73
+ raise ValueError(
74
+ f'Invalid dockerfile path "{name}": must be a relative path within the build context (a filename or '
75
+ 'forward-slash subpath; no leading slash, backslash, empty segments, or ".." traversal)'
76
+ )
77
+ return os.path.join(build_context, name)
@@ -0,0 +1,23 @@
1
+ from agentcore.lib.dependency_management.plan import SkewFinding, SyncPlan, compute_sync_plan
2
+ from agentcore.lib.dependency_management.sync import sync_managed_dependencies
3
+ from agentcore.lib.dependency_management.types import (
4
+ DependencyChange,
5
+ DependencySyncOutcome,
6
+ DependencySyncResult,
7
+ PackageManifest,
8
+ RestoredDependency,
9
+ SkippedDependency,
10
+ )
11
+
12
+ __all__ = [
13
+ "DependencyChange",
14
+ "DependencySyncOutcome",
15
+ "DependencySyncResult",
16
+ "PackageManifest",
17
+ "RestoredDependency",
18
+ "SkewFinding",
19
+ "SkippedDependency",
20
+ "SyncPlan",
21
+ "compute_sync_plan",
22
+ "sync_managed_dependencies",
23
+ ]
@@ -0,0 +1,92 @@
1
+ """User-facing wording for dependency management (port of ``messages.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Sequence
6
+
7
+ from agentcore.lib.dependency_management.plan import SkewFinding
8
+ from agentcore.lib.dependency_management.types import DependencyChange, RestoredDependency, SkippedDependency
9
+
10
+ # Fallback when the CLI layer doesn't pass its distro-aware install command.
11
+ DEFAULT_CLI_INSTALL_COMMAND = "npm install -g @aws/agentcore@latest"
12
+
13
+ OPT_OUT_HINT = "To manage these versions yourself: agentcore config disableDependencyManagement true"
14
+
15
+ _MIGRATION_PREAMBLE = (
16
+ "Your project was created before the AgentCore CLI managed dependency versions.\n"
17
+ "We've updated agentcore/cdk/package.json so the CLI keeps these dependencies\n"
18
+ "on versions it has been tested with (patch updates still apply automatically):"
19
+ )
20
+
21
+ # Check-mode variant: nothing was written, so promise rather than claim.
22
+ _MIGRATION_PREAMBLE_PENDING = (
23
+ "Your project was created before the AgentCore CLI managed dependency versions.\n"
24
+ "agentcore/cdk/package.json will be updated on the next deploy so the CLI keeps these\n"
25
+ "dependencies on versions it has been tested with (patch updates still apply automatically):"
26
+ )
27
+
28
+
29
+ def _format_skew_list(skew: Sequence[SkewFinding]) -> str:
30
+ return ", ".join(f"{s.name} ({s.declared}, CLI expects {s.expected})" for s in skew)
31
+
32
+
33
+ def format_cli_upgrade_error(skew: Sequence[SkewFinding], install_command: str) -> str:
34
+ plural = len(skew) > 1
35
+ return (
36
+ f"This project requires a newer version of the AgentCore CLI: {_format_skew_list(skew)} "
37
+ f"{'are' if plural else 'is'} newer than this CLI was tested with. "
38
+ f"Run `{install_command}` and retry.\n"
39
+ f"If you intentionally updated {'these dependencies' if plural else 'this dependency'} yourself, "
40
+ "you can disable managed dependency versions instead:\n" + OPT_OUT_HINT
41
+ )
42
+
43
+
44
+ def _format_change_table(changes: Sequence[DependencyChange], restored: Sequence[RestoredDependency]) -> str:
45
+ rows = [(c.name, c.from_, c.to) for c in changes] + [(r.name, "(removed)", r.to) for r in restored]
46
+ name_width = max(len(r[0]) for r in rows)
47
+ from_width = max(len(r[1]) for r in rows)
48
+ return "\n".join(f" {name.ljust(name_width)} {frm.ljust(from_width)} → {to}" for name, frm, to in rows)
49
+
50
+
51
+ def format_sync_notice(
52
+ *,
53
+ migrated_from_caret: bool,
54
+ changes: Sequence[DependencyChange],
55
+ restored: Sequence[RestoredDependency],
56
+ reinstalled: bool,
57
+ applied: bool,
58
+ ) -> str | None:
59
+ """Notice summarising managed-dependency updates; ``applied=False`` (check mode) uses future tense."""
60
+ if not changes and not restored:
61
+ return None
62
+ lines: list[str] = []
63
+ if migrated_from_caret:
64
+ lines.append(_MIGRATION_PREAMBLE if applied else _MIGRATION_PREAMBLE_PENDING)
65
+ else:
66
+ lines.append(
67
+ "Updated managed dependencies in agentcore/cdk/package.json:"
68
+ if applied
69
+ else "Managed dependencies in agentcore/cdk/package.json will be updated on the next deploy:"
70
+ )
71
+ lines += ["", _format_change_table(changes, restored), ""]
72
+ if reinstalled:
73
+ lines.append("Ran npm install in agentcore/cdk to apply the updates.")
74
+ lines.append(
75
+ "Dependencies you added yourself were not changed."
76
+ if applied
77
+ else "Dependencies you added yourself will not be changed."
78
+ )
79
+ if migrated_from_caret:
80
+ lines.append(OPT_OUT_HINT)
81
+ return "\n".join(lines)
82
+
83
+
84
+ def format_skew_warning(skew: Sequence[SkewFinding], install_command: str) -> str:
85
+ return (
86
+ f"{_format_skew_list(skew)} {'is' if len(skew) == 1 else 'are'} newer than this CLI was tested with; "
87
+ f"deploy may fail — upgrade the CLI with `{install_command}`. {OPT_OUT_HINT}"
88
+ )
89
+
90
+
91
+ def format_skipped_warning(skipped: SkippedDependency) -> str:
92
+ return f"{skipped.name} ({skipped.raw}) {skipped.reason}."
@@ -0,0 +1,98 @@
1
+ """Pure managed-dependency sync policy (port of ``plan.ts``). No I/O.
2
+
3
+ A dependency is managed iff it is named in the vended manifest; its vended specifier is
4
+ authoritative and copied verbatim.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from collections.abc import Mapping
10
+ from dataclasses import dataclass, field
11
+ from typing import Any
12
+
13
+ from agentcore.lib.dependency_management.semver import ParsedSpecifier, compare, parse_specifier
14
+ from agentcore.lib.dependency_management.types import (
15
+ DependencyChange,
16
+ DependencySection,
17
+ RestoredDependency,
18
+ SkippedDependency,
19
+ )
20
+
21
+ _SECTIONS: tuple[DependencySection, ...] = ("dependencies", "devDependencies")
22
+
23
+
24
+ @dataclass(frozen=True, slots=True)
25
+ class SkewFinding:
26
+ name: str
27
+ declared: str
28
+ expected: str
29
+
30
+
31
+ @dataclass(slots=True)
32
+ class SyncPlan:
33
+ # Managed deps where the project declares a newer minor/major than the CLI expects.
34
+ skew: list[SkewFinding] = field(default_factory=list)
35
+ changes: list[DependencyChange] = field(default_factory=list)
36
+ restored: list[RestoredDependency] = field(default_factory=list)
37
+ skipped: list[SkippedDependency] = field(default_factory=list)
38
+ # Any managed dep had a caret range: the project predates pinning.
39
+ migrated_from_caret: bool = False
40
+
41
+
42
+ def _find_declared(manifest: Mapping[str, Any], name: str) -> tuple[DependencySection, str] | None:
43
+ for section in _SECTIONS:
44
+ deps = manifest.get(section) or {}
45
+ if name in deps and deps[name] is not None:
46
+ return section, deps[name]
47
+ return None
48
+
49
+
50
+ def _is_skewed(declared: ParsedSpecifier, expected: ParsedSpecifier) -> bool:
51
+ """Declared is ahead in a way patch-floating can't explain: higher major.minor for ranges, or
52
+ any prerelease-aware greater-than for exact pins (so alpha.20 never drops to alpha.19)."""
53
+ if declared.version is None or expected.version is None:
54
+ return False
55
+ d, e = declared.version, expected.version
56
+ if expected.kind == "exact":
57
+ return compare(d, e) > 0
58
+ if d.major != e.major:
59
+ return d.major > e.major
60
+ return d.minor > e.minor
61
+
62
+
63
+ def compute_sync_plan(vended: Mapping[str, Any], project: Mapping[str, Any]) -> SyncPlan:
64
+ plan = SyncPlan()
65
+ for section in _SECTIONS:
66
+ for name, expected_raw in (vended.get(section) or {}).items():
67
+ expected = parse_specifier(expected_raw)
68
+ declared = _find_declared(project, name)
69
+
70
+ if declared is None:
71
+ # Deleted by the user; the vended CDK app can't build without it.
72
+ plan.restored.append(RestoredDependency(name=name, section=section, to=expected_raw))
73
+ continue
74
+
75
+ declared_section, declared_raw = declared
76
+ if declared_raw == expected_raw:
77
+ continue
78
+
79
+ declared_spec = parse_specifier(declared_raw)
80
+ if declared_spec.kind == "unsupported":
81
+ # file:/git:/tag/range specifiers are deliberate local overrides.
82
+ plan.skipped.append(
83
+ SkippedDependency(
84
+ name=name, raw=declared_raw, reason="uses a non-semver specifier and was left unmanaged"
85
+ )
86
+ )
87
+ continue
88
+
89
+ if _is_skewed(declared_spec, expected):
90
+ plan.skew.append(SkewFinding(name=name, declared=declared_raw, expected=expected_raw))
91
+ continue
92
+
93
+ if declared_spec.kind == "caret":
94
+ plan.migrated_from_caret = True
95
+ plan.changes.append(
96
+ DependencyChange(name=name, section=declared_section, from_=declared_raw, to=expected_raw)
97
+ )
98
+ return plan