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,95 @@
1
+ """Read and validate all on-disk inputs for a harness export (port of harness-resolver.ts)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+ from dataclasses import dataclass
7
+ from typing import Any
8
+
9
+ from agentcore.cli.commands.export.constants import DEFAULT_SYSTEM_PROMPT
10
+ from agentcore.cli.commands.export.types import ResolvedHarnessContext
11
+ from agentcore.lib.errors.types import ValidationError
12
+ from agentcore.lib.schemas.io.config_io import ConfigIO, to_jsonable
13
+ from agentcore.lib.schemas.io.path_resolver import require_config_root
14
+
15
+
16
+ @dataclass
17
+ class PrefetchedHarness:
18
+ """A harness spec + system prompt fetched out-of-band (the ``--arn`` path)."""
19
+
20
+ spec: dict[str, Any]
21
+ system_prompt: str | None = None
22
+
23
+
24
+ def resolve_harness_context(
25
+ harness_name: str,
26
+ target_agent_name: str,
27
+ config_base_dir: str | None = None,
28
+ prefetched: PrefetchedHarness | None = None,
29
+ ) -> ResolvedHarnessContext:
30
+ base_dir = config_base_dir or require_config_root()
31
+ config_io = ConfigIO(base_dir=base_dir)
32
+ project_root = os.path.normpath(os.path.join(base_dir, ".."))
33
+
34
+ project = to_jsonable(config_io.read_project_spec())
35
+ if prefetched is None:
36
+ harnesses = project.get("harnesses") or []
37
+ if not any(h["name"] == harness_name for h in harnesses):
38
+ available = ", ".join(h["name"] for h in harnesses) or "none"
39
+ raise ValidationError(
40
+ f'Harness "{harness_name}" not found in agentcore.json. Available harnesses: {available}'
41
+ )
42
+
43
+ if any(r["name"] == target_agent_name for r in project.get("runtimes") or []):
44
+ raise ValidationError(
45
+ f'A runtime agent named "{target_agent_name}" already exists. Choose a different --target-agent-name.'
46
+ )
47
+
48
+ if os.path.exists(os.path.join(project_root, "app", target_agent_name)):
49
+ raise ValidationError(
50
+ f'The directory "app/{target_agent_name}/" already exists. Remove it or choose a different '
51
+ "--target-agent-name."
52
+ )
53
+
54
+ if prefetched is not None:
55
+ spec = prefetched.spec
56
+ trimmed = (prefetched.system_prompt or "").strip()
57
+ system_prompt = trimmed or spec.get("systemPrompt") or DEFAULT_SYSTEM_PROMPT
58
+ else:
59
+ spec = to_jsonable(config_io.read_harness_spec(harness_name))
60
+ prompt_path = os.path.join(project_root, "app", harness_name, "system-prompt.md")
61
+ if os.path.exists(prompt_path):
62
+ with open(prompt_path, encoding="utf-8") as fh:
63
+ system_prompt = fh.read().strip()
64
+ else:
65
+ system_prompt = spec.get("systemPrompt") or DEFAULT_SYSTEM_PROMPT
66
+
67
+ deployed_resources: dict[str, Any] | None = None
68
+ try:
69
+ state = to_jsonable(config_io.read_deployed_state())
70
+ first = next(iter((state.get("targets") or {}).values()), None)
71
+ deployed_resources = (first or {}).get("resources") or None
72
+ except Exception: # noqa: BLE001 - absent before first deploy
73
+ pass
74
+
75
+ region: str | None = None
76
+ try:
77
+ targets = to_jsonable(config_io.read_aws_deployment_targets())
78
+ region = targets[0].get("region") if targets else None
79
+ except Exception: # noqa: BLE001
80
+ pass
81
+
82
+ return ResolvedHarnessContext(
83
+ harness_name=harness_name,
84
+ target_agent_name=target_agent_name,
85
+ spec=spec,
86
+ system_prompt=system_prompt,
87
+ project_spec=project,
88
+ deployed_resources=deployed_resources,
89
+ config_base_dir=base_dir,
90
+ project_root=project_root,
91
+ region=region,
92
+ )
93
+
94
+
95
+ __all__ = ["PrefetchedHarness", "resolve_harness_context"]
@@ -0,0 +1,90 @@
1
+ """Export types (port of src/cli/commands/export/types.ts).
2
+
3
+ Specs are carried in their camelCase JSON form (``dict``), as read through ``to_jsonable``.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from dataclasses import dataclass, field
9
+ from typing import Any, Literal
10
+
11
+ from agentcore.templates.types import AgentRenderConfig
12
+
13
+
14
+ @dataclass
15
+ class ExportHarnessOptions:
16
+ name: str | None = None
17
+ arn: str | None = None
18
+ target_agent_name: str | None = None
19
+ build: str | None = None
20
+ json: bool | None = None
21
+
22
+
23
+ @dataclass
24
+ class ExportNote:
25
+ category: str
26
+ message: str
27
+
28
+
29
+ @dataclass
30
+ class ExportNoteLine:
31
+ text: str
32
+ tone: Literal["warn", "dim"]
33
+
34
+
35
+ @dataclass
36
+ class ResolvedHarnessContext:
37
+ harness_name: str
38
+ target_agent_name: str
39
+ spec: dict[str, Any]
40
+ system_prompt: str
41
+ project_spec: dict[str, Any]
42
+ deployed_resources: dict[str, Any] | None
43
+ config_base_dir: str
44
+ project_root: str
45
+ export_notes: list[ExportNote] = field(default_factory=list)
46
+ region: str | None = None
47
+ local_env_vars: dict[str, str] = field(default_factory=dict)
48
+ generated_policy_files: dict[str, Any] = field(default_factory=dict)
49
+ additional_policies: list[str] = field(default_factory=list)
50
+
51
+
52
+ @dataclass
53
+ class McpCredentialEntry:
54
+ credential: dict[str, Any]
55
+ env_var_name: str
56
+ value: str
57
+
58
+
59
+ @dataclass
60
+ class HarnessMappingResult:
61
+ render_config: AgentRenderConfig
62
+ agent_env_spec: dict[str, Any]
63
+ credential_entry: dict[str, Any] | None
64
+ mcp_credential_entries: list[McpCredentialEntry]
65
+ git_credential_entries: list[dict[str, Any]]
66
+
67
+
68
+ def format_export_notes(notes: list[ExportNote], notes_file_hint: str) -> list[ExportNoteLine]:
69
+ """Styled lines for the export success path (shared wording for CLI + interactive)."""
70
+ if not notes:
71
+ return [ExportNoteLine(f"No manual follow-up required. (Details: {notes_file_hint})", "dim")]
72
+ label = "note" if len(notes) == 1 else "notes"
73
+ lines = [ExportNoteLine(f"⚠ {len(notes)} export {label} requiring manual follow-up:", "warn")]
74
+ for note in notes:
75
+ lines.append(ExportNoteLine(f" • {note.category}", "warn"))
76
+ for message_line in note.message.split("\n"):
77
+ lines.append(ExportNoteLine(f" {message_line}", "dim"))
78
+ lines.append(ExportNoteLine(f"These notes are also saved to {notes_file_hint}", "dim"))
79
+ return lines
80
+
81
+
82
+ __all__ = [
83
+ "ExportHarnessOptions",
84
+ "ExportNote",
85
+ "ExportNoteLine",
86
+ "HarnessMappingResult",
87
+ "McpCredentialEntry",
88
+ "ResolvedHarnessContext",
89
+ "format_export_notes",
90
+ ]
@@ -0,0 +1,97 @@
1
+ """Interactive `export harness` (port of tui/screens/export: ExportHarnessFlow + ExportHarnessScreen)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import typer
6
+
7
+ from agentcore.cli import interactive
8
+ from agentcore.cli.errors import get_error_message
9
+ from agentcore.lib.schemas.io.config_io import ConfigIO, to_jsonable
10
+
11
+ C = interactive.Choice
12
+ TITLE = "Export Harness to Python Strands Agent"
13
+
14
+
15
+ def run_export_harness_wizard() -> None:
16
+ from agentcore.cli.commands.add._common import first_issue
17
+ from agentcore.cli.commands.export.harness_action import handle_export_harness
18
+ from agentcore.cli.commands.export.types import ExportHarnessOptions, format_export_notes
19
+ from agentcore.schema import AgentName
20
+
21
+ io = ConfigIO()
22
+ project = to_jsonable(io.read_project_spec())
23
+ harness_names = [h["name"] for h in project.get("harnesses") or []]
24
+ existing_agents = [r["name"] for r in project.get("runtimes") or []]
25
+ if not harness_names:
26
+ typer.echo("No harnesses found", err=True)
27
+ typer.echo("Add a harness first with `agentcore add harness` before exporting.", err=True)
28
+ raise typer.Exit(1)
29
+ container_only: set[str] = set()
30
+ for name in harness_names:
31
+ try:
32
+ spec = to_jsonable(io.read_harness_spec(name))
33
+ except Exception: # noqa: BLE001
34
+ continue
35
+ if spec.get("containerUri") or spec.get("dockerfile"):
36
+ container_only.add(name)
37
+
38
+ typer.echo(TITLE)
39
+ harness = (
40
+ harness_names[0]
41
+ if len(harness_names) <= 1
42
+ else interactive.select(
43
+ "Select harness to export (Choose the harness configuration to generate a runtime agent from)",
44
+ [C(n, n) for n in harness_names],
45
+ )
46
+ )
47
+
48
+ def validate(value: str) -> str | None:
49
+ trimmed = value.strip()
50
+ if not trimmed:
51
+ return "Name is required"
52
+ issue = first_issue(AgentName, trimmed)
53
+ if issue:
54
+ return issue
55
+ return f'Agent "{trimmed}" already exists' if trimmed in existing_agents else None
56
+
57
+ target = interactive.text("Runtime agent name", default=f"{harness}Agent", validate=validate).strip()
58
+ builds = [
59
+ C("CodeZip", "CodeZip", "Package Python source as a zip artifact (default)"),
60
+ C("Container", "Container", "Build a Docker container image via ECR and CodeBuild"),
61
+ ]
62
+ if harness in container_only:
63
+ builds = [b for b in builds if b.value == "Container"]
64
+ description = "This harness uses a custom container — only Container builds are supported"
65
+ else:
66
+ description = "How the agent will be packaged and deployed"
67
+ build = interactive.select(f"Build type ({description})", builds)
68
+
69
+ typer.echo("Export configuration")
70
+ typer.echo(f" Harness: {harness}")
71
+ typer.echo(f" Runtime agent: {target}")
72
+ typer.echo(f" Build type: {build}")
73
+ if not interactive.confirm("Export?", default=True):
74
+ typer.echo("Cancelled.")
75
+ return
76
+
77
+ try:
78
+ result = handle_export_harness(
79
+ ExportHarnessOptions(name=harness, target_agent_name=target, build=build),
80
+ lambda message: typer.echo(f" ✓ {message}"),
81
+ )
82
+ except Exception as exc: # noqa: BLE001
83
+ typer.echo("Export failed", err=True)
84
+ typer.echo(get_error_message(exc), err=True)
85
+ raise typer.Exit(1) from None
86
+ if not result.success:
87
+ typer.echo("Export failed", err=True)
88
+ typer.echo(get_error_message(result.error), err=True)
89
+ raise typer.Exit(1)
90
+ agent = result.value["agentName"]
91
+ typer.echo(f"✓ Exported harness → runtime agent {agent}")
92
+ typer.echo(f"Generated: app/{agent}/ · agentcore/agentcore.json updated")
93
+ for line in format_export_notes(result.value["notes"], result.value["notesPath"]):
94
+ typer.echo(line.text)
95
+
96
+
97
+ __all__ = ["run_export_harness_wizard"]
@@ -0,0 +1,69 @@
1
+ """`agentcore feedback` (port of src/cli/commands/feedback)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+
7
+ import typer
8
+
9
+ from agentcore.cli.commands.feedback.action import handle_feedback
10
+ from agentcore.cli.constants import ANSI
11
+ from agentcore.cli.run_command import run_cli_command
12
+
13
+ HELP = "Send feedback about the AgentCore CLI to the team."
14
+
15
+
16
+ def feedback(
17
+ message: str | None = typer.Argument(None, help="Feedback message [non-interactive]"),
18
+ screenshot: str | None = typer.Option(
19
+ None, "--screenshot", help="Path to a PNG or JPG screenshot (max 100MB) [non-interactive]"
20
+ ),
21
+ as_json: bool = typer.Option(False, "--json", help="Output result as JSON [non-interactive]"),
22
+ ) -> None:
23
+ if message is None:
24
+ if as_json:
25
+ typer.echo("Error: --json requires a feedback message argument.", err=True)
26
+ raise typer.Exit(1)
27
+ from agentcore.cli import interactive
28
+ from agentcore.cli.commands.feedback.wizard import run_feedback_wizard
29
+
30
+ interactive.require_tty()
31
+ run_feedback_wizard(screenshot)
32
+ raise typer.Exit(0)
33
+
34
+ def action() -> None:
35
+ outcome = handle_feedback(message, screenshot)
36
+ if outcome.kind == "no-tty":
37
+ raise Exception("Feedback consent must be confirmed interactively. Re-run agentcore feedback in a TTY.")
38
+ if outcome.kind == "error":
39
+ raise outcome.error # type: ignore[misc]
40
+ if outcome.kind == "declined":
41
+ if as_json:
42
+ typer.echo(json.dumps({"success": False, "error": "Feedback cancelled."}, separators=(",", ":")))
43
+ else:
44
+ typer.echo("Feedback cancelled. Nothing was submitted.")
45
+ return
46
+ result = outcome.result or {}
47
+ if as_json:
48
+ typer.echo(
49
+ json.dumps(
50
+ {
51
+ "success": True,
52
+ "id": result.get("id"),
53
+ "timestamp": result.get("timestamp"),
54
+ "reference": result.get("reference"),
55
+ },
56
+ separators=(",", ":"),
57
+ )
58
+ )
59
+ else:
60
+ typer.echo(f"{ANSI.green}Thank you. Your feedback has been submitted (id: {result.get('id')}).{ANSI.reset}")
61
+
62
+ run_cli_command(as_json, action)
63
+
64
+
65
+ def register(app: typer.Typer) -> None:
66
+ app.command("feedback", help=HELP)(feedback)
67
+
68
+
69
+ __all__ = ["feedback", "register"]
@@ -0,0 +1,30 @@
1
+ """Port of commands/feedback/action.ts."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from typing import Any, Literal
7
+
8
+ from agentcore.cli.commands.feedback.consent_prompt import prompt_for_consent
9
+ from agentcore.lib.errors.types import to_error
10
+ from agentcore.operations.feedback import submit_feedback
11
+
12
+
13
+ @dataclass
14
+ class FeedbackOutcome:
15
+ kind: Literal["submitted", "declined", "no-tty", "error"]
16
+ result: dict[str, Any] | None = None
17
+ error: BaseException | None = None
18
+
19
+
20
+ def handle_feedback(message: str, screenshot: str | None = None) -> FeedbackOutcome:
21
+ consent = prompt_for_consent()
22
+ if not consent.accepted:
23
+ return FeedbackOutcome("no-tty" if consent.reason == "no-tty" else "declined")
24
+ try:
25
+ return FeedbackOutcome("submitted", result=submit_feedback(message, screenshot=screenshot, mode="cli"))
26
+ except Exception as exc: # noqa: BLE001
27
+ return FeedbackOutcome("error", error=to_error(exc))
28
+
29
+
30
+ __all__ = ["FeedbackOutcome", "handle_feedback"]
@@ -0,0 +1,35 @@
1
+ """AWS Customer Agreement consent prompt (port of commands/feedback/consent-prompt.ts)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from dataclasses import dataclass
7
+ from typing import Literal, TextIO
8
+
9
+ from agentcore.operations.feedback.constants import CONSENT_TEXT
10
+
11
+ PROMPT_LINE = "Submit feedback? [y/N] "
12
+
13
+
14
+ @dataclass
15
+ class ConsentPromptResult:
16
+ accepted: bool
17
+ reason: Literal["declined", "no-tty"] | None = None
18
+
19
+
20
+ def prompt_for_consent(stdin: TextIO | None = None, stdout: TextIO | None = None) -> ConsentPromptResult:
21
+ """Show the consent text and read y/N; bare Enter means no, and non-TTY stdin is refused."""
22
+ stdin = stdin or sys.stdin
23
+ stdout = stdout or sys.stdout
24
+ if not stdin.isatty():
25
+ return ConsentPromptResult(False, "no-tty")
26
+ stdout.write(f"\n{CONSENT_TEXT}\n\n")
27
+ stdout.write(PROMPT_LINE)
28
+ stdout.flush()
29
+ line = stdin.readline()
30
+ answer = line.strip().lower()
31
+ accepted = answer in ("y", "yes")
32
+ return ConsentPromptResult(accepted, None if accepted else "declined")
33
+
34
+
35
+ __all__ = ["PROMPT_LINE", "ConsentPromptResult", "prompt_for_consent"]
@@ -0,0 +1,49 @@
1
+ """Interactive feedback (port of tui/screens/feedback: message -> screenshot -> consent -> submit)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import typer
6
+
7
+ from agentcore.cli import interactive
8
+ from agentcore.cli.errors import get_error_message
9
+ from agentcore.operations.feedback import (
10
+ CONSENT_TEXT,
11
+ submit_feedback,
12
+ validate_feedback_message,
13
+ validate_screenshot_path,
14
+ )
15
+
16
+
17
+ def run_feedback_wizard(initial_screenshot: str | None = None) -> None:
18
+ typer.echo("Tell us what's on your mind")
19
+ message = interactive.text("Feedback", validate=validate_feedback_message)
20
+
21
+ def validate_path(value: str) -> str | None:
22
+ return validate_screenshot_path(value.strip()) if value.strip() else None
23
+
24
+ screenshot = interactive.text(
25
+ "Attach a screenshot (optional, PNG/JPG, max 100MB) — path, or press Enter to skip",
26
+ default=initial_screenshot or "",
27
+ validate=validate_path,
28
+ ).strip()
29
+
30
+ typer.echo("")
31
+ typer.echo("AWS Customer Agreement")
32
+ typer.echo(CONSENT_TEXT)
33
+ if screenshot:
34
+ typer.echo(f"Screenshot: {screenshot}")
35
+ if not interactive.confirm("Submit feedback?", default=False):
36
+ typer.echo("Feedback cancelled. Nothing was submitted.")
37
+ return
38
+
39
+ typer.echo("Submitting feedback…")
40
+ try:
41
+ submit_feedback(message, screenshot=screenshot or None, mode="tui")
42
+ except Exception as exc: # noqa: BLE001
43
+ typer.echo("Failed to submit feedback.", err=True)
44
+ typer.echo(get_error_message(exc), err=True)
45
+ raise typer.Exit(1) from None
46
+ typer.echo("Thank you. Your feedback has been submitted.")
47
+
48
+
49
+ __all__ = ["run_feedback_wizard"]
@@ -0,0 +1,69 @@
1
+ """`agentcore fetch access` (port of src/cli/commands/fetch)."""
2
+
3
+ import json
4
+
5
+ import typer
6
+
7
+ from agentcore.cli.commands.fetch.action import FetchAccessOptions, handle_fetch_access
8
+ from agentcore.cli.commands.logs.guards import require_project
9
+ from agentcore.cli.errors import get_error_message
10
+ from agentcore.cli.groups import group
11
+
12
+
13
+ def fetch_access_command(
14
+ name: str | None = typer.Option(None, "--name", help="Gateway, agent, or harness name [non-interactive]"),
15
+ resource_type: str = typer.Option(
16
+ "gateway", "--type", help="Resource type: gateway (default), agent, or harness [non-interactive]"
17
+ ),
18
+ target: str | None = typer.Option(None, "--target", help="Deployment target [non-interactive]"),
19
+ identity_name: str | None = typer.Option(
20
+ None, "--identity-name", help="Identity credential name for token fetch [non-interactive]"
21
+ ),
22
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON [non-interactive]"),
23
+ ) -> None:
24
+ require_project()
25
+ options = FetchAccessOptions(
26
+ name=name, type=resource_type, target=target, identity_name=identity_name, json=as_json
27
+ )
28
+ try:
29
+ result = handle_fetch_access(options)
30
+ except Exception as exc: # noqa: BLE001 - top-level command boundary, as upstream
31
+ if as_json:
32
+ typer.echo(json.dumps({"success": False, "error": get_error_message(exc)}, separators=(",", ":")))
33
+ else:
34
+ typer.secho(f"Error: {get_error_message(exc)}", fg=typer.colors.RED)
35
+ raise typer.Exit(1) from None
36
+
37
+ if not result.success:
38
+ if as_json:
39
+ payload = {"success": False, "error": result.error}
40
+ if result.available_gateways:
41
+ payload["availableGateways"] = result.available_gateways
42
+ typer.echo(json.dumps(payload, separators=(",", ":"), ensure_ascii=False))
43
+ else:
44
+ typer.secho(result.error or "", fg=typer.colors.RED)
45
+ if result.available_gateways:
46
+ typer.echo("Available gateways:")
47
+ for gw in result.available_gateways:
48
+ typer.echo(f" {gw['name']} [{gw['authType']}]")
49
+ raise typer.Exit(1)
50
+
51
+ r = result.result or {}
52
+ if as_json:
53
+ typer.echo(json.dumps({"success": True, **r}, indent=2, ensure_ascii=False))
54
+ return
55
+ typer.echo(typer.style("URL:", bold=True) + typer.style(f" {r.get('url', '')}", fg=typer.colors.GREEN))
56
+ typer.echo(typer.style("Auth:", bold=True) + f" {r.get('authType')}")
57
+ if r.get("message"):
58
+ typer.echo(r["message"])
59
+ if r.get("token"):
60
+ typer.echo(typer.style("Token:", bold=True) + f" {r['token']}")
61
+ if r.get("expiresIn") is not None:
62
+ typer.echo(typer.style("Expires in:", bold=True) + f" {r['expiresIn']}s")
63
+
64
+
65
+ def register(app: typer.Typer) -> None:
66
+ group("fetch").command(
67
+ "access",
68
+ help="Fetch access info (URL, token, auth guidance) for a deployed gateway, agent, or harness.",
69
+ )(fetch_access_command)
@@ -0,0 +1,62 @@
1
+ """Port of src/cli/commands/fetch/action.ts."""
2
+
3
+ from collections.abc import Callable
4
+ from dataclasses import dataclass
5
+ from typing import Any
6
+
7
+ from agentcore.operations import fetch_access
8
+ from agentcore.operations.fetch_access import OAuthTokenResult, TokenFetchResult
9
+
10
+
11
+ @dataclass
12
+ class FetchAccessOptions:
13
+ name: str | None = None
14
+ type: str | None = None
15
+ target: str | None = None
16
+ identity_name: str | None = None
17
+ json: bool = False
18
+
19
+
20
+ @dataclass
21
+ class FetchAccessResult:
22
+ success: bool
23
+ result: TokenFetchResult | None = None
24
+ available_gateways: list[dict[str, Any]] | None = None
25
+ error: str | None = None
26
+
27
+
28
+ def handle_fetch_access(options: FetchAccessOptions) -> FetchAccessResult:
29
+ resource_type = options.type or "gateway"
30
+ if resource_type == "agent":
31
+ return _fetch_token_access(options, "agent", fetch_access.fetch_runtime_token)
32
+ if resource_type == "harness":
33
+ return _fetch_token_access(options, "harness", fetch_access.fetch_harness_token)
34
+ return _handle_fetch_gateway_access(options)
35
+
36
+
37
+ def _handle_fetch_gateway_access(options: FetchAccessOptions) -> FetchAccessResult:
38
+ if not options.name:
39
+ gateways = fetch_access.list_gateways(deploy_target=options.target)
40
+ if not gateways:
41
+ return FetchAccessResult(False, error="No deployed gateways found. Run `agentcore deploy` first.")
42
+ return FetchAccessResult(False, error="Missing required option: --name", available_gateways=list(gateways))
43
+ result = fetch_access.fetch_gateway_token(
44
+ options.name, deploy_target=options.target, identity_name=options.identity_name
45
+ )
46
+ return FetchAccessResult(True, result=result)
47
+
48
+
49
+ def _fetch_token_access(
50
+ options: FetchAccessOptions, label: str, fetch_token: Callable[..., OAuthTokenResult]
51
+ ) -> FetchAccessResult:
52
+ """Shared CUSTOM_JWT flow for agent runtimes and harnesses (no invoke URL)."""
53
+ if not options.name:
54
+ return FetchAccessResult(False, error=f"Missing required option: --name <{label}>")
55
+ try:
56
+ token = fetch_token(options.name, deploy_target=options.target, identity_name=options.identity_name)
57
+ except Exception as exc: # noqa: BLE001 - surfaced as a failed result, as upstream
58
+ return FetchAccessResult(False, error=str(exc))
59
+ result: TokenFetchResult = {"url": "", "authType": "CUSTOM_JWT", "token": token.token}
60
+ if token.expires_in is not None:
61
+ result["expiresIn"] = token.expires_in
62
+ return FetchAccessResult(True, result=result)
@@ -0,0 +1,65 @@
1
+ """`agentcore help` / `agentcore help modes` (port of src/cli/commands/help/command.tsx)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import typer
6
+
7
+ from agentcore.cli.groups import group
8
+
9
+ MODES_HELP = """
10
+ INTERACTIVE MODE (TUI)
11
+ Run any command without flags to launch the interactive terminal UI.
12
+
13
+ Features:
14
+ • Guided prompts walk you through options
15
+ • Real-time streaming for invoke and dev
16
+ • Visual feedback and progress indicators
17
+
18
+ Examples:
19
+ agentcore # Launch main menu
20
+ agentcore create # Guided project creation
21
+ agentcore add # Add resources interactively
22
+ agentcore invoke # Chat with deployed agent
23
+
24
+ NON-INTERACTIVE MODE (CLI)
25
+ Pass any flag marked [non-interactive] to run in CLI mode.
26
+
27
+ Features:
28
+ • Scriptable for CI/CD pipelines
29
+ • JSON output with --json flag
30
+ • No prompts - fails fast on missing required options
31
+
32
+ Examples:
33
+ agentcore create --name MyProject --defaults --json
34
+ agentcore deploy --target prod --yes
35
+ agentcore invoke "Hello" --stream
36
+ agentcore remove agent --name OldAgent --yes
37
+
38
+ FLAGS THAT TRIGGER CLI MODE
39
+ Most flags trigger non-interactive mode, including:
40
+ --name, --json, --yes, --target, --stream, etc.
41
+
42
+ Some flags work in both modes:
43
+ --session-id (invoke), --port (dev), --runtime (dev)
44
+ """
45
+
46
+
47
+ def register(app: typer.Typer) -> None:
48
+ help_group = group("help")
49
+ help_group.info.no_args_is_help = False
50
+ help_group.info.help = "Display help topics"
51
+
52
+ @help_group.callback(invoke_without_command=True)
53
+ def help_root(ctx: typer.Context) -> None:
54
+ """Display help topics"""
55
+ if ctx.invoked_subcommand is not None:
56
+ return
57
+ typer.echo("Available help topics: modes")
58
+ typer.echo("Run `agentcore help <topic>` for details.")
59
+
60
+ @help_group.command("modes", help="Explain interactive vs non-interactive modes")
61
+ def modes() -> None:
62
+ typer.echo(MODES_HELP)
63
+
64
+
65
+ __all__ = ["MODES_HELP", "register"]