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,259 @@
1
+ """Prompt-based port of tui/screens/knowledge-base (AddKnowledgeBaseScreen + AddKnowledgeBaseFlow).
2
+
3
+ Question order: name -> description -> data-source type -> source (S3 URI, or connector config as a
4
+ file path / inline JSON) -> add another? (add / remove a captured source / done) -> confirm.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ import os
11
+ from dataclasses import dataclass
12
+ from typing import TYPE_CHECKING, Any
13
+
14
+ import typer
15
+
16
+ from agentcore.cli import interactive
17
+ from agentcore.cli.commands.add._common import first_issue
18
+ from agentcore.cli.naming import generate_unique_name
19
+ from agentcore.lib.schemas.io.config_io import ConfigIO
20
+ from agentcore.operations.knowledge_base.connector_config import flag_to_wire_type
21
+ from agentcore.schema import KnowledgeBaseName, S3DataSource
22
+
23
+ if TYPE_CHECKING:
24
+ from agentcore.primitives.knowledge_base import KnowledgeBasePrimitive
25
+
26
+ # Sentinel prefix tagging a captured connector config whose value is inline JSON, not a path.
27
+ INLINE_JSON_PREFIX = "\u0000inline-json:"
28
+
29
+ DATA_SOURCE_TYPE_OPTIONS = [
30
+ ("s3", "Amazon S3 — documents in an S3 bucket"),
31
+ ("web-crawler", "Web Crawler — crawl and index web pages"),
32
+ ("confluence", "Confluence — Atlassian Confluence wiki"),
33
+ ("sharepoint", "SharePoint — Microsoft SharePoint documents"),
34
+ ("onedrive", "OneDrive — Microsoft OneDrive files"),
35
+ ("google-drive", "Google Drive — Google Drive files"),
36
+ ]
37
+ DATA_SOURCE_TYPE_LABELS = {
38
+ "s3": "S3",
39
+ "web-crawler": "Web Crawler",
40
+ "confluence": "Confluence",
41
+ "sharepoint": "SharePoint",
42
+ "onedrive": "OneDrive",
43
+ "google-drive": "Google Drive",
44
+ }
45
+
46
+
47
+ @dataclass
48
+ class CapturedDataSource:
49
+ data_source_type: str
50
+ value: str
51
+
52
+
53
+ @dataclass
54
+ class DataSourceGroup:
55
+ data_source_type: str
56
+ values: list[str]
57
+
58
+
59
+ def is_inline_json_value(value: str) -> bool:
60
+ return value.startswith(INLINE_JSON_PREFIX)
61
+
62
+
63
+ def strip_inline_json_prefix(value: str) -> str:
64
+ return value[len(INLINE_JSON_PREFIX) :] if is_inline_json_value(value) else value
65
+
66
+
67
+ def group_data_sources(data_sources: list[CapturedDataSource]) -> list[DataSourceGroup]:
68
+ """Group by type, preserving first-seen-type order across groups and insertion order within."""
69
+ groups: list[DataSourceGroup] = []
70
+ index_by_type: dict[str, int] = {}
71
+ for ds in data_sources:
72
+ idx = index_by_type.get(ds.data_source_type)
73
+ if idx is None:
74
+ index_by_type[ds.data_source_type] = len(groups)
75
+ groups.append(DataSourceGroup(ds.data_source_type, [ds.value]))
76
+ else:
77
+ groups[idx].values.append(ds.value)
78
+ return groups
79
+
80
+
81
+ def materialize_inline_connector_config(
82
+ kb_name: str, data_source_type: str, json_contents: str, config_io: ConfigIO | None = None
83
+ ) -> str:
84
+ """Write inline JSON to ``app/<kbName>/<type>-<n>.json`` (first free n); return the absolute path."""
85
+ parsed = json.loads(json_contents) # parse first: never touch the filesystem on bad input
86
+ pretty = json.dumps(parsed, indent=2, ensure_ascii=False) + "\n"
87
+ project_root = os.path.dirname((config_io or ConfigIO()).get_config_root())
88
+ dest_dir = os.path.join(project_root, "app", kb_name)
89
+ os.makedirs(dest_dir, exist_ok=True)
90
+ n = 1
91
+ while True:
92
+ dest = os.path.join(dest_dir, f"{data_source_type}-{n}.json")
93
+ n += 1
94
+ if not os.path.exists(dest):
95
+ break
96
+ with open(dest, "w", encoding="utf-8") as fh:
97
+ fh.write(pretty)
98
+ return dest
99
+
100
+
101
+ def validate_connector_config_input(value: str, pending_type: str) -> str | None:
102
+ """Port of makeConnectorConfigSchema: a file path, or inline JSON whose type matches."""
103
+ declared = flag_to_wire_type(pending_type)
104
+ if len(value) < 1:
105
+ return "Enter a connector config file path or paste the JSON contents"
106
+ trimmed = value.lstrip()
107
+ if not trimmed.startswith("{") and not trimmed.startswith("["):
108
+ return None
109
+ try:
110
+ parsed: Any = json.loads(trimmed)
111
+ except ValueError:
112
+ return "Looks like JSON but failed to parse. Check brackets and quoting."
113
+ if not parsed or not isinstance(parsed, dict):
114
+ return 'Connector config must be a JSON object (e.g. { "type": "WEB", ... }).'
115
+ if not isinstance(parsed.get("type"), str):
116
+ return 'Connector config is missing a string "type" field.'
117
+ if parsed["type"] != declared:
118
+ return f'Connector config "type" is "{parsed["type"]}" but you picked {pending_type} (expects "{declared}").'
119
+ return None
120
+
121
+
122
+ def _validate_s3_uri(value: str) -> str | None:
123
+ if len(value) < 1 or first_issue(S3DataSource, {"type": "S3", "uri": value}):
124
+ return "Must be a valid s3://bucket[/prefix] URI"
125
+ return None
126
+
127
+
128
+ def _display(ds: CapturedDataSource, kb_name: str | None = None) -> str:
129
+ if is_inline_json_value(ds.value):
130
+ return f"<inline JSON, will save under app/{kb_name or '<kb>'}/>" if kb_name is not None else "<inline JSON>"
131
+ return ds.value
132
+
133
+
134
+ def run_add_knowledge_base_wizard(primitive: KnowledgeBasePrimitive) -> None:
135
+ from agentcore.primitives.knowledge_base import AddKnowledgeBaseOptions
136
+
137
+ existing = [r.name for r in primitive.get_removable()]
138
+ name = interactive.text(
139
+ "Knowledge base name",
140
+ default=generate_unique_name("MyKnowledgeBase", existing),
141
+ validate=lambda v: (
142
+ first_issue(KnowledgeBaseName, v) or ("Knowledge base name already exists" if v in existing else None)
143
+ ),
144
+ )
145
+ description = interactive.text("Description (optional, press Enter to skip)")
146
+
147
+ data_sources: list[CapturedDataSource] = []
148
+ step = "data-source-type"
149
+ pending_type = "s3"
150
+ while True:
151
+ if step == "data-source-type":
152
+ pending_type = interactive.select(
153
+ "Data source type"
154
+ + (
155
+ " (pick the type of the first data source; you can mix types in this run)"
156
+ if not data_sources
157
+ else f" (next data source; {len(data_sources)} already captured)"
158
+ ),
159
+ [interactive.Choice(title, value) for value, title in DATA_SOURCE_TYPE_OPTIONS],
160
+ )
161
+ step = "sources"
162
+ elif step == "sources":
163
+ count = sum(1 for ds in data_sources if ds.data_source_type == pending_type)
164
+ if pending_type == "s3":
165
+ prompt = "S3 URI for data source (e.g. s3://my-bucket/docs/)" if count == 0 else f"S3 URI #{count + 1}"
166
+ value = interactive.text(prompt, validate=_validate_s3_uri)
167
+ data_sources.append(CapturedDataSource(pending_type, value))
168
+ else:
169
+ prompt = (
170
+ f"Connector config for {pending_type} — paste JSON or enter a file path"
171
+ if count == 0
172
+ else f"Connector config #{count + 1}"
173
+ )
174
+ value = interactive.text(
175
+ prompt, validate=lambda v, t=pending_type: validate_connector_config_input(v, t)
176
+ )
177
+ trimmed = value.lstrip()
178
+ is_inline = trimmed.startswith("{") or trimmed.startswith("[")
179
+ data_sources.append(
180
+ CapturedDataSource(pending_type, f"{INLINE_JSON_PREFIX}{trimmed}" if is_inline else value)
181
+ )
182
+ step = "add-another"
183
+ elif step == "add-another":
184
+ types = len({ds.data_source_type for ds in data_sources})
185
+ choices = [interactive.Choice("Add another data source", "add-another")]
186
+ if len(data_sources) > 1:
187
+ choices.append(interactive.Choice("Remove a captured data source", "remove-source"))
188
+ choices.append(interactive.Choice("Done — review and submit", "done"))
189
+ picked = interactive.select(
190
+ f"Add another data source? (currently captured: {len(data_sources)} source(s) across {types} type(s))",
191
+ choices,
192
+ )
193
+ step = {"add-another": "data-source-type", "remove-source": "remove-source", "done": "confirm"}[picked]
194
+ elif step == "remove-source":
195
+ idx = interactive.select(
196
+ "Remove a captured data source",
197
+ [
198
+ interactive.Choice(
199
+ f"{DATA_SOURCE_TYPE_LABELS.get(ds.data_source_type, ds.data_source_type)}: {_display(ds)}", i
200
+ )
201
+ for i, ds in enumerate(data_sources)
202
+ ],
203
+ )
204
+ data_sources.pop(idx)
205
+ step = "add-another" if data_sources else "data-source-type"
206
+ else: # confirm
207
+ typer.echo(f" Name: {name}")
208
+ if description:
209
+ typer.echo(f" Description: {description}")
210
+ typer.echo(f" Data Sources ({len(data_sources)}):")
211
+ for ds in data_sources:
212
+ label = DATA_SOURCE_TYPE_LABELS.get(ds.data_source_type, ds.data_source_type)
213
+ typer.echo(f" {label}: {_display(ds, name)}")
214
+ if interactive.confirm("Confirm", default=True):
215
+ break
216
+ step = "add-another"
217
+
218
+ # Flow: materialize inline JSON, then one primitive.add() per type group (first creates, rest append).
219
+ try:
220
+ materialized = [
221
+ CapturedDataSource(
222
+ ds.data_source_type,
223
+ materialize_inline_connector_config(name, ds.data_source_type, strip_inline_json_prefix(ds.value)),
224
+ )
225
+ if is_inline_json_value(ds.value)
226
+ else ds
227
+ for ds in data_sources
228
+ ]
229
+ except Exception as exc: # noqa: BLE001
230
+ typer.echo("Failed to add knowledge base", err=True)
231
+ typer.echo(f"Failed to save inline connector config: {exc}", err=True)
232
+ raise typer.Exit(1) from None
233
+
234
+ groups = group_data_sources(materialized)
235
+ if not groups:
236
+ typer.echo("Failed to add knowledge base", err=True)
237
+ typer.echo("No data sources captured.", err=True)
238
+ raise typer.Exit(1)
239
+
240
+ total: list[str] = []
241
+ for i, grp in enumerate(groups):
242
+ is_s3 = grp.data_source_type == "s3"
243
+ result = primitive.add(
244
+ AddKnowledgeBaseOptions(
245
+ name=name,
246
+ description=description if i == 0 and description else None,
247
+ data_source_type=grp.data_source_type,
248
+ source=grp.values if is_s3 else [],
249
+ connector_config=[] if is_s3 else grp.values,
250
+ )
251
+ )
252
+ if not result.success:
253
+ typer.echo("Failed to add knowledge base", err=True)
254
+ typer.echo(f"Failed on {grp.data_source_type} group: {result.error}", err=True)
255
+ raise typer.Exit(1)
256
+ total.extend(result.value["newDataSources"])
257
+
258
+ typer.echo(f'Knowledge base "{name}" added')
259
+ typer.echo(f"{len(total)} data source(s). Run 'agentcore deploy' to create the KB and start ingestion.")
@@ -0,0 +1,331 @@
1
+ """Interactive payment wizards: prompt-based port of tui/screens/payment (AddPaymentFlow,
2
+ AddPaymentManagerScreen, AddPaymentConnectorScreen).
3
+
4
+ Manager: auth type -> (CUSTOM_JWT: discovery URL, clients, audiences, scopes) -> name -> advanced
5
+ (auto payment / budget / tool allowlist / network preferences) -> add a connector? -> confirm.
6
+ Connector: manager (when several) -> setup -> credentials -> name -> confirm.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from typing import TYPE_CHECKING, Any
12
+
13
+ import typer
14
+
15
+ from agentcore.cli import interactive
16
+ from agentcore.cli.commands.add._common import first_issue, js_url_ok
17
+ from agentcore.cli.errors import get_error_message
18
+ from agentcore.cli.naming import generate_unique_name
19
+ from agentcore.lib.schemas.io.config_io import to_jsonable
20
+ from agentcore.primitives.payment_validation import (
21
+ strip_wallet_auth_prefix,
22
+ validate_api_key_secret,
23
+ validate_authorization_private_key,
24
+ validate_wallet_secret,
25
+ )
26
+
27
+ if TYPE_CHECKING:
28
+ from agentcore.primitives.payment_connector import PaymentConnectorPrimitive
29
+ from agentcore.primitives.payment_manager import PaymentManagerPrimitive
30
+
31
+ C = interactive.Choice
32
+
33
+
34
+ def _err(check: Any) -> str | None:
35
+ return None if check is True else check
36
+
37
+
38
+ def _csv(value: str) -> list[str] | None:
39
+ items = [s.strip() for s in value.split(",") if s.strip()]
40
+ return items or None
41
+
42
+
43
+ def _mask(value: str) -> str:
44
+ return "****" + value[-4:] if len(value) > 8 else "••••••••"
45
+
46
+
47
+ def _connector_names(primitive: Any, manager: str) -> list[str]:
48
+ try:
49
+ project = to_jsonable(primitive.read_project_spec())
50
+ m = next((p for p in project.get("payments") or [] if p["name"] == manager), None)
51
+ return [c["name"] for c in (m or {}).get("connectors") or []]
52
+ except Exception: # noqa: BLE001
53
+ return []
54
+
55
+
56
+ def _prompt_connector(manager: str, existing_connectors: list[str]) -> dict[str, Any]:
57
+ from agentcore.schema import PaymentConnectorName
58
+
59
+ setup = interactive.select(
60
+ "Choose connector setup (Select how the connector should obtain credentials)",
61
+ [
62
+ C("Quick Create with Coinbase", "quick-create", "Recommended - connect Coinbase after deployment"),
63
+ C("Coinbase CDP credentials", "coinbase-manual", "Use existing Coinbase Developer Platform credentials"),
64
+ C("Stripe + Privy credentials", "stripe-privy-manual", "Use existing Stripe and Privy credentials"),
65
+ ],
66
+ )
67
+ config: dict[str, Any] = {
68
+ "managerName": manager,
69
+ "provisionMode": "QUICK_CREATE" if setup == "quick-create" else "MANUAL",
70
+ "provider": "StripePrivy" if setup == "stripe-privy-manual" else "CoinbaseCDP",
71
+ }
72
+ if setup == "coinbase-manual":
73
+ config["apiKeyId"] = interactive.text(
74
+ "CDP API Key ID", secret=True, validate=lambda v: None if v.strip() else "API Key ID is required"
75
+ ).strip()
76
+ config["apiKeySecret"] = interactive.text(
77
+ "CDP API Key Secret", secret=True, validate=lambda v: _err(validate_api_key_secret(v))
78
+ ).strip()
79
+ config["walletSecret"] = interactive.text(
80
+ "CDP Wallet Secret", secret=True, validate=lambda v: _err(validate_wallet_secret(v))
81
+ ).strip()
82
+ elif setup == "stripe-privy-manual":
83
+ config["appId"] = interactive.text(
84
+ "Privy App ID", secret=True, validate=lambda v: None if v.strip() else "App ID is required"
85
+ ).strip()
86
+ config["appSecret"] = interactive.text(
87
+ "Privy App Secret", secret=True, validate=lambda v: None if v.strip() else "App Secret is required"
88
+ ).strip()
89
+ config["authorizationPrivateKey"] = strip_wallet_auth_prefix(
90
+ interactive.text(
91
+ "Authorization Private Key (ECDSA P-256)",
92
+ secret=True,
93
+ validate=lambda v: _err(validate_authorization_private_key(v)),
94
+ )
95
+ )
96
+ config["authorizationId"] = interactive.text(
97
+ "Authorization ID", secret=True, validate=lambda v: None if v.strip() else "Authorization ID is required"
98
+ ).strip()
99
+ base = "MyStripePrivyConnector" if config["provider"] == "StripePrivy" else "MyCdpConnector"
100
+ config["connectorName"] = interactive.text(
101
+ "Connector name",
102
+ default=generate_unique_name(base, existing_connectors),
103
+ validate=lambda v: (
104
+ first_issue(PaymentConnectorName, v)
105
+ or ("Connector name already exists in this manager" if v in existing_connectors else None)
106
+ ),
107
+ )
108
+ return config
109
+
110
+
111
+ def _connector_fields(config: dict[str, Any]) -> list[tuple[str, str]]:
112
+ fields = [
113
+ ("Connector Name", config["connectorName"]),
114
+ ("Provisioning", "Quick Create" if config["provisionMode"] == "QUICK_CREATE" else "Manual"),
115
+ ("Provider", "Stripe + Privy" if config["provider"] == "StripePrivy" else "Coinbase CDP"),
116
+ ]
117
+ if config["provisionMode"] == "QUICK_CREATE":
118
+ return fields
119
+ if config["provider"] == "StripePrivy":
120
+ keys = (
121
+ ("App ID", "appId"),
122
+ ("App Secret", "appSecret"),
123
+ ("Auth Key", "authorizationPrivateKey"),
124
+ ("Auth ID", "authorizationId"),
125
+ )
126
+ else:
127
+ keys = (("API Key ID", "apiKeyId"), ("API Key Secret", "apiKeySecret"), ("Wallet Secret", "walletSecret"))
128
+ return fields + [(label, _mask(config[key])) for label, key in keys]
129
+
130
+
131
+ def _connector_options(config: dict[str, Any]): # type: ignore[no-untyped-def]
132
+ from agentcore.primitives.payment_connector import AddPaymentConnectorOptions
133
+
134
+ base = {"manager": config["managerName"], "name": config["connectorName"]}
135
+ if config["provisionMode"] == "QUICK_CREATE":
136
+ return AddPaymentConnectorOptions(**base, provider="CoinbaseCDP", provision_mode="QUICK_CREATE")
137
+ if config["provider"] == "StripePrivy":
138
+ return AddPaymentConnectorOptions(
139
+ **base,
140
+ provider="StripePrivy",
141
+ app_id=config["appId"],
142
+ app_secret=config["appSecret"],
143
+ authorization_private_key=config["authorizationPrivateKey"],
144
+ authorization_id=config["authorizationId"],
145
+ )
146
+ return AddPaymentConnectorOptions(
147
+ **base,
148
+ provider="CoinbaseCDP",
149
+ api_key_id=config["apiKeyId"],
150
+ api_key_secret=config["apiKeySecret"],
151
+ wallet_secret=config["walletSecret"],
152
+ )
153
+
154
+
155
+ def run_add_payment_manager_wizard(primitive: PaymentManagerPrimitive) -> None:
156
+ from agentcore.primitives.payment_manager import AddPaymentManagerOptions
157
+ from agentcore.schema import DEFAULT_SPEND_LIMIT, PaymentManagerName
158
+
159
+ existing = primitive.get_existing_managers()
160
+ auth = interactive.select(
161
+ "Select authorization type (How users authenticate to the payment manager)",
162
+ [
163
+ C("AWS IAM", "AWS_IAM", "Use AWS IAM for authorization (default)"),
164
+ C("Custom JWT", "CUSTOM_JWT", "Use a custom JWT authorizer via OIDC discovery"),
165
+ ],
166
+ )
167
+ jwt: dict[str, Any] = {}
168
+ if auth == "CUSTOM_JWT":
169
+
170
+ def validate_url(value: str) -> str | None:
171
+ if not value.strip():
172
+ return "Discovery URL is required for Custom JWT"
173
+ return None if js_url_ok(value.strip()) else "Must be a valid URL"
174
+
175
+ jwt["discoveryUrl"] = interactive.text("OIDC Discovery URL", validate=validate_url).strip()
176
+ jwt["allowedClients"] = interactive.text("Allowed client IDs (comma-separated, leave empty to skip)")
177
+ jwt["allowedAudience"] = interactive.text("Allowed audiences (comma-separated, leave empty to skip)")
178
+ jwt["allowedScopes"] = interactive.text("Allowed scopes (comma-separated, leave empty to skip)")
179
+
180
+ name = interactive.text(
181
+ "Payment manager name",
182
+ default=generate_unique_name("MyPaymentManager", existing),
183
+ validate=lambda v: (
184
+ first_issue(PaymentManagerName, v) or ("Payment manager name already exists" if v in existing else None)
185
+ ),
186
+ )
187
+
188
+ spend_limit = DEFAULT_SPEND_LIMIT
189
+ advanced = interactive.checkbox(
190
+ "Advanced Configuration",
191
+ [
192
+ C("Auto Payment", "auto-payment"),
193
+ C(f"Edit Default Budget (Current: ${spend_limit})", "default-budget"),
194
+ C("Edit Tool Allowlist", "tool-allowlist"),
195
+ C("Edit Network Preferences", "network-preferences"),
196
+ ],
197
+ checked=["auto-payment"],
198
+ )
199
+ auto_payment = "auto-payment" in advanced
200
+ tool_allowlist: str | None = None
201
+ network_preferences: str | None = None
202
+ if "default-budget" in advanced:
203
+ typer.echo(f"Auto Payment: {'✓ Enabled' if auto_payment else '✗ Disabled'}")
204
+
205
+ def validate_limit(value: str) -> str | None:
206
+ if not value.strip():
207
+ return None
208
+ try:
209
+ num = float(value.strip())
210
+ except ValueError:
211
+ return "Must be a valid positive number"
212
+ return "Must be a valid positive number" if num != num or num < 0 else None
213
+
214
+ spend_limit = (
215
+ interactive.text("Default Spend Limit (USD)", default=spend_limit, validate=validate_limit) or "10.00"
216
+ )
217
+ typer.echo(
218
+ "Used only for sessions created by `invoke --auto-session`. It is not a deployed-agent budget — sessions "
219
+ "your agent creates at runtime set their own limit."
220
+ )
221
+ if "tool-allowlist" in advanced:
222
+ tool_allowlist = interactive.text("Tool Allowlist (comma-separated, leave empty to allow all)").strip() or None
223
+ if "network-preferences" in advanced:
224
+ network_preferences = (
225
+ interactive.text("Network Preferences (comma-separated, e.g. eip155:84532)").strip() or None
226
+ )
227
+
228
+ connector: dict[str, Any] | None = None
229
+ choice = interactive.select(
230
+ "Add a payment connector?",
231
+ [
232
+ C("Add a payment connector", "add-connector", "Link CoinbaseCDP or StripePrivy credentials"),
233
+ C("Skip for now", "skip"),
234
+ ],
235
+ )
236
+ if choice == "add-connector":
237
+ connector = _prompt_connector(name, [])
238
+
239
+ rows = [
240
+ ("Auth Type", auth),
241
+ ("Manager Name", name),
242
+ ("Auto Payment", "Enabled" if auto_payment else "Disabled"),
243
+ ("Default Spend Limit", f"${spend_limit}"),
244
+ ]
245
+ if tool_allowlist:
246
+ rows.append(("Tool Allowlist", tool_allowlist))
247
+ if network_preferences:
248
+ rows.append(("Network Preferences", network_preferences))
249
+ if connector:
250
+ rows += _connector_fields(connector)
251
+ if auto_payment:
252
+ rows.append(
253
+ (
254
+ "⚠ Warning",
255
+ f"Auto-payment ENABLED — agent settles 402s automatically up to ${spend_limit}/session with no "
256
+ "human approval",
257
+ )
258
+ )
259
+ if not connector:
260
+ rows.append(("⚠ Warning", "No connector — deploy will fail until you add one"))
261
+ for label, value in rows:
262
+ typer.echo(f" {label}: {value}")
263
+ if not interactive.confirm("Create payment manager?", default=True):
264
+ typer.echo("Cancelled.")
265
+ return
266
+
267
+ custom = auth == "CUSTOM_JWT"
268
+ result = primitive.add(
269
+ AddPaymentManagerOptions(
270
+ name=name,
271
+ authorizer_type=auth,
272
+ discovery_url=jwt.get("discoveryUrl") if custom else None,
273
+ allowed_clients=_csv(jwt.get("allowedClients", "")) if custom else None,
274
+ allowed_audience=_csv(jwt.get("allowedAudience", "")) if custom else None,
275
+ allowed_scopes=_csv(jwt.get("allowedScopes", "")) if custom else None,
276
+ auto_payment=auto_payment,
277
+ default_spend_limit=spend_limit,
278
+ payment_tool_allowlist=_csv(tool_allowlist) if tool_allowlist else None,
279
+ network_preferences=_csv(network_preferences) if network_preferences else None,
280
+ )
281
+ )
282
+ if not result.success:
283
+ typer.echo(f"Error: {get_error_message(result.error)}", err=True)
284
+ raise typer.Exit(1)
285
+ if connector:
286
+ from agentcore.primitives.payment_connector import PRIMITIVE as connector_primitive
287
+
288
+ conn = connector_primitive.add(_connector_options(connector))
289
+ if not conn.success:
290
+ typer.echo(
291
+ f'Error: Manager "{name}" was created, but connector failed: {get_error_message(conn.error)}\n\n'
292
+ 'Use "Add a payment connector" to retry adding the connector.',
293
+ err=True,
294
+ )
295
+ raise typer.Exit(1)
296
+ typer.echo(f'Payment manager "{name}" and connector "{connector["connectorName"]}" created')
297
+ else:
298
+ typer.echo(f'Payment manager "{name}" created')
299
+
300
+
301
+ def run_add_payment_connector_wizard(primitive: PaymentConnectorPrimitive) -> None:
302
+ from agentcore.primitives.payment_manager import PRIMITIVE as manager_primitive
303
+
304
+ managers = manager_primitive.get_existing_managers()
305
+ if not managers:
306
+ typer.echo("Error: No payment managers exist. Create a manager first.", err=True)
307
+ raise typer.Exit(1)
308
+ manager = (
309
+ managers[0]
310
+ if len(managers) == 1
311
+ else interactive.select(
312
+ "Select payment manager (Which manager should this connector be added to?)",
313
+ [C(m, m) for m in managers],
314
+ )
315
+ )
316
+ config = _prompt_connector(manager, _connector_names(primitive, manager))
317
+ for label, value in [("Manager", manager), *_connector_fields(config)]:
318
+ typer.echo(f" {label}: {value}")
319
+ if not interactive.confirm("Create payment connector?", default=True):
320
+ typer.echo("Cancelled.")
321
+ return
322
+ result = primitive.add(_connector_options(config))
323
+ if not result.success:
324
+ typer.echo(f"Error: {get_error_message(result.error)}", err=True)
325
+ raise typer.Exit(1)
326
+ typer.echo(f"Added payment connector: {result.value['connectorName']}")
327
+ if config["provisionMode"] == "QUICK_CREATE":
328
+ typer.echo("Run `agentcore deploy` to create the connector and receive its authorization URL.")
329
+
330
+
331
+ __all__ = ["run_add_payment_connector_wizard", "run_add_payment_manager_wizard"]