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,365 @@
1
+ """Online eval config add/remove (port of src/cli/primitives/OnlineEvalConfigPrimitive.ts)."""
2
+
3
+ from dataclasses import dataclass, field
4
+ from typing import Any
5
+
6
+ import typer
7
+
8
+ from agentcore.aws import agentcore_control as control
9
+ from agentcore.aws import region as _region
10
+ from agentcore.aws.account import validate_aws_credentials
11
+ from agentcore.cli import interactive
12
+ from agentcore.cli.commands.add._common import first_issue
13
+ from agentcore.cli.errors import get_error_message
14
+ from agentcore.cli.naming import generate_unique_name
15
+ from agentcore.cli.run_command import run_cli_command
16
+ from agentcore.cli.variadic import variadic
17
+ from agentcore.lib import ResourceNotFoundError, find_config_root, serialize_result
18
+ from agentcore.lib.errors.types import to_error
19
+ from agentcore.lib.result import Err, Ok
20
+ from agentcore.lib.schemas.io.config_io import to_jsonable
21
+ from agentcore.operations.jobs.shared.format import parse_float
22
+ from agentcore.primitives.base import BasePrimitive, RemovableResource, RemovalPreview, SchemaChange, emit_json
23
+ from agentcore.schema import OnlineEvalConfigName
24
+
25
+ DEFAULT_SAMPLING_RATE = 10
26
+
27
+
28
+ def validate_sampling_rate_text(value: str) -> str | None:
29
+ rate = parse_float(value)
30
+ if rate is None:
31
+ return "Must be a number"
32
+ if rate < 0.01 or rate > 100:
33
+ return "Must be between 0.01 and 100"
34
+ return None
35
+
36
+
37
+ def check_endpoint(project: dict[str, Any], agent: str, endpoint: str) -> None:
38
+ runtime = next((r for r in project.get("runtimes") or [] if r.get("name") == agent), None)
39
+ if runtime is None:
40
+ raise Exception(f'Runtime "{agent}" not found in project.')
41
+ endpoints = runtime.get("endpoints")
42
+ if not (endpoints or {}).get(endpoint):
43
+ available = ", ".join(endpoints) if endpoints else "(none)"
44
+ raise Exception(f'Endpoint "{endpoint}" not found on runtime "{agent}". Available endpoints: {available}')
45
+
46
+
47
+ def format_number(value: float) -> str:
48
+ return str(int(value)) if float(value).is_integer() else str(value)
49
+
50
+
51
+ @dataclass
52
+ class AddOnlineEvalConfigOptions:
53
+ name: str
54
+ agent: str
55
+ evaluators: list[str]
56
+ sampling_rate: float
57
+ enable_on_create: bool | None = None
58
+ endpoint: str | None = None
59
+ log_group_names: list[str] | None = None
60
+ service_names: list[str] | None = field(default=None)
61
+
62
+
63
+ class OnlineEvalConfigPrimitive(BasePrimitive):
64
+ kind = "online-eval"
65
+ label = "Online Eval Config"
66
+ article = "an"
67
+
68
+ def _project(self) -> dict[str, Any]:
69
+ return to_jsonable(self.read_project_spec())
70
+
71
+ def add(self, options: AddOnlineEvalConfigOptions) -> Ok | Err:
72
+ try:
73
+ project = self._project()
74
+ self.check_duplicate(
75
+ [RemovableResource(c["name"]) for c in project["onlineEvalConfigs"]], options.name, "Online eval config"
76
+ )
77
+ if options.endpoint and options.agent:
78
+ check_endpoint(project, options.agent, options.endpoint)
79
+ config: dict[str, Any] = {"name": options.name}
80
+ if options.agent:
81
+ config["agent"] = options.agent
82
+ config["evaluators"] = options.evaluators
83
+ config["samplingRate"] = options.sampling_rate
84
+ if options.enable_on_create is not None:
85
+ config["enableOnCreate"] = options.enable_on_create
86
+ if options.endpoint:
87
+ config["endpoint"] = options.endpoint
88
+ if options.log_group_names:
89
+ config["logGroupNames"] = options.log_group_names
90
+ if options.service_names:
91
+ config["serviceNames"] = options.service_names
92
+ project["onlineEvalConfigs"].append(config)
93
+ self.write_project_spec(project)
94
+ return Ok({"configName": options.name})
95
+ except Exception as exc: # noqa: BLE001
96
+ return Err(to_error(exc))
97
+
98
+ def remove(self, name: str) -> Ok | Err:
99
+ try:
100
+ project = self._project()
101
+ index = next((i for i, c in enumerate(project["onlineEvalConfigs"]) if c["name"] == name), -1)
102
+ if index == -1:
103
+ return Err(ResourceNotFoundError(f'Online eval config "{name}" not found.'))
104
+ project["onlineEvalConfigs"].pop(index)
105
+ self.write_project_spec(project)
106
+ return Ok(None)
107
+ except Exception as exc: # noqa: BLE001
108
+ return Err(to_error(exc))
109
+
110
+ def preview_remove(self, name: str) -> RemovalPreview:
111
+ project = self._project()
112
+ config = next((c for c in project["onlineEvalConfigs"] if c["name"] == name), None)
113
+ if config is None:
114
+ raise Exception(f'Online eval config "{name}" not found.')
115
+ summary = [f"Removing online eval config: {name}"]
116
+ if config.get("evaluators"):
117
+ summary.append(f"Uses evaluators: {', '.join(config['evaluators'])}")
118
+ if config.get("insights"):
119
+ summary.append(f"Uses insights: {', '.join(config['insights'])}")
120
+ after = {**project, "onlineEvalConfigs": [c for c in project["onlineEvalConfigs"] if c["name"] != name]}
121
+ return RemovalPreview(summary, [], [SchemaChange("agentcore/agentcore.json", project, after)])
122
+
123
+ def get_removable(self) -> list[RemovableResource]:
124
+ try:
125
+ return [RemovableResource(c["name"]) for c in self._project()["onlineEvalConfigs"]]
126
+ except Exception: # noqa: BLE001
127
+ return []
128
+
129
+ def get_all_names(self) -> list[str]:
130
+ return [r.name for r in self.get_removable()]
131
+
132
+ def register_commands(self, add_app: typer.Typer, remove_app: typer.Typer) -> None:
133
+ @add_app.command(
134
+ "online-eval",
135
+ help="Add an online eval config to the project",
136
+ cls=variadic("-e", "--evaluator", "--evaluator-arn", "--log-group-name", "--service-name"),
137
+ )
138
+ def add_online_eval(
139
+ name: str | None = typer.Option(None, "--name", help="Config name [non-interactive]"),
140
+ runtime: str | None = typer.Option(None, "-r", "--runtime", help="Runtime to monitor [non-interactive]"),
141
+ evaluator: list[str] | None = typer.Option(
142
+ None, "-e", "--evaluator", help="Evaluator name(s), Builtin.* IDs, or ARNs [non-interactive]"
143
+ ),
144
+ evaluator_arn: list[str] | None = typer.Option(
145
+ None, "--evaluator-arn", help="Evaluator ARN(s) [non-interactive]"
146
+ ),
147
+ sampling_rate: str | None = typer.Option(
148
+ None, "--sampling-rate", help="Sampling percentage (0.01-100) [non-interactive]"
149
+ ),
150
+ endpoint: str | None = typer.Option(
151
+ None, "--endpoint", help="Runtime endpoint name to scope monitoring [non-interactive]"
152
+ ),
153
+ log_group_name: list[str] | None = typer.Option(
154
+ None,
155
+ "--log-group-name",
156
+ help="CloudWatch log group name(s) for custom data sources (1-5) [non-interactive]",
157
+ ),
158
+ service_name: list[str] | None = typer.Option(
159
+ None,
160
+ "--service-name",
161
+ help="Service name(s) to filter traces for custom data sources [non-interactive]",
162
+ ),
163
+ enable_on_create: bool = typer.Option(
164
+ False, "--enable-on-create", help="Enable evaluation immediately after deploy [non-interactive]"
165
+ ),
166
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON [non-interactive]"),
167
+ ) -> None:
168
+ if not find_config_root():
169
+ typer.echo("No agentcore project found. Run `agentcore create` first.", err=True)
170
+ raise typer.Exit(1)
171
+ if not (name or as_json):
172
+ try:
173
+ interactive.require_tty()
174
+ self.add_interactive()
175
+ except typer.Exit:
176
+ raise
177
+ except Exception as exc: # noqa: BLE001
178
+ typer.echo(get_error_message(exc), err=True)
179
+ raise typer.Exit(1) from None
180
+ raise typer.Exit(0)
181
+
182
+ all_evaluators = [*(evaluator or []), *(evaluator_arn or [])]
183
+
184
+ def run() -> None:
185
+ if runtime and log_group_name:
186
+ raise Exception(
187
+ "Error: --runtime and --log-group-name are mutually exclusive. Use --runtime (+ optional "
188
+ "--endpoint) for AgentCore agents, or --log-group-name/--service-name for custom data sources."
189
+ )
190
+ if log_group_name:
191
+ if not name or not all_evaluators or not sampling_rate:
192
+ raise Exception(
193
+ "--name, --log-group-name, --evaluator (and/or --evaluator-arn), and --sampling-rate are "
194
+ "all required in non-interactive mode"
195
+ )
196
+ if len(log_group_name) > 5:
197
+ raise Exception("--log-group-name accepts at most 5 log group names")
198
+ elif not name or not runtime or not all_evaluators or not sampling_rate:
199
+ raise Exception(
200
+ "--name, --runtime, --evaluator (and/or --evaluator-arn), and --sampling-rate are all "
201
+ "required in non-interactive mode"
202
+ )
203
+ rate = parse_float(sampling_rate)
204
+ if rate is None or rate < 0.01 or rate > 100:
205
+ raise Exception(
206
+ f'Invalid --sampling-rate "{sampling_rate}". Must be a percentage between 0.01 and 100'
207
+ )
208
+ result = self.add(
209
+ AddOnlineEvalConfigOptions(
210
+ name=name,
211
+ agent=runtime or "",
212
+ evaluators=all_evaluators,
213
+ sampling_rate=rate,
214
+ enable_on_create=True if enable_on_create else None,
215
+ endpoint=endpoint,
216
+ log_group_names=log_group_name or None,
217
+ service_names=service_name or None,
218
+ )
219
+ )
220
+ if not result.success:
221
+ raise result.error
222
+ if as_json:
223
+ emit_json(serialize_result(result))
224
+ else:
225
+ typer.echo(f"Added online eval config '{result.value['configName']}'")
226
+
227
+ run_cli_command(as_json, run)
228
+
229
+ self.register_remove_subcommand(remove_app)
230
+
231
+ def add_interactive(self) -> None:
232
+ """Prompt flow mirroring tui/screens/online-eval/AddOnlineEvalFlow + AddOnlineEvalScreen."""
233
+ try:
234
+ validate_aws_credentials()
235
+ except Exception as exc: # noqa: BLE001
236
+ typer.echo("AWS credentials required", err=True)
237
+ typer.echo(get_error_message(exc), err=True)
238
+ raise typer.Exit(1) from None
239
+ region = _region.detect_region().region
240
+ project = self._project()
241
+ evaluators = control.list_evaluators(region=region)["evaluators"]
242
+ runtimes = project.get("runtimes") or []
243
+ agent_names = [r["name"] for r in runtimes]
244
+ existing = self.get_all_names()
245
+ choice = interactive.Choice
246
+
247
+ def validate_name(value: str) -> str | None:
248
+ issue = first_issue(OnlineEvalConfigName, value)
249
+ if issue:
250
+ return issue
251
+ return "Config name already exists" if value in existing else None
252
+
253
+ name = interactive.text(
254
+ "Config name", default=generate_unique_name("MyOnlineEval", existing), validate=validate_name
255
+ )
256
+ source = interactive.select(
257
+ "Select data source type",
258
+ [
259
+ choice("AgentCore Runtime", "agentcore-runtime", "Monitor a managed AgentCore agent"),
260
+ choice("CloudWatch Logs", "cloudwatch-logs", "Provide custom log groups for 3rd-party agents"),
261
+ ],
262
+ )
263
+ agent = ""
264
+ endpoint = None
265
+ log_groups: list[str] | None = None
266
+ services: list[str] | None = None
267
+ if source == "agentcore-runtime":
268
+ if len(agent_names) == 1:
269
+ agent = agent_names[0]
270
+ elif agent_names:
271
+ agent = interactive.select("Select agent to monitor", [choice(n, n) for n in agent_names])
272
+ runtime = next((r for r in runtimes if r["name"] == agent), {})
273
+ endpoints = runtime.get("endpoints") or {}
274
+ if endpoints:
275
+ picked = interactive.select(
276
+ "Select endpoint to monitor",
277
+ [choice("DEFAULT", "DEFAULT")]
278
+ + [choice(ep, ep, f"v{info.get('version')}") for ep, info in endpoints.items()],
279
+ )
280
+ endpoint = None if picked == "DEFAULT" else picked
281
+ else:
282
+ typer.echo(
283
+ "Enter CloudWatch log group names (1-5). Press Enter to add each name. Submit an empty value when done."
284
+ )
285
+ log_groups = []
286
+ while len(log_groups) < 5:
287
+ entry = interactive.text(
288
+ f"Log group name {len(log_groups) + 1}",
289
+ validate=lambda v: (
290
+ "At least one log group name is required" if v == "" and not log_groups else None
291
+ ),
292
+ )
293
+ if entry == "":
294
+ break
295
+ log_groups.append(entry)
296
+ typer.echo("Enter service names separated by spaces (optional). Leave empty to skip.")
297
+ raw = interactive.text("Service names (space-separated)")
298
+ services = raw.split() if raw.strip() else None
299
+
300
+ selected = interactive.checkbox(
301
+ "Select evaluators",
302
+ [
303
+ choice(
304
+ e["evaluatorName"],
305
+ e["evaluatorArn"],
306
+ "Built-in evaluator"
307
+ if e.get("evaluatorType") == "Builtin"
308
+ else (e.get("description") or "Custom evaluator"),
309
+ )
310
+ for e in evaluators
311
+ ],
312
+ )
313
+ typer.echo(
314
+ "Percentage of agent requests that will be evaluated. Higher rates give better coverage but increase LLM "
315
+ "costs from evaluator invocations."
316
+ )
317
+ rate_text = interactive.text(
318
+ "Sampling rate (0.01-100%)", default=str(DEFAULT_SAMPLING_RATE), validate=validate_sampling_rate_text
319
+ )
320
+ rate = parse_float(rate_text)
321
+ enable = interactive.select(
322
+ "Enable on deploy?",
323
+ [
324
+ choice("Yes", True, "Enable evaluation immediately after deploy"),
325
+ choice("No", False, "Deploy paused — enable later with `agentcore resume online-eval`"),
326
+ ],
327
+ )
328
+ rows = [("Name", name)]
329
+ if agent:
330
+ rows.append(("Agent", agent))
331
+ if endpoint:
332
+ rows.append(("Endpoint", endpoint))
333
+ if log_groups:
334
+ rows.append(("Log Groups", ", ".join(log_groups)))
335
+ rows += [
336
+ ("Evaluators", ", ".join(selected) or "None"),
337
+ ("Rate", f"{format_number(rate or 0)}%"),
338
+ ("Enable", "Yes" if enable else "No"),
339
+ ]
340
+ for label, value in rows:
341
+ typer.echo(f" {label}: {value}")
342
+ if not interactive.confirm("Add this online eval config?", default=True):
343
+ typer.echo("Cancelled.")
344
+ return
345
+ result = self.add(
346
+ AddOnlineEvalConfigOptions(
347
+ name=name,
348
+ agent=agent,
349
+ evaluators=selected,
350
+ sampling_rate=rate or DEFAULT_SAMPLING_RATE,
351
+ enable_on_create=enable,
352
+ endpoint=endpoint,
353
+ log_group_names=log_groups or None,
354
+ service_names=services,
355
+ )
356
+ )
357
+ if not result.success:
358
+ typer.echo("Failed to add online eval config", err=True)
359
+ typer.echo(get_error_message(result.error), err=True)
360
+ raise typer.Exit(1)
361
+ typer.echo(f"Added online eval config: {name}")
362
+ typer.echo("Online eval config added to project in `agentcore/agentcore.json`. Deploy with `agentcore deploy`.")
363
+
364
+
365
+ PRIMITIVE = OnlineEvalConfigPrimitive()
@@ -0,0 +1,275 @@
1
+ """Online insights config add/remove (port of src/cli/primitives/OnlineInsightsPrimitive.ts).
2
+
3
+ Online insights configs are online eval configs that use ``insights`` instead of evaluators.
4
+ """
5
+
6
+ from dataclasses import dataclass
7
+ from typing import Any
8
+
9
+ import typer
10
+
11
+ from agentcore.cli import interactive
12
+ from agentcore.cli.commands.add._common import first_issue
13
+ from agentcore.cli.errors import get_error_message
14
+ from agentcore.cli.naming import generate_unique_name
15
+ from agentcore.cli.run_command import run_cli_command
16
+ from agentcore.cli.variadic import variadic
17
+ from agentcore.lib import ResourceNotFoundError, ValidationError, find_config_root, serialize_result
18
+ from agentcore.lib.errors.types import to_error
19
+ from agentcore.lib.result import Err, Ok
20
+ from agentcore.lib.schemas.io.config_io import to_jsonable
21
+ from agentcore.operations.jobs.shared.format import parse_float
22
+ from agentcore.primitives.base import BasePrimitive, RemovableResource, RemovalPreview, SchemaChange, emit_json
23
+ from agentcore.primitives.online_eval_config import check_endpoint, format_number
24
+ from agentcore.schema import OnlineEvalConfigName
25
+
26
+ DEFAULT_INSIGHTS_SAMPLING_RATE = 100
27
+ AVAILABLE_INSIGHTS = (
28
+ ("Builtin.Insight.FailureAnalysis", "Failure Analysis", "Analyze failure patterns and root causes across sessions"),
29
+ ("Builtin.Insight.UserIntent", "User Intent", "Classify and cluster user intents from session transcripts"),
30
+ (
31
+ "Builtin.Insight.ExecutionSummary",
32
+ "Execution Summary",
33
+ "Summarize execution patterns and tool usage across sessions",
34
+ ),
35
+ )
36
+ CLUSTERING_FREQUENCIES = (("DAILY", "Daily"), ("WEEKLY", "Weekly"), ("MONTHLY", "Monthly"))
37
+
38
+
39
+ def validate_insight_ids(insights: list[str]) -> None:
40
+ """Each insight must be a Builtin.Insight.* identifier or a full ARN."""
41
+ for insight in insights:
42
+ if not insight.startswith("Builtin.Insight.") and not insight.startswith("arn:"):
43
+ raise ValidationError(
44
+ f'Invalid insight "{insight}". Must be a Builtin.Insight.* identifier '
45
+ "(e.g. Builtin.Insight.FailureAnalysis) or a full ARN."
46
+ )
47
+
48
+
49
+ def _has_insights(config: dict[str, Any]) -> bool:
50
+ return bool(config.get("insights"))
51
+
52
+
53
+ @dataclass
54
+ class AddOnlineInsightsOptions:
55
+ name: str
56
+ agent: str
57
+ insights: list[str]
58
+ sampling_rate: float
59
+ clustering_frequencies: list[str] | None = None
60
+ enable_on_create: bool | None = None
61
+ endpoint: str | None = None
62
+
63
+
64
+ class OnlineInsightsPrimitive(BasePrimitive):
65
+ kind = "online-insights"
66
+ label = "Online Insights Config"
67
+ article = "an"
68
+
69
+ def _project(self) -> dict[str, Any]:
70
+ return to_jsonable(self.read_project_spec())
71
+
72
+ def add(self, options: AddOnlineInsightsOptions) -> Ok | Err:
73
+ try:
74
+ project = self._project()
75
+ self.check_duplicate(
76
+ [RemovableResource(c["name"]) for c in project["onlineEvalConfigs"]],
77
+ options.name,
78
+ "Online insights config",
79
+ )
80
+ validate_insight_ids(options.insights)
81
+ if options.endpoint:
82
+ check_endpoint(project, options.agent, options.endpoint)
83
+ config: dict[str, Any] = {
84
+ "name": options.name,
85
+ "agent": options.agent,
86
+ "insights": options.insights,
87
+ "samplingRate": options.sampling_rate,
88
+ }
89
+ if options.clustering_frequencies:
90
+ config["clusteringConfig"] = {"frequencies": options.clustering_frequencies}
91
+ if options.enable_on_create is not None:
92
+ config["enableOnCreate"] = options.enable_on_create
93
+ if options.endpoint:
94
+ config["endpoint"] = options.endpoint
95
+ project["onlineEvalConfigs"].append(config)
96
+ self.write_project_spec(project)
97
+ return Ok({"configName": options.name})
98
+ except Exception as exc: # noqa: BLE001
99
+ return Err(to_error(exc))
100
+
101
+ def remove(self, name: str) -> Ok | Err:
102
+ try:
103
+ project = self._project()
104
+ index = next(
105
+ (i for i, c in enumerate(project["onlineEvalConfigs"]) if c["name"] == name and _has_insights(c)), -1
106
+ )
107
+ if index == -1:
108
+ return Err(ResourceNotFoundError(f'Online insights config "{name}" not found.'))
109
+ project["onlineEvalConfigs"].pop(index)
110
+ self.write_project_spec(project)
111
+ return Ok(None)
112
+ except Exception as exc: # noqa: BLE001
113
+ return Err(to_error(exc))
114
+
115
+ def preview_remove(self, name: str) -> RemovalPreview:
116
+ project = self._project()
117
+ config = next((c for c in project["onlineEvalConfigs"] if c["name"] == name and _has_insights(c)), None)
118
+ if config is None:
119
+ raise Exception(f'Online insights config "{name}" not found.')
120
+ summary = [f"Removing online insights config: {name}", f"Uses insights: {', '.join(config['insights'])}"]
121
+ after = {**project, "onlineEvalConfigs": [c for c in project["onlineEvalConfigs"] if c["name"] != name]}
122
+ return RemovalPreview(summary, [], [SchemaChange("agentcore/agentcore.json", project, after)])
123
+
124
+ def get_removable(self) -> list[RemovableResource]:
125
+ try:
126
+ return [RemovableResource(c["name"]) for c in self._project()["onlineEvalConfigs"] if _has_insights(c)]
127
+ except Exception: # noqa: BLE001
128
+ return []
129
+
130
+ def get_all_names(self) -> list[str]:
131
+ return [r.name for r in self.get_removable()]
132
+
133
+ def register_commands(self, add_app: typer.Typer, remove_app: typer.Typer) -> None:
134
+ @add_app.command(
135
+ "online-insights",
136
+ help="Add an online insights config to the project",
137
+ cls=variadic("--insights", "--clustering-frequency"),
138
+ )
139
+ def add_online_insights(
140
+ name: str | None = typer.Option(None, "--name", help="Config name [non-interactive]"),
141
+ runtime: str | None = typer.Option(None, "-r", "--runtime", help="Runtime to monitor [non-interactive]"),
142
+ insights: list[str] | None = typer.Option(
143
+ None, "--insights", help="Insight IDs (e.g. Builtin.Insight.FailureAnalysis) [non-interactive]"
144
+ ),
145
+ sampling_rate: str | None = typer.Option(
146
+ None, "--sampling-rate", help="Sampling percentage (0.01-100) [non-interactive]"
147
+ ),
148
+ clustering_frequency: list[str] | None = typer.Option(
149
+ None, "--clustering-frequency", help="Clustering frequencies: DAILY, WEEKLY, MONTHLY [non-interactive]"
150
+ ),
151
+ endpoint: str | None = typer.Option(
152
+ None, "--endpoint", help="Runtime endpoint name to scope monitoring [non-interactive]"
153
+ ),
154
+ enable_on_create: bool = typer.Option(
155
+ False, "--enable-on-create", help="Enable insights immediately after deploy [non-interactive]"
156
+ ),
157
+ as_json: bool = typer.Option(False, "--json", help="Output as JSON [non-interactive]"),
158
+ ) -> None:
159
+ if not find_config_root():
160
+ typer.echo("No agentcore project found. Run `agentcore create` first.", err=True)
161
+ raise typer.Exit(1)
162
+ if not (name or as_json):
163
+ try:
164
+ interactive.require_tty()
165
+ self.add_interactive()
166
+ except typer.Exit:
167
+ raise
168
+ except Exception as exc: # noqa: BLE001
169
+ typer.echo(get_error_message(exc), err=True)
170
+ raise typer.Exit(1) from None
171
+ raise typer.Exit(0)
172
+
173
+ def run() -> None:
174
+ if not name or not runtime or not insights or not sampling_rate:
175
+ raise Exception(
176
+ "--name, --runtime, --insights, and --sampling-rate are all required in non-interactive mode"
177
+ )
178
+ rate = parse_float(sampling_rate)
179
+ if rate is None or rate < 0.01 or rate > 100:
180
+ raise Exception(
181
+ f'Invalid --sampling-rate "{sampling_rate}". Must be a percentage between 0.01 and 100'
182
+ )
183
+ result = self.add(
184
+ AddOnlineInsightsOptions(
185
+ name=name,
186
+ agent=runtime,
187
+ insights=insights,
188
+ sampling_rate=rate,
189
+ clustering_frequencies=clustering_frequency or None,
190
+ enable_on_create=True if enable_on_create else None,
191
+ endpoint=endpoint,
192
+ )
193
+ )
194
+ if not result.success:
195
+ raise result.error
196
+ if as_json:
197
+ emit_json(serialize_result(result))
198
+ else:
199
+ typer.echo(f"Added online insights config '{result.value['configName']}'")
200
+
201
+ run_cli_command(as_json, run)
202
+
203
+ self.register_remove_subcommand(remove_app)
204
+
205
+ def add_interactive(self) -> None:
206
+ """Prompt flow mirroring tui/screens/online-insights (agent, insights, rate, clustering, name)."""
207
+ project = self._project()
208
+ agent_names = [r["name"] for r in project.get("runtimes") or []]
209
+ if not agent_names:
210
+ typer.echo("No runtimes found in project. Add an agent first with `agentcore add agent`.", err=True)
211
+ raise typer.Exit(1)
212
+ choice = interactive.Choice
213
+ agent = interactive.select("Select agent to monitor", [choice(n, n) for n in agent_names])
214
+ insights = interactive.checkbox("Select insights", [choice(t, i, d) for i, t, d in AVAILABLE_INSIGHTS])
215
+ while not insights:
216
+ typer.echo("Select at least one insight.", err=True)
217
+ insights = interactive.checkbox("Select insights", [choice(t, i, d) for i, t, d in AVAILABLE_INSIGHTS])
218
+
219
+ def validate_rate(value: str) -> str | None:
220
+ rate = parse_float(value)
221
+ if rate is None:
222
+ return "Must be a number"
223
+ return None if 0.01 <= rate <= 100 else "Must be between 0.01 and 100"
224
+
225
+ rate = parse_float(
226
+ interactive.text(
227
+ "Sampling rate (0.01–100%)", default=str(DEFAULT_INSIGHTS_SAMPLING_RATE), validate=validate_rate
228
+ )
229
+ )
230
+ frequencies = interactive.checkbox(
231
+ "Select clustering frequencies (optional)", [choice(t, i) for i, t in CLUSTERING_FREQUENCIES]
232
+ )
233
+ existing = [c["name"] for c in project["onlineEvalConfigs"]]
234
+
235
+ def validate_name(value: str) -> str | None:
236
+ issue = first_issue(OnlineEvalConfigName, value)
237
+ if issue:
238
+ return issue
239
+ return "Config name already exists" if value in existing else None
240
+
241
+ name = interactive.text(
242
+ "Config name", default=generate_unique_name("MyInsights", existing), validate=validate_name
243
+ )
244
+ for label, value in (
245
+ ("Agent", agent),
246
+ ("Insights", ", ".join(insights)),
247
+ ("Rate", f"{format_number(rate or 0)}%"),
248
+ ("Clustering", ", ".join(frequencies) or "None"),
249
+ ("Name", name),
250
+ ):
251
+ typer.echo(f" {label}: {value}")
252
+ if not interactive.confirm("Add this online insights config?", default=True):
253
+ typer.echo("Cancelled.")
254
+ return
255
+ result = self.add(
256
+ AddOnlineInsightsOptions(
257
+ name=name,
258
+ agent=agent,
259
+ insights=insights,
260
+ sampling_rate=rate or DEFAULT_INSIGHTS_SAMPLING_RATE,
261
+ clustering_frequencies=frequencies or None,
262
+ enable_on_create=True,
263
+ )
264
+ )
265
+ if not result.success:
266
+ typer.echo("Failed to add online insights config", err=True)
267
+ typer.echo(get_error_message(result.error), err=True)
268
+ raise typer.Exit(1)
269
+ typer.echo(f"Added online insights config: {name}")
270
+ typer.echo(
271
+ "Online insights config added to project in `agentcore/agentcore.json`. Deploy with `agentcore deploy`."
272
+ )
273
+
274
+
275
+ PRIMITIVE = OnlineInsightsPrimitive()