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,604 @@
1
+ """Prompt-based replacement for the invoke TUI (tui/screens/invoke/InvokeScreen.tsx + useInvokeFlow.ts).
2
+
3
+ Flow: load deployed agents/harnesses -> pick one (when several) -> resolve a CUSTOM_JWT bearer token
4
+ (auto-fetch, else ask) -> chat loop. In the chat loop:
5
+
6
+ * plain text is sent to the agent and the reply streams token by token;
7
+ * ``!<command>`` runs a shell command in the runtime container;
8
+ * ``/new`` starts a new session (Ctrl+N upstream), ``/shell`` opens an interactive shell (``s``
9
+ upstream), ``/exit`` (or Ctrl-C / Esc on the prompt) leaves the chat (back to the picker when
10
+ there are several agents, as Esc does upstream).
11
+
12
+ For MCP agents the input is ``tool_name {"arg": "value"}``; ``list`` refreshes the tool list.
13
+ """
14
+
15
+ import json
16
+ import sys
17
+ from dataclasses import dataclass, field
18
+ from typing import Any
19
+
20
+ import typer
21
+
22
+ from agentcore.aws import (
23
+ DEFAULT_RUNTIME_USER_ID,
24
+ AguiInvokeOptions,
25
+ ExecuteBashOptions,
26
+ InvokeAgentRuntimeOptions,
27
+ McpInvokeOptions,
28
+ build_agui_run_input,
29
+ execute_bash_command,
30
+ get_or_create_payment_session,
31
+ invoke_a2a_runtime,
32
+ invoke_agent_runtime_streaming,
33
+ invoke_agui_runtime,
34
+ mcp_call_tool,
35
+ mcp_list_tools,
36
+ )
37
+ from agentcore.aws.agentcore import A2AInvokeOptions
38
+ from agentcore.aws.agentcore_harness import invoke_harness
39
+ from agentcore.cli import interactive
40
+ from agentcore.cli.commands.invoke import _deps
41
+ from agentcore.cli.commands.invoke.constants import ANSI
42
+ from agentcore.cli.commands.invoke.resolve import build_config_bundle_baggage
43
+ from agentcore.cli.errors import get_error_message
44
+ from agentcore.lib.errors.types import ResourceNotFoundError
45
+ from agentcore.lib.schemas.io.config_io import ConfigIO
46
+ from agentcore.logging import InvokeLogger
47
+ from agentcore.operations.session import generate_session_id
48
+
49
+
50
+ @dataclass
51
+ class InvokableRuntime:
52
+ name: str
53
+ state: Any
54
+ network_mode: str | None = None
55
+ protocol: str | None = None
56
+ authorizer_type: str | None = None
57
+ baggage: str | None = None
58
+
59
+
60
+ @dataclass
61
+ class InvokableHarness:
62
+ name: str
63
+ state: Any
64
+ authorizer_type: str | None = None
65
+
66
+
67
+ @dataclass
68
+ class InvokeConfig:
69
+ runtimes: list[InvokableRuntime]
70
+ harnesses: list[InvokableHarness]
71
+ target: Any
72
+ target_name: str
73
+ project_name: str
74
+
75
+
76
+ @dataclass
77
+ class _Session:
78
+ config: InvokeConfig
79
+ selected: int
80
+ session_id: str
81
+ user_id: str
82
+ headers: dict[str, str] | None
83
+ bearer_token: str
84
+ payment_instrument_id: str | None
85
+ payment_session_id: str | None
86
+ payment_user_id: str | None
87
+ logger: InvokeLogger | None = None
88
+ mcp_session_id: str | None = None
89
+ mcp_tools: list[Any] = field(default_factory=list)
90
+
91
+ @property
92
+ def is_harness(self) -> bool:
93
+ return self.selected >= len(self.config.runtimes)
94
+
95
+ @property
96
+ def runtime(self) -> InvokableRuntime | None:
97
+ return None if self.is_harness else self.config.runtimes[self.selected]
98
+
99
+ @property
100
+ def harness(self) -> InvokableHarness | None:
101
+ return self.config.harnesses[self.selected - len(self.config.runtimes)] if self.is_harness else None
102
+
103
+ @property
104
+ def name(self) -> str:
105
+ return (self.runtime or self.harness).name # type: ignore[union-attr]
106
+
107
+ @property
108
+ def arn(self) -> str:
109
+ return self.runtime.state.runtime_arn if self.runtime else self.harness.state.harness_arn # type: ignore[union-attr]
110
+
111
+ @property
112
+ def region(self) -> str:
113
+ return self.config.target.region
114
+
115
+ def get_logger(self) -> InvokeLogger:
116
+ if self.logger is None:
117
+ self.logger = InvokeLogger(
118
+ agent_name=self.name, runtime_arn=self.arn, region=self.region, session_id=self.session_id
119
+ )
120
+ return self.logger
121
+
122
+
123
+ def _write(text: str) -> None:
124
+ sys.stdout.write(text)
125
+ sys.stdout.flush()
126
+
127
+
128
+ def load_invoke_tui_config(config_io: ConfigIO | None = None) -> InvokeConfig:
129
+ """Load deployed runtimes/harnesses for the first target (useInvokeFlow ``load``)."""
130
+ config_io = config_io or ConfigIO()
131
+ try:
132
+ project = config_io.read_project_spec()
133
+ except Exception: # noqa: BLE001
134
+ raise ResourceNotFoundError("No agentcore project found.") from None
135
+ deployed_state = config_io.read_deployed_state()
136
+ aws_targets = config_io.read_aws_deployment_targets()
137
+
138
+ target_names = list(deployed_state.targets or {})
139
+ if not target_names:
140
+ raise ResourceNotFoundError("No deployed targets found. Run `agentcore deploy` first.")
141
+ target_name = target_names[0]
142
+ target_state = deployed_state.targets[target_name]
143
+ target_config = next((t for t in aws_targets if t.name == target_name), None)
144
+ if target_config is None:
145
+ raise ResourceNotFoundError(f"Target config '{target_name}' not found")
146
+
147
+ resources = target_state.resources if target_state else None
148
+ runtimes: list[InvokableRuntime] = []
149
+ for agent in project.runtimes or []:
150
+ state = ((resources.runtimes if resources else None) or {}).get(agent.name)
151
+ if not state:
152
+ continue
153
+ runtimes.append(
154
+ InvokableRuntime(
155
+ name=agent.name,
156
+ state=state,
157
+ network_mode=agent.network_mode,
158
+ protocol=agent.protocol,
159
+ authorizer_type=agent.authorizer_type,
160
+ baggage=build_config_bundle_baggage(project, target_state, agent.name),
161
+ )
162
+ )
163
+ harnesses: list[InvokableHarness] = []
164
+ for harness in project.harnesses or []:
165
+ state = ((resources.harnesses if resources else None) or {}).get(harness.name)
166
+ if not state:
167
+ continue
168
+ authorizer_type = None
169
+ try:
170
+ authorizer_type = config_io.read_harness_spec(harness.name).authorizer_type
171
+ except Exception: # noqa: BLE001, S110 - best-effort
172
+ pass
173
+ harnesses.append(InvokableHarness(name=harness.name, state=state, authorizer_type=authorizer_type))
174
+
175
+ if not runtimes and not harnesses:
176
+ raise ResourceNotFoundError("No deployed agents or harnesses found. Run `agentcore deploy` first.")
177
+ return InvokeConfig(runtimes, harnesses, target_config, target_name, project.name)
178
+
179
+
180
+ def _auto_session(config_io: ConfigIO, config: InvokeConfig, payment_user_id: str | None) -> str:
181
+ project = config_io.read_project_spec()
182
+ deployed_state = config_io.read_deployed_state()
183
+ target_state = deployed_state.targets.get(config.target_name)
184
+ payments = target_state.resources.payments if target_state and target_state.resources else None
185
+ first_manager = next(iter(payments.values()), None) if payments else None
186
+ if not first_manager or not first_manager.manager_arn:
187
+ raise ResourceNotFoundError("--auto-session requires a deployed payment manager. Run `agentcore deploy` first.")
188
+ first_name = next(iter(payments))
189
+ spec = next((p for p in (project.payments or []) if p.name == first_name), None)
190
+ kwargs: dict[str, Any] = {}
191
+ if spec is not None and spec.default_spend_limit is not None:
192
+ kwargs["default_spend_limit"] = spec.default_spend_limit
193
+ try:
194
+ return get_or_create_payment_session(
195
+ region=config.target.region,
196
+ user_id=payment_user_id or DEFAULT_RUNTIME_USER_ID,
197
+ manager_arn=first_manager.manager_arn,
198
+ **kwargs,
199
+ )
200
+ except Exception as exc:
201
+ raise RuntimeError(f"--auto-session failed to create payment session: {exc}") from exc
202
+
203
+
204
+ def _resolve_token(session: _Session) -> None:
205
+ """Token screen: auto-fetch the CUSTOM_JWT bearer token, else ask for one (Enter skips)."""
206
+ auth = session.runtime.authorizer_type if session.runtime else session.harness.authorizer_type # type: ignore[union-attr]
207
+ if auth != "CUSTOM_JWT" or session.bearer_token:
208
+ return
209
+ try:
210
+ can_fetch = (
211
+ _deps.can_fetch_harness_token(session.name)
212
+ if session.is_harness
213
+ else _deps.can_fetch_runtime_token(session.name)
214
+ )
215
+ except Exception: # noqa: BLE001
216
+ can_fetch = False
217
+ if can_fetch:
218
+ typer.echo("Fetching token...")
219
+ try:
220
+ fetched = (
221
+ _deps.fetch_harness_token(session.name, deploy_target=session.config.target_name)
222
+ if session.is_harness
223
+ else _deps.fetch_runtime_token(session.name, deploy_target=session.config.target_name)
224
+ )
225
+ session.bearer_token = _deps.token_of(fetched) or ""
226
+ return
227
+ except Exception as exc: # noqa: BLE001
228
+ typer.echo(f"{ANSI.red}{get_error_message(exc)}{ANSI.reset}")
229
+ else:
230
+ typer.echo(
231
+ f"{ANSI.yellow}No OAuth credentials configured for auto-fetch. Enter a bearer token manually, or re-add "
232
+ f"with --client-id and --client-secret.{ANSI.reset}"
233
+ )
234
+ try:
235
+ session.bearer_token = interactive.text("Bearer token (Enter to skip):", secret=True).strip()
236
+ except typer.Exit:
237
+ session.bearer_token = ""
238
+
239
+
240
+ def _print_header(session: _Session) -> None:
241
+ protocol = None if session.is_harness else (session.runtime.protocol or "HTTP") # type: ignore[union-attr]
242
+ typer.echo(f"Project: {session.config.project_name}")
243
+ typer.echo(f"{'Harness' if session.is_harness else 'Agent'}: {session.name}")
244
+ if protocol:
245
+ typer.echo(f"Protocol: {protocol}")
246
+ typer.echo(f"Target: {session.region}")
247
+ typer.echo(f"Session: {session.session_id}")
248
+ typer.echo(f"User: {session.user_id}")
249
+ if session.payment_instrument_id or session.payment_session_id or session.payment_user_id:
250
+ typer.echo(f"Payments: active (wallet owner: {session.payment_user_id or 'default-user'})")
251
+ auth = session.runtime.authorizer_type if session.runtime else session.harness.authorizer_type # type: ignore[union-attr]
252
+ if auth == "CUSTOM_JWT":
253
+ typer.echo(f"Auth: {'bearer token' if session.bearer_token else 'no token'}")
254
+ if session.runtime and session.runtime.network_mode == "VPC":
255
+ typer.echo(
256
+ f"{ANSI.yellow}Warning: This agent uses VPC network mode. Ensure your VPC endpoints are configured for "
257
+ f"invocation.{ANSI.reset}"
258
+ )
259
+ hint = "!<cmd> runs a shell command, /new starts a new session, /shell opens a shell, /exit leaves"
260
+ typer.echo(f"{ANSI.dim}{hint}{ANSI.reset}")
261
+
262
+
263
+ def _mcp_opts(session: _Session) -> McpInvokeOptions:
264
+ return McpInvokeOptions(
265
+ region=session.region,
266
+ runtime_arn=session.arn,
267
+ user_id=session.user_id,
268
+ mcp_session_id=session.mcp_session_id,
269
+ headers=session.headers,
270
+ bearer_token=session.bearer_token or None,
271
+ )
272
+
273
+
274
+ def _fetch_mcp_tools(session: _Session) -> None:
275
+ try:
276
+ listed = mcp_list_tools(_mcp_opts(session))
277
+ session.mcp_tools = list(listed.tools)
278
+ session.mcp_session_id = listed.mcp_session_id
279
+ if listed.tools:
280
+ typer.echo(_deps.format_mcp_tool_list(listed.tools))
281
+ except Exception as exc: # noqa: BLE001
282
+ typer.echo(f"Failed to list tools: {get_error_message(exc)}")
283
+ session.mcp_tools = []
284
+
285
+
286
+ def _invoke_harness(session: _Session, prompt: str, logger: InvokeLogger) -> str:
287
+ content = ""
288
+ pending_name: str | None = None
289
+ pending_input = ""
290
+ last_metadata: dict[str, Any] | None = None
291
+
292
+ def emit(text: str) -> None:
293
+ nonlocal content
294
+ content += text
295
+ _write(text)
296
+
297
+ for event in invoke_harness(
298
+ region=session.region,
299
+ harness_arn=session.arn,
300
+ runtime_session_id=session.session_id or generate_session_id(),
301
+ messages=[{"role": "user", "content": [{"text": prompt}]}],
302
+ bearer_token=session.bearer_token or None,
303
+ ):
304
+ kind = event.get("type")
305
+ if kind == "contentBlockDelta":
306
+ delta = event.get("delta") or {}
307
+ if delta.get("type") == "text":
308
+ emit(delta.get("text") or "")
309
+ elif delta.get("type") == "toolUse":
310
+ pending_input += delta.get("input") or ""
311
+ elif kind == "contentBlockStart":
312
+ start = event.get("start") or {}
313
+ if start.get("type") == "toolUse":
314
+ tool_use = start.get("toolUse") or {}
315
+ pending_name = tool_use.get("name")
316
+ pending_input = ""
317
+ server = tool_use.get("serverName")
318
+ label = f"{server}/{pending_name}" if server else pending_name
319
+ logger.log_info(f"Tool call: {pending_name} (id: {tool_use.get('toolUseId')})")
320
+ emit(f"\n{ANSI.dim}{label}")
321
+ elif start.get("type") == "toolResult":
322
+ status = (start.get("toolResult") or {}).get("status")
323
+ icon = f" {ANSI.red}[error]{ANSI.reset}" if status == "error" else f" [ok]{ANSI.reset}"
324
+ logger.log_info(f"Tool result ({pending_name}): status={status or 'success'}")
325
+ emit(f"{icon}\n")
326
+ elif kind == "messageStop":
327
+ if event.get("stopReason") == "tool_use" and pending_name:
328
+ try:
329
+ parsed = json.loads(pending_input)
330
+ except ValueError:
331
+ parsed = {}
332
+ logger.log_info(f"Tool input ({pending_name}): {json.dumps(parsed, separators=(',', ':'))}")
333
+ elif kind == "metadata":
334
+ usage = event.get("usage") or {}
335
+ latency = (event.get("metrics") or {}).get("latencyMs", 0)
336
+ logger.log_info(
337
+ f"Tokens: {usage.get('inputTokens')} in, {usage.get('outputTokens')} out | Latency: {latency}ms"
338
+ )
339
+ last_metadata = {"in": usage.get("inputTokens"), "out": usage.get("outputTokens"), "latency": latency}
340
+ elif kind == "error":
341
+ emit(f"\nError: {event.get('message')}")
342
+ if last_metadata:
343
+ emit(
344
+ f"\n{ANSI.dim}{last_metadata['in']} in / {last_metadata['out']} out / "
345
+ f"{last_metadata['latency'] / 1000:.1f}s{ANSI.reset}"
346
+ )
347
+ return content
348
+
349
+
350
+ def _invoke_agui(session: _Session, prompt: str, logger: InvokeLogger) -> str:
351
+ content = ""
352
+ agui = invoke_agui_runtime(
353
+ AguiInvokeOptions(
354
+ region=session.region,
355
+ runtime_arn=session.arn,
356
+ user_id=session.user_id,
357
+ logger=logger,
358
+ headers=session.headers,
359
+ bearer_token=session.bearer_token or None,
360
+ ),
361
+ build_agui_run_input(prompt, session.session_id),
362
+ )
363
+ if agui.session_id:
364
+ session.session_id = agui.session_id
365
+ logger.update_session_id(agui.session_id)
366
+ tool_names: dict[str, str] = {}
367
+ for event in agui.stream:
368
+ kind = event.get("type")
369
+ if kind == "TEXT_MESSAGE_CONTENT":
370
+ content += event.get("delta", "")
371
+ _write(event.get("delta", ""))
372
+ elif kind == "TOOL_CALL_START":
373
+ tool_names[event.get("toolCallId", "")] = event.get("toolCallName", "")
374
+ _write(f"\n{ANSI.dim}{event.get('toolCallName', '')}{ANSI.reset}")
375
+ elif kind == "TOOL_CALL_RESULT":
376
+ raw = event.get("content")
377
+ text = raw if isinstance(raw, str) else json.dumps(raw, separators=(",", ":"))
378
+ _write(f"{ANSI.dim} -> {text}{ANSI.reset}\n")
379
+ elif kind == "REASONING_MESSAGE_CONTENT":
380
+ _write(f"{ANSI.dim}{event.get('delta', '')}{ANSI.reset}")
381
+ elif kind == "RUN_ERROR":
382
+ content += f"\nError: {event.get('message')}"
383
+ _write(f"\n{ANSI.red}Error: {event.get('message')}{ANSI.reset}")
384
+ return content
385
+
386
+
387
+ def _invoke_turn(session: _Session, prompt: str) -> None:
388
+ logger = session.get_logger()
389
+ runtime = session.runtime
390
+
391
+ if runtime is not None and runtime.protocol == "MCP":
392
+ if prompt.strip().lower() == "list":
393
+ _fetch_mcp_tools(session)
394
+ return
395
+ parts = prompt.strip().split(None, 1)
396
+ if not parts:
397
+ return
398
+ tool_name, args_str = parts[0], (parts[1].strip() if len(parts) > 1 else "")
399
+ logger.log_prompt(f"MCP tools/call: {tool_name}({args_str})", session.session_id, session.user_id)
400
+ try:
401
+ args = json.loads(args_str) if args_str else {}
402
+ response = mcp_call_tool(_mcp_opts(session), tool_name, args)
403
+ typer.echo(f"Result: {response}")
404
+ logger.log_response(response)
405
+ except Exception as exc: # noqa: BLE001
406
+ logger.log_error(exc, "MCP call failed")
407
+ typer.echo(f"Error: {get_error_message(exc)}")
408
+ return
409
+
410
+ logger.log_prompt(prompt, session.session_id, session.user_id)
411
+ try:
412
+ if session.is_harness:
413
+ content = _invoke_harness(session, prompt, logger)
414
+ elif runtime is not None and runtime.protocol == "AGUI":
415
+ content = _invoke_agui(session, prompt, logger)
416
+ else:
417
+ if runtime is not None and runtime.protocol == "A2A":
418
+ streamed = invoke_a2a_runtime(
419
+ A2AInvokeOptions(
420
+ region=session.region,
421
+ runtime_arn=session.arn,
422
+ user_id=session.user_id,
423
+ session_id=session.session_id,
424
+ logger=logger,
425
+ headers=session.headers,
426
+ bearer_token=session.bearer_token or None,
427
+ ),
428
+ prompt,
429
+ )
430
+ else:
431
+ streamed = invoke_agent_runtime_streaming(
432
+ InvokeAgentRuntimeOptions(
433
+ region=session.region,
434
+ runtime_arn=session.arn,
435
+ payload=prompt,
436
+ session_id=session.session_id,
437
+ user_id=session.user_id,
438
+ logger=logger,
439
+ headers=session.headers,
440
+ bearer_token=session.bearer_token or None,
441
+ baggage=runtime.baggage if runtime else None,
442
+ payment_instrument_id=session.payment_instrument_id,
443
+ payment_session_id=session.payment_session_id,
444
+ payment_user_id=session.payment_user_id,
445
+ )
446
+ )
447
+ if streamed.session_id:
448
+ session.session_id = streamed.session_id
449
+ logger.update_session_id(streamed.session_id)
450
+ content = ""
451
+ for chunk in streamed.stream:
452
+ content += chunk
453
+ _write(chunk)
454
+ _write("\n")
455
+ logger.log_response(content)
456
+ except Exception as exc: # noqa: BLE001
457
+ context = (
458
+ "AGUI invoke failed" if runtime is not None and runtime.protocol == "AGUI" else "invoke streaming failed"
459
+ )
460
+ if not session.is_harness:
461
+ logger.log_error(exc, context)
462
+ _write("\n")
463
+ typer.echo(f"Error: {get_error_message(exc)}")
464
+
465
+
466
+ def _exec_turn(session: _Session, command: str) -> None:
467
+ logger = session.get_logger()
468
+ logger.log_prompt(f"exec: {command}", session.session_id, session.user_id)
469
+ content = ""
470
+ try:
471
+ executed = execute_bash_command(
472
+ ExecuteBashOptions(
473
+ region=session.region,
474
+ runtime_arn=session.arn,
475
+ command=command,
476
+ session_id=session.session_id,
477
+ headers=session.headers,
478
+ bearer_token=session.bearer_token or None,
479
+ )
480
+ )
481
+ for event in executed.stream:
482
+ kind = event.get("type")
483
+ if kind in ("stdout", "stderr") and event.get("data"):
484
+ content += event["data"]
485
+ _write(event["data"])
486
+ elif kind == "stop":
487
+ code = event.get("exitCode")
488
+ if code is not None and code != 0:
489
+ suffix = " (timed out)" if event.get("status") == "TIMED_OUT" else ""
490
+ note = f"\n[exit code: {code}{suffix}]"
491
+ content += note
492
+ _write(note)
493
+ if content and not content.endswith("\n"):
494
+ _write("\n")
495
+ logger.log_response(content)
496
+ except Exception as exc: # noqa: BLE001
497
+ logger.log_error(exc, "exec command failed")
498
+ typer.echo(f"Error: {get_error_message(exc)}")
499
+
500
+
501
+ def _open_shell(session: _Session) -> None:
502
+ from agentcore.cli.commands.exec.action import ExecContext, handle_shell_session
503
+ from agentcore.cli.commands.exec.types import ExecOptions
504
+
505
+ if session.runtime is None:
506
+ return
507
+ handle_shell_session(
508
+ ExecContext(region=session.region, runtime_arn=session.arn),
509
+ ExecOptions(runtime_arn=session.arn, session_id=session.session_id, interactive=True),
510
+ )
511
+ typer.echo("[session resumed]")
512
+
513
+
514
+ def _chat(session: _Session) -> bool:
515
+ """Chat loop. Returns True to go back to the agent picker, False to exit."""
516
+ _resolve_token(session)
517
+ _print_header(session)
518
+ if session.runtime is not None and session.runtime.protocol == "MCP":
519
+ _fetch_mcp_tools(session)
520
+
521
+ while True:
522
+ try:
523
+ line = interactive.text(">")
524
+ except typer.Exit:
525
+ return True
526
+ stripped = line.strip()
527
+ if not stripped:
528
+ continue
529
+ if stripped in ("/exit", "/quit"):
530
+ return True
531
+ if stripped == "/new":
532
+ session.session_id = generate_session_id()
533
+ session.mcp_session_id = None
534
+ session.mcp_tools = []
535
+ typer.echo(f"New session: {session.session_id}")
536
+ continue
537
+ if stripped == "/shell":
538
+ _open_shell(session)
539
+ continue
540
+ if stripped.startswith("!"):
541
+ command = stripped[1:].strip()
542
+ if command:
543
+ _exec_turn(session, command)
544
+ continue
545
+ _invoke_turn(session, line)
546
+
547
+
548
+ def run_invoke_interactive(
549
+ *,
550
+ session_id: str | None = None,
551
+ user_id: str | None = None,
552
+ headers: dict[str, str] | None = None,
553
+ bearer_token: str | None = None,
554
+ payment_instrument_id: str | None = None,
555
+ payment_session_id: str | None = None,
556
+ auto_session: bool = False,
557
+ payment_user_id: str | None = None,
558
+ harness_name: str | None = None,
559
+ ) -> None:
560
+ config_io = ConfigIO()
561
+ try:
562
+ config = load_invoke_tui_config(config_io)
563
+ if auto_session and not payment_session_id:
564
+ payment_session_id = _auto_session(config_io, config, payment_user_id)
565
+ except Exception as exc: # noqa: BLE001 - shown as the TUI error screen upstream
566
+ typer.echo(f"{ANSI.red}{get_error_message(exc)}{ANSI.reset}")
567
+ raise typer.Exit(1) from None
568
+
569
+ total = len(config.runtimes) + len(config.harnesses)
570
+ selected = 0
571
+ if harness_name:
572
+ idx = next((i for i, h in enumerate(config.harnesses) if h.name == harness_name), -1)
573
+ if idx >= 0:
574
+ selected = len(config.runtimes) + idx
575
+
576
+ session = _Session(
577
+ config=config,
578
+ selected=selected,
579
+ session_id=session_id or generate_session_id(),
580
+ user_id=user_id or DEFAULT_RUNTIME_USER_ID,
581
+ headers=headers,
582
+ bearer_token=bearer_token or "",
583
+ payment_instrument_id=payment_instrument_id,
584
+ payment_session_id=payment_session_id,
585
+ payment_user_id=payment_user_id,
586
+ )
587
+
588
+ while True:
589
+ if total > 1 and not harness_name:
590
+ choices = [interactive.Choice(r.name, i, r.protocol or "HTTP") for i, r in enumerate(config.runtimes)]
591
+ choices += [
592
+ interactive.Choice(h.name, len(config.runtimes) + i, "harness") for i, h in enumerate(config.harnesses)
593
+ ]
594
+ try:
595
+ session.selected = interactive.select("Select an agent to invoke", choices, default=None)
596
+ except typer.Exit:
597
+ break
598
+ harness_name = None
599
+ back = _chat(session)
600
+ if not back or total <= 1:
601
+ break
602
+
603
+ if session.logger is not None:
604
+ typer.echo(f"Log: {session.logger.get_relative_log_path()}", err=True)