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.
- agentcore/__init__.py +1 -0
- agentcore/agent_inspector/NOTICE +9 -0
- agentcore/agent_inspector/favicon.svg +60 -0
- agentcore/agent_inspector/index.css +1 -0
- agentcore/agent_inspector/index.html +14 -0
- agentcore/agent_inspector/index.js +289 -0
- agentcore/assets/AGENTS.md +60 -0
- agentcore/assets/README.md +108 -0
- agentcore/assets/agents/AGENTS.md +218 -0
- agentcore/assets/cdk/.prettierrc +8 -0
- agentcore/assets/cdk/README.md +26 -0
- agentcore/assets/cdk/bin/cdk.ts +216 -0
- agentcore/assets/cdk/cdk.json +88 -0
- agentcore/assets/cdk/gitignore.template +9 -0
- agentcore/assets/cdk/jest.config.js +9 -0
- agentcore/assets/cdk/lib/cdk-stack.ts +291 -0
- agentcore/assets/cdk/npmignore.template +6 -0
- agentcore/assets/cdk/package.json +30 -0
- agentcore/assets/cdk/test/cdk.test.ts +31 -0
- agentcore/assets/cdk/tsconfig.json +28 -0
- agentcore/assets/container/python/Dockerfile +47 -0
- agentcore/assets/container/python/dockerignore.template +27 -0
- agentcore/assets/container/typescript/Dockerfile +25 -0
- agentcore/assets/container/typescript/dockerignore.template +24 -0
- agentcore/assets/datasets/predefined-v1.jsonl +3 -0
- agentcore/assets/datasets/simulated-v1.jsonl +3 -0
- agentcore/assets/evaluators/autoevals-lambda/execution-role-policy.json +15 -0
- agentcore/assets/evaluators/autoevals-lambda/lambda_function.py +37 -0
- agentcore/assets/evaluators/autoevals-lambda/pyproject.toml +22 -0
- agentcore/assets/evaluators/deepeval-lambda/execution-role-policy.json +15 -0
- agentcore/assets/evaluators/deepeval-lambda/lambda_function.py +29 -0
- agentcore/assets/evaluators/deepeval-lambda/pyproject.toml +19 -0
- agentcore/assets/evaluators/python-lambda/execution-role-policy.json +10 -0
- agentcore/assets/evaluators/python-lambda/lambda_function.py +19 -0
- agentcore/assets/evaluators/python-lambda/pyproject.toml +15 -0
- agentcore/assets/harness/invoke.py.template +74 -0
- agentcore/assets/mcp/python/README.md +27 -0
- agentcore/assets/mcp/python/pyproject.toml +22 -0
- agentcore/assets/mcp/python/server.py +117 -0
- agentcore/assets/mcp/python-lambda/README.md +22 -0
- agentcore/assets/mcp/python-lambda/handler.py +144 -0
- agentcore/assets/mcp/python-lambda/pyproject.toml +15 -0
- agentcore/assets/python/a2a/googleadk/base/README.md +22 -0
- agentcore/assets/python/a2a/googleadk/base/gitignore.template +41 -0
- agentcore/assets/python/a2a/googleadk/base/main.py +124 -0
- agentcore/assets/python/a2a/googleadk/base/model/__init__.py +1 -0
- agentcore/assets/python/a2a/googleadk/base/model/load.py +41 -0
- agentcore/assets/python/a2a/googleadk/base/pyproject.toml +22 -0
- agentcore/assets/python/a2a/langchain_langgraph/base/README.md +22 -0
- agentcore/assets/python/a2a/langchain_langgraph/base/gitignore.template +41 -0
- agentcore/assets/python/a2a/langchain_langgraph/base/main.py +144 -0
- agentcore/assets/python/a2a/langchain_langgraph/base/model/__init__.py +1 -0
- agentcore/assets/python/a2a/langchain_langgraph/base/model/load.py +123 -0
- agentcore/assets/python/a2a/langchain_langgraph/base/pyproject.toml +26 -0
- agentcore/assets/python/a2a/strands/base/README.md +22 -0
- agentcore/assets/python/a2a/strands/base/gitignore.template +41 -0
- agentcore/assets/python/a2a/strands/base/main.py +113 -0
- agentcore/assets/python/a2a/strands/base/model/__init__.py +1 -0
- agentcore/assets/python/a2a/strands/base/model/load.py +123 -0
- agentcore/assets/python/a2a/strands/base/pyproject.toml +23 -0
- agentcore/assets/python/a2a/strands/capabilities/memory/__init__.py +1 -0
- agentcore/assets/python/a2a/strands/capabilities/memory/session.py +46 -0
- agentcore/assets/python/agui/googleadk/base/README.md +30 -0
- agentcore/assets/python/agui/googleadk/base/gitignore.template +41 -0
- agentcore/assets/python/agui/googleadk/base/main.py +91 -0
- agentcore/assets/python/agui/googleadk/base/model/__init__.py +1 -0
- agentcore/assets/python/agui/googleadk/base/model/load.py +41 -0
- agentcore/assets/python/agui/googleadk/base/pyproject.toml +25 -0
- agentcore/assets/python/agui/langchain_langgraph/base/README.md +22 -0
- agentcore/assets/python/agui/langchain_langgraph/base/gitignore.template +41 -0
- agentcore/assets/python/agui/langchain_langgraph/base/main.py +130 -0
- agentcore/assets/python/agui/langchain_langgraph/base/model/__init__.py +1 -0
- agentcore/assets/python/agui/langchain_langgraph/base/model/load.py +123 -0
- agentcore/assets/python/agui/langchain_langgraph/base/pyproject.toml +31 -0
- agentcore/assets/python/agui/strands/base/README.md +22 -0
- agentcore/assets/python/agui/strands/base/gitignore.template +41 -0
- agentcore/assets/python/agui/strands/base/main.py +105 -0
- agentcore/assets/python/agui/strands/base/model/__init__.py +1 -0
- agentcore/assets/python/agui/strands/base/model/load.py +123 -0
- agentcore/assets/python/agui/strands/base/pyproject.toml +27 -0
- agentcore/assets/python/agui/strands/capabilities/memory/__init__.py +1 -0
- agentcore/assets/python/agui/strands/capabilities/memory/session.py +46 -0
- agentcore/assets/python/http/autogen/base/README.md +45 -0
- agentcore/assets/python/http/autogen/base/gitignore.template +41 -0
- agentcore/assets/python/http/autogen/base/main.py +145 -0
- agentcore/assets/python/http/autogen/base/mcp_client/__init__.py +1 -0
- agentcore/assets/python/http/autogen/base/mcp_client/client.py +28 -0
- agentcore/assets/python/http/autogen/base/model/__init__.py +1 -0
- agentcore/assets/python/http/autogen/base/model/load.py +136 -0
- agentcore/assets/python/http/autogen/base/pyproject.toml +34 -0
- agentcore/assets/python/http/bma/base/Dockerfile +41 -0
- agentcore/assets/python/http/bma/base/README.md +178 -0
- agentcore/assets/python/http/bma/base/client.py +200 -0
- agentcore/assets/python/http/bma/base/lifecycle/server.py +641 -0
- agentcore/assets/python/http/bma/base/otel/collector.yaml +69 -0
- agentcore/assets/python/http/bma/base/plugins/acr-report/.codex-plugin/plugin.json +6 -0
- agentcore/assets/python/http/bma/base/plugins/acr-report/skills/acr-report/SKILL.md +16 -0
- agentcore/assets/python/http/bma/base/policies/bma-acr-policy.json +11 -0
- agentcore/assets/python/http/bma/base/policies/bma-session-policy.json +35 -0
- agentcore/assets/python/http/bma/base/policies/bma-session-trust.json +20 -0
- agentcore/assets/python/http/bma/base/pyproject.toml +21 -0
- agentcore/assets/python/http/googleadk/base/README.md +45 -0
- agentcore/assets/python/http/googleadk/base/gitignore.template +41 -0
- agentcore/assets/python/http/googleadk/base/main.py +207 -0
- agentcore/assets/python/http/googleadk/base/mcp_client/__init__.py +1 -0
- agentcore/assets/python/http/googleadk/base/mcp_client/client.py +75 -0
- agentcore/assets/python/http/googleadk/base/model/__init__.py +1 -0
- agentcore/assets/python/http/googleadk/base/model/load.py +41 -0
- agentcore/assets/python/http/googleadk/base/pyproject.toml +24 -0
- agentcore/assets/python/http/langchain_langgraph/base/README.md +45 -0
- agentcore/assets/python/http/langchain_langgraph/base/gitignore.template +41 -0
- agentcore/assets/python/http/langchain_langgraph/base/main.py +227 -0
- agentcore/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +1 -0
- agentcore/assets/python/http/langchain_langgraph/base/mcp_client/client.py +79 -0
- agentcore/assets/python/http/langchain_langgraph/base/model/__init__.py +1 -0
- agentcore/assets/python/http/langchain_langgraph/base/model/load.py +123 -0
- agentcore/assets/python/http/langchain_langgraph/base/pyproject.toml +38 -0
- agentcore/assets/python/http/openaiagents/base/README.md +45 -0
- agentcore/assets/python/http/openaiagents/base/gitignore.template +41 -0
- agentcore/assets/python/http/openaiagents/base/main.py +200 -0
- agentcore/assets/python/http/openaiagents/base/mcp_client/__init__.py +1 -0
- agentcore/assets/python/http/openaiagents/base/mcp_client/client.py +74 -0
- agentcore/assets/python/http/openaiagents/base/model/__init__.py +1 -0
- agentcore/assets/python/http/openaiagents/base/model/load.py +37 -0
- agentcore/assets/python/http/openaiagents/base/pyproject.toml +21 -0
- agentcore/assets/python/http/strands/base/README.md +46 -0
- agentcore/assets/python/http/strands/base/gitignore.template +41 -0
- agentcore/assets/python/http/strands/base/main.py +714 -0
- agentcore/assets/python/http/strands/base/mcp_client/__init__.py +1 -0
- agentcore/assets/python/http/strands/base/mcp_client/client.py +116 -0
- agentcore/assets/python/http/strands/base/model/__init__.py +1 -0
- agentcore/assets/python/http/strands/base/model/load.py +239 -0
- agentcore/assets/python/http/strands/base/model/mantle_compat.py +21 -0
- agentcore/assets/python/http/strands/base/pyproject.toml +31 -0
- agentcore/assets/python/http/strands/base/skills/fetcher.py +279 -0
- agentcore/assets/python/http/strands/capabilities/execution-limits/hooks/execution_limits.py +54 -0
- agentcore/assets/python/http/strands/capabilities/memory/__init__.py +1 -0
- agentcore/assets/python/http/strands/capabilities/memory/session.py +47 -0
- agentcore/assets/python/http/strands/capabilities/payments/__init__.py +4 -0
- agentcore/assets/python/http/strands/capabilities/payments/payments.py +142 -0
- agentcore/assets/python/mcp/standalone/base/README.md +36 -0
- agentcore/assets/python/mcp/standalone/base/gitignore.template +41 -0
- agentcore/assets/python/mcp/standalone/base/main.py +83 -0
- agentcore/assets/python/mcp/standalone/base/pyproject.toml +16 -0
- agentcore/assets/typescript/.gitkeep +0 -0
- agentcore/assets/typescript/http/strands/base/README.md +42 -0
- agentcore/assets/typescript/http/strands/base/gitignore.template +22 -0
- agentcore/assets/typescript/http/strands/base/main.ts +149 -0
- agentcore/assets/typescript/http/strands/base/mcp_client/client.ts +11 -0
- agentcore/assets/typescript/http/strands/base/model/load.ts +102 -0
- agentcore/assets/typescript/http/strands/base/package.json +38 -0
- agentcore/assets/typescript/http/strands/base/tsconfig.json +19 -0
- agentcore/assets/typescript/http/strands/capabilities/memory/memory.ts +52 -0
- agentcore/assets/typescript/http/vercelai/base/README.md +42 -0
- agentcore/assets/typescript/http/vercelai/base/gitignore.template +22 -0
- agentcore/assets/typescript/http/vercelai/base/main.ts +70 -0
- agentcore/assets/typescript/http/vercelai/base/model/load.ts +121 -0
- agentcore/assets/typescript/http/vercelai/base/package.json +35 -0
- agentcore/assets/typescript/http/vercelai/base/tsconfig.json +19 -0
- agentcore/aws/__init__.py +263 -0
- agentcore/aws/_aws_errors.py +72 -0
- agentcore/aws/_http.py +176 -0
- agentcore/aws/_util.py +37 -0
- agentcore/aws/account.py +165 -0
- agentcore/aws/agentcore.py +971 -0
- agentcore/aws/agentcore_ab_tests.py +230 -0
- agentcore/aws/agentcore_batch_evaluation.py +227 -0
- agentcore/aws/agentcore_config_bundles.py +220 -0
- agentcore/aws/agentcore_control.py +994 -0
- agentcore/aws/agentcore_datasets.py +222 -0
- agentcore/aws/agentcore_harness.py +330 -0
- agentcore/aws/agentcore_payments.py +430 -0
- agentcore/aws/agentcore_recommendation.py +140 -0
- agentcore/aws/agui_parser.py +131 -0
- agentcore/aws/agui_types.py +342 -0
- agentcore/aws/api_client.py +87 -0
- agentcore/aws/arn.py +18 -0
- agentcore/aws/aws_context.py +23 -0
- agentcore/aws/bedrock.py +44 -0
- agentcore/aws/bedrock_agent.py +129 -0
- agentcore/aws/bedrock_import.py +252 -0
- agentcore/aws/bedrock_import_types.py +111 -0
- agentcore/aws/cloudwatch.py +136 -0
- agentcore/aws/connect_shell.py +266 -0
- agentcore/aws/iam.py +41 -0
- agentcore/aws/partition.py +58 -0
- agentcore/aws/policy_generation.py +116 -0
- agentcore/aws/region.py +54 -0
- agentcore/aws/retry.py +27 -0
- agentcore/aws/shell_framer.py +136 -0
- agentcore/aws/stage_endpoint.py +39 -0
- agentcore/aws/target_region.py +54 -0
- agentcore/aws/transaction_search.py +97 -0
- agentcore/cdk/__init__.py +10 -0
- agentcore/cdk/constants.py +13 -0
- agentcore/cdk/local_cdk_project.py +48 -0
- agentcore/cdk/toolkit.py +706 -0
- agentcore/cli/__init__.py +0 -0
- agentcore/cli/commands/__init__.py +0 -0
- agentcore/cli/commands/_jobs_common.py +39 -0
- agentcore/cli/commands/_run_wizards.py +639 -0
- agentcore/cli/commands/add/__init__.py +37 -0
- agentcore/cli/commands/add/_commander.py +52 -0
- agentcore/cli/commands/add/_common.py +47 -0
- agentcore/cli/commands/add/agent_wizard.py +528 -0
- agentcore/cli/commands/add/auth_options.py +154 -0
- agentcore/cli/commands/add/skill_action.py +105 -0
- agentcore/cli/commands/add/skill_command.py +87 -0
- agentcore/cli/commands/add/tool_action.py +160 -0
- agentcore/cli/commands/add/tool_command.py +117 -0
- agentcore/cli/commands/add/validate.py +333 -0
- agentcore/cli/commands/capacity_provider/__init__.py +86 -0
- agentcore/cli/commands/capacity_provider/action.py +114 -0
- agentcore/cli/commands/capacity_provider/constants.py +22 -0
- agentcore/cli/commands/config.py +91 -0
- agentcore/cli/commands/config_bundle.py +251 -0
- agentcore/cli/commands/create/__init__.py +643 -0
- agentcore/cli/commands/create/action.py +406 -0
- agentcore/cli/commands/create/dependencies.py +91 -0
- agentcore/cli/commands/create/harness_validate.py +82 -0
- agentcore/cli/commands/create/validate.py +195 -0
- agentcore/cli/commands/create/wizard.py +127 -0
- agentcore/cli/commands/dataset.py +119 -0
- agentcore/cli/commands/deploy/__init__.py +31 -0
- agentcore/cli/commands/deploy/_guards.py +25 -0
- agentcore/cli/commands/deploy/actions.py +840 -0
- agentcore/cli/commands/deploy/command.py +349 -0
- agentcore/cli/commands/deploy/progress.py +115 -0
- agentcore/cli/commands/deploy/types.py +68 -0
- agentcore/cli/commands/deploy/utils.py +43 -0
- agentcore/cli/commands/deploy/validate.py +21 -0
- agentcore/cli/commands/dev/__init__.py +5 -0
- agentcore/cli/commands/dev/_deps.py +50 -0
- agentcore/cli/commands/dev/browser_mode.py +270 -0
- agentcore/cli/commands/dev/command.py +450 -0
- agentcore/cli/commands/dev/terminal_mode.py +379 -0
- agentcore/cli/commands/exec/__init__.py +29 -0
- agentcore/cli/commands/exec/action.py +442 -0
- agentcore/cli/commands/exec/command.py +206 -0
- agentcore/cli/commands/exec/types.py +35 -0
- agentcore/cli/commands/export/__init__.py +114 -0
- agentcore/cli/commands/export/constants.py +21 -0
- agentcore/cli/commands/export/fetch_harness_spec.py +234 -0
- agentcore/cli/commands/export/harness_action.py +385 -0
- agentcore/cli/commands/export/harness_mapper.py +868 -0
- agentcore/cli/commands/export/harness_resolver.py +95 -0
- agentcore/cli/commands/export/types.py +90 -0
- agentcore/cli/commands/export/wizard.py +97 -0
- agentcore/cli/commands/feedback/__init__.py +69 -0
- agentcore/cli/commands/feedback/action.py +30 -0
- agentcore/cli/commands/feedback/consent_prompt.py +35 -0
- agentcore/cli/commands/feedback/wizard.py +49 -0
- agentcore/cli/commands/fetch/__init__.py +69 -0
- agentcore/cli/commands/fetch/action.py +62 -0
- agentcore/cli/commands/help.py +65 -0
- agentcore/cli/commands/import_/__init__.py +167 -0
- agentcore/cli/commands/import_/_js.py +72 -0
- agentcore/cli/commands/import_/actions.py +457 -0
- agentcore/cli/commands/import_/constants.py +45 -0
- agentcore/cli/commands/import_/import_evaluator.py +140 -0
- agentcore/cli/commands/import_/import_gateway.py +520 -0
- agentcore/cli/commands/import_/import_memory.py +128 -0
- agentcore/cli/commands/import_/import_online_eval.py +165 -0
- agentcore/cli/commands/import_/import_pipeline.py +145 -0
- agentcore/cli/commands/import_/import_runtime.py +214 -0
- agentcore/cli/commands/import_/import_utils.py +410 -0
- agentcore/cli/commands/import_/phase1_update.py +110 -0
- agentcore/cli/commands/import_/phase2_import.py +206 -0
- agentcore/cli/commands/import_/resource_import.py +228 -0
- agentcore/cli/commands/import_/template_utils.py +148 -0
- agentcore/cli/commands/import_/types.py +150 -0
- agentcore/cli/commands/import_/yaml_parser.py +265 -0
- agentcore/cli/commands/init.py +196 -0
- agentcore/cli/commands/invoke/__init__.py +32 -0
- agentcore/cli/commands/invoke/_deps.py +73 -0
- agentcore/cli/commands/invoke/action.py +840 -0
- agentcore/cli/commands/invoke/command.py +490 -0
- agentcore/cli/commands/invoke/constants.py +40 -0
- agentcore/cli/commands/invoke/guards.py +23 -0
- agentcore/cli/commands/invoke/interactive.py +604 -0
- agentcore/cli/commands/invoke/resolve.py +149 -0
- agentcore/cli/commands/invoke/resolve_prompt.py +60 -0
- agentcore/cli/commands/invoke/types.py +61 -0
- agentcore/cli/commands/invoke/validate.py +33 -0
- agentcore/cli/commands/job_actions.py +239 -0
- agentcore/cli/commands/job_history.py +380 -0
- agentcore/cli/commands/logs/__init__.py +53 -0
- agentcore/cli/commands/logs/action.py +159 -0
- agentcore/cli/commands/logs/filter_pattern.py +17 -0
- agentcore/cli/commands/logs/guards.py +51 -0
- agentcore/cli/commands/logs_evals.py +42 -0
- agentcore/cli/commands/package.py +118 -0
- agentcore/cli/commands/remove/__init__.py +172 -0
- agentcore/cli/commands/remove/skill_command.py +131 -0
- agentcore/cli/commands/remove/tool_command.py +59 -0
- agentcore/cli/commands/run.py +808 -0
- agentcore/cli/commands/run_ingest.py +97 -0
- agentcore/cli/commands/shared/__init__.py +0 -0
- agentcore/cli/commands/shared/arn_utils.py +9 -0
- agentcore/cli/commands/shared/filesystem_utils.py +421 -0
- agentcore/cli/commands/shared/header_utils.py +87 -0
- agentcore/cli/commands/shared/indexed_key_parser.py +76 -0
- agentcore/cli/commands/shared/lifecycle_utils.py +72 -0
- agentcore/cli/commands/shared/region_utils.py +20 -0
- agentcore/cli/commands/shared/vpc_utils.py +99 -0
- agentcore/cli/commands/status/__init__.py +30 -0
- agentcore/cli/commands/status/_guards.py +25 -0
- agentcore/cli/commands/status/action.py +741 -0
- agentcore/cli/commands/status/command.py +321 -0
- agentcore/cli/commands/status/constants.py +36 -0
- agentcore/cli/commands/status/format_knowledge_base.py +111 -0
- agentcore/cli/commands/telemetry.py +79 -0
- agentcore/cli/commands/traces/__init__.py +155 -0
- agentcore/cli/commands/traces/action.py +123 -0
- agentcore/cli/commands/update/__init__.py +63 -0
- agentcore/cli/commands/update/action.py +164 -0
- agentcore/cli/commands/validate.py +165 -0
- agentcore/cli/constants.py +96 -0
- agentcore/cli/errors.py +118 -0
- agentcore/cli/external_requirements/__init__.py +67 -0
- agentcore/cli/external_requirements/checks.py +280 -0
- agentcore/cli/external_requirements/detect.py +55 -0
- agentcore/cli/external_requirements/versions.py +57 -0
- agentcore/cli/groups.py +23 -0
- agentcore/cli/interactive.py +85 -0
- agentcore/cli/main.py +137 -0
- agentcore/cli/naming.py +11 -0
- agentcore/cli/notices.py +42 -0
- agentcore/cli/project.py +34 -0
- agentcore/cli/run_command.py +27 -0
- agentcore/cli/tree.py +135 -0
- agentcore/cli/update_notifier.py +123 -0
- agentcore/cli/variadic.py +50 -0
- agentcore/cloudformation/__init__.py +84 -0
- agentcore/cloudformation/bootstrap.py +64 -0
- agentcore/cloudformation/logical_ids.py +37 -0
- agentcore/cloudformation/outputs.py +566 -0
- agentcore/cloudformation/stack_discovery.py +75 -0
- agentcore/cloudformation/stack_events.py +107 -0
- agentcore/cloudformation/stack_status.py +98 -0
- agentcore/cloudformation/types.py +44 -0
- agentcore/lib/__init__.py +68 -0
- agentcore/lib/constants.py +77 -0
- agentcore/lib/dependency_management/__init__.py +23 -0
- agentcore/lib/dependency_management/messages.py +92 -0
- agentcore/lib/dependency_management/plan.py +98 -0
- agentcore/lib/dependency_management/semver.py +137 -0
- agentcore/lib/dependency_management/sync.py +139 -0
- agentcore/lib/dependency_management/types.py +56 -0
- agentcore/lib/errors/__init__.py +5 -0
- agentcore/lib/errors/types.py +352 -0
- agentcore/lib/errors/validation.py +121 -0
- agentcore/lib/packaging/__init__.py +81 -0
- agentcore/lib/packaging/build_args.py +23 -0
- agentcore/lib/packaging/build_context.py +26 -0
- agentcore/lib/packaging/build_context_dockerignore.py +45 -0
- agentcore/lib/packaging/container.py +95 -0
- agentcore/lib/packaging/helpers.py +289 -0
- agentcore/lib/packaging/node.py +153 -0
- agentcore/lib/packaging/python.py +135 -0
- agentcore/lib/packaging/types.py +69 -0
- agentcore/lib/packaging/uv.py +45 -0
- agentcore/lib/result.py +104 -0
- agentcore/lib/schemas/__init__.py +1 -0
- agentcore/lib/schemas/io/__init__.py +27 -0
- agentcore/lib/schemas/io/config_io.py +458 -0
- agentcore/lib/schemas/io/global_config.py +239 -0
- agentcore/lib/schemas/io/path_resolver.py +132 -0
- agentcore/lib/secrets/__init__.py +18 -0
- agentcore/lib/secrets/cipher.py +70 -0
- agentcore/lib/secrets/key_provider.py +163 -0
- agentcore/lib/secrets/sensitive_keys.py +55 -0
- agentcore/lib/time_constants.py +4 -0
- agentcore/lib/utils/__init__.py +47 -0
- agentcore/lib/utils/aws_account.py +15 -0
- agentcore/lib/utils/credentials.py +68 -0
- agentcore/lib/utils/dotenv.py +32 -0
- agentcore/lib/utils/env.py +105 -0
- agentcore/lib/utils/json_format.py +29 -0
- agentcore/lib/utils/json_rpc.py +22 -0
- agentcore/lib/utils/platform.py +33 -0
- agentcore/lib/utils/polling.py +86 -0
- agentcore/lib/utils/subprocess.py +135 -0
- agentcore/lib/utils/time_parser.py +48 -0
- agentcore/lib/utils/validation.py +106 -0
- agentcore/logging/__init__.py +10 -0
- agentcore/logging/_common.py +77 -0
- agentcore/logging/cdk_io_host.py +36 -0
- agentcore/logging/create_logger.py +107 -0
- agentcore/logging/dev_logger.py +63 -0
- agentcore/logging/exec_logger.py +159 -0
- agentcore/logging/invoke_logger.py +154 -0
- agentcore/logging/remove_logger.py +95 -0
- agentcore/operations/__init__.py +0 -0
- agentcore/operations/agent/__init__.py +0 -0
- agentcore/operations/agent/config_bundle_defaults.py +31 -0
- agentcore/operations/agent/generate/__init__.py +28 -0
- agentcore/operations/agent/generate/schema_mapper.py +319 -0
- agentcore/operations/agent/generate/types.py +172 -0
- agentcore/operations/agent/generate/write_agent_to_project.py +67 -0
- agentcore/operations/agent/import_/__init__.py +31 -0
- agentcore/operations/agent/import_/base_translator.py +449 -0
- agentcore/operations/agent/import_/constants.py +23 -0
- agentcore/operations/agent/import_/execute.py +127 -0
- agentcore/operations/agent/import_/langgraph_translator.py +294 -0
- agentcore/operations/agent/import_/pyproject_generator.py +73 -0
- agentcore/operations/agent/import_/strands_translator.py +289 -0
- agentcore/operations/config_bundle/__init__.py +1 -0
- agentcore/operations/config_bundle/bundle_name_variants.py +9 -0
- agentcore/operations/config_bundle/diff_versions.py +52 -0
- agentcore/operations/config_bundle/resolve_bundle.py +65 -0
- agentcore/operations/connectors/__init__.py +3 -0
- agentcore/operations/connectors/translators.py +63 -0
- agentcore/operations/dataset/__init__.py +21 -0
- agentcore/operations/dataset/delete.py +7 -0
- agentcore/operations/dataset/publish.py +16 -0
- agentcore/operations/dataset/pull.py +21 -0
- agentcore/operations/dataset/push.py +201 -0
- agentcore/operations/dataset/resolve_dataset.py +65 -0
- agentcore/operations/dataset/status.py +18 -0
- agentcore/operations/dataset/wait.py +25 -0
- agentcore/operations/deploy/__init__.py +152 -0
- agentcore/operations/deploy/backfill_vpc_id.py +90 -0
- agentcore/operations/deploy/change_detection.py +84 -0
- agentcore/operations/deploy/constants.py +58 -0
- agentcore/operations/deploy/dependency_sync.py +105 -0
- agentcore/operations/deploy/ensure_target.py +30 -0
- agentcore/operations/deploy/gateway_status.py +44 -0
- agentcore/operations/deploy/managed_memory_notice.py +36 -0
- agentcore/operations/deploy/payment_connector_authorization.py +106 -0
- agentcore/operations/deploy/post_deploy_datasets.py +96 -0
- agentcore/operations/deploy/post_deploy_knowledge_bases.py +104 -0
- agentcore/operations/deploy/post_deploy_observability.py +28 -0
- agentcore/operations/deploy/post_deploy_online_evals.py +60 -0
- agentcore/operations/deploy/pre_deploy_identity.py +505 -0
- agentcore/operations/deploy/preflight.py +385 -0
- agentcore/operations/deploy/region_override.py +45 -0
- agentcore/operations/deploy/teardown.py +153 -0
- agentcore/operations/dev/__init__.py +61 -0
- agentcore/operations/dev/_http.py +79 -0
- agentcore/operations/dev/_server.py +165 -0
- agentcore/operations/dev/codezip_dev_server.py +151 -0
- agentcore/operations/dev/config.py +128 -0
- agentcore/operations/dev/constants.py +9 -0
- agentcore/operations/dev/container_dev_server.py +237 -0
- agentcore/operations/dev/container_runtime.py +37 -0
- agentcore/operations/dev/dev_server.py +244 -0
- agentcore/operations/dev/gateway_env.py +25 -0
- agentcore/operations/dev/invoke.py +214 -0
- agentcore/operations/dev/invoke_a2a.py +204 -0
- agentcore/operations/dev/invoke_agui.py +88 -0
- agentcore/operations/dev/invoke_mcp.py +145 -0
- agentcore/operations/dev/invoke_types.py +30 -0
- agentcore/operations/dev/load_dev_env.py +26 -0
- agentcore/operations/dev/memory_env.py +19 -0
- agentcore/operations/dev/otel/__init__.py +5 -0
- agentcore/operations/dev/otel/collector.py +234 -0
- agentcore/operations/dev/otel/transforms.py +331 -0
- agentcore/operations/dev/payment_env.py +50 -0
- agentcore/operations/dev/server.py +28 -0
- agentcore/operations/dev/sse_transform.py +30 -0
- agentcore/operations/dev/utils.py +152 -0
- agentcore/operations/dev/web_ui/__init__.py +31 -0
- agentcore/operations/dev/web_ui/constants.py +25 -0
- agentcore/operations/dev/web_ui/handlers/__init__.py +36 -0
- agentcore/operations/dev/web_ui/handlers/_common.py +36 -0
- agentcore/operations/dev/web_ui/handlers/_deployed.py +37 -0
- agentcore/operations/dev/web_ui/handlers/a2a_proxy.py +37 -0
- agentcore/operations/dev/web_ui/handlers/cloudwatch_traces.py +71 -0
- agentcore/operations/dev/web_ui/handlers/harness_invocation.py +89 -0
- agentcore/operations/dev/web_ui/handlers/harness_utils.py +95 -0
- agentcore/operations/dev/web_ui/handlers/invocations.py +327 -0
- agentcore/operations/dev/web_ui/handlers/mcp_proxy.py +119 -0
- agentcore/operations/dev/web_ui/handlers/memory.py +84 -0
- agentcore/operations/dev/web_ui/handlers/resources.py +351 -0
- agentcore/operations/dev/web_ui/handlers/start.py +182 -0
- agentcore/operations/dev/web_ui/handlers/status.py +25 -0
- agentcore/operations/dev/web_ui/handlers/traces.py +50 -0
- agentcore/operations/dev/web_ui/run_web_ui.py +60 -0
- agentcore/operations/dev/web_ui/web_server.py +297 -0
- agentcore/operations/eval/__init__.py +8 -0
- agentcore/operations/eval/list_eval_runs.py +18 -0
- agentcore/operations/eval/logs_eval.py +119 -0
- agentcore/operations/eval/pause_resume.py +90 -0
- agentcore/operations/eval/run_eval.py +354 -0
- agentcore/operations/eval/shared/__init__.py +0 -0
- agentcore/operations/eval/shared/dataset_loader.py +68 -0
- agentcore/operations/eval/shared/dataset_session_provider.py +122 -0
- agentcore/operations/eval/shared/evaluator_runner.py +89 -0
- agentcore/operations/eval/shared/scenario_executor.py +71 -0
- agentcore/operations/eval/shared/span_collector.py +255 -0
- agentcore/operations/eval/storage.py +67 -0
- agentcore/operations/feedback/__init__.py +21 -0
- agentcore/operations/feedback/aperture_client.py +98 -0
- agentcore/operations/feedback/build_payload.py +97 -0
- agentcore/operations/feedback/constants.py +26 -0
- agentcore/operations/feedback/submit_feedback.py +150 -0
- agentcore/operations/fetch_access/__init__.py +36 -0
- agentcore/operations/fetch_access/_target.py +17 -0
- agentcore/operations/fetch_access/fetch_gateway_token.py +75 -0
- agentcore/operations/fetch_access/fetch_harness_token.py +72 -0
- agentcore/operations/fetch_access/fetch_runtime_token.py +76 -0
- agentcore/operations/fetch_access/list_agents.py +18 -0
- agentcore/operations/fetch_access/list_gateways.py +26 -0
- agentcore/operations/fetch_access/list_harnesses.py +23 -0
- agentcore/operations/fetch_access/oauth_token.py +162 -0
- agentcore/operations/fetch_access/types.py +34 -0
- agentcore/operations/harness/__init__.py +1 -0
- agentcore/operations/harness/orphan.py +84 -0
- agentcore/operations/harness/skill_utils.py +56 -0
- agentcore/operations/identity/__init__.py +33 -0
- agentcore/operations/identity/api_key_credential_provider.py +68 -0
- agentcore/operations/identity/oauth2_credential_provider.py +95 -0
- agentcore/operations/ingest/__init__.py +184 -0
- agentcore/operations/init/__init__.py +3 -0
- agentcore/operations/init/files.py +59 -0
- agentcore/operations/insights/__init__.py +21 -0
- agentcore/operations/insights/insights_storage.py +67 -0
- agentcore/operations/insights/run_insights.py +148 -0
- agentcore/operations/invoke/__init__.py +5 -0
- agentcore/operations/invoke/resolve_agent_context.py +85 -0
- agentcore/operations/jobs/__init__.py +38 -0
- agentcore/operations/jobs/ab_test/__init__.py +0 -0
- agentcore/operations/jobs/ab_test/build_options.py +126 -0
- agentcore/operations/jobs/ab_test/format.py +121 -0
- agentcore/operations/jobs/ab_test/handler.py +412 -0
- agentcore/operations/jobs/ab_test/promote.py +142 -0
- agentcore/operations/jobs/ab_test/resolve.py +221 -0
- agentcore/operations/jobs/batch_evaluation/__init__.py +0 -0
- agentcore/operations/jobs/batch_evaluation/build_source.py +68 -0
- agentcore/operations/jobs/batch_evaluation/dataset_phase1.py +95 -0
- agentcore/operations/jobs/batch_evaluation/format.py +58 -0
- agentcore/operations/jobs/batch_evaluation/handler.py +203 -0
- agentcore/operations/jobs/insights/__init__.py +0 -0
- agentcore/operations/jobs/insights/format.py +65 -0
- agentcore/operations/jobs/insights/handler.py +178 -0
- agentcore/operations/jobs/recommendation/__init__.py +0 -0
- agentcore/operations/jobs/recommendation/apply_to_bundle.py +76 -0
- agentcore/operations/jobs/recommendation/build_config.py +271 -0
- agentcore/operations/jobs/recommendation/fetch_session_spans.py +93 -0
- agentcore/operations/jobs/recommendation/format.py +77 -0
- agentcore/operations/jobs/recommendation/handler.py +331 -0
- agentcore/operations/jobs/shared/__init__.py +0 -0
- agentcore/operations/jobs/shared/constants.py +85 -0
- agentcore/operations/jobs/shared/engine.py +187 -0
- agentcore/operations/jobs/shared/format.py +104 -0
- agentcore/operations/jobs/shared/region.py +34 -0
- agentcore/operations/jobs/shared/resolve_agent_state.py +30 -0
- agentcore/operations/jobs/shared/storage.py +117 -0
- agentcore/operations/jobs/shared/wait.py +30 -0
- agentcore/operations/knowledge_base/__init__.py +33 -0
- agentcore/operations/knowledge_base/connector_config.py +105 -0
- agentcore/operations/knowledge_base/hydrate_data_sources.py +59 -0
- agentcore/operations/mcp/__init__.py +4 -0
- agentcore/operations/memory/__init__.py +13 -0
- agentcore/operations/memory/_records.py +72 -0
- agentcore/operations/memory/list_memory_records.py +45 -0
- agentcore/operations/memory/retrieve_memory_records.py +52 -0
- agentcore/operations/node/__init__.py +15 -0
- agentcore/operations/node/setup.py +36 -0
- agentcore/operations/python/__init__.py +17 -0
- agentcore/operations/python/setup.py +47 -0
- agentcore/operations/resolve_agent.py +159 -0
- agentcore/operations/session/__init__.py +86 -0
- agentcore/operations/traces/__init__.py +29 -0
- agentcore/operations/traces/get_trace.py +202 -0
- agentcore/operations/traces/insights_query.py +74 -0
- agentcore/operations/traces/list_traces.py +46 -0
- agentcore/operations/traces/trace_url.py +25 -0
- agentcore/operations/traces/types.py +55 -0
- agentcore/primitives/__init__.py +0 -0
- agentcore/primitives/_gateway_target_wizard.py +293 -0
- agentcore/primitives/_gateway_validation.py +442 -0
- agentcore/primitives/_harness_cli.py +557 -0
- agentcore/primitives/_harness_validation.py +163 -0
- agentcore/primitives/_harness_wizard.py +726 -0
- agentcore/primitives/_knowledge_base_wizard.py +259 -0
- agentcore/primitives/_payment_wizard.py +331 -0
- agentcore/primitives/_policy_form.py +160 -0
- agentcore/primitives/agent.py +817 -0
- agentcore/primitives/auth_utils.py +77 -0
- agentcore/primitives/base.py +178 -0
- agentcore/primitives/capacity_provider.py +501 -0
- agentcore/primitives/config_bundle.py +329 -0
- agentcore/primitives/credential.py +387 -0
- agentcore/primitives/credential_utils.py +45 -0
- agentcore/primitives/dataset.py +211 -0
- agentcore/primitives/deployed_gateways.py +34 -0
- agentcore/primitives/evaluator.py +909 -0
- agentcore/primitives/gateway.py +496 -0
- agentcore/primitives/gateway_target.py +988 -0
- agentcore/primitives/harness.py +706 -0
- agentcore/primitives/knowledge_base.py +477 -0
- agentcore/primitives/memory.py +387 -0
- agentcore/primitives/online_eval_config.py +365 -0
- agentcore/primitives/online_insights.py +275 -0
- agentcore/primitives/payment_connector.py +427 -0
- agentcore/primitives/payment_eligible.py +20 -0
- agentcore/primitives/payment_manager.py +605 -0
- agentcore/primitives/payment_validation.py +68 -0
- agentcore/primitives/policy.py +622 -0
- agentcore/primitives/policy_engine.py +358 -0
- agentcore/primitives/registry.py +56 -0
- agentcore/primitives/runtime_endpoint.py +361 -0
- agentcore/primitives/secret_flag_warning.py +17 -0
- agentcore/schema/__init__.py +14 -0
- agentcore/schema/_zod.py +395 -0
- agentcore/schema/constants.py +306 -0
- agentcore/schema/schemas/__init__.py +40 -0
- agentcore/schema/schemas/agent_env.py +545 -0
- agentcore/schema/schemas/agentcore_project.py +530 -0
- agentcore/schema/schemas/auth.py +286 -0
- agentcore/schema/schemas/aws_targets.py +72 -0
- agentcore/schema/schemas/connections.py +187 -0
- agentcore/schema/schemas/deployed_state.py +322 -0
- agentcore/schema/schemas/mcp.py +650 -0
- agentcore/schema/schemas/mcp_defs.py +54 -0
- agentcore/schema/schemas/primitives/__init__.py +52 -0
- agentcore/schema/schemas/primitives/ab_test.py +162 -0
- agentcore/schema/schemas/primitives/capacity_provider.py +214 -0
- agentcore/schema/schemas/primitives/config_bundle.py +48 -0
- agentcore/schema/schemas/primitives/dataset.py +55 -0
- agentcore/schema/schemas/primitives/evaluator.py +171 -0
- agentcore/schema/schemas/primitives/harness.py +710 -0
- agentcore/schema/schemas/primitives/knowledge_base.py +90 -0
- agentcore/schema/schemas/primitives/memory.py +113 -0
- agentcore/schema/schemas/primitives/online_eval_config.py +77 -0
- agentcore/schema/schemas/primitives/payment.py +114 -0
- agentcore/schema/schemas/primitives/policy.py +83 -0
- agentcore/schema/schemas/primitives/tags.py +50 -0
- agentcore/schema/schemas/zod_util.py +5 -0
- agentcore/schema/types/__init__.py +3 -0
- agentcore/schema/types/path.py +16 -0
- agentcore/templates/__init__.py +115 -0
- agentcore/templates/_handlebars.py +782 -0
- agentcore/templates/_js.py +164 -0
- agentcore/templates/base_renderer.py +107 -0
- agentcore/templates/cdk_renderer.py +129 -0
- agentcore/templates/evaluator_renderer.py +39 -0
- agentcore/templates/gateway_target_renderer.py +69 -0
- agentcore/templates/llm_context/README.md +16 -0
- agentcore/templates/llm_context/agentcore.ts +685 -0
- agentcore/templates/llm_context/aws-targets.ts +51 -0
- agentcore/templates/profiles.py +151 -0
- agentcore/templates/render.py +92 -0
- agentcore/templates/renderers.py +83 -0
- agentcore/templates/schema_assets.py +23 -0
- agentcore/templates/template_root.py +28 -0
- agentcore/templates/types.py +192 -0
- agentcore_cli-0.31.1.dist-info/METADATA +84 -0
- agentcore_cli-0.31.1.dist-info/RECORD +655 -0
- agentcore_cli-0.31.1.dist-info/WHEEL +4 -0
- agentcore_cli-0.31.1.dist-info/entry_points.txt +2 -0
- agentcore_cli-0.31.1.dist-info/licenses/LICENSE +175 -0
- agentcore_cli-0.31.1.dist-info/licenses/NOTICE +88 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"""Deploy preflight: project validation, synth, bootstrap and stack checks (port of ``preflight.ts``)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
import re
|
|
8
|
+
import sys
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from agentcore.aws import account as _account
|
|
13
|
+
from agentcore.cdk.local_cdk_project import LocalCdkProject
|
|
14
|
+
from agentcore.cdk.toolkit import CdkToolkitWrapper, IoHost, create_cdk_toolkit_wrapper, silent_io_host
|
|
15
|
+
from agentcore.cli.constants import MAX_GATEWAY_NAME_LENGTH, MAX_RUNTIME_NAME_LENGTH
|
|
16
|
+
from agentcore.cloudformation.bootstrap import check_bootstrap_status, format_cdk_environment
|
|
17
|
+
from agentcore.cloudformation.stack_status import check_stacks_status
|
|
18
|
+
from agentcore.lib.constants import DOCKERFILE_NAME
|
|
19
|
+
from agentcore.lib.errors.types import ConfigValidationError, StaleCdkConstructError, ValidationError
|
|
20
|
+
from agentcore.lib.packaging.build_context import resolve_build_context
|
|
21
|
+
from agentcore.lib.packaging.build_context_dockerignore import ensure_build_context_dockerignore
|
|
22
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
23
|
+
from agentcore.lib.schemas.io.path_resolver import require_config_root
|
|
24
|
+
from agentcore.lib.utils.platform import is_windows
|
|
25
|
+
from agentcore.lib.utils.subprocess import run_subprocess_capture
|
|
26
|
+
|
|
27
|
+
MINIMUM_CDK_BOOTSTRAP_VERSION = 30
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class PreflightContext:
|
|
32
|
+
project_spec: Any
|
|
33
|
+
aws_targets: list[Any]
|
|
34
|
+
cdk_project: LocalCdkProject
|
|
35
|
+
# True when no deployable resources remain but a deployed stack exists — deploy tears down.
|
|
36
|
+
is_teardown_deploy: bool
|
|
37
|
+
# True when deployed-state.json has no targets — never deployed.
|
|
38
|
+
is_first_deploy: bool
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass
|
|
42
|
+
class SynthResult:
|
|
43
|
+
toolkit_wrapper: CdkToolkitWrapper
|
|
44
|
+
stack_names: list[str]
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@dataclass
|
|
48
|
+
class BootstrapCheckResult:
|
|
49
|
+
needs_bootstrap: bool
|
|
50
|
+
target: Any | None
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
@dataclass
|
|
54
|
+
class StackStatusCheckResult:
|
|
55
|
+
can_deploy: bool
|
|
56
|
+
blocking_stack: str | None = None
|
|
57
|
+
message: str | None = None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def format_error(err: BaseException | object) -> str:
|
|
61
|
+
"""Message plus cause chain; the Python traceback only with AGENTCORE_DEBUG set."""
|
|
62
|
+
if isinstance(err, BaseException):
|
|
63
|
+
lines = [str(err)]
|
|
64
|
+
if os.environ.get("AGENTCORE_DEBUG") and err.__traceback__ is not None:
|
|
65
|
+
import traceback
|
|
66
|
+
|
|
67
|
+
lines += ["", "Stack trace:", "".join(traceback.format_exception(err)).rstrip()]
|
|
68
|
+
# Upstream's ConfigValidationError carries no `cause` (the Python port chains the pydantic
|
|
69
|
+
# error via `raise ... from`), so it is not followed here.
|
|
70
|
+
cause = None if isinstance(err, ConfigValidationError) else err.__cause__
|
|
71
|
+
if isinstance(cause, BaseException) and cause is not err:
|
|
72
|
+
lines += ["", "Caused by:", format_error(cause)]
|
|
73
|
+
return "\n".join(lines)
|
|
74
|
+
return str(err)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# Spec lists whose presence means there's something to deploy (keep in sync with parse_*_outputs).
|
|
78
|
+
DEPLOYABLE_RESOURCE_KEYS = (
|
|
79
|
+
"runtimes",
|
|
80
|
+
"agent_core_gateways",
|
|
81
|
+
"memories",
|
|
82
|
+
"knowledge_bases",
|
|
83
|
+
"evaluators",
|
|
84
|
+
"online_eval_configs",
|
|
85
|
+
"policy_engines",
|
|
86
|
+
"config_bundles",
|
|
87
|
+
"datasets",
|
|
88
|
+
"capacity_providers",
|
|
89
|
+
"harnesses",
|
|
90
|
+
"payments",
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def has_deployable_resources(spec: Any) -> bool:
|
|
95
|
+
return any(isinstance(getattr(spec, key, None), list) and getattr(spec, key) for key in DEPLOYABLE_RESOURCE_KEYS)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def validate_project(selected_target: Any = None) -> PreflightContext:
|
|
99
|
+
"""Validate the CDK project and config; checks AWS credentials unless this is a teardown deploy."""
|
|
100
|
+
config_root = require_config_root()
|
|
101
|
+
project_root = os.path.dirname(config_root)
|
|
102
|
+
|
|
103
|
+
cdk_project = LocalCdkProject(project_root)
|
|
104
|
+
cdk_project.validate()
|
|
105
|
+
|
|
106
|
+
config_io = ConfigIO(base_dir=config_root)
|
|
107
|
+
project_spec = config_io.read_project_spec()
|
|
108
|
+
aws_targets = config_io.resolve_aws_deployment_targets()
|
|
109
|
+
|
|
110
|
+
# deployed-state.json is written after every successful deploy, so it tells whether a stack exists.
|
|
111
|
+
has_existing_stack = False
|
|
112
|
+
try:
|
|
113
|
+
has_existing_stack = len(config_io.read_deployed_state().targets) > 0
|
|
114
|
+
except Exception: # noqa: BLE001 - no deployed state, no stack
|
|
115
|
+
pass
|
|
116
|
+
|
|
117
|
+
is_teardown_deploy = False
|
|
118
|
+
if not has_deployable_resources(project_spec):
|
|
119
|
+
if not has_existing_stack:
|
|
120
|
+
raise ValidationError(
|
|
121
|
+
"No resources defined in project. Add at least one resource (agent, memory, knowledge base, "
|
|
122
|
+
"evaluator, or gateway) before deploying."
|
|
123
|
+
)
|
|
124
|
+
is_teardown_deploy = True
|
|
125
|
+
|
|
126
|
+
validate_runtime_names(project_spec)
|
|
127
|
+
validate_gateway_names(project_spec)
|
|
128
|
+
validate_container_agents(project_spec, config_root)
|
|
129
|
+
|
|
130
|
+
# Harness specs are validated up front for a precise message, except on teardown (the files are
|
|
131
|
+
# being discarded and must not block destroying the stack).
|
|
132
|
+
if not is_teardown_deploy:
|
|
133
|
+
validate_harness_specs(project_spec, config_root)
|
|
134
|
+
|
|
135
|
+
if not is_teardown_deploy:
|
|
136
|
+
_account.validate_aws_credentials(
|
|
137
|
+
selected_target if selected_target is not None else (aws_targets or [None])[0]
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
return PreflightContext(
|
|
141
|
+
project_spec=project_spec,
|
|
142
|
+
aws_targets=aws_targets,
|
|
143
|
+
cdk_project=cdk_project,
|
|
144
|
+
is_teardown_deploy=is_teardown_deploy,
|
|
145
|
+
is_first_deploy=not has_existing_stack,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def validate_runtime_names(project_spec: Any) -> None:
|
|
150
|
+
for agent in project_spec.runtimes or []:
|
|
151
|
+
if agent.name:
|
|
152
|
+
combined = f"{project_spec.name}_{agent.name}"
|
|
153
|
+
if len(combined) > MAX_RUNTIME_NAME_LENGTH:
|
|
154
|
+
raise ValidationError(
|
|
155
|
+
f'Runtime name too long: "{combined}" ({len(combined)} chars). '
|
|
156
|
+
f"AWS limits runtime names to {MAX_RUNTIME_NAME_LENGTH} characters. "
|
|
157
|
+
"Shorten the project name or agent name in agentcore.json."
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def validate_gateway_names(project_spec: Any) -> None:
|
|
162
|
+
for gateway in project_spec.agent_core_gateways or []:
|
|
163
|
+
# Imported gateways carry an explicit resourceName AWS already accepted.
|
|
164
|
+
if getattr(gateway, "resource_name", None):
|
|
165
|
+
continue
|
|
166
|
+
combined = f"{project_spec.name}-{gateway.name}"
|
|
167
|
+
if len(combined) > MAX_GATEWAY_NAME_LENGTH:
|
|
168
|
+
raise ValidationError(
|
|
169
|
+
f'Gateway name too long: "{combined}" ({len(combined)} chars). '
|
|
170
|
+
f"AWS limits gateway names to {MAX_GATEWAY_NAME_LENGTH} characters. "
|
|
171
|
+
"Shorten the project name or gateway name in agentcore.json."
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def validate_container_agents(project_spec: Any, config_root: str) -> None:
|
|
176
|
+
"""Container agents need a Dockerfile; warns on deprecated base images; adds a context .dockerignore."""
|
|
177
|
+
errors: list[str] = []
|
|
178
|
+
for agent in project_spec.runtimes or []:
|
|
179
|
+
if agent.build != "Container":
|
|
180
|
+
continue
|
|
181
|
+
resolved = resolve_build_context(agent, config_root)
|
|
182
|
+
if not os.path.exists(resolved.dockerfile_path):
|
|
183
|
+
errors.append(
|
|
184
|
+
f'Agent "{agent.name}": {agent.dockerfile or DOCKERFILE_NAME} not found at '
|
|
185
|
+
f"{resolved.dockerfile_path}. Container agents require a Dockerfile."
|
|
186
|
+
)
|
|
187
|
+
warn_deprecated_base_image(resolved.dockerfile_path, agent.name)
|
|
188
|
+
if agent.build_context_path:
|
|
189
|
+
created = ensure_build_context_dockerignore(resolved.build_context)
|
|
190
|
+
if created:
|
|
191
|
+
print(
|
|
192
|
+
f'Agent "{agent.name}": created {created} with default secret exclusions because buildContextPath '
|
|
193
|
+
"is set (the entire context is sent to Docker/CodeBuild). Review and commit it; edit to include "
|
|
194
|
+
"any intentionally-bundled files.",
|
|
195
|
+
file=sys.stderr,
|
|
196
|
+
)
|
|
197
|
+
if errors:
|
|
198
|
+
raise RuntimeError("\n".join(errors))
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def validate_harness_specs(project_spec: Any, config_root: str) -> None:
|
|
202
|
+
"""Parse every harness.json so a bad spec fails preflight with the precise schema message."""
|
|
203
|
+
harnesses = project_spec.harnesses or []
|
|
204
|
+
if not harnesses:
|
|
205
|
+
return
|
|
206
|
+
config_io = ConfigIO(base_dir=config_root)
|
|
207
|
+
errors = []
|
|
208
|
+
for harness in harnesses:
|
|
209
|
+
try:
|
|
210
|
+
config_io.read_harness_spec(harness.name)
|
|
211
|
+
except Exception as exc: # noqa: BLE001 - aggregated into one message
|
|
212
|
+
errors.append(f'Harness "{harness.name}": {format_error(exc)}')
|
|
213
|
+
if errors:
|
|
214
|
+
raise ValidationError("Invalid harness configuration:\n" + "\n".join(errors))
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
DEPRECATED_BASE_IMAGES = {
|
|
218
|
+
"slim-bookworm": (
|
|
219
|
+
"Affected by CVE-2026-42010 (GnuTLS authentication bypass). Update the FROM line to use a Trixie-based variant."
|
|
220
|
+
),
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
_FROM_RE = re.compile(r"^\s*FROM\s+", re.IGNORECASE)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def warn_deprecated_base_image(dockerfile_path: str, agent_name: str) -> None:
|
|
227
|
+
try:
|
|
228
|
+
with open(dockerfile_path, encoding="utf-8") as fh:
|
|
229
|
+
content = fh.read()
|
|
230
|
+
except OSError:
|
|
231
|
+
return
|
|
232
|
+
for line in content.split("\n"):
|
|
233
|
+
if not _FROM_RE.match(line):
|
|
234
|
+
continue
|
|
235
|
+
for image, message in DEPRECATED_BASE_IMAGES.items():
|
|
236
|
+
if image in line:
|
|
237
|
+
print(
|
|
238
|
+
f'Warning: Agent "{agent_name}" Dockerfile uses a base image containing "{image}". {message}',
|
|
239
|
+
file=sys.stderr,
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def build_cdk_project(cdk_project: LocalCdkProject) -> None:
|
|
244
|
+
cdk_project.build()
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
# ---------------------------------------------------------------------------
|
|
248
|
+
# Stale CDK lock files (port of tui/utils/process.ts)
|
|
249
|
+
# ---------------------------------------------------------------------------
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def is_process_running(pid: int) -> bool:
|
|
253
|
+
if is_windows:
|
|
254
|
+
result = run_subprocess_capture("tasklist", ["/FI", f"PID eq {pid}", "/NH"])
|
|
255
|
+
return "No tasks" not in result.stdout
|
|
256
|
+
try:
|
|
257
|
+
os.kill(pid, 0)
|
|
258
|
+
except ProcessLookupError:
|
|
259
|
+
return False
|
|
260
|
+
except PermissionError:
|
|
261
|
+
return True
|
|
262
|
+
except OSError:
|
|
263
|
+
return False
|
|
264
|
+
return True
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
_READ_LOCK_RE = re.compile(r"^read\.(\d+)\.\d+\.lock$")
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def cleanup_stale_lock_files(cdk_out_dir: str) -> None:
|
|
271
|
+
"""Remove ``read.<PID>.<n>.lock`` files whose process is gone (never touches synth.lock)."""
|
|
272
|
+
if not os.path.isdir(cdk_out_dir):
|
|
273
|
+
return
|
|
274
|
+
for name in os.listdir(cdk_out_dir):
|
|
275
|
+
match = _READ_LOCK_RE.match(name)
|
|
276
|
+
if not match:
|
|
277
|
+
continue
|
|
278
|
+
if not is_process_running(int(match.group(1))):
|
|
279
|
+
try:
|
|
280
|
+
os.unlink(os.path.join(cdk_out_dir, name))
|
|
281
|
+
except OSError:
|
|
282
|
+
pass
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
# ---------------------------------------------------------------------------
|
|
286
|
+
# Synth
|
|
287
|
+
# ---------------------------------------------------------------------------
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def synthesize_cdk(
|
|
291
|
+
cdk_project: LocalCdkProject,
|
|
292
|
+
*,
|
|
293
|
+
io_host: IoHost | None = None,
|
|
294
|
+
previous_wrapper: CdkToolkitWrapper | None = None,
|
|
295
|
+
region: str | None = None,
|
|
296
|
+
) -> SynthResult:
|
|
297
|
+
if previous_wrapper is not None:
|
|
298
|
+
previous_wrapper.dispose()
|
|
299
|
+
cleanup_stale_lock_files(os.path.join(str(cdk_project.project_dir), "cdk.out"))
|
|
300
|
+
wrapper = create_cdk_toolkit_wrapper(cdk_project.project_dir, io_host=io_host or silent_io_host, region=region)
|
|
301
|
+
try:
|
|
302
|
+
synth = wrapper.synth()
|
|
303
|
+
except Exception as exc:
|
|
304
|
+
raise rewrite_if_stale_cdk_construct(exc, str(cdk_project.project_dir)) from exc
|
|
305
|
+
return SynthResult(toolkit_wrapper=wrapper, stack_names=synth.stack_names)
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
_UNKNOWN_KEYS_RE = re.compile(r"unknown keys \(remove\): (.+?)(?:\n|$)")
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def extract_unknown_keys(err: BaseException | object) -> list[str]:
|
|
312
|
+
match = _UNKNOWN_KEYS_RE.search(format_error(err))
|
|
313
|
+
if not match or not match.group(1):
|
|
314
|
+
return []
|
|
315
|
+
keys = [re.sub(r'^"|"$', "", k.strip()) for k in match.group(1).split(",")]
|
|
316
|
+
return [k for k in keys if k]
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def read_installed_cdk_construct_version(cdk_project_dir: str) -> str | None:
|
|
320
|
+
try:
|
|
321
|
+
path = os.path.join(cdk_project_dir, "node_modules", "@aws", "agentcore-cdk", "package.json")
|
|
322
|
+
with open(path, encoding="utf-8") as fh:
|
|
323
|
+
return json.load(fh).get("version")
|
|
324
|
+
except (OSError, ValueError, AttributeError):
|
|
325
|
+
return None
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def rewrite_if_stale_cdk_construct(err: BaseException, cdk_project_dir: str) -> BaseException:
|
|
329
|
+
"""An "unknown keys" synth rejection means the project's @aws/agentcore-cdk is older than the CLI."""
|
|
330
|
+
keys = extract_unknown_keys(err)
|
|
331
|
+
if not keys:
|
|
332
|
+
return err
|
|
333
|
+
return StaleCdkConstructError(keys, read_installed_cdk_construct_version(cdk_project_dir), cause=err)
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
def check_stack_deployability(region: str, stack_names: list[str]) -> StackStatusCheckResult:
|
|
337
|
+
blocking = check_stacks_status(region, stack_names)
|
|
338
|
+
if blocking:
|
|
339
|
+
return StackStatusCheckResult(False, blocking.stack_name, blocking.result.message)
|
|
340
|
+
return StackStatusCheckResult(True)
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
def check_bootstrap_needed(aws_targets: list[Any]) -> BootstrapCheckResult:
|
|
344
|
+
"""Bootstrap needed when CDKToolkit is missing/unusable or older than version 30."""
|
|
345
|
+
target = aws_targets[0] if aws_targets else None
|
|
346
|
+
if target is None:
|
|
347
|
+
return BootstrapCheckResult(False, None)
|
|
348
|
+
try:
|
|
349
|
+
status = check_bootstrap_status(target.region)
|
|
350
|
+
if not status.is_bootstrapped or (status.bootstrap_version or 0) < MINIMUM_CDK_BOOTSTRAP_VERSION:
|
|
351
|
+
return BootstrapCheckResult(True, target)
|
|
352
|
+
except Exception: # noqa: BLE001 - deploy will fail with a clearer error
|
|
353
|
+
pass
|
|
354
|
+
return BootstrapCheckResult(False, None)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def bootstrap_environment(toolkit_wrapper: CdkToolkitWrapper, target: Any) -> None:
|
|
358
|
+
toolkit_wrapper.bootstrap([format_cdk_environment(target.account, target.region)])
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
__all__ = [
|
|
362
|
+
"DEPLOYABLE_RESOURCE_KEYS",
|
|
363
|
+
"MINIMUM_CDK_BOOTSTRAP_VERSION",
|
|
364
|
+
"BootstrapCheckResult",
|
|
365
|
+
"PreflightContext",
|
|
366
|
+
"StackStatusCheckResult",
|
|
367
|
+
"SynthResult",
|
|
368
|
+
"bootstrap_environment",
|
|
369
|
+
"build_cdk_project",
|
|
370
|
+
"check_bootstrap_needed",
|
|
371
|
+
"check_stack_deployability",
|
|
372
|
+
"cleanup_stale_lock_files",
|
|
373
|
+
"extract_unknown_keys",
|
|
374
|
+
"format_error",
|
|
375
|
+
"has_deployable_resources",
|
|
376
|
+
"read_installed_cdk_construct_version",
|
|
377
|
+
"rewrite_if_stale_cdk_construct",
|
|
378
|
+
"synthesize_cdk",
|
|
379
|
+
"validate_container_agents",
|
|
380
|
+
"validate_gateway_names",
|
|
381
|
+
"validate_harness_specs",
|
|
382
|
+
"validate_project",
|
|
383
|
+
"validate_runtime_names",
|
|
384
|
+
"warn_deprecated_base_image",
|
|
385
|
+
]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""`agentcore deploy --region` (Python-port addition; upstream reads the region from aws-targets.json).
|
|
2
|
+
|
|
3
|
+
The region is applied to the selected target before the normal deploy flow runs:
|
|
4
|
+
- no targets yet: AWS_REGION is set so the auto-created ``default`` target lands there;
|
|
5
|
+
- target exists, never deployed: its region is updated in aws-targets.json;
|
|
6
|
+
- target already deployed elsewhere: refused, since moving it would orphan the existing stack.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
from agentcore.lib.errors.types import ConfigNotFoundError, ValidationError
|
|
12
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
13
|
+
from agentcore.schema.schemas.aws_targets import AGENTCORE_REGIONS
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def apply_region_override(region: str, target_name: str, config_io: ConfigIO | None = None) -> None:
|
|
17
|
+
if region not in AGENTCORE_REGIONS:
|
|
18
|
+
raise ValidationError(
|
|
19
|
+
f'Region "{region}" is not supported by AgentCore. Supported regions: {", ".join(AGENTCORE_REGIONS)}'
|
|
20
|
+
)
|
|
21
|
+
config_io = config_io or ConfigIO()
|
|
22
|
+
# Also drives region detection for anything that runs before or without a target.
|
|
23
|
+
os.environ["AWS_REGION"] = region
|
|
24
|
+
|
|
25
|
+
try:
|
|
26
|
+
targets = [t.to_json_dict() for t in config_io.read_aws_deployment_targets()]
|
|
27
|
+
except ConfigNotFoundError:
|
|
28
|
+
targets = []
|
|
29
|
+
|
|
30
|
+
target = next((t for t in targets if t["name"] == target_name), None)
|
|
31
|
+
if target is None or target["region"] == region:
|
|
32
|
+
return
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
deployed = target_name in (config_io.read_deployed_state().targets or {})
|
|
36
|
+
except Exception: # noqa: BLE001 - no deployed state means nothing to orphan
|
|
37
|
+
deployed = False
|
|
38
|
+
if deployed:
|
|
39
|
+
raise ValidationError(
|
|
40
|
+
f'Target "{target_name}" is already deployed to {target["region"]}. To deploy to {region}, add a new '
|
|
41
|
+
f"target to agentcore/aws-targets.json and pass --target <name>."
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
target["region"] = region
|
|
45
|
+
config_io.write_aws_deployment_targets(targets)
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"""Stack teardown after `remove all` (port of ``operations/deploy/teardown.ts``)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from agentcore.aws import agentcore_config_bundles, agentcore_harness
|
|
11
|
+
from agentcore.aws.target_region import target_region
|
|
12
|
+
from agentcore.cdk.toolkit import CdkToolkitWrapper, pattern_must_match, silent_io_host
|
|
13
|
+
from agentcore.cloudformation import stack_discovery
|
|
14
|
+
from agentcore.cloudformation.stack_discovery import DiscoveredStack
|
|
15
|
+
from agentcore.lib.constants import CONFIG_DIR
|
|
16
|
+
from agentcore.lib.result import Ok, ok
|
|
17
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
18
|
+
from agentcore.operations.harness.orphan import find_orphan_harnesses
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class DeployedTarget:
|
|
23
|
+
target: Any
|
|
24
|
+
stack: DiscoveredStack
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass
|
|
28
|
+
class DiscoverDeployedResult:
|
|
29
|
+
project_name: str
|
|
30
|
+
deployed_targets: list[DeployedTarget] = field(default_factory=list)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def discover_deployed_targets(config_base_dir: str | None = None) -> DiscoverDeployedResult:
|
|
34
|
+
"""Targets that have a CloudFormation stack (per-target errors, e.g. no credentials, are ignored)."""
|
|
35
|
+
config_io = ConfigIO(base_dir=config_base_dir) if config_base_dir else ConfigIO()
|
|
36
|
+
project_spec = config_io.read_project_spec()
|
|
37
|
+
deployed: list[DeployedTarget] = []
|
|
38
|
+
for target in config_io.resolve_aws_deployment_targets():
|
|
39
|
+
try:
|
|
40
|
+
stack = stack_discovery.find_stack(target.region, project_spec.name, target.name)
|
|
41
|
+
if stack:
|
|
42
|
+
deployed.append(DeployedTarget(target, stack))
|
|
43
|
+
except Exception: # noqa: BLE001
|
|
44
|
+
pass
|
|
45
|
+
return DiscoverDeployedResult(project_spec.name, deployed)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def destroy_target(*, target: DeployedTarget, cdk_project_dir: str, toolkit: CdkToolkitWrapper | None = None) -> None:
|
|
49
|
+
"""Destroy one target's stack and drop it from deployed-state.json."""
|
|
50
|
+
if not os.path.exists(cdk_project_dir):
|
|
51
|
+
raise RuntimeError("CDK project not found. Cannot destroy without CDK project.")
|
|
52
|
+
wrapper = toolkit or CdkToolkitWrapper(cdk_project_dir, io_host=silent_io_host, region=target.target.region)
|
|
53
|
+
try:
|
|
54
|
+
# aws-targets.json is authoritative for the destroy region (aws/agentcore-cli#924).
|
|
55
|
+
with target_region(target.target.region):
|
|
56
|
+
if toolkit is None:
|
|
57
|
+
wrapper.initialize()
|
|
58
|
+
wrapper.destroy(pattern_must_match(target.stack.stack_name))
|
|
59
|
+
finally:
|
|
60
|
+
if toolkit is None:
|
|
61
|
+
wrapper.dispose()
|
|
62
|
+
|
|
63
|
+
config_io = ConfigIO()
|
|
64
|
+
try:
|
|
65
|
+
state = config_io.read_deployed_state()
|
|
66
|
+
if target.target.name in state.targets:
|
|
67
|
+
del state.targets[target.target.name]
|
|
68
|
+
config_io.write_deployed_state(state)
|
|
69
|
+
except Exception: # noqa: BLE001
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def get_cdk_project_dir(cwd: str | None = None) -> str:
|
|
74
|
+
return os.path.join(cwd or os.getcwd(), CONFIG_DIR, "cdk")
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _is_not_found_message(msg: str) -> bool:
|
|
78
|
+
return "ENOENT" in msg or "not found" in msg or "does not exist" in msg
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def perform_stack_teardown(target_name: str, toolkit: CdkToolkitWrapper | None = None) -> Ok[None]:
|
|
82
|
+
"""Destroy the target's stack, then remove it from deployed-state.json and aws-targets.json."""
|
|
83
|
+
cdk_project_dir = get_cdk_project_dir()
|
|
84
|
+
config_io = ConfigIO()
|
|
85
|
+
discovered = discover_deployed_targets()
|
|
86
|
+
deployed_target = next((dt for dt in discovered.deployed_targets if dt.target.name == target_name), None)
|
|
87
|
+
|
|
88
|
+
# Clean up imperatively created resources the stack destroy won't touch.
|
|
89
|
+
try:
|
|
90
|
+
state = config_io.read_deployed_state()
|
|
91
|
+
target_state = state.targets.get(target_name)
|
|
92
|
+
resources = target_state.resources if target_state else None
|
|
93
|
+
|
|
94
|
+
for orphan in [o for o in find_orphan_harnesses(state) if o.target_name == target_name]:
|
|
95
|
+
try:
|
|
96
|
+
agentcore_harness.delete_harness(region=orphan.region, harness_id=orphan.harness_id)
|
|
97
|
+
print(f'Deleted preview-build harness "{orphan.name}"')
|
|
98
|
+
except Exception as exc: # noqa: BLE001
|
|
99
|
+
if not agentcore_harness.is_harness_not_found_error(exc):
|
|
100
|
+
print(
|
|
101
|
+
f'Warning: Could not delete preview-build harness "{orphan.name}" ({orphan.harness_id}) in '
|
|
102
|
+
f"{orphan.region}: {exc}. Delete it manually to stop incurring cost.",
|
|
103
|
+
file=sys.stderr,
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
if resources is not None and resources.config_bundles:
|
|
107
|
+
region = deployed_target.target.region if deployed_target else None
|
|
108
|
+
if not region:
|
|
109
|
+
try:
|
|
110
|
+
match = next((t for t in config_io.resolve_aws_deployment_targets() if t.name == target_name), None)
|
|
111
|
+
region = match.region if match else None
|
|
112
|
+
except Exception: # noqa: BLE001
|
|
113
|
+
pass
|
|
114
|
+
if not region:
|
|
115
|
+
print(
|
|
116
|
+
"Warning: Could not determine region for resource cleanup — resources may need manual deletion",
|
|
117
|
+
file=sys.stderr,
|
|
118
|
+
)
|
|
119
|
+
else:
|
|
120
|
+
for bundle_name, bundle in resources.config_bundles.items():
|
|
121
|
+
try:
|
|
122
|
+
agentcore_config_bundles.delete_configuration_bundle(region=region, bundle_id=bundle.bundle_id)
|
|
123
|
+
print(f'Deleted config bundle "{bundle_name}"')
|
|
124
|
+
except Exception as exc: # noqa: BLE001
|
|
125
|
+
print(f'Warning: Error during config bundle "{bundle_name}" cleanup: {exc}', file=sys.stderr)
|
|
126
|
+
except Exception as exc: # noqa: BLE001
|
|
127
|
+
if not _is_not_found_message(str(exc)):
|
|
128
|
+
print(f"Warning: Could not read deployed state for resource cleanup: {exc}", file=sys.stderr)
|
|
129
|
+
|
|
130
|
+
if deployed_target:
|
|
131
|
+
destroy_target(target=deployed_target, cdk_project_dir=cdk_project_dir, toolkit=toolkit)
|
|
132
|
+
|
|
133
|
+
# deployed-state.json first (it validates against aws-targets.json), then aws-targets.json.
|
|
134
|
+
try:
|
|
135
|
+
state = config_io.read_deployed_state()
|
|
136
|
+
state.targets.pop(target_name, None)
|
|
137
|
+
config_io.write_deployed_state(state)
|
|
138
|
+
except Exception as exc:
|
|
139
|
+
if not ("ENOENT" in str(exc) or "not found" in str(exc)):
|
|
140
|
+
raise
|
|
141
|
+
remaining = [t for t in config_io.resolve_aws_deployment_targets() if t.name != target_name]
|
|
142
|
+
config_io.write_aws_deployment_targets(remaining)
|
|
143
|
+
return ok()
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
__all__ = [
|
|
147
|
+
"DeployedTarget",
|
|
148
|
+
"DiscoverDeployedResult",
|
|
149
|
+
"destroy_target",
|
|
150
|
+
"discover_deployed_targets",
|
|
151
|
+
"get_cdk_project_dir",
|
|
152
|
+
"perform_stack_teardown",
|
|
153
|
+
]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Local development server (port of src/cli/operations/dev)."""
|
|
2
|
+
|
|
3
|
+
from agentcore.operations.dev.config import (
|
|
4
|
+
DevConfig,
|
|
5
|
+
get_agent_port,
|
|
6
|
+
get_dev_config,
|
|
7
|
+
get_dev_port,
|
|
8
|
+
get_dev_supported_agents,
|
|
9
|
+
load_project_config,
|
|
10
|
+
requires_exact_dev_port,
|
|
11
|
+
)
|
|
12
|
+
from agentcore.operations.dev.invoke import invoke_agent, invoke_agent_streaming, invoke_for_protocol
|
|
13
|
+
from agentcore.operations.dev.invoke_a2a import A2AAgentCard, fetch_a2a_agent_card, invoke_a2a_streaming
|
|
14
|
+
from agentcore.operations.dev.invoke_agui import invoke_agui_streaming
|
|
15
|
+
from agentcore.operations.dev.invoke_mcp import McpTool, McpToolsResult, call_mcp_tool, list_mcp_tools
|
|
16
|
+
from agentcore.operations.dev.load_dev_env import DevEnv, load_dev_env
|
|
17
|
+
from agentcore.operations.dev.server import (
|
|
18
|
+
DevServer,
|
|
19
|
+
DevServerCallbacks,
|
|
20
|
+
DevServerOptions,
|
|
21
|
+
LogLevel,
|
|
22
|
+
create_dev_server,
|
|
23
|
+
find_available_port,
|
|
24
|
+
wait_for_port,
|
|
25
|
+
wait_for_server_ready,
|
|
26
|
+
)
|
|
27
|
+
from agentcore.operations.dev.utils import format_mcp_tool_list, get_endpoint_url, on_shutdown_signal
|
|
28
|
+
|
|
29
|
+
__all__ = [
|
|
30
|
+
"A2AAgentCard",
|
|
31
|
+
"DevConfig",
|
|
32
|
+
"DevEnv",
|
|
33
|
+
"DevServer",
|
|
34
|
+
"DevServerCallbacks",
|
|
35
|
+
"DevServerOptions",
|
|
36
|
+
"LogLevel",
|
|
37
|
+
"McpTool",
|
|
38
|
+
"McpToolsResult",
|
|
39
|
+
"call_mcp_tool",
|
|
40
|
+
"create_dev_server",
|
|
41
|
+
"fetch_a2a_agent_card",
|
|
42
|
+
"find_available_port",
|
|
43
|
+
"format_mcp_tool_list",
|
|
44
|
+
"get_agent_port",
|
|
45
|
+
"get_dev_config",
|
|
46
|
+
"get_dev_port",
|
|
47
|
+
"get_dev_supported_agents",
|
|
48
|
+
"get_endpoint_url",
|
|
49
|
+
"invoke_a2a_streaming",
|
|
50
|
+
"invoke_agent",
|
|
51
|
+
"invoke_agent_streaming",
|
|
52
|
+
"invoke_agui_streaming",
|
|
53
|
+
"invoke_for_protocol",
|
|
54
|
+
"list_mcp_tools",
|
|
55
|
+
"load_dev_env",
|
|
56
|
+
"load_project_config",
|
|
57
|
+
"on_shutdown_signal",
|
|
58
|
+
"requires_exact_dev_port",
|
|
59
|
+
"wait_for_port",
|
|
60
|
+
"wait_for_server_ready",
|
|
61
|
+
]
|