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,380 @@
1
+ """Job history/detail commands (ports of commands/eval, recommendations, batch-evaluations, view).
2
+
3
+ - `evals history`
4
+ - `recommendations history` / `recommendations <id>`
5
+ - `batch-evaluations history` / `batch-evaluations <id>`
6
+ - `view recommendation|batch-evaluation|ab-test|insights [id]` (top-level `view`, registered here)
7
+ """
8
+
9
+ from collections.abc import Callable
10
+ from typing import Any
11
+
12
+ import typer
13
+ from rich.console import Console
14
+ from rich.table import Table
15
+ from typer import _click as click
16
+ from typer.core import TyperGroup
17
+
18
+ from agentcore.cli import interactive
19
+ from agentcore.cli.commands._jobs_common import print_json, red, require_project
20
+ from agentcore.cli.errors import get_error_message
21
+ from agentcore.cli.groups import group
22
+ from agentcore.cli.run_command import run_cli_command
23
+ from agentcore.lib import ConfigIO, JobNotFoundError, serialize_result
24
+ from agentcore.operations.eval.list_eval_runs import handle_list_eval_runs
25
+ from agentcore.operations.eval.storage import get_results_path
26
+ from agentcore.operations.jobs import JOB_CAPABILITIES, create_job_engine
27
+ from agentcore.operations.jobs.ab_test.format import (
28
+ INVOCATION_PATH_HINT,
29
+ get_gateway_base_url,
30
+ get_invocation_url,
31
+ get_invocation_url_candidates,
32
+ print_ab_test_detail,
33
+ print_ab_test_history,
34
+ )
35
+ from agentcore.operations.jobs.batch_evaluation.format import (
36
+ print_batch_evaluation_detail,
37
+ print_batch_evaluation_history,
38
+ )
39
+ from agentcore.operations.jobs.insights.format import print_insights_detail, print_insights_history
40
+ from agentcore.operations.jobs.recommendation.format import (
41
+ print_recommendation_detail,
42
+ print_recommendation_history,
43
+ short_type,
44
+ )
45
+ from agentcore.operations.jobs.shared.format import format_job_date, parse_int, to_fixed, to_locale_string
46
+
47
+ TYPE_META: dict[str, dict[str, Any]] = {
48
+ "recommendation": {
49
+ "label": "recommendation",
50
+ "jsonKey": "recommendations",
51
+ "history": print_recommendation_history,
52
+ "detail": print_recommendation_detail,
53
+ },
54
+ "batch-evaluation": {
55
+ "label": "batch evaluation",
56
+ "jsonKey": "batchEvaluations",
57
+ "history": print_batch_evaluation_history,
58
+ "detail": print_batch_evaluation_detail,
59
+ },
60
+ "ab-test": {
61
+ "label": "A/B test",
62
+ "jsonKey": "abTests",
63
+ "history": print_ab_test_history,
64
+ "detail": print_ab_test_detail,
65
+ },
66
+ "insights": {
67
+ "label": "insights",
68
+ "jsonKey": "insights",
69
+ "history": print_insights_history,
70
+ "detail": print_insights_detail,
71
+ },
72
+ }
73
+
74
+ _SHOW_COMMAND = "__show__"
75
+
76
+
77
+ class JobGroup(TyperGroup):
78
+ """Commander's ``group.argument('<id>')``: an unknown first token is the job id to show."""
79
+
80
+ def resolve_command(self, ctx: click.Context, args: list[str]): # type: ignore[no-untyped-def]
81
+ name = args[0] if args else None
82
+ if name and not name.startswith("-") and name not in self.commands and _SHOW_COMMAND in self.commands:
83
+ return _SHOW_COMMAND, self.commands[_SHOW_COMMAND], args
84
+ return super().resolve_command(ctx, args)
85
+
86
+
87
+ # ──────────────────────────────────────────────────────────────────────────────
88
+ # evals history
89
+ # ──────────────────────────────────────────────────────────────────────────────
90
+
91
+ evals_app = group("evals")
92
+
93
+
94
+ @evals_app.command("history", help="Show past on-demand eval run results saved locally")
95
+ def evals_history(
96
+ runtime: str | None = typer.Option(None, "-r", "--runtime", help="Filter results by runtime name"),
97
+ limit: str | None = typer.Option(None, "-n", "--limit", help="Max number of runs to display"),
98
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
99
+ ) -> None:
100
+ require_project()
101
+ try:
102
+ result = handle_list_eval_runs(agent=runtime, limit=parse_int(limit) if limit else None)
103
+ if as_json:
104
+ print_json(serialize_result(result))
105
+ raise typer.Exit(0 if result.success else 1)
106
+ if not result.success:
107
+ red(str(result.error))
108
+ raise typer.Exit(1)
109
+ runs = result.value["runs"]
110
+ if not runs:
111
+ typer.echo("No eval runs found. Run `agentcore run eval` to create one.")
112
+ return
113
+ typer.echo(f"\n{'Date'.ljust(22)} {'Agent'.ljust(20)} {'Evaluators'.ljust(30)} Sessions")
114
+ typer.echo("─" * 90)
115
+ for run in runs:
116
+ scores = ", ".join(f"{r['evaluator']}={to_fixed(r['aggregateScore'], 2)}" for r in run.get("results") or [])
117
+ typer.echo(
118
+ f"{to_locale_string(run.get('timestamp')).ljust(22)} {str(run.get('agent')).ljust(20)} "
119
+ f"{scores.ljust(30)} {run.get('sessionCount')}"
120
+ )
121
+ try:
122
+ typer.echo(f"\nResults saved in: {get_results_path()}")
123
+ except Exception: # noqa: BLE001, S110 - no project context
124
+ pass
125
+ typer.echo("")
126
+ except typer.Exit:
127
+ raise
128
+ except Exception as exc: # noqa: BLE001
129
+ if as_json:
130
+ print_json({"success": False, "error": get_error_message(exc)})
131
+ else:
132
+ red(f"Error: {get_error_message(exc)}")
133
+ raise typer.Exit(1) from None
134
+
135
+
136
+ # ──────────────────────────────────────────────────────────────────────────────
137
+ # recommendations / batch-evaluations
138
+ # ──────────────────────────────────────────────────────────────────────────────
139
+
140
+
141
+ def _history(job_type: str, as_json: bool) -> None:
142
+ require_project()
143
+ meta = TYPE_META[job_type]
144
+
145
+ def run() -> None:
146
+ records = create_job_engine(ConfigIO()).list(type=job_type)
147
+ if as_json:
148
+ print_json({"success": True, meta["jsonKey"]: records})
149
+ else:
150
+ meta["history"](records)
151
+
152
+ run_cli_command(as_json, run)
153
+
154
+
155
+ def _show(job_type: str, job_id: str, as_json: bool, not_found: str, extra: Callable[[dict], dict] | None = None):
156
+ require_project()
157
+ meta = TYPE_META[job_type]
158
+
159
+ def run() -> None:
160
+ record = create_job_engine(ConfigIO()).get(job_type, job_id)
161
+ if not record:
162
+ raise JobNotFoundError(not_found)
163
+ if as_json:
164
+ print_json(serialize_result({"success": True, **record, **(extra(record) if extra else {})}))
165
+ else:
166
+ meta["detail"](record)
167
+
168
+ run_cli_command(as_json, run)
169
+
170
+
171
+ def _register_job_group(name: str, job_type: str, history_help: str, id_help: str, label: str) -> None:
172
+ app = group(name)
173
+ app.info.cls = JobGroup
174
+
175
+ @app.command("history", help=history_help)
176
+ def history(as_json: bool = typer.Option(False, "--json", help="Output as JSON")) -> None:
177
+ _history(job_type, as_json)
178
+
179
+ @app.command(_SHOW_COMMAND, hidden=True, help=id_help)
180
+ def show(
181
+ job_id: str = typer.Argument(..., metavar="<id>", help=id_help),
182
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
183
+ ) -> None:
184
+ _show(job_type, job_id, as_json, f'{label} "{job_id}" not found.')
185
+
186
+
187
+ _register_job_group(
188
+ "recommendations",
189
+ "recommendation",
190
+ "List recommendation jobs (running jobs are refreshed from the service)",
191
+ "Recommendation job ID to view",
192
+ "Recommendation",
193
+ )
194
+ _register_job_group(
195
+ "batch-evaluations",
196
+ "batch-evaluation",
197
+ "List batch evaluation jobs (running jobs are refreshed from the service)",
198
+ "Batch evaluation job ID to view",
199
+ "Batch evaluation",
200
+ )
201
+
202
+ # ──────────────────────────────────────────────────────────────────────────────
203
+ # view
204
+ # ──────────────────────────────────────────────────────────────────────────────
205
+
206
+
207
+ def ab_test_url_fields(record: dict[str, Any]) -> dict[str, Any]:
208
+ url = get_invocation_url(record)
209
+ if url:
210
+ return {"invocationUrl": url}
211
+ candidates = get_invocation_url_candidates(record)
212
+ if candidates:
213
+ return {"invocationUrlCandidates": candidates}
214
+ return {"gatewayUrl": get_gateway_base_url(record), "invocationUrlHint": INVOCATION_PATH_HINT}
215
+
216
+
217
+ view_app = typer.Typer(help="View job history and details", no_args_is_help=True)
218
+
219
+
220
+ def _register_view(job_type: str) -> None:
221
+ meta = TYPE_META[job_type]
222
+
223
+ @view_app.command(job_type, help=f"View {meta['label']} jobs")
224
+ def view(
225
+ job_id: str | None = typer.Argument(None, metavar="[id]", help=f"{meta['label']} job ID"),
226
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON (non-interactive)"),
227
+ region: str | None = typer.Option(None, "--region", help="AWS region (auto-detected if omitted)"),
228
+ ) -> None:
229
+ require_project()
230
+ if job_id:
231
+ if as_json:
232
+ _show(
233
+ job_type,
234
+ job_id,
235
+ True,
236
+ f'{meta["label"]} "{job_id}" not found.',
237
+ ab_test_url_fields if job_type == "ab-test" else None,
238
+ )
239
+ return
240
+ interactive.require_tty()
241
+ browse_detail(job_type, job_id)
242
+ raise typer.Exit(0)
243
+ if as_json:
244
+ _history(job_type, True)
245
+ return
246
+ interactive.require_tty()
247
+ browse_list(job_type)
248
+ raise typer.Exit(0)
249
+
250
+
251
+ for _job_type in ("recommendation", "batch-evaluation", "ab-test", "insights"):
252
+ _register_view(_job_type)
253
+
254
+
255
+ def register(app: typer.Typer) -> None:
256
+ app.add_typer(view_app, name="view")
257
+
258
+
259
+ # ──────────────────────────────────────────────────────────────────────────────
260
+ # Interactive job browser (replaces the history / JobDetail TUI screens)
261
+ # ──────────────────────────────────────────────────────────────────────────────
262
+
263
+ _console = Console()
264
+
265
+
266
+ def _summary_columns(job_type: str, record: dict[str, Any]) -> list[str]:
267
+ if job_type == "recommendation":
268
+ return [short_type(record.get("recommendationType")), record.get("agent") or ""]
269
+ if job_type == "ab-test":
270
+ return [str(record.get("lifecycleStatus") or ""), str(record.get("name") or "")]
271
+ if job_type == "insights":
272
+ return [", ".join(record.get("insights") or [])]
273
+ return [", ".join(record.get("evaluators") or [])]
274
+
275
+
276
+ def _table(job_type: str, records: list[dict[str, Any]]) -> Table:
277
+ extra = {
278
+ "recommendation": ["Type", "Agent"],
279
+ "ab-test": ["Lifecycle", "Name"],
280
+ "insights": ["Insights"],
281
+ "batch-evaluation": ["Evaluators"],
282
+ }[job_type]
283
+ table = Table(title=f"{TYPE_META[job_type]['label'].capitalize()} jobs", show_lines=False)
284
+ for column in ["Date", "Status", *extra, "ID"]:
285
+ table.add_column(column)
286
+ for r in records:
287
+ table.add_row(
288
+ format_job_date(r.get("createdAt")), str(r.get("status")), *_summary_columns(job_type, r), r["id"]
289
+ )
290
+ return table
291
+
292
+
293
+ def _validate_creds() -> bool:
294
+ from agentcore.aws.account import validate_aws_credentials
295
+
296
+ try:
297
+ validate_aws_credentials()
298
+ return True
299
+ except Exception as exc: # noqa: BLE001
300
+ red("AWS credentials required")
301
+ typer.echo(get_error_message(exc))
302
+ return False
303
+
304
+
305
+ def browse_list(job_type: str) -> None:
306
+ if not _validate_creds():
307
+ raise typer.Exit(1)
308
+ engine = create_job_engine(ConfigIO())
309
+ while True:
310
+ records = engine.list(type=job_type)
311
+ if not records:
312
+ TYPE_META[job_type]["history"]([])
313
+ return
314
+ _console.print(_table(job_type, records))
315
+ choices = [
316
+ interactive.Choice(f"{format_job_date(r.get('createdAt'))} {r.get('status')} {r['id']}", r["id"])
317
+ for r in records
318
+ ]
319
+ picked = interactive.select("Select a job", [*choices, interactive.Choice("Exit", None)])
320
+ if picked is None:
321
+ return
322
+ browse_detail(job_type, picked, engine=engine, validate=False)
323
+
324
+
325
+ def _actions(job_type: str, record: dict[str, Any]) -> list[interactive.Choice]:
326
+ caps = JOB_CAPABILITIES[job_type]
327
+ actions = [interactive.Choice("Refresh", "refresh")]
328
+ if caps["canPause"]:
329
+ actions.append(
330
+ interactive.Choice("Resume", "resume")
331
+ if record.get("lifecycleStatus") == "PAUSED"
332
+ else interactive.Choice("Pause", "pause")
333
+ )
334
+ if caps["canStop"]:
335
+ actions.append(interactive.Choice("Stop", "stop"))
336
+ if caps["canPromote"]:
337
+ actions.append(interactive.Choice("Promote", "promote"))
338
+ if caps["canDebug"]:
339
+ actions.append(interactive.Choice("Debug", "debug"))
340
+ actions += [interactive.Choice("Archive", "archive"), interactive.Choice("Back", "back")]
341
+ return actions
342
+
343
+
344
+ def browse_detail(job_type: str, job_id: str, engine: Any = None, validate: bool = True) -> None:
345
+ if validate and not _validate_creds():
346
+ raise typer.Exit(1)
347
+ engine = engine or create_job_engine(ConfigIO())
348
+ while True:
349
+ try:
350
+ record = engine.get(job_type, job_id)
351
+ except Exception as exc: # noqa: BLE001
352
+ red("Job not found")
353
+ typer.echo(get_error_message(exc))
354
+ return
355
+ if not record:
356
+ red("Job not found")
357
+ typer.echo(f'Job "{job_id}" not found.')
358
+ return
359
+ TYPE_META[job_type]["detail"](record)
360
+ action = interactive.select("Action", _actions(job_type, record))
361
+ if action == "back":
362
+ return
363
+ if action == "refresh":
364
+ continue
365
+ if action in ("archive", "stop", "promote") and not interactive.confirm(
366
+ f"{action.capitalize()} {TYPE_META[job_type]['label']} {job_id}?", default=False
367
+ ):
368
+ continue
369
+ result = getattr(engine, action)(job_type, job_id)
370
+ if not result.success:
371
+ red(get_error_message(result.error))
372
+ continue
373
+ if action == "debug":
374
+ for check in result.value["checks"]:
375
+ mark = {"pass": "✓", "fail": "✗", "warn": "!"}.get(check["status"], "?")
376
+ typer.echo(f" {mark} {check['label']}: {check['detail']}")
377
+ continue
378
+ typer.secho(f"✓ {action.capitalize()} succeeded.", fg=typer.colors.GREEN)
379
+ if action == "archive":
380
+ return
@@ -0,0 +1,53 @@
1
+ """`agentcore logs` default action: stream or search runtime logs (port of src/cli/commands/logs).
2
+
3
+ `logs evals` belongs to the evals area and is left to its own module (stub until ported).
4
+ """
5
+
6
+ import typer
7
+
8
+ from agentcore.cli.commands.logs.action import LogsOptions, handle_logs
9
+ from agentcore.cli.commands.logs.guards import require_project
10
+ from agentcore.cli.errors import get_error_message
11
+ from agentcore.cli.groups import group
12
+ from agentcore.cli.tree import GROUPS
13
+
14
+ # COMMAND_DESCRIPTIONS.logs from upstream src/cli/constants.ts.
15
+ LOGS_DESCRIPTION = GROUPS["logs"][0]
16
+
17
+
18
+ def logs_callback(
19
+ ctx: typer.Context,
20
+ runtime: str | None = typer.Option(None, "--runtime", help="Select specific runtime"),
21
+ since: str | None = typer.Option(
22
+ None, "--since", help='Start time — defaults to 1h ago in search mode (e.g. "1h", "30m", "2d", ISO 8601)'
23
+ ),
24
+ until: str | None = typer.Option(
25
+ None, "--until", help='End time — defaults to now in search mode (e.g. "now", ISO 8601)'
26
+ ),
27
+ level: str | None = typer.Option(None, "--level", help="Filter by log level (error, warn, info, debug)"),
28
+ limit: str | None = typer.Option(None, "-n", "--limit", help="Maximum number of log lines to return"),
29
+ query: str | None = typer.Option(None, "--query", help="Server-side text filter"),
30
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON Lines"),
31
+ ) -> None:
32
+ if ctx.invoked_subcommand is not None:
33
+ return
34
+ require_project()
35
+ try:
36
+ result = handle_logs(
37
+ LogsOptions(runtime=runtime, since=since, until=until, level=level, limit=limit, query=query, json=as_json)
38
+ )
39
+ except typer.Exit:
40
+ raise
41
+ except Exception as exc: # noqa: BLE001 - top-level command boundary, as upstream
42
+ typer.secho(f"Error: {get_error_message(exc)}", fg=typer.colors.RED)
43
+ raise typer.Exit(1) from None
44
+ if not result.success:
45
+ typer.secho(str(result.error), fg=typer.colors.RED)
46
+ raise typer.Exit(1)
47
+
48
+
49
+ def register(app: typer.Typer) -> None:
50
+ logs = group("logs")
51
+ logs.callback(invoke_without_command=True, no_args_is_help=False, help=LOGS_DESCRIPTION)(logs_callback)
52
+ # Upstream alias `agentcore l`.
53
+ app.add_typer(logs, name="l", hidden=True)
@@ -0,0 +1,159 @@
1
+ """Port of src/cli/commands/logs/action.ts (runtime logs: stream or search)."""
2
+
3
+ import json
4
+ import signal
5
+ import threading
6
+ import time
7
+ from dataclasses import dataclass
8
+ from datetime import UTC, datetime
9
+
10
+ import typer
11
+
12
+ from agentcore.aws import cloudwatch
13
+ from agentcore.aws._aws_errors import aws_error_name
14
+ from agentcore.cli.commands.logs.filter_pattern import VALID_LEVELS, build_filter_pattern
15
+ from agentcore.lib.errors.types import ResourceNotFoundError, ValidationError
16
+ from agentcore.lib.result import Err, Ok
17
+ from agentcore.lib.utils.time_parser import parse_time_string
18
+ from agentcore.operations.resolve_agent import DeployedProjectConfig, load_deployed_project_config, resolve_agent
19
+
20
+ # From upstream src/cli/constants.ts.
21
+ DEFAULT_ENDPOINT_NAME = "DEFAULT"
22
+
23
+
24
+ @dataclass
25
+ class LogsOptions:
26
+ runtime: str | None = None
27
+ since: str | None = None
28
+ until: str | None = None
29
+ level: str | None = None
30
+ limit: str | None = None
31
+ query: str | None = None
32
+ json: bool = False
33
+
34
+
35
+ @dataclass
36
+ class AgentContext:
37
+ agent_id: str
38
+ agent_name: str
39
+ account_id: str
40
+ region: str
41
+ endpoint_name: str
42
+ log_group_name: str
43
+
44
+
45
+ def detect_mode(options: LogsOptions) -> str:
46
+ return "search" if options.since or options.until else "stream"
47
+
48
+
49
+ def _iso(timestamp_ms: int) -> str:
50
+ dt = datetime.fromtimestamp(timestamp_ms / 1000, tz=UTC)
51
+ return dt.strftime("%Y-%m-%dT%H:%M:%S.") + f"{dt.microsecond // 1000:03d}Z"
52
+
53
+
54
+ def format_log_line(event: dict, as_json: bool) -> str:
55
+ ts = _iso(event["timestamp"])
56
+ if as_json:
57
+ return json.dumps({"timestamp": ts, "message": event["message"]}, separators=(",", ":"), ensure_ascii=False)
58
+ return f"{ts} {event['message']}"
59
+
60
+
61
+ def resolve_agent_context(context: DeployedProjectConfig, options: LogsOptions) -> Ok[AgentContext] | Err:
62
+ result = resolve_agent(context, options.runtime)
63
+ if not result.success:
64
+ return Err(ResourceNotFoundError(result.error or ""))
65
+ agent = result.agent
66
+ assert agent is not None
67
+ return Ok(
68
+ AgentContext(
69
+ agent_id=agent.runtime_id,
70
+ agent_name=agent.agent_name,
71
+ account_id=agent.account_id,
72
+ region=agent.region,
73
+ endpoint_name=DEFAULT_ENDPOINT_NAME,
74
+ log_group_name=cloudwatch.runtime_log_group(agent.runtime_id),
75
+ )
76
+ )
77
+
78
+
79
+ def _parse_int(value: str) -> int | None:
80
+ """``parseInt(value, 10)``: leading integer, else None (NaN)."""
81
+ digits = ""
82
+ text = value.strip()
83
+ for i, ch in enumerate(text):
84
+ if ch.isdigit() or (i == 0 and ch in "+-"):
85
+ digits += ch
86
+ else:
87
+ break
88
+ try:
89
+ return int(digits)
90
+ except ValueError:
91
+ return None
92
+
93
+
94
+ def handle_logs(options: LogsOptions) -> Ok[None] | Err:
95
+ if options.level and options.level.lower() not in VALID_LEVELS:
96
+ return Err(ValidationError(f'Invalid log level: "{options.level}". Valid levels: {", ".join(VALID_LEVELS)}'))
97
+
98
+ context = load_deployed_project_config()
99
+ resolution = resolve_agent_context(context, options)
100
+ if not resolution.success:
101
+ return resolution
102
+ agent_context = resolution.value
103
+
104
+ try:
105
+ filter_pattern = build_filter_pattern(level=options.level, query=options.query)
106
+ except Exception as exc: # noqa: BLE001 - surfaced as a Result, as upstream
107
+ return Err(exc)
108
+
109
+ abort = threading.Event()
110
+ previous = None
111
+ if threading.current_thread() is threading.main_thread():
112
+
113
+ def on_sigint(_signum, _frame):
114
+ abort.set()
115
+ raise KeyboardInterrupt
116
+
117
+ previous = signal.signal(signal.SIGINT, on_sigint)
118
+
119
+ try:
120
+ if detect_mode(options) == "search":
121
+ now = int(time.time() * 1000)
122
+ start_ms = parse_time_string(options.since) if options.since else now - 3_600_000
123
+ end_ms = parse_time_string(options.until) if options.until else int(time.time() * 1000)
124
+ limit = _parse_int(options.limit) if options.limit else None
125
+ for event in cloudwatch.search_logs(
126
+ log_group_name=agent_context.log_group_name,
127
+ region=agent_context.region,
128
+ start_time_ms=start_ms,
129
+ end_time_ms=end_ms,
130
+ filter_pattern=filter_pattern,
131
+ limit=limit,
132
+ ):
133
+ typer.echo(format_log_line(event, options.json))
134
+ else:
135
+ typer.echo(f"Streaming logs for {agent_context.agent_name}... (Ctrl+C to stop)", err=True)
136
+ for event in cloudwatch.stream_logs(
137
+ log_group_name=agent_context.log_group_name,
138
+ region=agent_context.region,
139
+ account_id=agent_context.account_id,
140
+ filter_pattern=filter_pattern,
141
+ abort_signal=abort,
142
+ ):
143
+ typer.echo(format_log_line(event, options.json))
144
+ return Ok(None)
145
+ except KeyboardInterrupt:
146
+ return Ok(None)
147
+ except Exception as exc:
148
+ if aws_error_name(exc) == "ResourceNotFoundException":
149
+ return Err(
150
+ ResourceNotFoundError(
151
+ f"No logs found for agent '{agent_context.agent_name}'. Has the agent been invoked?"
152
+ )
153
+ )
154
+ if abort.is_set():
155
+ return Ok(None)
156
+ raise
157
+ finally:
158
+ if previous is not None:
159
+ signal.signal(signal.SIGINT, previous)
@@ -0,0 +1,17 @@
1
+ """Port of src/cli/commands/logs/filter-pattern.ts."""
2
+
3
+ LEVEL_MAP = {"error": "ERROR", "warn": "WARN", "info": "INFO", "debug": "DEBUG"}
4
+ VALID_LEVELS = list(LEVEL_MAP)
5
+
6
+
7
+ def build_filter_pattern(level: str | None = None, query: str | None = None) -> str | None:
8
+ """CloudWatch filter pattern: level (uppercased) and query joined by a space (implicit AND)."""
9
+ parts: list[str] = []
10
+ if level:
11
+ mapped = LEVEL_MAP.get(level.lower())
12
+ if not mapped:
13
+ raise ValueError(f'Invalid log level: "{level}". Valid levels: {", ".join(VALID_LEVELS)}')
14
+ parts.append(mapped)
15
+ if query:
16
+ parts.append(query)
17
+ return " ".join(parts) if parts else None
@@ -0,0 +1,51 @@
1
+ """Port of tui/guards/project.tsx (projectExists, getProjectRootMismatch, requireProject).
2
+
3
+ Lives here because the guard isn't ported elsewhere yet; traces/fetch reuse it.
4
+ """
5
+
6
+ import os
7
+
8
+ import typer
9
+
10
+ from agentcore.lib.schemas.io.path_resolver import find_config_root, get_working_directory
11
+
12
+
13
+ def project_exists(base_dir: str | None = None) -> bool:
14
+ return find_config_root(base_dir or get_working_directory()) is not None
15
+
16
+
17
+ def get_project_root_mismatch(base_dir: str | None = None) -> str | None:
18
+ """Project root when cwd is a subdirectory of it; None at the root or with no project."""
19
+ base_dir = base_dir or get_working_directory()
20
+ config_root = find_config_root(base_dir)
21
+ if not config_root:
22
+ return None
23
+ project_root = os.path.abspath(os.path.dirname(config_root))
24
+ return project_root if os.path.abspath(base_dir) != project_root else None
25
+
26
+
27
+ def _fatal(message: str, detail: str | None = None, suggested_command: str | None = None) -> None:
28
+ """Text equivalent of the FatalError component."""
29
+ typer.secho(message, fg=typer.colors.RED)
30
+ if detail:
31
+ typer.echo(detail)
32
+ if suggested_command:
33
+ typer.echo("Run " + typer.style(suggested_command, fg=typer.colors.BLUE) + " to fix this.")
34
+
35
+
36
+ def require_project(in_tui: bool = False) -> None:
37
+ """Exit 1 unless run from the root of an agentcore project."""
38
+ cwd = get_working_directory()
39
+ config_root = find_config_root(cwd)
40
+ if not config_root:
41
+ _fatal("No agentcore project found.", suggested_command="create" if in_tui else "agentcore create")
42
+ raise typer.Exit(1)
43
+ project_root = os.path.abspath(os.path.dirname(config_root))
44
+ resolved_cwd = os.path.abspath(cwd)
45
+ if resolved_cwd != project_root:
46
+ _fatal(
47
+ "Please run this command from your project root directory.",
48
+ detail=f"You are in: {resolved_cwd}\nProject root: {project_root}",
49
+ suggested_command=f"cd {project_root}",
50
+ )
51
+ raise typer.Exit(1)