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,395 @@
1
+ """Internal helpers that reproduce Zod (v4) parsing semantics on top of Pydantic v2.
2
+
3
+ Upstream validates with Zod. To keep validation and the JSON wire format faithful we:
4
+
5
+ * translate JavaScript regex sources to Python (``$`` -> ``\\Z``, ASCII ``\\d``, JS ``\\s`` / ``.``),
6
+ * measure string lengths in UTF-16 code units like JavaScript does,
7
+ * reject ``null`` for optional fields (Zod ``.optional()`` only accepts ``undefined``),
8
+ * omit unset optional fields when dumping (``JSON.stringify`` drops ``undefined``),
9
+ * report refinement issues with the same path/message as upstream ``ctx.addIssue`` calls.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import math
15
+ import re
16
+ import unicodedata
17
+ from collections.abc import Callable, Iterable, Sequence
18
+ from typing import Annotated, Any, TypeVar
19
+
20
+ from pydantic import (
21
+ AfterValidator,
22
+ BaseModel,
23
+ ConfigDict,
24
+ PlainValidator,
25
+ SerializationInfo,
26
+ SerializerFunctionWrapHandler,
27
+ ValidationError,
28
+ model_serializer,
29
+ model_validator,
30
+ )
31
+ from pydantic.alias_generators import to_camel
32
+ from pydantic_core import PydanticCustomError
33
+
34
+ T = TypeVar("T")
35
+
36
+ Loc = tuple[str | int, ...]
37
+ Issue = tuple[Loc, str]
38
+
39
+ # ---------------------------------------------------------------------------
40
+ # JavaScript string semantics
41
+ # ---------------------------------------------------------------------------
42
+
43
+ # Characters matched by JS `\s` and stripped by String.prototype.trim().
44
+ JS_WHITESPACE = "\t\n\v\f\r              

   "
45
+ _JS_WS_CLASS = r"\t\n\x0b\x0c\r    - 

   "
46
+ # JS `.` (without the `s` flag) matches anything except line terminators.
47
+ _JS_DOT = r"[^\n\r

]"
48
+
49
+
50
+ def js_trim(value: str) -> str:
51
+ return value.strip(JS_WHITESPACE)
52
+
53
+
54
+ def js_len(value: str) -> int:
55
+ """String length in UTF-16 code units (JavaScript ``String.length``)."""
56
+ return len(value.encode("utf-16-le")) // 2
57
+
58
+
59
+ def js_regex(source: str) -> re.Pattern[str]:
60
+ """Compile a JavaScript regex source (no flags) with equivalent Python semantics."""
61
+ out: list[str] = []
62
+ in_class = False
63
+ i = 0
64
+ while i < len(source):
65
+ ch = source[i]
66
+ if ch == "\\" and i + 1 < len(source):
67
+ nxt = source[i + 1]
68
+ if nxt == "d":
69
+ out.append("0-9" if in_class else "[0-9]")
70
+ elif nxt == "s":
71
+ out.append(_JS_WS_CLASS if in_class else f"[{_JS_WS_CLASS}]")
72
+ else:
73
+ out.append(ch + nxt)
74
+ i += 2
75
+ continue
76
+ if in_class:
77
+ if ch == "]":
78
+ in_class = False
79
+ out.append(ch)
80
+ elif ch == "[":
81
+ in_class = True
82
+ out.append(ch)
83
+ # A literal ']' or '^]' right after '[' is part of the class in both dialects.
84
+ elif ch == ".":
85
+ out.append(_JS_DOT)
86
+ elif ch == "$":
87
+ out.append(r"\Z")
88
+ else:
89
+ out.append(ch)
90
+ i += 1
91
+ return re.compile("".join(out))
92
+
93
+
94
+ def is_js_url(value: str) -> bool:
95
+ """Approximates ``new URL(value)`` succeeding (WHATWG URL parsing), as used by ``z.url()``."""
96
+ m = re.match(r"^([A-Za-z][A-Za-z0-9+.\-]*):(.*)$", value, re.DOTALL)
97
+ if not m:
98
+ return False
99
+ scheme, rest = m.group(1).lower(), m.group(2)
100
+ rest = re.sub(r"[\t\n\r]", "", rest)
101
+ special = {"http", "https", "ws", "wss", "ftp"}
102
+ if scheme == "file" or scheme not in special:
103
+ return True
104
+ rest = rest.lstrip("/\\")
105
+ authority = re.split(r"[/\\?#]", rest, maxsplit=1)[0]
106
+ host_port = authority.rsplit("@", 1)[-1]
107
+ if host_port.startswith("["):
108
+ return re.fullmatch(r"\[[0-9A-Fa-f:.]+\](:[0-9]*)?", host_port) is not None
109
+ host, _, port = host_port.partition(":")
110
+ if not host:
111
+ return False
112
+ if port and (not port.isdigit() or int(port) > 65535):
113
+ return False
114
+ return re.search(r"[\x00-\x20#%/:<>?@\[\\\]^|\x7f]", host) is None
115
+
116
+
117
+ # ---------------------------------------------------------------------------
118
+ # Issue reporting
119
+ # ---------------------------------------------------------------------------
120
+
121
+
122
+ def raise_issues(issues: Sequence[Issue], value: Any) -> None:
123
+ """Raise all collected issues as one ValidationError whose locs Pydantic re-roots."""
124
+ if not issues:
125
+ return
126
+ raise ValidationError.from_exception_data(
127
+ "zod",
128
+ [{"type": PydanticCustomError("custom", msg), "loc": loc, "input": value} for loc, msg in issues],
129
+ )
130
+
131
+
132
+ def unique_by(key_fn: Callable[[Any], str], error_message: Callable[[str], str]) -> Callable[[list[T]], list[T]]:
133
+ """Port of ``uniqueBy`` (zod-util.ts): flag every repeated key at its array index."""
134
+
135
+ def check(items: list[T]) -> list[T]:
136
+ seen: set[str] = set()
137
+ issues: list[Issue] = []
138
+ for idx, item in enumerate(items):
139
+ key = key_fn(item)
140
+ if key in seen:
141
+ issues.append(((idx,), error_message(key)))
142
+ seen.add(key)
143
+ raise_issues(issues, items)
144
+ return items
145
+
146
+ return check
147
+
148
+
149
+ # ---------------------------------------------------------------------------
150
+ # Primitive types
151
+ # ---------------------------------------------------------------------------
152
+
153
+
154
+ def _check_str(
155
+ value: str,
156
+ *,
157
+ min_len: int | None,
158
+ max_len: int | None,
159
+ pattern: re.Pattern[str] | None,
160
+ min_msg: str | None,
161
+ max_msg: str | None,
162
+ pattern_msg: str | None,
163
+ starts_with: str | None,
164
+ refines: Sequence[tuple[Callable[[str], bool], str]],
165
+ ) -> list[str]:
166
+ errors: list[str] = []
167
+ n = js_len(value)
168
+ if min_len is not None and n < min_len:
169
+ errors.append(min_msg or f"Too small: expected string to have >={min_len} characters")
170
+ if max_len is not None and n > max_len:
171
+ errors.append(max_msg or f"Too big: expected string to have <={max_len} characters")
172
+ if pattern is not None and not pattern.search(value):
173
+ errors.append(pattern_msg or f"Invalid string: must match pattern {pattern.pattern}")
174
+ if starts_with is not None and not value.startswith(starts_with):
175
+ errors.append(f'Invalid string: must start with "{starts_with}"')
176
+ for fn, msg in refines:
177
+ if not fn(value):
178
+ errors.append(msg)
179
+ return errors
180
+
181
+
182
+ def zstr(
183
+ *,
184
+ min: int | None = None,
185
+ max: int | None = None,
186
+ pattern: re.Pattern[str] | str | None = None,
187
+ min_msg: str | None = None,
188
+ max_msg: str | None = None,
189
+ pattern_msg: str | None = None,
190
+ starts_with: str | None = None,
191
+ url: bool = False,
192
+ url_msg: str = "Invalid URL",
193
+ trim: bool = False,
194
+ refines: Sequence[tuple[Callable[[str], bool], str]] = (),
195
+ ) -> Any:
196
+ """Build an annotated ``str`` type equivalent to a chained ``z.string()`` schema.
197
+
198
+ Check order follows the typical upstream chain: trim -> url -> min/max/regex/startsWith -> refines.
199
+ Like Zod, every failing length/pattern/refine check is reported; an invalid URL stops further checks.
200
+ """
201
+ compiled = js_regex(pattern) if isinstance(pattern, str) else pattern
202
+
203
+ def validate(value: str) -> str:
204
+ if trim:
205
+ value = js_trim(value)
206
+ if url:
207
+ # z.url() trims the value and requires WHATWG URL parsing to succeed.
208
+ value = js_trim(value)
209
+ if not is_js_url(value):
210
+ raise_issues([((), url_msg)], value)
211
+ errors = _check_str(
212
+ value,
213
+ min_len=min,
214
+ max_len=max,
215
+ pattern=compiled,
216
+ min_msg=min_msg,
217
+ max_msg=max_msg,
218
+ pattern_msg=pattern_msg,
219
+ starts_with=starts_with,
220
+ refines=refines,
221
+ )
222
+ raise_issues([((), e) for e in errors], value)
223
+ return value
224
+
225
+ return Annotated[str, AfterValidator(validate)]
226
+
227
+
228
+ def _is_number(value: Any) -> bool:
229
+ return isinstance(value, (int, float)) and not isinstance(value, bool)
230
+
231
+
232
+ def _number(
233
+ value: Any, *, integer: bool, ge: float | None, le: float | None, ge_msg: str | None, le_msg: str | None
234
+ ) -> int | float:
235
+ if not _is_number(value) or (isinstance(value, float) and not math.isfinite(value)):
236
+ raise PydanticCustomError("invalid_type", f"Invalid input: expected number, received {_js_type(value)}")
237
+ if isinstance(value, float) and value.is_integer():
238
+ # JSON.stringify(1.0) === "1": keep integral numbers as ints so dumps stay byte-compatible.
239
+ value = int(value)
240
+ if integer and (not isinstance(value, int) or abs(value) > 9007199254740991):
241
+ raise PydanticCustomError("invalid_type", "Invalid input: expected int, received number")
242
+ errors: list[str] = []
243
+ if ge is not None and value < ge:
244
+ errors.append(ge_msg or f"Too small: expected number to be >={_fmt_num(ge)}")
245
+ if le is not None and value > le:
246
+ errors.append(le_msg or f"Too big: expected number to be <={_fmt_num(le)}")
247
+ raise_issues([((), e) for e in errors], value)
248
+ return value
249
+
250
+
251
+ def _fmt_num(n: float) -> str:
252
+ return str(int(n)) if float(n).is_integer() else str(n)
253
+
254
+
255
+ def _js_type(value: Any) -> str:
256
+ if value is None:
257
+ return "null"
258
+ if isinstance(value, bool):
259
+ return "boolean"
260
+ if isinstance(value, str):
261
+ return "string"
262
+ if isinstance(value, (list, tuple)):
263
+ return "array"
264
+ if isinstance(value, float):
265
+ return "number"
266
+ return "object" if isinstance(value, dict) else type(value).__name__
267
+
268
+
269
+ def znum(
270
+ *, ge: float | None = None, le: float | None = None, ge_msg: str | None = None, le_msg: str | None = None
271
+ ) -> Any:
272
+ """``z.number()`` with optional ``.min()``/``.max()``. Integral values dump as ints like JS."""
273
+ return Annotated[
274
+ int | float,
275
+ PlainValidator(lambda v: _number(v, integer=False, ge=ge, le=le, ge_msg=ge_msg, le_msg=le_msg)),
276
+ ]
277
+
278
+
279
+ def zint(
280
+ *, ge: float | None = None, le: float | None = None, ge_msg: str | None = None, le_msg: str | None = None
281
+ ) -> Any:
282
+ """``z.number().int()`` with optional bounds (Zod v4 ints are JS safe integers)."""
283
+ return Annotated[
284
+ int,
285
+ PlainValidator(lambda v: int(_number(v, integer=True, ge=ge, le=le, ge_msg=ge_msg, le_msg=le_msg))),
286
+ ]
287
+
288
+
289
+ def _bool(value: Any) -> bool:
290
+ if not isinstance(value, bool):
291
+ raise PydanticCustomError("invalid_type", f"Invalid input: expected boolean, received {_js_type(value)}")
292
+ return value
293
+
294
+
295
+ ZBool = Annotated[bool, PlainValidator(_bool)]
296
+
297
+
298
+ def array_checks(
299
+ *,
300
+ min: int | None = None,
301
+ max: int | None = None,
302
+ length: int | None = None,
303
+ min_msg: str | None = None,
304
+ max_msg: str | None = None,
305
+ extra: Iterable[Callable[[list[Any]], list[Any]]] = (),
306
+ ) -> AfterValidator:
307
+ """Length checks for ``z.array()`` followed by ``superRefine`` callbacks (e.g. ``unique_by``)."""
308
+ extra = tuple(extra)
309
+
310
+ def check(items: list[Any]) -> list[Any]:
311
+ errors: list[str] = []
312
+ n = len(items)
313
+ if length is not None:
314
+ if n < length:
315
+ errors.append(min_msg or f"Too small: expected array to have >={length} items")
316
+ elif n > length:
317
+ errors.append(max_msg or f"Too big: expected array to have <={length} items")
318
+ if min is not None and n < min:
319
+ errors.append(min_msg or f"Too small: expected array to have >={min} items")
320
+ if max is not None and n > max:
321
+ errors.append(max_msg or f"Too big: expected array to have <={max} items")
322
+ raise_issues([((), e) for e in errors], items)
323
+ for fn in extra:
324
+ items = fn(items)
325
+ return items
326
+
327
+ return AfterValidator(check)
328
+
329
+
330
+ # ---------------------------------------------------------------------------
331
+ # Unicode helpers
332
+ # ---------------------------------------------------------------------------
333
+
334
+
335
+ def is_letter_or_number(ch: str) -> bool:
336
+ """``\\p{L}`` / ``\\p{N}`` membership."""
337
+ return unicodedata.category(ch)[0] in ("L", "N")
338
+
339
+
340
+ # ---------------------------------------------------------------------------
341
+ # Base models
342
+ # ---------------------------------------------------------------------------
343
+
344
+
345
+ class ZodModel(BaseModel):
346
+ """Base for ``z.object()`` ports: unknown keys stripped, camelCase wire names.
347
+
348
+ * Optional fields default to ``None`` but an explicit ``null`` is rejected, like ``.optional()``.
349
+ * ``model_dump(by_alias=True)`` omits ``None``-valued fields (``undefined`` in JS), while keeping
350
+ ``null`` values nested inside free-form ``z.unknown()`` payloads. Use :meth:`to_json_dict`.
351
+ """
352
+
353
+ model_config = ConfigDict(
354
+ alias_generator=to_camel,
355
+ populate_by_name=True,
356
+ extra="ignore",
357
+ protected_namespaces=(),
358
+ )
359
+
360
+ @model_validator(mode="before")
361
+ @classmethod
362
+ def _reject_null(cls, data: Any) -> Any:
363
+ if isinstance(data, dict):
364
+ issues: list[Issue] = []
365
+ for name, field in cls.model_fields.items():
366
+ for key in {field.alias or name, name}:
367
+ if key in data and data[key] is None:
368
+ issues.append(((key,), "Invalid input: expected nonoptional, received null"))
369
+ raise_issues(issues, data)
370
+ return data
371
+
372
+ @model_serializer(mode="wrap")
373
+ def _drop_undefined(self, handler: SerializerFunctionWrapHandler, info: SerializationInfo) -> Any:
374
+ data = handler(self)
375
+ if isinstance(data, dict):
376
+ for name, field in type(self).model_fields.items():
377
+ if getattr(self, name, None) is None:
378
+ data.pop(field.alias if info.by_alias and field.alias else name, None)
379
+ return data
380
+
381
+ def to_json_dict(self) -> dict[str, Any]:
382
+ """Dump with upstream wire keys (camelCase), omitting unset optional fields."""
383
+ return self.model_dump(mode="json", by_alias=True)
384
+
385
+
386
+ class StrictModel(ZodModel):
387
+ """``z.object().strict()`` / ``z.strictObject()``: unknown keys are rejected."""
388
+
389
+ model_config = ConfigDict(extra="forbid")
390
+
391
+
392
+ class PassthroughModel(ZodModel):
393
+ """``z.object().passthrough()``: unknown keys are preserved and re-emitted."""
394
+
395
+ model_config = ConfigDict(extra="allow")
@@ -0,0 +1,306 @@
1
+ """Feature and infrastructure constants shared across schemas (port of ``src/schema/constants.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Iterable, Mapping
6
+ from typing import Any, Final, Literal, get_args
7
+
8
+ from ._zod import js_regex
9
+
10
+ # ============================================================================
11
+ # Feature Constants (shared across all schemas)
12
+ # ============================================================================
13
+
14
+ SDKFramework = Literal[
15
+ "Strands",
16
+ "LangChain_LangGraph",
17
+ "GoogleADK",
18
+ "OpenAIAgents",
19
+ "VercelAI",
20
+ "BedrockManagedAgents",
21
+ ]
22
+ SDK_FRAMEWORKS: Final[tuple[SDKFramework, ...]] = get_args(SDKFramework)
23
+
24
+ TargetLanguage = Literal["Python", "TypeScript", "Other"]
25
+ TARGET_LANGUAGES: Final[tuple[TargetLanguage, ...]] = get_args(TargetLanguage)
26
+
27
+ ModelProvider = Literal["Bedrock", "Gemini", "OpenAI", "Anthropic", "LiteLLM"]
28
+ MODEL_PROVIDERS: Final[tuple[ModelProvider, ...]] = get_args(ModelProvider)
29
+
30
+ # Providers that use credentials (Bedrock uses IAM, no credential needed). LiteLLM's API key is optional.
31
+ CREDENTIAL_PROVIDERS: Final[tuple[ModelProvider, ...]] = ("Gemini", "OpenAI", "Anthropic", "LiteLLM")
32
+
33
+
34
+ def match_enum_value(options: Any, input: str) -> str | None:
35
+ """Case-insensitively match ``input`` against enum options; returns the canonical value or None.
36
+
37
+ ``options`` may be a ``Literal`` type or any iterable of strings (upstream takes a Zod enum).
38
+ """
39
+ values: Iterable[str] = get_args(options) or options
40
+ lower = input.lower()
41
+ return next((v for v in values if v.lower() == lower), None)
42
+
43
+
44
+ # Short names that --framework also accepts.
45
+ _SDK_FRAMEWORK_ALIASES: Final[Mapping[str, SDKFramework]] = {"bma": "BedrockManagedAgents"}
46
+
47
+
48
+ def match_sdk_framework(input: str) -> SDKFramework | None:
49
+ """Case-insensitively match a --framework value, including its short names."""
50
+ lower = input.lower()
51
+ if lower in _SDK_FRAMEWORK_ALIASES:
52
+ return _SDK_FRAMEWORK_ALIASES[lower]
53
+ return match_enum_value(SDK_FRAMEWORKS, input) # type: ignore[return-value]
54
+
55
+
56
+ # Default model IDs used for each provider (the models generated in agent templates).
57
+ DEFAULT_MODEL_IDS: Final[dict[ModelProvider, str]] = {
58
+ "Bedrock": "us.anthropic.claude-sonnet-4-5-20250514-v1:0",
59
+ "Anthropic": "claude-sonnet-4-5-20250514",
60
+ "OpenAI": "gpt-4.1",
61
+ "Gemini": "gemini-2.5-flash",
62
+ # LiteLLM model ids are provider-prefixed (e.g. "bedrock/...", "openai/gpt-4o"); no single default.
63
+ "LiteLLM": "bedrock/us.anthropic.claude-sonnet-4-5-20250514-v1:0",
64
+ }
65
+
66
+ # Which model providers are supported for each SDK framework.
67
+ SDK_MODEL_PROVIDER_MATRIX: Final[dict[SDKFramework, tuple[ModelProvider, ...]]] = {
68
+ # LiteLLM is supported for Strands (used by harness export) — it proxies to any provider.
69
+ "Strands": ("Bedrock", "Anthropic", "OpenAI", "Gemini", "LiteLLM"),
70
+ "LangChain_LangGraph": ("Bedrock", "Anthropic", "OpenAI", "Gemini"),
71
+ "GoogleADK": ("Gemini",),
72
+ "OpenAIAgents": ("OpenAI",),
73
+ "VercelAI": ("Bedrock", "Anthropic", "OpenAI", "Gemini"),
74
+ # BMA runs no model in the runtime: Bedrock Managed Agents (Mantle) runs Codex and calls in.
75
+ "BedrockManagedAgents": ("Bedrock",),
76
+ }
77
+
78
+
79
+ def get_supported_model_providers(sdk: SDKFramework) -> tuple[ModelProvider, ...]:
80
+ return SDK_MODEL_PROVIDER_MATRIX[sdk]
81
+
82
+
83
+ def is_model_provider_supported(sdk: SDKFramework, provider: ModelProvider) -> bool:
84
+ return provider in SDK_MODEL_PROVIDER_MATRIX[sdk]
85
+
86
+
87
+ # ============================================================================
88
+ # Reserved Project Names (Python package conflicts)
89
+ # ============================================================================
90
+
91
+ # Names that would conflict with Python package names when creating a virtual environment
92
+ # (normalized: lowercase, no separators, since project names are alphanumeric only).
93
+ RESERVED_PROJECT_NAMES: Final[tuple[str, ...]] = (
94
+ # Core SDK packages
95
+ "anthropic",
96
+ "autogen",
97
+ "autogenagentchat",
98
+ "autogenext",
99
+ "bedrock",
100
+ "bedrockagentcore",
101
+ "googleadk",
102
+ "googlegenerativeai",
103
+ "langchain",
104
+ "langchainanthropic",
105
+ "langchainaws",
106
+ "langchaingooglegenai",
107
+ "langchainmcpadapters",
108
+ "langchainopenai",
109
+ "langgraph",
110
+ "mcp",
111
+ "openai",
112
+ "openaiagents",
113
+ "strands",
114
+ "strandsagents",
115
+ "strandsagentstools",
116
+ # AG-UI adapter packages
117
+ "agui",
118
+ "aguistrands",
119
+ "aguilanggraph",
120
+ "aguiadk",
121
+ "aguiprotocol",
122
+ "vercelai",
123
+ "aisdk",
124
+ # Common utilities
125
+ "httpx",
126
+ "pytest",
127
+ "pytestasyncio",
128
+ "pythondotenv",
129
+ # Build tools
130
+ "hatchling",
131
+ "setuptools",
132
+ "wheel",
133
+ # AWS packages
134
+ "awsopentelemetrydistro",
135
+ "boto3",
136
+ "botocore",
137
+ # Common Python stdlib/package names that could cause issues
138
+ "test",
139
+ "tests",
140
+ "src",
141
+ "lib",
142
+ "dist",
143
+ "build",
144
+ "env",
145
+ "venv",
146
+ "site",
147
+ "pip",
148
+ "uv",
149
+ )
150
+
151
+
152
+ def is_reserved_project_name(name: str) -> bool:
153
+ """Check if a project name is reserved (case-insensitive)."""
154
+ return name.lower() in RESERVED_PROJECT_NAMES
155
+
156
+
157
+ # ============================================================================
158
+ # Infrastructure Constants (shared between agent-env and mcp schemas)
159
+ # ============================================================================
160
+
161
+ PythonRuntime = Literal["PYTHON_3_10", "PYTHON_3_11", "PYTHON_3_12", "PYTHON_3_13", "PYTHON_3_14"]
162
+ PYTHON_RUNTIMES: Final[tuple[PythonRuntime, ...]] = get_args(PythonRuntime)
163
+
164
+ DEFAULT_PYTHON_VERSION: Final[PythonRuntime] = "PYTHON_3_14"
165
+
166
+ NodeRuntime = Literal["NODE_18", "NODE_20", "NODE_22"]
167
+ NODE_RUNTIMES: Final[tuple[NodeRuntime, ...]] = get_args(NodeRuntime)
168
+
169
+ DEFAULT_NODE_VERSION: Final[NodeRuntime] = "NODE_22"
170
+
171
+ # Combined runtime version supporting both Python and Node/TypeScript runtimes.
172
+ RuntimeVersion = Literal[PythonRuntime, NodeRuntime]
173
+ RUNTIME_VERSIONS: Final[tuple[str, ...]] = PYTHON_RUNTIMES + NODE_RUNTIMES
174
+
175
+ DEFAULT_ENTRYPOINT_BY_LANGUAGE: Final[dict[Literal["Python", "TypeScript"], str]] = {
176
+ "Python": "main.py",
177
+ "TypeScript": "main.js",
178
+ }
179
+
180
+ DEFAULT_RUNTIME_BY_LANGUAGE: Final[dict[Literal["Python", "TypeScript"], str]] = {
181
+ "Python": DEFAULT_PYTHON_VERSION,
182
+ "TypeScript": DEFAULT_NODE_VERSION,
183
+ }
184
+
185
+ NetworkMode = Literal["PUBLIC", "VPC"]
186
+ NETWORK_MODES: Final[tuple[NetworkMode, ...]] = get_args(NetworkMode)
187
+
188
+ # ============================================================================
189
+ # AWS Network Resource ID Patterns (single source of truth)
190
+ #
191
+ # Canonical AWS resource ID format: lowercase hex, exactly 8 chars (legacy) or 17 chars (current).
192
+ # ============================================================================
193
+
194
+ VPC_ID_PATTERN: Final = js_regex(r"^vpc-(?:[0-9a-f]{8}|[0-9a-f]{17})$")
195
+ SUBNET_ID_PATTERN: Final = js_regex(r"^subnet-(?:[0-9a-f]{8}|[0-9a-f]{17})$")
196
+ SECURITY_GROUP_ID_PATTERN: Final = js_regex(r"^sg-(?:[0-9a-f]{8}|[0-9a-f]{17})$")
197
+
198
+ # CodeBuild caps a project's VPC config at 5 security groups (vs 16 for the runtime).
199
+ MAX_CONTAINER_BUILD_SECURITY_GROUPS: Final = 5
200
+
201
+
202
+ def _get(spec: Any, camel: str, snake: str) -> Any:
203
+ if isinstance(spec, Mapping):
204
+ return spec.get(camel, spec.get(snake))
205
+ return getattr(spec, snake, None)
206
+
207
+
208
+ def is_container_build(spec: Any) -> bool:
209
+ """Whether a build runs the container-image pipeline (CodeBuild), needing an explicit vpcId in VPC mode.
210
+
211
+ True when ``build == 'Container'``, or the spec carries a ``dockerfile`` (from-source container
212
+ harness) or a ``containerUri`` (prebuilt image harness). Accepts a model or a camelCase/snake_case
213
+ mapping.
214
+ """
215
+ return (
216
+ _get(spec, "build", "build") == "Container"
217
+ or bool(_get(spec, "containerUri", "container_uri"))
218
+ or bool(_get(spec, "dockerfile", "dockerfile"))
219
+ )
220
+
221
+
222
+ # ============================================================================
223
+ # Protocol Mode
224
+ # ============================================================================
225
+
226
+ ProtocolMode = Literal["HTTP", "MCP", "A2A", "AGUI"]
227
+ PROTOCOL_MODES: Final[tuple[ProtocolMode, ...]] = get_args(ProtocolMode)
228
+
229
+ # Which SDK frameworks are supported for each protocol mode. MCP is a standalone tool server.
230
+ PROTOCOL_FRAMEWORK_MATRIX: Final[dict[ProtocolMode, tuple[SDKFramework, ...]]] = {
231
+ "HTTP": ("Strands", "LangChain_LangGraph", "GoogleADK", "OpenAIAgents", "VercelAI", "BedrockManagedAgents"),
232
+ "MCP": (),
233
+ "A2A": ("Strands", "GoogleADK", "LangChain_LangGraph"),
234
+ "AGUI": ("Strands", "LangChain_LangGraph", "GoogleADK"),
235
+ }
236
+
237
+
238
+ def get_supported_frameworks_for_protocol(protocol: ProtocolMode) -> tuple[SDKFramework, ...]:
239
+ return PROTOCOL_FRAMEWORK_MATRIX[protocol]
240
+
241
+
242
+ def is_framework_supported_for_protocol(protocol: ProtocolMode, framework: SDKFramework) -> bool:
243
+ return framework in PROTOCOL_FRAMEWORK_MATRIX[protocol]
244
+
245
+
246
+ # Which SDK frameworks ship templates for each target language (Vercel AI is TypeScript-only).
247
+ LANGUAGE_FRAMEWORK_MATRIX: Final[dict[str, tuple[SDKFramework, ...]]] = {
248
+ "Python": ("Strands", "LangChain_LangGraph", "GoogleADK", "OpenAIAgents", "BedrockManagedAgents"),
249
+ "TypeScript": ("Strands", "VercelAI"),
250
+ }
251
+
252
+ # Languages that scaffold from templates (excludes 'Other', which is BYO-only).
253
+ TemplateLanguage = Literal["Python", "TypeScript"]
254
+
255
+
256
+ def get_frameworks_for_language(language: TemplateLanguage) -> tuple[SDKFramework, ...]:
257
+ return LANGUAGE_FRAMEWORK_MATRIX[language]
258
+
259
+
260
+ def is_framework_supported_for_language(language: TemplateLanguage, framework: SDKFramework) -> bool:
261
+ return framework in get_frameworks_for_language(language)
262
+
263
+
264
+ __all__ = [
265
+ "CREDENTIAL_PROVIDERS",
266
+ "DEFAULT_ENTRYPOINT_BY_LANGUAGE",
267
+ "DEFAULT_MODEL_IDS",
268
+ "DEFAULT_NODE_VERSION",
269
+ "DEFAULT_PYTHON_VERSION",
270
+ "DEFAULT_RUNTIME_BY_LANGUAGE",
271
+ "LANGUAGE_FRAMEWORK_MATRIX",
272
+ "MAX_CONTAINER_BUILD_SECURITY_GROUPS",
273
+ "MODEL_PROVIDERS",
274
+ "NETWORK_MODES",
275
+ "NODE_RUNTIMES",
276
+ "PROTOCOL_FRAMEWORK_MATRIX",
277
+ "PROTOCOL_MODES",
278
+ "PYTHON_RUNTIMES",
279
+ "RESERVED_PROJECT_NAMES",
280
+ "RUNTIME_VERSIONS",
281
+ "SDK_FRAMEWORKS",
282
+ "SDK_MODEL_PROVIDER_MATRIX",
283
+ "SECURITY_GROUP_ID_PATTERN",
284
+ "SUBNET_ID_PATTERN",
285
+ "TARGET_LANGUAGES",
286
+ "VPC_ID_PATTERN",
287
+ "ModelProvider",
288
+ "NetworkMode",
289
+ "NodeRuntime",
290
+ "ProtocolMode",
291
+ "PythonRuntime",
292
+ "RuntimeVersion",
293
+ "SDKFramework",
294
+ "TargetLanguage",
295
+ "TemplateLanguage",
296
+ "get_frameworks_for_language",
297
+ "get_supported_frameworks_for_protocol",
298
+ "get_supported_model_providers",
299
+ "is_container_build",
300
+ "is_framework_supported_for_language",
301
+ "is_framework_supported_for_protocol",
302
+ "is_model_provider_supported",
303
+ "is_reserved_project_name",
304
+ "match_enum_value",
305
+ "match_sdk_framework",
306
+ ]