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,710 @@
1
+ """Harness spec, i.e. per-harness harness.json (port of ``primitives/harness.ts``)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from typing import Annotated, Any, ClassVar, Final, Literal, get_args
7
+
8
+ from pydantic import AfterValidator, BeforeValidator, Field, ValidationError, model_validator
9
+
10
+ from ..._zod import (
11
+ JS_WHITESPACE,
12
+ Issue,
13
+ PassthroughModel,
14
+ StrictModel,
15
+ ZodModel,
16
+ array_checks,
17
+ js_len,
18
+ js_regex,
19
+ js_trim,
20
+ raise_issues,
21
+ unique_by,
22
+ zint,
23
+ znum,
24
+ zstr,
25
+ )
26
+ from ...constants import MAX_CONTAINER_BUILD_SECURITY_GROUPS, NetworkMode, is_container_build
27
+ from ..agent_env import (
28
+ EfsAccessPointConfig,
29
+ LifecycleConfiguration,
30
+ NetworkConfig,
31
+ S3FilesAccessPointConfig,
32
+ SessionStorageMountPath,
33
+ )
34
+ from ..auth import AuthorizerConfig, RuntimeAuthorizerType
35
+ from ..connections import Connection
36
+ from .tags import Tags
37
+
38
+ # ECR image URI, mirroring the CFN ContainerConfiguration.ContainerUri constraint.
39
+ CONTAINER_URI_PATTERN: Final = js_regex(
40
+ r"^(([0-9]{12})\.dkr\.ecr\.([a-z0-9-]+)\.amazonaws\.com(\.cn)?|public\.ecr\.aws)\/"
41
+ r"((?:[a-z0-9]+(?:[._-][a-z0-9]+)*\/)*[a-z0-9]+(?:[._-][a-z0-9]+)*)(?::([^:@]{1,300}))?(?:@(.+))?$"
42
+ )
43
+ MAX_CONTAINER_URI_LENGTH: Final = 1024
44
+ # CFN EnvironmentVariables value maxLength and map maxProperties.
45
+ MAX_ENV_VAR_VALUE_LENGTH: Final = 5000
46
+ MAX_ENV_VARS: Final = 50
47
+ # Smithy EnvironmentVariableKey length bounds (1–100, no char pattern).
48
+ MAX_ENV_VAR_KEY_LENGTH: Final = 100
49
+
50
+ # ============================================================================
51
+ # Harness Name
52
+ # ============================================================================
53
+
54
+ HarnessName = zstr(
55
+ min=1,
56
+ max=40,
57
+ min_msg="Harness name is required",
58
+ pattern=r"^[a-zA-Z][a-zA-Z0-9_]{0,39}$",
59
+ pattern_msg="Must begin with a letter and contain only alphanumeric characters and underscores (max 40 chars)",
60
+ )
61
+
62
+ # ============================================================================
63
+ # Model Configuration
64
+ # ============================================================================
65
+
66
+ HarnessModelProvider = Literal["bedrock", "open_ai", "gemini", "lite_llm"]
67
+ HARNESS_MODEL_PROVIDERS: Final[tuple[HarnessModelProvider, ...]] = get_args(HarnessModelProvider)
68
+
69
+ # Max length of the LiteLLM apiBase URL (Smithy: HarnessLiteLlmApiBase, 1–16383).
70
+ MAX_LITE_LLM_API_BASE_LENGTH: Final = 16383
71
+
72
+ BedrockApiFormat = Literal["converse_stream", "responses", "chat_completions"]
73
+ BEDROCK_API_FORMATS: Final[tuple[BedrockApiFormat, ...]] = get_args(BedrockApiFormat)
74
+
75
+ OpenAiApiFormat = Literal["responses", "chat_completions"]
76
+ OPEN_AI_API_FORMATS: Final[tuple[OpenAiApiFormat, ...]] = get_args(OpenAiApiFormat)
77
+
78
+ HarnessApiFormat = Literal["converse_stream", "responses", "chat_completions"]
79
+ HARNESS_API_FORMATS: Final[tuple[HarnessApiFormat, ...]] = get_args(HarnessApiFormat)
80
+
81
+
82
+ class HarnessModel(ZodModel):
83
+ provider: HarnessModelProvider
84
+ model_id: zstr(min=1, min_msg="Model ID is required")
85
+ api_key_arn: str | None = None
86
+ api_format: HarnessApiFormat | None = None
87
+ temperature: znum(ge=0, le=2) | None = None
88
+ top_p: znum(ge=0, le=1) | None = None
89
+ top_k: zint(ge=0, le=500) | None = None
90
+ max_tokens: zint(ge=1) | None = None
91
+ # LiteLLM only: base URL for the third-party model provider's API endpoint.
92
+ api_base: zstr(min=1, max=MAX_LITE_LLM_API_BASE_LENGTH) | None = None
93
+ # LiteLLM only: provider-specific parameters passed through unchanged.
94
+ additional_params: dict[str, Any] | None = None
95
+
96
+ @model_validator(mode="after")
97
+ def _refine(self) -> HarnessModel:
98
+ issues: list[Issue] = []
99
+ if self.top_k is not None and self.provider != "gemini":
100
+ issues.append((("topK",), 'topK is only supported for the "gemini" provider'))
101
+ if self.api_format is not None:
102
+ if self.provider not in ("bedrock", "open_ai"):
103
+ issues.append((("apiFormat",), "--api-format is only supported for bedrock and open_ai providers"))
104
+ elif self.provider == "open_ai" and self.api_format == "converse_stream":
105
+ issues.append(
106
+ (
107
+ ("apiFormat",),
108
+ f"Invalid API format for open_ai: {self.api_format}. Use {', '.join(OPEN_AI_API_FORMATS)}",
109
+ )
110
+ )
111
+ # CFN requires ApiKeyArn for the open_ai and gemini model configs.
112
+ if self.api_key_arn is None and self.provider in ("open_ai", "gemini"):
113
+ issues.append((("apiKeyArn",), f'apiKeyArn is required for the "{self.provider}" provider'))
114
+ if self.api_base is not None and self.provider != "lite_llm":
115
+ issues.append((("apiBase",), 'apiBase is only supported for the "lite_llm" provider'))
116
+ if self.additional_params is not None and self.provider != "lite_llm":
117
+ issues.append((("additionalParams",), 'additionalParams is only supported for the "lite_llm" provider'))
118
+ raise_issues(issues, self)
119
+ return self
120
+
121
+
122
+ def validate_api_format(api_format: str, provider: str) -> dict[str, Any]:
123
+ """Returns ``{"valid": True}`` or ``{"valid": False, "error": str}`` (port of ``validateApiFormat``)."""
124
+ if api_format not in HARNESS_API_FORMATS:
125
+ return {"valid": False, "error": f"Invalid API format: {api_format}. Use {', '.join(HARNESS_API_FORMATS)}"}
126
+ if provider not in ("bedrock", "open_ai"):
127
+ return {"valid": False, "error": "--api-format is only supported for bedrock and open_ai providers"}
128
+ try:
129
+ HarnessModel.model_validate({"provider": provider, "modelId": "placeholder", "apiFormat": api_format})
130
+ except ValidationError as e:
131
+ if any("apiFormat" in err["loc"] for err in e.errors()):
132
+ formats = OPEN_AI_API_FORMATS if provider == "open_ai" else BEDROCK_API_FORMATS
133
+ return {
134
+ "valid": False,
135
+ "error": f"Invalid API format for {provider}: {api_format}. Use {', '.join(formats)}",
136
+ }
137
+ return {"valid": True}
138
+
139
+
140
+ # ============================================================================
141
+ # Tool Configuration
142
+ # ============================================================================
143
+
144
+ HarnessToolType = Literal[
145
+ "remote_mcp",
146
+ "agentcore_browser",
147
+ "agentcore_gateway",
148
+ "inline_function",
149
+ "agentcore_code_interpreter",
150
+ ]
151
+ HARNESS_TOOL_TYPES: Final[tuple[HarnessToolType, ...]] = get_args(HarnessToolType)
152
+
153
+ HarnessToolName = zstr(
154
+ min=1,
155
+ max=64,
156
+ pattern=r"^[a-zA-Z0-9_-]+$",
157
+ pattern_msg="Tool name must contain only alphanumeric characters, hyphens, and underscores (1-64 chars)",
158
+ )
159
+
160
+
161
+ class EmptyObject(ZodModel):
162
+ """``z.object({})`` (unknown keys stripped)."""
163
+
164
+
165
+ class RemoteMcp(ZodModel):
166
+ url: zstr(min=1)
167
+ headers: dict[str, str] | None = None
168
+
169
+
170
+ class RemoteMcpConfig(ZodModel):
171
+ KEY: ClassVar[str] = "remoteMcp"
172
+ remote_mcp: RemoteMcp
173
+
174
+
175
+ class AgentCoreBrowser(ZodModel):
176
+ browser_arn: str | None = None
177
+
178
+
179
+ class AgentCoreBrowserConfig(ZodModel):
180
+ KEY: ClassVar[str] = "agentCoreBrowser"
181
+ agent_core_browser: AgentCoreBrowser
182
+
183
+
184
+ class AgentCoreCodeInterpreter(ZodModel):
185
+ code_interpreter_arn: str | None = None
186
+
187
+
188
+ class AgentCoreCodeInterpreterConfig(ZodModel):
189
+ KEY: ClassVar[str] = "agentCoreCodeInterpreter"
190
+ agent_core_code_interpreter: AgentCoreCodeInterpreter
191
+
192
+
193
+ GatewayOAuthGrantType = Literal["CLIENT_CREDENTIALS", "USER_FEDERATION"]
194
+ GATEWAY_OAUTH_GRANT_TYPES: Final[tuple[GatewayOAuthGrantType, ...]] = get_args(GatewayOAuthGrantType)
195
+
196
+
197
+ class HarnessGatewayOAuth(ZodModel):
198
+ provider_arn: zstr(min=1)
199
+ scopes: list[zstr(min=1)]
200
+ grant_type: GatewayOAuthGrantType | None = None
201
+ custom_parameters: dict[str, str] | None = None
202
+
203
+
204
+ class HarnessAwsIamOutboundAuth(ZodModel):
205
+ aws_iam: EmptyObject
206
+
207
+
208
+ class HarnessNoneOutboundAuth(ZodModel):
209
+ none: EmptyObject
210
+
211
+
212
+ class HarnessOAuthOutboundAuth(ZodModel):
213
+ oauth: HarnessGatewayOAuth
214
+
215
+
216
+ HarnessGatewayOutboundAuth = Annotated[
217
+ HarnessAwsIamOutboundAuth | HarnessNoneOutboundAuth | HarnessOAuthOutboundAuth,
218
+ Field(union_mode="left_to_right"),
219
+ ]
220
+
221
+
222
+ class HarnessAgentCoreGateway(PassthroughModel):
223
+ gateway_arn: zstr(min=1)
224
+ outbound_auth: HarnessGatewayOutboundAuth | None = None
225
+
226
+ @model_validator(mode="after")
227
+ def _refine(self) -> HarnessAgentCoreGateway:
228
+ if "credentialProviderName" in (self.model_extra or {}):
229
+ raise_issues(
230
+ [
231
+ (
232
+ ("credentialProviderName",),
233
+ (
234
+ "credentialProviderName is no longer supported. Use outboundAuth instead. Example: "
235
+ 'outboundAuth: { awsIam: {} } or outboundAuth: { oauth: { providerArn: "...", scopes: [...] } }'
236
+ ),
237
+ )
238
+ ],
239
+ self,
240
+ )
241
+ return self
242
+
243
+
244
+ class AgentCoreGatewayConfig(ZodModel):
245
+ KEY: ClassVar[str] = "agentCoreGateway"
246
+ agent_core_gateway: HarnessAgentCoreGateway
247
+
248
+
249
+ class InlineFunction(ZodModel):
250
+ description: zstr(min=1)
251
+ input_schema: dict[str, Any]
252
+
253
+
254
+ class InlineFunctionConfig(ZodModel):
255
+ KEY: ClassVar[str] = "inlineFunction"
256
+ inline_function: InlineFunction
257
+
258
+
259
+ HarnessToolConfig = Annotated[
260
+ RemoteMcpConfig
261
+ | AgentCoreBrowserConfig
262
+ | AgentCoreCodeInterpreterConfig
263
+ | AgentCoreGatewayConfig
264
+ | InlineFunctionConfig,
265
+ Field(union_mode="left_to_right"),
266
+ ]
267
+
268
+ _TOOL_TYPE_TO_CONFIG_KEY: Final[dict[str, str]] = {
269
+ "remote_mcp": "remoteMcp",
270
+ "agentcore_browser": "agentCoreBrowser",
271
+ "agentcore_gateway": "agentCoreGateway",
272
+ "inline_function": "inlineFunction",
273
+ "agentcore_code_interpreter": "agentCoreCodeInterpreter",
274
+ }
275
+
276
+ _TOOL_TYPES_REQUIRING_CONFIG: Final = frozenset({"remote_mcp", "agentcore_gateway", "inline_function"})
277
+
278
+
279
+ class HarnessTool(ZodModel):
280
+ type: HarnessToolType
281
+ name: HarnessToolName
282
+ config: HarnessToolConfig | None = None
283
+
284
+ @model_validator(mode="after")
285
+ def _refine(self) -> HarnessTool:
286
+ expected = _TOOL_TYPE_TO_CONFIG_KEY[self.type]
287
+ if self.config is None:
288
+ if self.type in _TOOL_TYPES_REQUIRING_CONFIG:
289
+ raise_issues([(("config",), f'Tool type "{self.type}" requires a "{expected}" config')], self)
290
+ return self
291
+ if self.config.KEY != expected:
292
+ raise_issues(
293
+ [
294
+ (
295
+ ("config",),
296
+ f'Tool type "{self.type}" requires "{expected}" config, got "{self.config.KEY}"',
297
+ )
298
+ ],
299
+ self,
300
+ )
301
+ return self
302
+
303
+
304
+ # ============================================================================
305
+ # Memory Reference
306
+ # ============================================================================
307
+
308
+
309
+ class HarnessMemoryRetrievalConfig(StrictModel):
310
+ """Per-namespace retrieval tuning, fanned out by the CDK to every namespace of the memory."""
311
+
312
+ top_k: zint(ge=1) | None = None
313
+ relevance_score: znum(ge=0, le=1) | None = None
314
+
315
+ @model_validator(mode="after")
316
+ def _refine(self) -> HarnessMemoryRetrievalConfig:
317
+ # An empty {} fans out to per-namespace {} objects, which crashed the pre-v6 service handler.
318
+ if self.top_k is None and self.relevance_score is None:
319
+ raise_issues([((), "retrievalConfig must specify at least one of topK or relevanceScore")], self)
320
+ return self
321
+
322
+
323
+ # Managed harness memory excludes CUSTOM (CFN ManagedMemoryConfiguration.Strategies enum).
324
+ ManagedMemoryStrategy = Literal["SEMANTIC", "SUMMARIZATION", "USER_PREFERENCE", "EPISODIC"]
325
+ MANAGED_MEMORY_STRATEGIES: Final[tuple[ManagedMemoryStrategy, ...]] = get_args(ManagedMemoryStrategy)
326
+
327
+
328
+ class ManagedMemoryRef(StrictModel):
329
+ """The harness creates and owns its memory. ``strategies`` is only written when explicitly tuned."""
330
+
331
+ mode: Literal["managed"]
332
+ strategies: Annotated[list[ManagedMemoryStrategy], array_checks(min=1, max=4)] | None = None
333
+ event_expiry_duration: zint(ge=3, le=365) | None = None
334
+ encryption_key_arn: zstr(min=1) | None = None
335
+
336
+
337
+ class ExistingMemoryRef(StrictModel):
338
+ """Bring-your-own memory referenced by sibling ``name`` or ``arn``."""
339
+
340
+ mode: Literal["existing"]
341
+ name: zstr(min=1) | None = None
342
+ arn: zstr(min=1) | None = None
343
+ actor_id: str | None = None
344
+ # Limits how many recent memory messages are loaded into context (CFN MessagesCount).
345
+ messages_count: zint(ge=1) | None = None
346
+ retrieval_config: HarnessMemoryRetrievalConfig | None = None
347
+
348
+ @model_validator(mode="after")
349
+ def _refine(self) -> ExistingMemoryRef:
350
+ issues: list[Issue] = []
351
+ if self.arn is None and self.name is None:
352
+ issues.append((("name",), "existing memory requires `arn` or `name`"))
353
+ # At synth `arn` wins over `name`, so any by-arn ref resolves no strategies and the tuning
354
+ # would be silently dropped; gate on `arn` alone.
355
+ if self.arn and self.retrieval_config is not None:
356
+ issues.append(
357
+ (
358
+ ("retrievalConfig",),
359
+ (
360
+ "retrievalConfig is not supported when memory is referenced by `arn` (per-namespace tuning is "
361
+ "only resolvable for a by-name reference). Reference the memory by `name` only, or drop "
362
+ "retrievalConfig."
363
+ ),
364
+ )
365
+ )
366
+ raise_issues(issues, self)
367
+ return self
368
+
369
+
370
+ class DisabledMemoryRef(StrictModel):
371
+ """Explicit opt-out of memory."""
372
+
373
+ mode: Literal["disabled"]
374
+
375
+
376
+ def _legacy_memory_ref(value: Any) -> Any:
377
+ # Legacy flat shape ({ name | arn | ... }) -> the `existing` arm. Absent memory stays absent.
378
+ if isinstance(value, dict) and "mode" not in value:
379
+ return {"mode": "existing", **value}
380
+ return value
381
+
382
+
383
+ HarnessMemoryRef = Annotated[
384
+ ManagedMemoryRef | ExistingMemoryRef | DisabledMemoryRef,
385
+ Field(discriminator="mode"),
386
+ BeforeValidator(_legacy_memory_ref),
387
+ ]
388
+
389
+ # ============================================================================
390
+ # Truncation Configuration
391
+ # ============================================================================
392
+
393
+ HarnessTruncationStrategy = Literal["sliding_window", "summarization", "none"]
394
+ HARNESS_TRUNCATION_STRATEGIES: Final[tuple[HarnessTruncationStrategy, ...]] = get_args(HarnessTruncationStrategy)
395
+
396
+
397
+ class SlidingWindow(ZodModel):
398
+ messages_count: zint(ge=1) | None = None
399
+
400
+
401
+ class SlidingWindowConfig(StrictModel):
402
+ # Strict outer object so a payload carrying both arms fails the union instead of dropping one.
403
+ sliding_window: SlidingWindow
404
+
405
+
406
+ class Summarization(ZodModel):
407
+ summary_ratio: znum(ge=0, le=1) | None = None
408
+ preserve_recent_messages: zint(ge=0) | None = None
409
+ summarization_system_prompt: str | None = None
410
+
411
+
412
+ class SummarizationConfig(StrictModel):
413
+ summarization: Summarization
414
+
415
+
416
+ _TRUNCATION_CONFIG_KEY: Final[dict[str, str | None]] = {
417
+ "sliding_window": "slidingWindow",
418
+ "summarization": "summarization",
419
+ "none": None,
420
+ }
421
+
422
+
423
+ class HarnessTruncationConfig(ZodModel):
424
+ strategy: HarnessTruncationStrategy
425
+ config: Annotated[SlidingWindowConfig | SummarizationConfig, Field(union_mode="left_to_right")] | None = None
426
+
427
+ @model_validator(mode="after")
428
+ def _refine(self) -> HarnessTruncationConfig:
429
+ if self.config is None:
430
+ return self
431
+ config_key = "slidingWindow" if isinstance(self.config, SlidingWindowConfig) else "summarization"
432
+ expected = _TRUNCATION_CONFIG_KEY[self.strategy]
433
+ if expected is None:
434
+ raise_issues([(("config",), f'Truncation strategy "{self.strategy}" does not take a config')], self)
435
+ elif expected != config_key:
436
+ raise_issues(
437
+ [
438
+ (
439
+ ("config",),
440
+ f'Truncation strategy "{self.strategy}" requires a "{expected}" config, got "{config_key}"',
441
+ )
442
+ ],
443
+ self,
444
+ )
445
+ return self
446
+
447
+
448
+ # ============================================================================
449
+ # Skill Configuration
450
+ # ============================================================================
451
+
452
+
453
+ class HarnessSkillGitAuth(ZodModel):
454
+ credential_name: zstr(min=1)
455
+ username: str | None = None
456
+
457
+
458
+ class HarnessSkillS3Source(StrictModel):
459
+ s3_uri: zstr(min=5, pattern=r"^s3:\/\/", pattern_msg="Must be an S3 URI starting with s3://")
460
+
461
+
462
+ class HarnessSkillGitSource(StrictModel):
463
+ git_url: zstr(min=8, pattern=r"^https:\/\/", pattern_msg="Must be an HTTPS git URL")
464
+ path: zstr(min=1) | None = None
465
+ auth: HarnessSkillGitAuth | None = None
466
+
467
+
468
+ class HarnessSkillPathSource(StrictModel):
469
+ path: zstr(min=1)
470
+
471
+
472
+ class HarnessSkillAwsSkills(StrictModel):
473
+ paths: list[zstr(min=1, max=4096)] | None = None
474
+
475
+
476
+ class HarnessSkillAwsSkillsSource(StrictModel):
477
+ aws_skills: HarnessSkillAwsSkills
478
+
479
+
480
+ def _skill_shorthand(value: Any) -> Any:
481
+ # A bare non-empty string is shorthand for { path } (upstream: z.string().min(1).transform).
482
+ if isinstance(value, str) and js_len(value) >= 1:
483
+ return {"path": value}
484
+ return value
485
+
486
+
487
+ HarnessSkill = Annotated[
488
+ HarnessSkillS3Source | HarnessSkillGitSource | HarnessSkillPathSource | HarnessSkillAwsSkillsSource,
489
+ Field(union_mode="left_to_right"),
490
+ BeforeValidator(_skill_shorthand),
491
+ ]
492
+
493
+ # ============================================================================
494
+ # Allowed Tools
495
+ # ============================================================================
496
+
497
+ AllowedTool = zstr(
498
+ min=1,
499
+ max=64,
500
+ pattern=r"^(\*|@?[^/]+(\/[^/]+)?)$",
501
+ pattern_msg='Must be "*" or a tool name pattern (max 64 chars)',
502
+ )
503
+
504
+
505
+ def looks_like_legacy_prompt_path(value: str) -> bool:
506
+ """Detect the legacy file-path-shaped ``systemPrompt`` (``./prompt.md`` style).
507
+
508
+ Real prompts are prose containing whitespace; the legacy shape was a single bare token that is a
509
+ relative path or ends in .md/.txt.
510
+ """
511
+ v = js_trim(value)
512
+ if not v or any(ch in JS_WHITESPACE for ch in v):
513
+ return False
514
+ return re.match(r"\.\.?/", v) is not None or re.search(r"\.(md|txt)\Z", v, re.IGNORECASE) is not None
515
+
516
+
517
+ SystemPrompt = zstr(
518
+ refines=(
519
+ (lambda v: len(js_trim(v)) > 0, "systemPrompt must not be empty or whitespace-only"),
520
+ (
521
+ lambda v: not looks_like_legacy_prompt_path(v),
522
+ (
523
+ "systemPrompt looks like a file path. It is now always literal text — put file-backed prompts in a "
524
+ "`system-prompt.md` in the harness directory (auto-discovered), or inline the prompt text here."
525
+ ),
526
+ ),
527
+ )
528
+ )
529
+
530
+
531
+ def _max_env_vars(rec: dict[str, str]) -> dict[str, str]:
532
+ if len(rec) > MAX_ENV_VARS:
533
+ raise_issues([((), f"A maximum of {MAX_ENV_VARS} environment variables is allowed")], rec)
534
+ return rec
535
+
536
+
537
+ def _strip_trailing_slash(p: str) -> str:
538
+ return p.removesuffix("/")
539
+
540
+
541
+ # ============================================================================
542
+ # HarnessSpec — per-harness config file schema (harness.json)
543
+ # ============================================================================
544
+
545
+
546
+ class HarnessSpec(ZodModel):
547
+ name: HarnessName
548
+ model: HarnessModel
549
+ # Always literal text (file-backed prompts come from system-prompt.md auto-discovery).
550
+ system_prompt: SystemPrompt | None = None
551
+ tools: Annotated[
552
+ list[HarnessTool],
553
+ array_checks(extra=[unique_by(lambda t: t.name, lambda n: f"Duplicate tool name: {n}")]),
554
+ Field(default_factory=list),
555
+ ]
556
+ skills: list[HarnessSkill] = Field(default_factory=list)
557
+ allowed_tools: list[AllowedTool] | None = None
558
+ memory: HarnessMemoryRef | None = None
559
+ max_iterations: zint(ge=1) | None = None
560
+ max_tokens: zint(ge=1) | None = None
561
+ timeout_seconds: zint(ge=1) | None = None
562
+ truncation: HarnessTruncationConfig | None = None
563
+ container_uri: (
564
+ zstr(
565
+ min=1,
566
+ max=MAX_CONTAINER_URI_LENGTH,
567
+ pattern=CONTAINER_URI_PATTERN,
568
+ pattern_msg="containerUri must be an ECR image URI (12-digit private ECR or public.ecr.aws)",
569
+ )
570
+ | None
571
+ ) = None
572
+ dockerfile: zstr(min=1) | None = None
573
+ execution_role_arn: str | None = None
574
+ network_mode: NetworkMode | None = None
575
+ network_config: NetworkConfig | None = None
576
+ lifecycle_config: LifecycleConfiguration | None = None
577
+ session_storage_path: SessionStorageMountPath | None = None
578
+ efs_access_points: Annotated[list[EfsAccessPointConfig], array_checks(max=2)] | None = None
579
+ s3_access_points: Annotated[list[S3FilesAccessPointConfig], array_checks(max=2)] | None = None
580
+ environment_variables: (
581
+ Annotated[
582
+ dict[zstr(min=1, max=MAX_ENV_VAR_KEY_LENGTH), zstr(max=MAX_ENV_VAR_VALUE_LENGTH)],
583
+ AfterValidator(_max_env_vars),
584
+ ]
585
+ | None
586
+ ) = None
587
+ authorizer_type: RuntimeAuthorizerType | None = None
588
+ authorizer_configuration: AuthorizerConfig | None = None
589
+ connections: list[Connection] | None = None
590
+ tags: Tags | None = None
591
+
592
+ @model_validator(mode="after")
593
+ def _refine(self) -> HarnessSpec:
594
+ issues: list[Issue] = []
595
+ if self.container_uri is not None and self.dockerfile is not None:
596
+ issues.append((("containerUri",), "containerUri and dockerfile are mutually exclusive"))
597
+ if self.network_mode == "VPC" and self.network_config is None:
598
+ issues.append((("networkConfig",), "networkConfig is required when networkMode is VPC"))
599
+ if self.network_mode != "VPC" and self.network_config is not None:
600
+ issues.append((("networkConfig",), "networkConfig is only allowed when networkMode is VPC"))
601
+ if (
602
+ self.network_mode == "VPC"
603
+ and is_container_build(self)
604
+ and self.network_config is not None
605
+ and len(self.network_config.security_groups) > MAX_CONTAINER_BUILD_SECURITY_GROUPS
606
+ ):
607
+ issues.append(
608
+ (
609
+ ("networkConfig", "securityGroups"),
610
+ (
611
+ f"Container builds in VPC mode allow at most {MAX_CONTAINER_BUILD_SECURITY_GROUPS} security "
612
+ "groups (CodeBuild limit)"
613
+ ),
614
+ )
615
+ )
616
+ if (self.efs_access_points or self.s3_access_points) and self.network_mode != "VPC":
617
+ issues.append((("efsAccessPoints",), "efsAccessPoints and s3AccessPoints require networkMode: VPC"))
618
+ mount_paths: list[str] = []
619
+ if self.session_storage_path:
620
+ mount_paths.append(_strip_trailing_slash(self.session_storage_path))
621
+ mount_paths += [_strip_trailing_slash(ap.mount_path) for ap in self.efs_access_points or []]
622
+ mount_paths += [_strip_trailing_slash(ap.mount_path) for ap in self.s3_access_points or []]
623
+ if len(set(mount_paths)) != len(mount_paths):
624
+ issues.append((("efsAccessPoints",), "Filesystem mount paths must be unique"))
625
+ jwt = self.authorizer_configuration.custom_jwt_authorizer if self.authorizer_configuration else None
626
+ if self.authorizer_type == "CUSTOM_JWT" and jwt is None:
627
+ issues.append(
628
+ (
629
+ ("authorizerConfiguration",),
630
+ "authorizerConfiguration with customJwtAuthorizer is required when authorizerType is CUSTOM_JWT",
631
+ )
632
+ )
633
+ if self.authorizer_type != "CUSTOM_JWT" and self.authorizer_configuration is not None:
634
+ issues.append(
635
+ (
636
+ ("authorizerConfiguration",),
637
+ "authorizerConfiguration is only allowed when authorizerType is CUSTOM_JWT",
638
+ )
639
+ )
640
+ raise_issues(issues, self)
641
+ return self
642
+
643
+
644
+ __all__ = [
645
+ "BEDROCK_API_FORMATS",
646
+ "CONTAINER_URI_PATTERN",
647
+ "GATEWAY_OAUTH_GRANT_TYPES",
648
+ "HARNESS_API_FORMATS",
649
+ "HARNESS_MODEL_PROVIDERS",
650
+ "HARNESS_TOOL_TYPES",
651
+ "HARNESS_TRUNCATION_STRATEGIES",
652
+ "MANAGED_MEMORY_STRATEGIES",
653
+ "MAX_CONTAINER_URI_LENGTH",
654
+ "MAX_ENV_VARS",
655
+ "MAX_ENV_VAR_KEY_LENGTH",
656
+ "MAX_ENV_VAR_VALUE_LENGTH",
657
+ "MAX_LITE_LLM_API_BASE_LENGTH",
658
+ "OPEN_AI_API_FORMATS",
659
+ "AgentCoreBrowser",
660
+ "AgentCoreBrowserConfig",
661
+ "AgentCoreCodeInterpreter",
662
+ "AgentCoreCodeInterpreterConfig",
663
+ "AgentCoreGatewayConfig",
664
+ "AllowedTool",
665
+ "BedrockApiFormat",
666
+ "DisabledMemoryRef",
667
+ "EmptyObject",
668
+ "ExistingMemoryRef",
669
+ "GatewayOAuthGrantType",
670
+ "HarnessAgentCoreGateway",
671
+ "HarnessApiFormat",
672
+ "HarnessAwsIamOutboundAuth",
673
+ "HarnessGatewayOAuth",
674
+ "HarnessGatewayOutboundAuth",
675
+ "HarnessMemoryRef",
676
+ "HarnessMemoryRetrievalConfig",
677
+ "HarnessModel",
678
+ "HarnessModelProvider",
679
+ "HarnessName",
680
+ "HarnessNoneOutboundAuth",
681
+ "HarnessOAuthOutboundAuth",
682
+ "HarnessSkill",
683
+ "HarnessSkillAwsSkills",
684
+ "HarnessSkillAwsSkillsSource",
685
+ "HarnessSkillGitAuth",
686
+ "HarnessSkillGitSource",
687
+ "HarnessSkillPathSource",
688
+ "HarnessSkillS3Source",
689
+ "HarnessSpec",
690
+ "HarnessTool",
691
+ "HarnessToolConfig",
692
+ "HarnessToolName",
693
+ "HarnessToolType",
694
+ "HarnessTruncationConfig",
695
+ "HarnessTruncationStrategy",
696
+ "InlineFunction",
697
+ "InlineFunctionConfig",
698
+ "ManagedMemoryRef",
699
+ "ManagedMemoryStrategy",
700
+ "OpenAiApiFormat",
701
+ "RemoteMcp",
702
+ "RemoteMcpConfig",
703
+ "SlidingWindow",
704
+ "SlidingWindowConfig",
705
+ "Summarization",
706
+ "SummarizationConfig",
707
+ "SystemPrompt",
708
+ "looks_like_legacy_prompt_path",
709
+ "validate_api_format",
710
+ ]