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,137 @@
1
+ """Strict semver parsing/comparison with node-semver semantics (port of ``semver.ts``).
2
+
3
+ PEP 440 (``packaging.version``) orders prereleases differently and accepts other syntax, so
4
+ node-semver's ``parse`` (non-loose) and ``compare`` are reimplemented here.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import re
10
+ from dataclasses import dataclass
11
+ from functools import total_ordering
12
+ from typing import Literal
13
+
14
+ _MAX_LENGTH = 256
15
+ _MAX_SAFE_INTEGER = 2**53 - 1
16
+
17
+ _NUM = r"0|[1-9]\d*"
18
+ _PRERELEASE_ID = rf"(?:{_NUM}|\d*[a-zA-Z-][a-zA-Z0-9-]*)"
19
+ _FULL = re.compile(
20
+ rf"^v?({_NUM})\.({_NUM})\.({_NUM})"
21
+ rf"(?:-({_PRERELEASE_ID}(?:\.{_PRERELEASE_ID})*))?"
22
+ r"(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$"
23
+ )
24
+
25
+
26
+ @total_ordering
27
+ @dataclass(frozen=True, slots=True)
28
+ class SemVer:
29
+ major: int
30
+ minor: int
31
+ patch: int
32
+ prerelease: tuple[int | str, ...] = ()
33
+ build: tuple[str, ...] = ()
34
+
35
+ @property
36
+ def version(self) -> str:
37
+ v = f"{self.major}.{self.minor}.{self.patch}"
38
+ return v + ("-" + ".".join(str(p) for p in self.prerelease) if self.prerelease else "")
39
+
40
+ def __str__(self) -> str:
41
+ return self.version
42
+
43
+ def compare(self, other: SemVer) -> int:
44
+ return compare(self, other)
45
+
46
+ def __eq__(self, other: object) -> bool:
47
+ return isinstance(other, SemVer) and compare(self, other) == 0
48
+
49
+ def __lt__(self, other: SemVer) -> bool:
50
+ return compare(self, other) < 0
51
+
52
+ def __hash__(self) -> int:
53
+ return hash((self.major, self.minor, self.patch, self.prerelease))
54
+
55
+
56
+ def parse(version: str) -> SemVer | None:
57
+ """node-semver ``parse(version, { loose: false })``: ``None`` if invalid."""
58
+ if not isinstance(version, str) or len(version) > _MAX_LENGTH:
59
+ return None
60
+ match = _FULL.match(version.strip())
61
+ if not match:
62
+ return None
63
+ major, minor, patch = (int(match.group(i)) for i in (1, 2, 3))
64
+ if max(major, minor, patch) > _MAX_SAFE_INTEGER:
65
+ return None
66
+ prerelease: tuple[int | str, ...] = ()
67
+ if match.group(4):
68
+ prerelease = tuple(
69
+ int(p) if p.isdigit() and int(p) <= _MAX_SAFE_INTEGER else p for p in match.group(4).split(".")
70
+ )
71
+ build = tuple(match.group(5).split(".")) if match.group(5) else ()
72
+ return SemVer(major, minor, patch, prerelease, build)
73
+
74
+
75
+ def _cmp(a: int | str, b: int | str) -> int:
76
+ return (a > b) - (a < b) # type: ignore[operator]
77
+
78
+
79
+ def _compare_identifiers(a: int | str, b: int | str) -> int:
80
+ a_num, b_num = isinstance(a, int), isinstance(b, int)
81
+ if a_num and b_num:
82
+ return _cmp(a, b)
83
+ if a_num:
84
+ return -1
85
+ if b_num:
86
+ return 1
87
+ return _cmp(a, b)
88
+
89
+
90
+ def compare(a: SemVer, b: SemVer) -> int:
91
+ """-1/0/1 by main version then prerelease precedence; build metadata ignored."""
92
+ main = _cmp((a.major, a.minor, a.patch), (b.major, b.minor, b.patch)) # type: ignore[arg-type]
93
+ if main:
94
+ return main
95
+ if a.prerelease and not b.prerelease:
96
+ return -1
97
+ if not a.prerelease and b.prerelease:
98
+ return 1
99
+ for x, y in zip(a.prerelease, b.prerelease, strict=False):
100
+ c = _compare_identifiers(x, y)
101
+ if c:
102
+ return c
103
+ return _cmp(len(a.prerelease), len(b.prerelease))
104
+
105
+
106
+ ParsedVersion = SemVer
107
+ SpecifierKind = Literal["exact", "tilde", "caret"]
108
+
109
+
110
+ @dataclass(frozen=True, slots=True)
111
+ class ParsedSpecifier:
112
+ kind: Literal["exact", "tilde", "caret", "unsupported"]
113
+ raw: str
114
+ version: SemVer | None = None
115
+
116
+
117
+ def parse_version(version: str) -> SemVer | None:
118
+ # npm accepts a leading 'v' or 'V'; node-semver only the lowercase form.
119
+ normalized = re.sub(r"^V", "v", version.strip())
120
+ return parse(normalized)
121
+
122
+
123
+ def parse_specifier(raw: str) -> ParsedSpecifier:
124
+ """Classify an npm specifier as exact / tilde / caret, or unsupported (file:, git:, tags, ranges)."""
125
+ trimmed = raw.strip()
126
+ kind: SpecifierKind = "exact"
127
+ version_part = trimmed
128
+ if trimmed.startswith("~"):
129
+ kind, version_part = "tilde", trimmed[1:]
130
+ elif trimmed.startswith("^"):
131
+ kind, version_part = "caret", trimmed[1:]
132
+ elif trimmed.startswith("="):
133
+ version_part = trimmed[1:]
134
+ version = parse_version(version_part)
135
+ if version is None:
136
+ return ParsedSpecifier(kind="unsupported", raw=raw)
137
+ return ParsedSpecifier(kind=kind, raw=raw, version=version)
@@ -0,0 +1,139 @@
1
+ """Sync a vended CDK project's managed dependencies (port of ``sync.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ import os
7
+ from typing import Any, Literal
8
+
9
+ from agentcore.lib.dependency_management.messages import (
10
+ DEFAULT_CLI_INSTALL_COMMAND,
11
+ format_cli_upgrade_error,
12
+ format_skew_warning,
13
+ format_skipped_warning,
14
+ format_sync_notice,
15
+ )
16
+ from agentcore.lib.dependency_management.plan import compute_sync_plan
17
+ from agentcore.lib.dependency_management.types import DependencySyncResult
18
+ from agentcore.lib.errors.types import CliVersionTooOldError, DependencySyncError
19
+ from agentcore.lib.utils.json_format import to_json_string
20
+ from agentcore.lib.utils.subprocess import run_subprocess_capture
21
+
22
+
23
+ def _read_manifest(path: str, description: str) -> tuple[dict[str, Any], str]:
24
+ try:
25
+ with open(path, encoding="utf-8") as fh:
26
+ raw = fh.read()
27
+ except OSError as exc:
28
+ raise DependencySyncError(f"Could not read {description} at {path}: {exc}", cause=exc) from exc
29
+ try:
30
+ return json.loads(raw), raw
31
+ except ValueError as exc:
32
+ raise DependencySyncError(f"Could not parse {description} at {path}: {exc}", cause=exc) from exc
33
+
34
+
35
+ def _write_text(path: str, content: str) -> None:
36
+ with open(path, "w", encoding="utf-8", newline="") as fh:
37
+ fh.write(content)
38
+
39
+
40
+ def sync_managed_dependencies(
41
+ *,
42
+ vended_package_json_path: str,
43
+ project_dir: str,
44
+ disabled: bool = False,
45
+ mode: Literal["apply", "check"] = "apply",
46
+ treat_skew_as_warning: bool = False,
47
+ install_command: str = DEFAULT_CLI_INSTALL_COMMAND,
48
+ ) -> DependencySyncResult:
49
+ """Pin the CDK project's managed dependencies to the versions this CLI release was tested with.
50
+
51
+ The vended package.json is the source of truth; other dependencies are untouched. A managed
52
+ dependency newer than the CLI expects raises ``CliVersionTooOldError`` (a warning when
53
+ ``disabled`` / ``treat_skew_as_warning`` / check mode). When anything changed or
54
+ ``node_modules`` is missing, ``npm install`` runs; on failure the original package.json is
55
+ restored so a retry recomputes the same plan. ``mode="check"`` never writes or installs.
56
+ """
57
+ check_only = mode == "check"
58
+ project_package_json = os.path.join(project_dir, "package.json")
59
+
60
+ vended, _ = _read_manifest(vended_package_json_path, "the vended CDK package.json")
61
+ project, project_raw = _read_manifest(project_package_json, "the project's CDK package.json")
62
+
63
+ plan = compute_sync_plan(vended, project)
64
+
65
+ # `disabled` wins over check mode: an opted-out sync never writes.
66
+ outcome = "opted-out" if disabled else "check-only" if check_only else "synced"
67
+ result = DependencySyncResult(
68
+ outcome=outcome,
69
+ opted_out=disabled,
70
+ check_only=check_only,
71
+ migrated_from_caret=plan.migrated_from_caret,
72
+ reinstalled=False,
73
+ skew_warning=False,
74
+ changes=plan.changes,
75
+ restored=plan.restored,
76
+ skipped=plan.skipped,
77
+ warnings=[format_skipped_warning(s) for s in plan.skipped],
78
+ notice=None,
79
+ )
80
+
81
+ if plan.skew:
82
+ if not disabled and not treat_skew_as_warning and not check_only:
83
+ raise CliVersionTooOldError(format_cli_upgrade_error(plan.skew, install_command))
84
+ result.skew_warning = True
85
+ result.warnings.append(format_skew_warning(plan.skew, install_command))
86
+
87
+ if disabled:
88
+ return result
89
+
90
+ has_planned_changes = bool(plan.changes or plan.restored)
91
+
92
+ if check_only:
93
+ result.notice = format_sync_notice(
94
+ migrated_from_caret=result.migrated_from_caret,
95
+ changes=result.changes,
96
+ restored=result.restored,
97
+ reinstalled=False,
98
+ applied=False,
99
+ )
100
+ return result
101
+
102
+ if has_planned_changes:
103
+ # Mutate the parsed manifest in place so user key order and unknown fields survive.
104
+ for change in plan.changes:
105
+ project.setdefault(change.section, {})[change.name] = change.to
106
+ for restored in plan.restored:
107
+ project.setdefault(restored.section, {})[restored.name] = restored.to
108
+ try:
109
+ _write_text(project_package_json, to_json_string(project, 2) + "\n")
110
+ except OSError as exc:
111
+ raise DependencySyncError(f"Failed to update the CDK project's dependencies: {exc}", cause=exc) from exc
112
+
113
+ # npm reconciles the edited manifest against the existing lockfile incrementally, so
114
+ # node_modules and the lockfile are never deleted.
115
+ needs_install = has_planned_changes or not os.path.exists(os.path.join(project_dir, "node_modules"))
116
+ if not needs_install:
117
+ return result
118
+
119
+ install = run_subprocess_capture("npm", ["install"], cwd=project_dir)
120
+ if install.code != 0:
121
+ # Restore the pre-rewrite manifest so a retry recomputes the same plan and re-installs,
122
+ # instead of deploying against a stale tree. Best-effort.
123
+ if has_planned_changes:
124
+ try:
125
+ _write_text(project_package_json, project_raw)
126
+ except OSError:
127
+ pass
128
+ raise DependencySyncError(
129
+ f"npm install failed after updating managed dependencies (exit {'null' if install.code is None else install.code}): {install.stderr}"
130
+ )
131
+ result.reinstalled = True
132
+ result.notice = format_sync_notice(
133
+ migrated_from_caret=result.migrated_from_caret,
134
+ changes=result.changes,
135
+ restored=result.restored,
136
+ reinstalled=True,
137
+ applied=True,
138
+ )
139
+ return result
@@ -0,0 +1,56 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass, field
4
+ from typing import Any, Literal
5
+
6
+ DependencySection = Literal["dependencies", "devDependencies"]
7
+
8
+ # A package.json document; unknown fields are preserved verbatim.
9
+ PackageManifest = dict[str, Any]
10
+
11
+ # - synced: apply mode ran; check-only: plan computed, nothing written; opted-out: disabled via
12
+ # global config; skipped: CLI skipped the sync (AGENTCORE_SKIP_INSTALL); failure-suppressed:
13
+ # failure downgraded on a teardown deploy; failed: the sync failed the deploy.
14
+ DependencySyncOutcome = Literal["synced", "check-only", "opted-out", "skipped", "failure-suppressed", "failed"]
15
+
16
+
17
+ @dataclass(frozen=True, slots=True)
18
+ class DependencyChange:
19
+ name: str
20
+ section: DependencySection
21
+ from_: str
22
+ to: str
23
+
24
+
25
+ @dataclass(frozen=True, slots=True)
26
+ class RestoredDependency:
27
+ name: str
28
+ section: DependencySection
29
+ to: str
30
+
31
+
32
+ @dataclass(frozen=True, slots=True)
33
+ class SkippedDependency:
34
+ name: str
35
+ raw: str
36
+ reason: str
37
+
38
+
39
+ @dataclass(slots=True)
40
+ class DependencySyncResult:
41
+ outcome: DependencySyncOutcome
42
+ # Dependency management disabled via global config: nothing written.
43
+ opted_out: bool
44
+ # mode="check": plan computed, nothing written or installed.
45
+ check_only: bool
46
+ # Project predated pinning (caret ranges on managed deps rewritten).
47
+ migrated_from_caret: bool
48
+ # `npm install` ran (manifest changed, or node_modules was missing).
49
+ reinstalled: bool
50
+ # Newer-than-CLI managed dep found but downgraded to a warning.
51
+ skew_warning: bool
52
+ changes: list[DependencyChange] = field(default_factory=list)
53
+ restored: list[RestoredDependency] = field(default_factory=list)
54
+ skipped: list[SkippedDependency] = field(default_factory=list)
55
+ warnings: list[str] = field(default_factory=list)
56
+ notice: str | None = None
@@ -0,0 +1,5 @@
1
+ from agentcore.lib.errors.types import * # noqa: F403
2
+ from agentcore.lib.errors.types import __all__ as _types_all
3
+ from agentcore.lib.errors.validation import format_path, format_validation_errors, format_zod_errors
4
+
5
+ __all__ = [*_types_all, "format_path", "format_validation_errors", "format_zod_errors"]
@@ -0,0 +1,352 @@
1
+ """Typed error hierarchy (port of ``src/lib/errors/types.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Iterable, Mapping
6
+ from typing import Any, ClassVar, Literal
7
+
8
+ from agentcore.lib.errors.validation import format_validation_errors
9
+
10
+ ErrorSource = Literal["user", "client", "service", "unknown"]
11
+
12
+
13
+ class BaseError(Exception):
14
+ """Root of the CLI error taxonomy.
15
+
16
+ ``error_source`` classifies the failure ("user" | "client" | "service" | "unknown");
17
+ each subclass declares a ``default_source`` that callers may override.
18
+ """
19
+
20
+ default_source: ClassVar[ErrorSource] = "unknown"
21
+
22
+ def __init__(self, message: str, *, error_source: ErrorSource | None = None, cause: BaseException | None = None):
23
+ super().__init__(message)
24
+ self.message = message
25
+ self.error_source: ErrorSource = error_source or self.default_source
26
+ if cause is not None:
27
+ self.__cause__ = cause
28
+
29
+ @property
30
+ def name(self) -> str:
31
+ return type(self).__name__
32
+
33
+ @property
34
+ def cause(self) -> BaseException | None:
35
+ return self.__cause__
36
+
37
+
38
+ def to_error(err: object) -> BaseException:
39
+ """Coerce an arbitrary raised value into an exception instance."""
40
+ return err if isinstance(err, BaseException) else Exception(str(err))
41
+
42
+
43
+ def _cause_message(cause: object) -> str:
44
+ return str(cause)
45
+
46
+
47
+ # --- User errors ---
48
+
49
+
50
+ class NoProjectError(BaseError):
51
+ default_source = "user"
52
+
53
+ def __init__(self, message: str | None = None, **kwargs: Any):
54
+ super().__init__(message or 'No agentcore project found. Run "agentcore create" first.', **kwargs)
55
+
56
+
57
+ class AgentAlreadyExistsError(BaseError):
58
+ default_source = "user"
59
+
60
+ def __init__(self, agent_name: str, **kwargs: Any):
61
+ super().__init__(f'An agent named "{agent_name}" already exists in the schema.', **kwargs)
62
+
63
+
64
+ class AccessDeniedError(BaseError):
65
+ default_source = "user"
66
+
67
+
68
+ class SecretEncryptionError(BaseError):
69
+ """A secret could not be encrypted before writing to disk (e.g. machine key unavailable)."""
70
+
71
+ default_source = "client"
72
+
73
+
74
+ class SecretDecryptionError(BaseError):
75
+ """A stored secret could not be decrypted (missing/changed key or corrupt ciphertext)."""
76
+
77
+ default_source = "user"
78
+
79
+
80
+ class DependencyCheckError(BaseError):
81
+ default_source = "user"
82
+
83
+ def __init__(self, errors: Iterable[str], **kwargs: Any):
84
+ super().__init__("\n".join(errors), **kwargs)
85
+
86
+
87
+ class ResourceNotFoundError(BaseError):
88
+ default_source = "user"
89
+
90
+
91
+ class JobNotFoundError(BaseError):
92
+ default_source = "user"
93
+
94
+
95
+ class ValidationError(BaseError):
96
+ default_source = "user"
97
+
98
+
99
+ class StaleCdkConstructError(BaseError):
100
+ """CDK synth rejected keys the CLI writes: the project's bundled construct is older than the CLI."""
101
+
102
+ default_source = "user"
103
+
104
+ def __init__(self, rejected_keys: Iterable[str], installed_version: str | None, **kwargs: Any):
105
+ key_list = ", ".join(f'"{k}"' for k in rejected_keys)
106
+ version_part = f" (currently {installed_version})" if installed_version else ""
107
+ super().__init__(
108
+ f"CDK synth rejected {key_list}, which this CLI writes but the project's installed "
109
+ f"@aws/agentcore-cdk{version_part} does not recognize. If you did not hand-edit "
110
+ "agentcore.json, the bundled CDK constructs are likely behind the CLI. Run "
111
+ "`npm update @aws/agentcore-cdk` in agentcore/cdk/, then re-run `agentcore deploy`.",
112
+ **kwargs,
113
+ )
114
+
115
+
116
+ class CliVersionTooOldError(BaseError):
117
+ default_source = "user"
118
+
119
+
120
+ class DependencySyncError(BaseError):
121
+ default_source = "client"
122
+
123
+
124
+ class AwsCredentialsError(BaseError):
125
+ """AWS credentials missing/invalid. Carries a short (interactive) and detailed (CLI) message."""
126
+
127
+ default_source = "user"
128
+
129
+ def __init__(self, short_message: str, detailed_message: str | None = None, **kwargs: Any):
130
+ super().__init__(detailed_message or short_message, **kwargs)
131
+ self.short_message = short_message
132
+
133
+
134
+ class MissingCredentialsError(BaseError):
135
+ default_source = "user"
136
+
137
+
138
+ class PackagingError(BaseError):
139
+ default_source = "user"
140
+
141
+
142
+ class ArtifactSizeError(PackagingError):
143
+ def __init__(self, limit_bytes: int, actual_bytes: int, **kwargs: Any):
144
+ super().__init__(f"Packaged artifact exceeds {limit_bytes} bytes (actual: {actual_bytes}).", **kwargs)
145
+
146
+
147
+ class MissingDependencyError(PackagingError):
148
+ def __init__(self, binary: str, install_hint: str | None = None, **kwargs: Any):
149
+ super().__init__(
150
+ f"{binary} is required. {install_hint}" if install_hint else f"{binary} is required.", **kwargs
151
+ )
152
+
153
+
154
+ class MissingProjectFileError(PackagingError):
155
+ def __init__(self, file_path: str, **kwargs: Any):
156
+ super().__init__(f"Required project file not found: {file_path}", **kwargs)
157
+
158
+
159
+ class UnsupportedLanguageError(PackagingError):
160
+ def __init__(self, language: str, **kwargs: Any):
161
+ super().__init__(f"{language} packaging is not supported yet.", **kwargs)
162
+
163
+
164
+ # --- Config errors (user) ---
165
+
166
+
167
+ class ConfigError(BaseError):
168
+ """Base class for config-file errors."""
169
+
170
+ default_source = "user"
171
+
172
+
173
+ class ConfigNotFoundError(ConfigError):
174
+ def __init__(self, file_path: str, file_type: str):
175
+ super().__init__(f"{file_type} config file not found at: {file_path}")
176
+ self.file_path = file_path
177
+ self.file_type = file_type
178
+
179
+
180
+ class ConfigReadError(ConfigError):
181
+ def __init__(self, file_path: str, cause: object):
182
+ super().__init__(
183
+ f"Failed to read config file at {file_path}: {_cause_message(cause)}",
184
+ cause=cause if isinstance(cause, BaseException) else None,
185
+ )
186
+ self.file_path = file_path
187
+
188
+
189
+ class ConfigWriteError(ConfigError):
190
+ def __init__(self, file_path: str, cause: object):
191
+ super().__init__(
192
+ f"Failed to write config file at {file_path}: {_cause_message(cause)}",
193
+ cause=cause if isinstance(cause, BaseException) else None,
194
+ )
195
+ self.file_path = file_path
196
+
197
+
198
+ class ConfigValidationError(ConfigError):
199
+ """Schema validation failed.
200
+
201
+ ``validation_error`` is a ``pydantic.ValidationError`` or a list of pydantic-style issue
202
+ dicts (``{"type", "loc", "msg", ...}``).
203
+ """
204
+
205
+ def __init__(self, file_path: str, file_type: str, validation_error: Any):
206
+ issues = _issues_of(validation_error)
207
+ super().__init__(f"{file_path}:\n{format_validation_errors(issues)}")
208
+ self.file_path = file_path
209
+ self.file_type = file_type
210
+ self.validation_error = validation_error
211
+ self.issues = issues
212
+
213
+
214
+ def _issues_of(validation_error: Any) -> list[Mapping[str, Any]]:
215
+ errors = getattr(validation_error, "errors", None)
216
+ if callable(errors):
217
+ return list(errors())
218
+ return list(validation_error or [])
219
+
220
+
221
+ class ConfigParseError(ConfigError):
222
+ def __init__(self, file_path: str, cause: object):
223
+ super().__init__(
224
+ f"Failed to parse JSON in config file at {file_path}: {_cause_message(cause)}",
225
+ cause=cause if isinstance(cause, BaseException) else None,
226
+ )
227
+ self.file_path = file_path
228
+
229
+
230
+ class GitInitError(BaseError):
231
+ default_source = "client"
232
+
233
+
234
+ # --- Service errors ---
235
+
236
+
237
+ class ConflictError(BaseError):
238
+ default_source = "user"
239
+
240
+
241
+ class TimeoutError(BaseError): # noqa: A001 - mirrors the upstream class name
242
+ default_source = "service"
243
+
244
+
245
+ class DevServerError(BaseError):
246
+ default_source = "client"
247
+
248
+ def __init__(self, status_code: int, body: str, **kwargs: Any):
249
+ super().__init__(body or f"Server returned {status_code}", **kwargs)
250
+ self.status_code = status_code
251
+
252
+
253
+ class DevServerConnectionError(BaseError):
254
+ default_source = "client"
255
+
256
+
257
+ class ServiceError(BaseError):
258
+ default_source = "service"
259
+
260
+
261
+ class ThrottlingError(BaseError):
262
+ default_source = "service"
263
+
264
+
265
+ class ServiceQuotaError(BaseError):
266
+ default_source = "service"
267
+
268
+
269
+ class PollTimeoutError(BaseError):
270
+ default_source = "service"
271
+
272
+ def __init__(self, timeout_ms: float, **kwargs: Any):
273
+ super().__init__(f"Polling timed out after {_fmt_num(timeout_ms)}ms", **kwargs)
274
+
275
+
276
+ class PollExhaustedError(BaseError):
277
+ default_source = "service"
278
+
279
+ def __init__(self, max_attempts: int, **kwargs: Any):
280
+ super().__init__(f"Polling exhausted after {max_attempts} attempts", **kwargs)
281
+
282
+
283
+ class IngestionError(BaseError):
284
+ default_source = "service"
285
+
286
+
287
+ class ShellKickedError(BaseError):
288
+ default_source = "service"
289
+
290
+ def __init__(self, **kwargs: Any):
291
+ super().__init__("Shell session was taken over by another client (close code 4000)", **kwargs)
292
+
293
+
294
+ class UserCancellationError(BaseError):
295
+ default_source = "user"
296
+
297
+ def __init__(self, **kwargs: Any):
298
+ super().__init__("User cancelled", **kwargs)
299
+
300
+
301
+ class ExportHarnessError(BaseError):
302
+ default_source = "client"
303
+
304
+
305
+ def _fmt_num(value: float) -> str:
306
+ return str(int(value)) if float(value).is_integer() else str(value)
307
+
308
+
309
+ __all__ = [
310
+ "AccessDeniedError",
311
+ "AgentAlreadyExistsError",
312
+ "ArtifactSizeError",
313
+ "AwsCredentialsError",
314
+ "BaseError",
315
+ "CliVersionTooOldError",
316
+ "ConfigError",
317
+ "ConfigNotFoundError",
318
+ "ConfigParseError",
319
+ "ConfigReadError",
320
+ "ConfigValidationError",
321
+ "ConfigWriteError",
322
+ "ConflictError",
323
+ "DependencyCheckError",
324
+ "DependencySyncError",
325
+ "DevServerConnectionError",
326
+ "DevServerError",
327
+ "ErrorSource",
328
+ "ExportHarnessError",
329
+ "GitInitError",
330
+ "IngestionError",
331
+ "JobNotFoundError",
332
+ "MissingCredentialsError",
333
+ "MissingDependencyError",
334
+ "MissingProjectFileError",
335
+ "NoProjectError",
336
+ "PackagingError",
337
+ "PollExhaustedError",
338
+ "PollTimeoutError",
339
+ "ResourceNotFoundError",
340
+ "SecretDecryptionError",
341
+ "SecretEncryptionError",
342
+ "ServiceError",
343
+ "ServiceQuotaError",
344
+ "ShellKickedError",
345
+ "StaleCdkConstructError",
346
+ "ThrottlingError",
347
+ "TimeoutError",
348
+ "UnsupportedLanguageError",
349
+ "UserCancellationError",
350
+ "ValidationError",
351
+ "to_error",
352
+ ]