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,237 @@
1
+ """Port of operations/dev/container-dev-server.ts: build and run the agent's Docker image locally."""
2
+
3
+ import os
4
+ import re
5
+ import subprocess
6
+ import threading
7
+ from collections.abc import Callable
8
+
9
+ from agentcore.lib.constants import CONTAINER_INTERNAL_PORT, DOCKERFILE_NAME, get_dockerfile_path
10
+ from agentcore.lib.packaging.build_args import get_custom_build_args, get_uv_build_args
11
+ from agentcore.lib.packaging.build_context_dockerignore import ensure_build_context_dockerignore
12
+ from agentcore.operations.dev.constants import A2A_DEFAULT_PORT, A2A_PORT_ENV, MCP_DEFAULT_PORT
13
+ from agentcore.operations.dev.container_runtime import detect_container_runtime
14
+ from agentcore.operations.dev.dev_server import DevServer, LogLevel, SpawnConfig
15
+ from agentcore.operations.dev.utils import wait_for_server_ready
16
+
17
+
18
+ class ContainerDevServer(DevServer):
19
+ runtime_binary = ""
20
+
21
+ @property
22
+ def image_name(self) -> str:
23
+ """Docker image names must be lowercase."""
24
+ return f"agentcore-dev-{self.config.agent_name}".lower()
25
+
26
+ @property
27
+ def container_name(self) -> str:
28
+ return self.image_name
29
+
30
+ def start(self): # type: ignore[no-untyped-def]
31
+ """Spawn `docker run`, then wait (up to 60s) for the mapped port to accept connections."""
32
+ child = super().start()
33
+ if child is not None:
34
+ on_log = self.options.callbacks.on_log
35
+ on_log("system", f"Container {self.container_name} started, waiting for server to be ready...")
36
+ if wait_for_server_ready(self.options.port):
37
+ # Readiness marker the terminal dev loop looks for.
38
+ on_log("info", "Application startup complete")
39
+ else:
40
+ on_log("error", "Container server did not become ready within 60 seconds.")
41
+ return child
42
+
43
+ def kill(self) -> None:
44
+ """Stop the container (fire-and-forget) so its port proxy is cleaned up, then kill the client."""
45
+ if self.runtime_binary:
46
+ try:
47
+ subprocess.Popen(
48
+ [self.runtime_binary, "stop", self.container_name],
49
+ stdin=subprocess.DEVNULL,
50
+ stdout=subprocess.DEVNULL,
51
+ stderr=subprocess.DEVNULL,
52
+ )
53
+ except OSError:
54
+ pass
55
+ super().kill()
56
+
57
+ def prepare(self) -> bool:
58
+ on_log = self.options.callbacks.on_log
59
+
60
+ runtime = detect_container_runtime()
61
+ if runtime is None:
62
+ on_log("error", "No container runtime found. Install Docker, Podman, or Finch.")
63
+ return False
64
+ self.runtime_binary = runtime.binary
65
+
66
+ build_context = self.config.build_context_path or self.config.directory
67
+ dockerfile_name = self.config.dockerfile or DOCKERFILE_NAME
68
+ dockerfile_path = get_dockerfile_path(build_context, self.config.dockerfile)
69
+ if not os.path.exists(dockerfile_path):
70
+ on_log("error", f"{dockerfile_name} not found at {dockerfile_path}. Container agents require a Dockerfile.")
71
+ return False
72
+
73
+ if self.config.build_context_path:
74
+ created = ensure_build_context_dockerignore(build_context)
75
+ if created:
76
+ on_log(
77
+ "system",
78
+ f"Created {created} with default secret exclusions (buildContextPath is set); review and commit it.",
79
+ )
80
+
81
+ # Remove any stale container from a previous run (prevents "proxy already running" errors).
82
+ try:
83
+ subprocess.run(
84
+ [self.runtime_binary, "rm", "-f", self.container_name],
85
+ stdin=subprocess.DEVNULL,
86
+ stdout=subprocess.DEVNULL,
87
+ stderr=subprocess.DEVNULL,
88
+ )
89
+ except OSError:
90
+ pass
91
+
92
+ on_log("system", f"Building container image: {self.image_name}...")
93
+ build_arg_flags = get_custom_build_args(self.config.custom_docker_build_args)
94
+ exit_code = self._stream_build(
95
+ ["-t", self.image_name, "-f", dockerfile_path, *get_uv_build_args(), *build_arg_flags, build_context],
96
+ on_log,
97
+ )
98
+ if exit_code != 0:
99
+ on_log("error", f"Container build failed (exit code {exit_code})")
100
+ return False
101
+ on_log("system", "Container image built successfully.")
102
+ return True
103
+
104
+ def _stream_build(self, args: list[str], on_log: Callable[[LogLevel, str], None]) -> int | None:
105
+ try:
106
+ proc = subprocess.Popen(
107
+ [self.runtime_binary, "build", *args],
108
+ stdin=subprocess.DEVNULL,
109
+ stdout=subprocess.PIPE,
110
+ stderr=subprocess.PIPE,
111
+ )
112
+ except OSError as exc:
113
+ on_log("error", f"Build process error: {exc}")
114
+ return 1
115
+
116
+ def pump(stream) -> None: # type: ignore[no-untyped-def]
117
+ for raw in iter(stream.readline, b""):
118
+ line = raw.decode("utf-8", errors="replace").rstrip("\r\n")
119
+ if line.strip():
120
+ on_log("system", line)
121
+ stream.close()
122
+
123
+ threads = [threading.Thread(target=pump, args=(s,), daemon=True) for s in (proc.stdout, proc.stderr)]
124
+ for t in threads:
125
+ t.start()
126
+ returncode = proc.wait()
127
+ for t in threads:
128
+ t.join()
129
+ return None if returncode < 0 else returncode
130
+
131
+ def _resolve_host_credentials(self) -> dict[str, str] | None:
132
+ """Resolve AWS credentials on the host via `aws configure export-credentials`.
133
+
134
+ Container images run as a non-root user that cannot read the mounted ~/.aws files and
135
+ lack credential_process helpers, so short-lived host credentials are injected instead.
136
+ """
137
+ profile = os.environ.get("AWS_PROFILE", "default")
138
+ try:
139
+ result = subprocess.run(
140
+ ["aws", "configure", "export-credentials", "--format", "env", "--profile", profile],
141
+ stdin=subprocess.DEVNULL,
142
+ capture_output=True,
143
+ text=True,
144
+ timeout=10,
145
+ env=dict(os.environ),
146
+ )
147
+ except (OSError, subprocess.TimeoutExpired):
148
+ return None
149
+ if result.returncode != 0 or not result.stdout:
150
+ return None
151
+ creds: dict[str, str] = {}
152
+ for line in result.stdout.split("\n"):
153
+ match = re.match(r"^export\s+(AWS_\w+)=(.+)$", line)
154
+ if match and match.group(1) and match.group(2):
155
+ creds[match.group(1)] = match.group(2)
156
+ return creds if creds.get("AWS_ACCESS_KEY_ID") else None
157
+
158
+ def get_spawn_config(self) -> SpawnConfig:
159
+ port = self.options.port
160
+ env_vars = self.options.env_vars or {}
161
+ protocol = self.config.protocol
162
+ internal_port = (
163
+ A2A_DEFAULT_PORT
164
+ if protocol == "A2A"
165
+ else MCP_DEFAULT_PORT
166
+ if protocol == "MCP"
167
+ else CONTAINER_INTERNAL_PORT
168
+ )
169
+
170
+ has_explicit_creds = bool(os.environ.get("AWS_ACCESS_KEY_ID"))
171
+ if not has_explicit_creds:
172
+ resolved = self._resolve_host_credentials()
173
+ if resolved:
174
+ os.environ.update(resolved)
175
+ has_explicit_creds = True
176
+
177
+ aws_env_keys = [
178
+ "AWS_ACCESS_KEY_ID",
179
+ "AWS_SECRET_ACCESS_KEY",
180
+ "AWS_SESSION_TOKEN",
181
+ "AWS_REGION",
182
+ "AWS_DEFAULT_REGION",
183
+ *([] if has_explicit_creds else ["AWS_PROFILE"]),
184
+ ]
185
+ aws_env = {k: os.environ[k] for k in aws_env_keys if os.environ.get(k)}
186
+
187
+ aws_dir = os.path.join(os.path.expanduser("~"), ".aws")
188
+ aws_container_path = "/aws-config"
189
+ mount = not has_explicit_creds and os.path.exists(aws_dir)
190
+ aws_mount_args = ["-v", f"{aws_dir}:{aws_container_path}:ro"] if mount else []
191
+ aws_config_env = (
192
+ {
193
+ "AWS_CONFIG_FILE": f"{aws_container_path}/config",
194
+ "AWS_SHARED_CREDENTIALS_FILE": f"{aws_container_path}/credentials",
195
+ }
196
+ if mount
197
+ else {}
198
+ )
199
+
200
+ # Inside the container 127.0.0.1 is the container itself: point OTEL at the host collector.
201
+ container_env = dict(env_vars)
202
+ if container_env.get("OTEL_EXPORTER_OTLP_ENDPOINT"):
203
+ container_env["OTEL_EXPORTER_OTLP_ENDPOINT"] = (
204
+ container_env["OTEL_EXPORTER_OTLP_ENDPOINT"]
205
+ .replace("127.0.0.1", "host.docker.internal", 1)
206
+ .replace("localhost", "host.docker.internal", 1)
207
+ )
208
+
209
+ merged = {
210
+ **aws_env,
211
+ **aws_config_env,
212
+ **container_env,
213
+ "LOCAL_DEV": "1",
214
+ "PORT": str(internal_port),
215
+ **(
216
+ {"AGENTCORE_RUNTIME_URL": f"http://localhost:{port}/", A2A_PORT_ENV: str(internal_port)}
217
+ if protocol == "A2A"
218
+ else {}
219
+ ),
220
+ }
221
+ env_args = [part for k, v in merged.items() for part in ("-e", f"{k}={v}")]
222
+
223
+ return SpawnConfig(
224
+ cmd=self.runtime_binary,
225
+ args=[
226
+ "run",
227
+ "--rm",
228
+ "--name",
229
+ self.container_name,
230
+ *aws_mount_args,
231
+ "-p",
232
+ f"{port}:{internal_port}",
233
+ *env_args,
234
+ self.image_name,
235
+ ],
236
+ env=dict(os.environ),
237
+ )
@@ -0,0 +1,37 @@
1
+ """Port of detectContainerRuntime (src/cli/external-requirements/detect.ts) used by dev/exec.
2
+
3
+ Kept local to dev because the shared `lib.packaging.container.detect_container_runtime` skips the
4
+ ``build --help`` shim check and returns only a name.
5
+ """
6
+
7
+ import re
8
+ from dataclasses import dataclass
9
+
10
+ from agentcore.lib.constants import CONTAINER_RUNTIMES
11
+ from agentcore.lib.utils.platform import is_windows
12
+ from agentcore.lib.utils.subprocess import check_subprocess, run_subprocess_capture
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class ContainerRuntimeInfo:
17
+ runtime: str
18
+ binary: str
19
+ version: str
20
+
21
+
22
+ def detect_container_runtime() -> ContainerRuntimeInfo | None:
23
+ for runtime in CONTAINER_RUNTIMES:
24
+ exists = check_subprocess("where" if is_windows else "which", [runtime])
25
+ if not exists:
26
+ continue
27
+ result = run_subprocess_capture(runtime, ["--version"])
28
+ if result.code != 0:
29
+ continue
30
+ build_check = run_subprocess_capture(runtime, ["build", "--help"])
31
+ if build_check.code != 0:
32
+ continue
33
+ if build_check.stderr and re.search(r"unknown command|not found", build_check.stderr, re.IGNORECASE):
34
+ continue
35
+ version = (result.stdout.strip().split("\n") or ["unknown"])[0] or "unknown"
36
+ return ContainerRuntimeInfo(runtime=runtime, binary=runtime, version=version)
37
+ return None
@@ -0,0 +1,244 @@
1
+ """Port of operations/dev/dev-server.ts: spawn and supervise the local agent process."""
2
+
3
+ import atexit
4
+ import os
5
+ import signal
6
+ import subprocess
7
+ import threading
8
+ from abc import ABC, abstractmethod
9
+ from collections.abc import Callable
10
+ from dataclasses import dataclass, field
11
+ from typing import Literal
12
+
13
+ from agentcore.lib.utils.platform import is_windows
14
+ from agentcore.operations.dev.config import DevConfig
15
+
16
+ LogLevel = Literal["info", "warn", "error", "system"]
17
+
18
+ # Keep the last 20 stderr lines so we can surface them if the process crashes.
19
+ STDERR_BUFFER_SIZE = 20
20
+
21
+ # Paths that indicate internal framework frames (not user code).
22
+ INTERNAL_FRAME_PATTERNS = (
23
+ "/site-packages/",
24
+ "<frozen ",
25
+ "/multiprocessing/",
26
+ "/asyncio/",
27
+ "/concurrent/",
28
+ "/importlib/",
29
+ )
30
+
31
+
32
+ def _is_internal_frame(line: str) -> bool:
33
+ return any(p in line for p in INTERNAL_FRAME_PATTERNS)
34
+
35
+
36
+ @dataclass
37
+ class DevServerCallbacks:
38
+ on_log: Callable[[LogLevel, str], None]
39
+ on_exit: Callable[[int | None], None]
40
+
41
+
42
+ @dataclass
43
+ class DevServerOptions:
44
+ port: int
45
+ callbacks: DevServerCallbacks
46
+ env_vars: dict[str, str] = field(default_factory=dict)
47
+
48
+
49
+ @dataclass
50
+ class SpawnConfig:
51
+ cmd: str
52
+ args: list[str]
53
+ env: dict[str, str]
54
+ cwd: str | None = None
55
+
56
+
57
+ class DevServer(ABC):
58
+ """Base class: ``prepare()`` does mode-specific setup, ``get_spawn_config()`` the command line."""
59
+
60
+ def __init__(self, config: DevConfig, options: DevServerOptions):
61
+ self.config = config
62
+ self.options = options
63
+ self.child: subprocess.Popen[bytes] | None = None
64
+ self._killed = False
65
+ self._recent_stderr: list[str] = []
66
+ self._in_traceback = False
67
+ self._traceback_buffer: list[str] = []
68
+ self._exit_cleanup: Callable[[], None] | None = None
69
+ self._lock = threading.Lock()
70
+
71
+ # --- lifecycle ------------------------------------------------------------------------
72
+
73
+ def start(self) -> subprocess.Popen[bytes] | None:
74
+ """Prepare, then spawn the process. Returns None when preparation (or the spawn) failed."""
75
+ if not self.prepare():
76
+ self.options.callbacks.on_exit(1)
77
+ return None
78
+
79
+ spawn = self.get_spawn_config()
80
+ try:
81
+ self.child = subprocess.Popen(
82
+ [spawn.cmd, *spawn.args],
83
+ cwd=spawn.cwd,
84
+ env=spawn.env,
85
+ stdin=subprocess.DEVNULL,
86
+ stdout=subprocess.PIPE,
87
+ stderr=subprocess.PIPE,
88
+ start_new_session=not is_windows, # detached: own process group, like upstream
89
+ )
90
+ except OSError as exc:
91
+ self.options.callbacks.on_log("error", f"Failed to start: {exc}")
92
+ self.options.callbacks.on_exit(1)
93
+ return None
94
+
95
+ self._attach_handlers()
96
+ self._register_exit_cleanup()
97
+ return self.child
98
+
99
+ def _register_exit_cleanup(self) -> None:
100
+ """Reap the detached child's process group if this process exits without kill()."""
101
+ pid = self.child.pid if self.child else None
102
+ if is_windows or not pid:
103
+ return
104
+
105
+ def reap() -> None:
106
+ try:
107
+ os.killpg(pid, signal.SIGKILL)
108
+ except OSError:
109
+ pass # group already gone
110
+
111
+ self._exit_cleanup = reap
112
+ atexit.register(reap)
113
+
114
+ def _clear_exit_cleanup(self) -> None:
115
+ if self._exit_cleanup is not None:
116
+ atexit.unregister(self._exit_cleanup)
117
+ self._exit_cleanup = None
118
+
119
+ def kill(self) -> None:
120
+ """SIGTERM the process tree, then SIGKILL after 2 seconds if it is still alive."""
121
+ if self.child is None or self._killed or self.child.poll() is not None:
122
+ return
123
+ self._killed = True
124
+ self._signal_process_tree(signal.SIGTERM)
125
+
126
+ def force() -> None:
127
+ if self.child is not None and self.child.poll() is None:
128
+ self._signal_process_tree(signal.SIGKILL if not is_windows else signal.SIGTERM)
129
+
130
+ timer = threading.Timer(2.0, force)
131
+ timer.daemon = True
132
+ timer.start()
133
+
134
+ def _signal_process_tree(self, sig: int) -> None:
135
+ child = self.child
136
+ if child is None:
137
+ return
138
+ try:
139
+ if is_windows:
140
+ subprocess.run(
141
+ ["taskkill", "/pid", str(child.pid), "/T", "/F"],
142
+ stdout=subprocess.DEVNULL,
143
+ stderr=subprocess.DEVNULL,
144
+ check=True,
145
+ )
146
+ else:
147
+ os.killpg(child.pid, sig)
148
+ except (OSError, subprocess.CalledProcessError):
149
+ try:
150
+ child.send_signal(sig)
151
+ except OSError:
152
+ pass
153
+
154
+ @abstractmethod
155
+ def prepare(self) -> bool:
156
+ """Mode-specific setup (venv, image build). Returns False to abort."""
157
+
158
+ @abstractmethod
159
+ def get_spawn_config(self) -> SpawnConfig:
160
+ """Command, args, cwd and environment for the child process."""
161
+
162
+ # --- output handling --------------------------------------------------------------------
163
+
164
+ def _emit_filtered_traceback(self, on_log: Callable[[LogLevel, str], None]) -> None:
165
+ buf = self._traceback_buffer
166
+ if not buf:
167
+ return
168
+ exception_line = buf[-1]
169
+ user_frames: list[str] = []
170
+ for i in range(len(buf) - 1):
171
+ frame_line = buf[i]
172
+ if frame_line.lstrip().startswith("File ") and not _is_internal_frame(frame_line):
173
+ user_frames.append(frame_line)
174
+ nxt = buf[i + 1] if i + 1 < len(buf) else None
175
+ if nxt and nxt.startswith(" ") and not nxt.lstrip().startswith("File "):
176
+ user_frames.append(nxt)
177
+ for frame in user_frames:
178
+ on_log("error", frame)
179
+ on_log("error", exception_line)
180
+
181
+ def _handle_stdout_line(self, line: str) -> None:
182
+ if line:
183
+ self.options.callbacks.on_log("info", line)
184
+
185
+ def _handle_stderr_line(self, line: str) -> None:
186
+ on_log = self.options.callbacks.on_log
187
+ if not line:
188
+ return
189
+ with self._lock:
190
+ self._recent_stderr.append(line)
191
+ if len(self._recent_stderr) > STDERR_BUFFER_SIZE:
192
+ self._recent_stderr.pop(0)
193
+ # Python tracebacks: buffer, then emit only user frames + the exception line.
194
+ if line.startswith("Traceback (most recent call last)"):
195
+ self._in_traceback = True
196
+ self._traceback_buffer = []
197
+ if self._in_traceback:
198
+ self._traceback_buffer.append(line)
199
+ is_stack_frame = line.startswith(" ") or line.startswith("File ")
200
+ if not is_stack_frame and not line.startswith("Traceback "):
201
+ self._emit_filtered_traceback(on_log)
202
+ self._in_traceback = False
203
+ self._traceback_buffer = []
204
+ self._recent_stderr = []
205
+ return
206
+ lower = line.lower()
207
+ if "warning" in lower:
208
+ on_log("warn", line)
209
+ elif "error" in lower:
210
+ on_log("error", line)
211
+ else:
212
+ on_log("info", line)
213
+
214
+ def _pump(self, stream, handle: Callable[[str], None]) -> None: # type: ignore[no-untyped-def]
215
+ for raw in iter(stream.readline, b""):
216
+ text = raw.decode("utf-8", errors="replace").rstrip("\r\n")
217
+ for line in text.split("\n"):
218
+ handle(line.rstrip("\r"))
219
+ stream.close()
220
+
221
+ def _attach_handlers(self) -> None:
222
+ child = self.child
223
+ assert child is not None
224
+ readers = [
225
+ threading.Thread(target=self._pump, args=(child.stdout, self._handle_stdout_line), daemon=True),
226
+ threading.Thread(target=self._pump, args=(child.stderr, self._handle_stderr_line), daemon=True),
227
+ ]
228
+ for reader in readers:
229
+ reader.start()
230
+
231
+ def wait_exit() -> None:
232
+ returncode = child.wait()
233
+ for reader in readers:
234
+ reader.join(timeout=5)
235
+ self._clear_exit_cleanup()
236
+ code: int | None = None if returncode < 0 else returncode
237
+ on_log = self.options.callbacks.on_log
238
+ if code not in (0, None) and self._recent_stderr:
239
+ for line in self._recent_stderr:
240
+ on_log("error", line)
241
+ self._recent_stderr = []
242
+ self.options.callbacks.on_exit(code)
243
+
244
+ threading.Thread(target=wait_exit, daemon=True).start()
@@ -0,0 +1,25 @@
1
+ """Port of operations/dev/gateway-env.ts."""
2
+
3
+ from agentcore.lib.schemas.io.config_io import ConfigIO
4
+
5
+
6
+ def get_gateway_env_vars() -> dict[str, str]:
7
+ """``AGENTCORE_GATEWAY_<NAME>_URL`` / ``_AUTH_TYPE`` for every deployed gateway."""
8
+ env: dict[str, str] = {}
9
+ try:
10
+ config_io = ConfigIO()
11
+ state = config_io.read_deployed_state()
12
+ project = config_io.read_project_spec()
13
+ for target in (state.targets or {}).values():
14
+ resources = target.resources if target else None
15
+ mcp = resources.mcp if resources else None
16
+ for name, gateway in ((mcp.gateways if mcp else None) or {}).items():
17
+ if not gateway.gateway_url:
18
+ continue
19
+ sanitized = name.upper().replace("-", "_")
20
+ env[f"AGENTCORE_GATEWAY_{sanitized}_URL"] = gateway.gateway_url
21
+ spec = next((g for g in project.agent_core_gateways or [] if g.name == name), None)
22
+ env[f"AGENTCORE_GATEWAY_{sanitized}_AUTH_TYPE"] = (spec.authorizer_type if spec else None) or "NONE"
23
+ except Exception: # noqa: BLE001 - no deployed state or project spec issue: skip, as upstream
24
+ pass
25
+ return env