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,349 @@
|
|
|
1
|
+
"""`agentcore deploy` registration and output (port of ``commands/deploy/command.tsx``).
|
|
2
|
+
|
|
3
|
+
Any of ``--json``/``--target``/``--dry-run``/``--yes``/``--verbose`` selects non-interactive CLI
|
|
4
|
+
mode. Otherwise upstream renders the Ink deploy screen; here the same decisions (target, credential
|
|
5
|
+
source, teardown and bootstrap confirmation, token-expired retry) are asked as prompts.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import sys
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
import typer
|
|
15
|
+
|
|
16
|
+
from agentcore.cli import interactive
|
|
17
|
+
from agentcore.cli.commands.deploy._guards import require_project
|
|
18
|
+
from agentcore.cli.commands.deploy.actions import ValidatedDeployOptions, handle_deploy
|
|
19
|
+
from agentcore.cli.commands.deploy.progress import SPINNER_FRAMES, create_spinner_progress
|
|
20
|
+
from agentcore.cli.commands.deploy.types import DeployOptions, DeployResult
|
|
21
|
+
from agentcore.cli.commands.deploy.validate import validate_deploy_options
|
|
22
|
+
from agentcore.cli.constants import ANSI, COMMAND_DESCRIPTIONS
|
|
23
|
+
from agentcore.cli.errors import get_error_message, is_expired_token_error, is_no_credentials_error
|
|
24
|
+
from agentcore.lib.utils.credentials import SecureCredentials
|
|
25
|
+
|
|
26
|
+
__all__ = ["SPINNER_FRAMES", "execute_deploy", "handle_deploy_cli", "print_deploy_result", "register_deploy"]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _emit_json(payload: dict[str, Any]) -> None:
|
|
30
|
+
typer.echo(json.dumps(payload, separators=(",", ":"), ensure_ascii=False))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def handle_deploy_cli(options: DeployOptions) -> None:
|
|
34
|
+
validation = validate_deploy_options(options)
|
|
35
|
+
if not validation.valid:
|
|
36
|
+
if options.json:
|
|
37
|
+
_emit_json({"success": False, "error": validation.error})
|
|
38
|
+
else:
|
|
39
|
+
typer.echo(validation.error, err=True)
|
|
40
|
+
raise typer.Exit(1)
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
result = execute_deploy(options)
|
|
44
|
+
except Exception as exc: # noqa: BLE001
|
|
45
|
+
result = DeployResult(success=False, error=exc)
|
|
46
|
+
|
|
47
|
+
if not result.success:
|
|
48
|
+
if options.json:
|
|
49
|
+
_emit_json(result.to_json())
|
|
50
|
+
else:
|
|
51
|
+
# Sync warnings may explain the failure; the notice was already printed live.
|
|
52
|
+
for warning in result.dependency_sync_result.warnings if result.dependency_sync_result else []:
|
|
53
|
+
typer.echo(f"⚠ {warning}", err=True)
|
|
54
|
+
typer.echo(str(result.error), err=True)
|
|
55
|
+
if result.log_path:
|
|
56
|
+
typer.echo(f"Log: {result.log_path}", err=True)
|
|
57
|
+
raise typer.Exit(1)
|
|
58
|
+
|
|
59
|
+
print_deploy_result(result, options)
|
|
60
|
+
raise typer.Exit(2 if result.post_deploy_warnings else 0)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def execute_deploy(options: DeployOptions) -> DeployResult:
|
|
64
|
+
spinner = create_spinner_progress() if options.progress else None
|
|
65
|
+
|
|
66
|
+
def on_resource_event(message: str) -> None:
|
|
67
|
+
typer.echo(message)
|
|
68
|
+
|
|
69
|
+
def on_notice(message: str) -> None:
|
|
70
|
+
if spinner:
|
|
71
|
+
spinner.cleanup()
|
|
72
|
+
typer.echo(f"\n{message}\n")
|
|
73
|
+
|
|
74
|
+
try:
|
|
75
|
+
return handle_deploy(
|
|
76
|
+
ValidatedDeployOptions(
|
|
77
|
+
target=options.target or "default",
|
|
78
|
+
auto_confirm=options.yes,
|
|
79
|
+
verbose=options.verbose or options.diff,
|
|
80
|
+
plan=options.plan,
|
|
81
|
+
diff=options.diff,
|
|
82
|
+
on_progress=spinner.on_progress if spinner else None,
|
|
83
|
+
on_resource_event=on_resource_event if options.verbose else None,
|
|
84
|
+
# Never under --json: stdout must stay pure JSON.
|
|
85
|
+
on_notice=None if options.json else on_notice,
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
finally:
|
|
89
|
+
if spinner:
|
|
90
|
+
spinner.cleanup()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def print_deploy_result(result: DeployResult, options: DeployOptions) -> None:
|
|
94
|
+
if options.json:
|
|
95
|
+
_emit_json(result.to_json())
|
|
96
|
+
return
|
|
97
|
+
|
|
98
|
+
# Informational only: never flips the exit code.
|
|
99
|
+
for warning in result.dependency_sync_result.warnings if result.dependency_sync_result else []:
|
|
100
|
+
typer.echo(f"⚠ {warning}", err=True)
|
|
101
|
+
|
|
102
|
+
if options.diff:
|
|
103
|
+
typer.echo(f"\n✓ Diff complete for '{result.target_name}' (stack: {result.stack_name})")
|
|
104
|
+
elif options.plan:
|
|
105
|
+
typer.echo(f"\n✓ Dry run complete for '{result.target_name}' (stack: {result.stack_name})")
|
|
106
|
+
typer.echo("\nRun `agentcore deploy` to deploy.")
|
|
107
|
+
else:
|
|
108
|
+
typer.echo(f"\n✓ Deployed to '{result.target_name}' (stack: {result.stack_name})")
|
|
109
|
+
if result.outputs:
|
|
110
|
+
typer.echo("\nOutputs:")
|
|
111
|
+
for key, value in result.outputs.items():
|
|
112
|
+
typer.echo(f" {key}: {value}")
|
|
113
|
+
if result.post_deploy_warnings:
|
|
114
|
+
typer.echo("\n⚠ Post-deploy warnings:")
|
|
115
|
+
for warning in result.post_deploy_warnings:
|
|
116
|
+
typer.echo(f" {warning}")
|
|
117
|
+
for note in result.notes or []:
|
|
118
|
+
typer.echo(f"\nNote: {note}")
|
|
119
|
+
if result.next_steps:
|
|
120
|
+
typer.echo(f"Next: {' | '.join(result.next_steps)}")
|
|
121
|
+
|
|
122
|
+
if result.log_path:
|
|
123
|
+
typer.echo(f"\nLog: {result.log_path}")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
# ---------------------------------------------------------------------------
|
|
127
|
+
# Interactive mode (replaces the Ink DeployScreen)
|
|
128
|
+
# ---------------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _select_target() -> str | None:
|
|
132
|
+
"""useAwsTargetConfig: populate aws-targets.json when empty, choose among several targets."""
|
|
133
|
+
from agentcore.aws import aws_context
|
|
134
|
+
from agentcore.lib.errors.types import ConfigNotFoundError
|
|
135
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
136
|
+
|
|
137
|
+
config_io = ConfigIO()
|
|
138
|
+
try:
|
|
139
|
+
targets = config_io.read_aws_deployment_targets()
|
|
140
|
+
except ConfigNotFoundError:
|
|
141
|
+
targets = []
|
|
142
|
+
|
|
143
|
+
if not targets:
|
|
144
|
+
ctx = aws_context.detect_aws_context()
|
|
145
|
+
account = ctx.account_id
|
|
146
|
+
region = ctx.region
|
|
147
|
+
if account and interactive.confirm(f"Deploy to account {account} in region {region}?", default=True):
|
|
148
|
+
pass
|
|
149
|
+
else:
|
|
150
|
+
account = interactive.text(
|
|
151
|
+
"AWS account ID",
|
|
152
|
+
default=account or "",
|
|
153
|
+
validate=lambda v: None if v.isdigit() and len(v) == 12 else "Account ID must be 12 digits",
|
|
154
|
+
)
|
|
155
|
+
region = interactive.text("AWS region", default=region or "us-east-1")
|
|
156
|
+
config_io.write_aws_deployment_targets([{"name": "default", "account": account, "region": region}])
|
|
157
|
+
return "default"
|
|
158
|
+
|
|
159
|
+
if len(targets) == 1:
|
|
160
|
+
return targets[0].name
|
|
161
|
+
return interactive.select(
|
|
162
|
+
"Select deployment target",
|
|
163
|
+
[interactive.Choice(f"{t.name} ({t.region}:{t.account})", t.name) for t in targets],
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def _credential_prompt(options: ValidatedDeployOptions) -> None:
|
|
168
|
+
"""CredentialSourcePrompt: use .env.local, enter values now (not saved), or skip identity setup."""
|
|
169
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
170
|
+
from agentcore.operations.deploy import pre_deploy_identity as pdi
|
|
171
|
+
|
|
172
|
+
try:
|
|
173
|
+
spec = ConfigIO().read_project_spec()
|
|
174
|
+
except Exception: # noqa: BLE001
|
|
175
|
+
return
|
|
176
|
+
if not (pdi.has_identity_api_providers(spec) or pdi.has_identity_o_auth_providers(spec)):
|
|
177
|
+
return
|
|
178
|
+
credentials = pdi.get_all_credentials(spec)
|
|
179
|
+
typer.echo("Credentials required:")
|
|
180
|
+
for cred in credentials:
|
|
181
|
+
typer.echo(f" {cred.env_var_name}")
|
|
182
|
+
choice = interactive.select(
|
|
183
|
+
"How should credentials be provided?",
|
|
184
|
+
[
|
|
185
|
+
interactive.Choice("Use values from agentcore/.env.local", "env"),
|
|
186
|
+
interactive.Choice("Enter values now (not saved)", "manual"),
|
|
187
|
+
interactive.Choice("Skip credential setup", "skip"),
|
|
188
|
+
],
|
|
189
|
+
)
|
|
190
|
+
if choice == "manual":
|
|
191
|
+
values = {}
|
|
192
|
+
for cred in credentials:
|
|
193
|
+
value = interactive.text(cred.env_var_name, secret=True)
|
|
194
|
+
if value:
|
|
195
|
+
values[cred.env_var_name] = value
|
|
196
|
+
options.runtime_credentials = SecureCredentials(values)
|
|
197
|
+
elif choice == "skip":
|
|
198
|
+
options.skip_identity_setup = True
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def handle_deploy_interactive(diff_mode: bool = False) -> None:
|
|
202
|
+
from agentcore.cli.external_requirements import check_dependency_versions
|
|
203
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
204
|
+
from agentcore.operations.deploy.constants import BOOTSTRAP_EXPLAINER, BOOTSTRAP_TITLE
|
|
205
|
+
|
|
206
|
+
target = _select_target()
|
|
207
|
+
if not target:
|
|
208
|
+
raise typer.Exit(1)
|
|
209
|
+
|
|
210
|
+
# The TUI preflight also checks Node/uv/npm-cache before building.
|
|
211
|
+
try:
|
|
212
|
+
deps = check_dependency_versions(ConfigIO().read_project_spec())
|
|
213
|
+
if not deps.passed:
|
|
214
|
+
typer.echo("\n".join(deps.errors), err=True)
|
|
215
|
+
raise typer.Exit(1)
|
|
216
|
+
except typer.Exit:
|
|
217
|
+
raise
|
|
218
|
+
except Exception: # noqa: BLE001 - project errors surface in the deploy itself
|
|
219
|
+
pass
|
|
220
|
+
|
|
221
|
+
while True:
|
|
222
|
+
spinner = create_spinner_progress()
|
|
223
|
+
state = {"step": ""}
|
|
224
|
+
|
|
225
|
+
def on_progress(step: str, status: str, _spinner=spinner, state=state) -> None: # type: ignore[no-untyped-def]
|
|
226
|
+
if status == "start":
|
|
227
|
+
state["step"] = step
|
|
228
|
+
_spinner.on_progress(step, status) # type: ignore[arg-type]
|
|
229
|
+
|
|
230
|
+
def on_deploy_message(msg: Any, _spinner=spinner, state=state) -> None: # type: ignore[no-untyped-def]
|
|
231
|
+
if msg.progress and state["step"]:
|
|
232
|
+
_spinner.on_progress(
|
|
233
|
+
f"{state['step']} ({msg.progress.completed}/{msg.progress.total} resources)", "start"
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
def on_notice(message: str, _spinner=spinner) -> None: # type: ignore[no-untyped-def]
|
|
237
|
+
_spinner.cleanup()
|
|
238
|
+
typer.echo(f"\nNote: {message}\n")
|
|
239
|
+
|
|
240
|
+
def confirm_teardown(_spinner=spinner) -> bool: # type: ignore[no-untyped-def]
|
|
241
|
+
_spinner.cleanup()
|
|
242
|
+
typer.echo(
|
|
243
|
+
"This will delete all AWS resources and the CloudFormation stack for this target. "
|
|
244
|
+
"This action cannot be undone."
|
|
245
|
+
)
|
|
246
|
+
return interactive.confirm("Tear down all deployed resources?", default=False)
|
|
247
|
+
|
|
248
|
+
def confirm_bootstrap(_spinner=spinner) -> bool: # type: ignore[no-untyped-def]
|
|
249
|
+
_spinner.cleanup()
|
|
250
|
+
typer.echo(f"{BOOTSTRAP_TITLE}\n{BOOTSTRAP_EXPLAINER}")
|
|
251
|
+
return interactive.confirm("Bootstrap now?", default=True)
|
|
252
|
+
|
|
253
|
+
options = ValidatedDeployOptions(
|
|
254
|
+
target=target,
|
|
255
|
+
diff=diff_mode,
|
|
256
|
+
verbose=diff_mode,
|
|
257
|
+
on_progress=on_progress,
|
|
258
|
+
on_deploy_message=on_deploy_message,
|
|
259
|
+
on_notice=on_notice,
|
|
260
|
+
confirm_teardown=confirm_teardown,
|
|
261
|
+
confirm_bootstrap=confirm_bootstrap,
|
|
262
|
+
)
|
|
263
|
+
if not diff_mode:
|
|
264
|
+
_credential_prompt(options)
|
|
265
|
+
try:
|
|
266
|
+
result = handle_deploy(options)
|
|
267
|
+
finally:
|
|
268
|
+
spinner.cleanup()
|
|
269
|
+
|
|
270
|
+
if result.success:
|
|
271
|
+
if result.dependency_sync_result and result.dependency_sync_result.notice:
|
|
272
|
+
typer.echo(result.dependency_sync_result.notice)
|
|
273
|
+
print_deploy_result(result, DeployOptions(target=target, diff=diff_mode))
|
|
274
|
+
if not diff_mode:
|
|
275
|
+
raise typer.Exit(2 if result.post_deploy_warnings else 0)
|
|
276
|
+
return
|
|
277
|
+
|
|
278
|
+
typer.echo(f"{ANSI.red}{result.error}{ANSI.reset}", err=True)
|
|
279
|
+
if result.log_path:
|
|
280
|
+
typer.echo(f"Log: {result.log_path}", err=True)
|
|
281
|
+
if is_expired_token_error(result.error) or is_no_credentials_error(result.error):
|
|
282
|
+
from agentcore.cli.external_requirements import get_aws_login_guidance
|
|
283
|
+
|
|
284
|
+
typer.echo(f"\nYour AWS credentials are expired or missing. {get_aws_login_guidance()}", err=True)
|
|
285
|
+
if interactive.confirm("Retry after re-authenticating?", default=True):
|
|
286
|
+
continue
|
|
287
|
+
raise typer.Exit(1)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
# ---------------------------------------------------------------------------
|
|
291
|
+
# Registration
|
|
292
|
+
# ---------------------------------------------------------------------------
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def deploy_command(
|
|
296
|
+
target: str | None = typer.Option(
|
|
297
|
+
None, "--target", help='Deployment target name (default: "default") [non-interactive]'
|
|
298
|
+
),
|
|
299
|
+
yes: bool = typer.Option(
|
|
300
|
+
False, "-y", "--yes", help="Auto-confirm prompts, read credentials from env [non-interactive]"
|
|
301
|
+
),
|
|
302
|
+
verbose: bool = typer.Option(
|
|
303
|
+
False, "-v", "--verbose", help="Show resource-level deployment events [non-interactive]"
|
|
304
|
+
),
|
|
305
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON [non-interactive]"),
|
|
306
|
+
dry_run: bool = typer.Option(False, "--dry-run", help="Preview deployment without deploying [non-interactive]"),
|
|
307
|
+
diff: bool = typer.Option(False, "--diff", help="Show CDK diff without deploying [non-interactive]"),
|
|
308
|
+
region: str | None = typer.Option(
|
|
309
|
+
None, "--region", help="AWS region to deploy the target to (e.g. us-east-1) [non-interactive]"
|
|
310
|
+
),
|
|
311
|
+
) -> None:
|
|
312
|
+
try:
|
|
313
|
+
require_project()
|
|
314
|
+
if region:
|
|
315
|
+
from agentcore.operations.deploy.region_override import apply_region_override
|
|
316
|
+
|
|
317
|
+
apply_region_override(region, target or "default")
|
|
318
|
+
if as_json or target or dry_run or yes or verbose or region:
|
|
319
|
+
handle_deploy_cli(
|
|
320
|
+
DeployOptions(
|
|
321
|
+
target=target or "default",
|
|
322
|
+
yes=yes,
|
|
323
|
+
verbose=verbose,
|
|
324
|
+
json=as_json,
|
|
325
|
+
plan=dry_run,
|
|
326
|
+
diff=diff,
|
|
327
|
+
progress=not as_json,
|
|
328
|
+
)
|
|
329
|
+
)
|
|
330
|
+
elif diff:
|
|
331
|
+
interactive.require_tty()
|
|
332
|
+
handle_deploy_interactive(diff_mode=True)
|
|
333
|
+
else:
|
|
334
|
+
interactive.require_tty()
|
|
335
|
+
handle_deploy_interactive()
|
|
336
|
+
except typer.Exit:
|
|
337
|
+
raise
|
|
338
|
+
except Exception as exc: # noqa: BLE001 - top-level command boundary
|
|
339
|
+
if as_json:
|
|
340
|
+
_emit_json({"success": False, "error": get_error_message(exc)})
|
|
341
|
+
else:
|
|
342
|
+
print(f"{ANSI.red}Error: {get_error_message(exc)}{ANSI.reset}", file=sys.stdout)
|
|
343
|
+
raise typer.Exit(1) from None
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
def register_deploy(app: typer.Typer) -> None:
|
|
347
|
+
description = COMMAND_DESCRIPTIONS["deploy"]
|
|
348
|
+
app.command("deploy", help=description)(deploy_command)
|
|
349
|
+
app.command("dp", help=description, hidden=True)(deploy_command)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""Spinner progress for CLI deploys (port of ``commands/deploy/progress.ts``)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
import threading
|
|
7
|
+
from collections.abc import Callable
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from typing import Literal
|
|
10
|
+
|
|
11
|
+
from agentcore.cli.constants import ANSI
|
|
12
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
13
|
+
|
|
14
|
+
SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
|
|
15
|
+
|
|
16
|
+
StepStatus = Literal["start", "success", "error", "warn"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class SpinnerProgress:
|
|
21
|
+
on_progress: Callable[[str, StepStatus], None]
|
|
22
|
+
cleanup: Callable[[], None]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def create_spinner_progress(stream=None) -> SpinnerProgress: # type: ignore[no-untyped-def]
|
|
26
|
+
"""``⠋ step...`` while running, then ``✓ step`` / ``✗ step`` / yellow ``⚠ step``."""
|
|
27
|
+
out = stream or sys.stdout
|
|
28
|
+
state: dict[str, object] = {"stop": None, "thread": None}
|
|
29
|
+
lock = threading.Lock()
|
|
30
|
+
|
|
31
|
+
def clear_spinner() -> None:
|
|
32
|
+
stop = state["stop"]
|
|
33
|
+
if stop is not None:
|
|
34
|
+
stop.set() # type: ignore[attr-defined]
|
|
35
|
+
thread = state["thread"]
|
|
36
|
+
if thread is not None:
|
|
37
|
+
thread.join() # type: ignore[attr-defined]
|
|
38
|
+
state["stop"] = state["thread"] = None
|
|
39
|
+
with lock:
|
|
40
|
+
out.write(f"\r{ANSI.clear_line}")
|
|
41
|
+
out.flush()
|
|
42
|
+
|
|
43
|
+
def on_progress(step: str, status: StepStatus) -> None:
|
|
44
|
+
clear_spinner()
|
|
45
|
+
if status == "start":
|
|
46
|
+
stop = threading.Event()
|
|
47
|
+
with lock:
|
|
48
|
+
out.write(f"{SPINNER_FRAMES[0]} {step}...")
|
|
49
|
+
out.flush()
|
|
50
|
+
|
|
51
|
+
def spin() -> None:
|
|
52
|
+
i = 0
|
|
53
|
+
while not stop.wait(0.08):
|
|
54
|
+
i = (i + 1) % len(SPINNER_FRAMES)
|
|
55
|
+
with lock:
|
|
56
|
+
out.write(f"\r{SPINNER_FRAMES[i]} {step}...")
|
|
57
|
+
out.flush()
|
|
58
|
+
|
|
59
|
+
thread = threading.Thread(target=spin, daemon=True)
|
|
60
|
+
state["stop"], state["thread"] = stop, thread
|
|
61
|
+
thread.start()
|
|
62
|
+
elif status == "success":
|
|
63
|
+
print(f"✓ {step}", file=out, flush=True)
|
|
64
|
+
elif status == "warn":
|
|
65
|
+
print(f"{ANSI.yellow}⚠ {step}{ANSI.reset}", file=out, flush=True)
|
|
66
|
+
else:
|
|
67
|
+
print(f"✗ {step}", file=out, flush=True)
|
|
68
|
+
|
|
69
|
+
return SpinnerProgress(on_progress=on_progress, cleanup=clear_spinner)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def run_cli_deploy() -> None:
|
|
73
|
+
"""Deploy used by `dev` before starting the server (failures never block the dev server)."""
|
|
74
|
+
from agentcore.cli.commands.deploy.actions import ValidatedDeployOptions, handle_deploy
|
|
75
|
+
from agentcore.operations.deploy.change_detection import can_skip_deploy
|
|
76
|
+
from agentcore.operations.deploy.ensure_target import ensure_default_deployment_target
|
|
77
|
+
|
|
78
|
+
print("Deploying project resources...")
|
|
79
|
+
spinner = create_spinner_progress()
|
|
80
|
+
try:
|
|
81
|
+
config_io = ConfigIO()
|
|
82
|
+
ensure_default_deployment_target(config_io)
|
|
83
|
+
if can_skip_deploy(config_io):
|
|
84
|
+
spinner.on_progress("No changes detected — skipping deploy", "success")
|
|
85
|
+
spinner.cleanup()
|
|
86
|
+
print()
|
|
87
|
+
return
|
|
88
|
+
result = handle_deploy(
|
|
89
|
+
ValidatedDeployOptions(target="default", auto_confirm=True, on_progress=spinner.on_progress)
|
|
90
|
+
)
|
|
91
|
+
spinner.cleanup()
|
|
92
|
+
sync = result.dependency_sync_result
|
|
93
|
+
if sync and sync.notice:
|
|
94
|
+
print(f"\n{sync.notice}\n")
|
|
95
|
+
for warning in sync.warnings if sync else []:
|
|
96
|
+
print(f"{ANSI.yellow}⚠ {warning}{ANSI.reset}", file=sys.stderr)
|
|
97
|
+
if result.success:
|
|
98
|
+
print("Deploy complete.")
|
|
99
|
+
if result.log_path:
|
|
100
|
+
print(f"Deploy log: {result.log_path}")
|
|
101
|
+
print()
|
|
102
|
+
else:
|
|
103
|
+
print(
|
|
104
|
+
f"{ANSI.yellow}Deploy failed: {result.error}. Starting dev server anyway...{ANSI.reset}",
|
|
105
|
+
file=sys.stderr,
|
|
106
|
+
)
|
|
107
|
+
if result.log_path:
|
|
108
|
+
print(f"Deploy log: {result.log_path}", file=sys.stderr)
|
|
109
|
+
print()
|
|
110
|
+
except Exception as exc: # noqa: BLE001
|
|
111
|
+
spinner.cleanup()
|
|
112
|
+
print(f"{ANSI.yellow}Deploy failed: {exc}. Starting dev server anyway...{ANSI.reset}\n", file=sys.stderr)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
__all__ = ["SPINNER_FRAMES", "SpinnerProgress", "create_spinner_progress", "run_cli_deploy"]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Deploy option/result types (port of ``commands/deploy/types.ts``)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from agentcore.lib.dependency_management.types import DependencySyncResult
|
|
9
|
+
from agentcore.lib.errors.types import BaseError
|
|
10
|
+
from agentcore.operations.deploy.dependency_sync import dependency_sync_result_to_json
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class DeployOptions:
|
|
15
|
+
target: str | None = None
|
|
16
|
+
yes: bool = False
|
|
17
|
+
progress: bool = False
|
|
18
|
+
verbose: bool = False
|
|
19
|
+
json: bool = False
|
|
20
|
+
plan: bool = False
|
|
21
|
+
diff: bool = False
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass
|
|
25
|
+
class DeployResult:
|
|
26
|
+
"""``Result<{targetName, stackName, outputs, nextSteps, notes, postDeployWarnings}> & {logPath, dependencySyncResult}``."""
|
|
27
|
+
|
|
28
|
+
success: bool
|
|
29
|
+
error: BaseException | None = None
|
|
30
|
+
target_name: str | None = None
|
|
31
|
+
stack_name: str | None = None
|
|
32
|
+
outputs: dict[str, str] | None = None
|
|
33
|
+
next_steps: list[str] | None = None
|
|
34
|
+
notes: list[str] | None = None
|
|
35
|
+
post_deploy_warnings: list[str] | None = None
|
|
36
|
+
log_path: str | None = None
|
|
37
|
+
dependency_sync_result: DependencySyncResult | None = None
|
|
38
|
+
extra: dict[str, Any] = field(default_factory=dict)
|
|
39
|
+
|
|
40
|
+
def to_json(self) -> dict[str, Any]:
|
|
41
|
+
"""Keys in upstream's object order; ``None`` (undefined) dropped. Failures as ``serializeResult``."""
|
|
42
|
+
sync = dependency_sync_result_to_json(self.dependency_sync_result) if self.dependency_sync_result else None
|
|
43
|
+
if self.success:
|
|
44
|
+
data: dict[str, Any] = {
|
|
45
|
+
"success": True,
|
|
46
|
+
"targetName": self.target_name,
|
|
47
|
+
"stackName": self.stack_name,
|
|
48
|
+
"outputs": self.outputs,
|
|
49
|
+
"logPath": self.log_path,
|
|
50
|
+
"nextSteps": self.next_steps,
|
|
51
|
+
"notes": self.notes,
|
|
52
|
+
"postDeployWarnings": self.post_deploy_warnings,
|
|
53
|
+
"dependencySyncResult": sync,
|
|
54
|
+
}
|
|
55
|
+
else:
|
|
56
|
+
data = {
|
|
57
|
+
"success": False,
|
|
58
|
+
"logPath": self.log_path,
|
|
59
|
+
"dependencySyncResult": sync,
|
|
60
|
+
"error": str(self.error) if self.error is not None else None,
|
|
61
|
+
}
|
|
62
|
+
if isinstance(self.error, BaseError):
|
|
63
|
+
data["errorName"] = self.error.name
|
|
64
|
+
data["errorSource"] = self.error.error_source
|
|
65
|
+
return {k: v for k, v in data.items() if v is not None}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
__all__ = ["DeployOptions", "DeployResult"]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Deploy telemetry attributes (port of ``commands/deploy/utils.ts``; telemetry itself is not ported)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
DEFAULT_DEPLOY_ATTRS: dict[str, Any] = {
|
|
8
|
+
"runtime_count": 0,
|
|
9
|
+
"harness_count": 0,
|
|
10
|
+
"memory_count": 0,
|
|
11
|
+
"credential_count": 0,
|
|
12
|
+
"evaluator_count": 0,
|
|
13
|
+
"online_eval_count": 0,
|
|
14
|
+
"gateway_count": 0,
|
|
15
|
+
"gateway_target_count": 0,
|
|
16
|
+
"policy_engine_count": 0,
|
|
17
|
+
"policy_count": 0,
|
|
18
|
+
"deploy_mode": "deploy",
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def compute_deploy_attrs(project_spec: Any, mode: str) -> dict[str, Any]:
|
|
23
|
+
def items(name: str) -> list[Any]:
|
|
24
|
+
return list(getattr(project_spec, name, None) or [])
|
|
25
|
+
|
|
26
|
+
gateways = items("agent_core_gateways")
|
|
27
|
+
engines = items("policy_engines")
|
|
28
|
+
return {
|
|
29
|
+
"runtime_count": len(items("runtimes")),
|
|
30
|
+
"harness_count": len(items("harnesses")),
|
|
31
|
+
"memory_count": len(items("memories")),
|
|
32
|
+
"credential_count": len(items("credentials")),
|
|
33
|
+
"evaluator_count": len(items("evaluators")),
|
|
34
|
+
"online_eval_count": len(items("online_eval_configs")),
|
|
35
|
+
"gateway_count": len(gateways),
|
|
36
|
+
"gateway_target_count": sum(len(getattr(g, "targets", None) or []) for g in gateways),
|
|
37
|
+
"policy_engine_count": len(engines),
|
|
38
|
+
"policy_count": sum(len(getattr(pe, "policies", None) or []) for pe in engines),
|
|
39
|
+
"deploy_mode": mode,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
__all__ = ["DEFAULT_DEPLOY_ATTRS", "compute_deploy_attrs"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""Deploy option validation (port of ``commands/deploy/validate.ts``)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
from agentcore.cli.commands.deploy.types import DeployOptions
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@dataclass(frozen=True)
|
|
11
|
+
class ValidationResult:
|
|
12
|
+
valid: bool
|
|
13
|
+
error: str | None = None
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def validate_deploy_options(_options: DeployOptions) -> ValidationResult:
|
|
17
|
+
# Target is always set (defaulted to 'default' by the command handler).
|
|
18
|
+
return ValidationResult(valid=True)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
__all__ = ["ValidationResult", "validate_deploy_options"]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Bridges to other feature areas (deploy, status, project guard), resolved lazily.
|
|
2
|
+
|
|
3
|
+
Upstream imports `runCliDeploy` (commands/deploy/progress) and `isDeploySkippable`
|
|
4
|
+
(operations/deploy/change-detection) directly; here they are looked up at call time so `dev`
|
|
5
|
+
keeps working while those areas are still being ported.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
DESCRIPTION = "Launch local dev server, or invoke an agent locally."
|
|
12
|
+
"""COMMAND_DESCRIPTIONS.dev from upstream cli/constants.ts."""
|
|
13
|
+
|
|
14
|
+
# ANSI escapes from upstream cli/constants.ts (ANSI.*), used by dev output.
|
|
15
|
+
ANSI_YELLOW = "\x1b[33m"
|
|
16
|
+
ANSI_RESET = "\x1b[0m"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def run_cli_deploy() -> None:
|
|
20
|
+
try:
|
|
21
|
+
from agentcore.cli.commands.deploy.progress import run_cli_deploy as deploy # type: ignore[import-not-found]
|
|
22
|
+
except ImportError:
|
|
23
|
+
deploy = None
|
|
24
|
+
if deploy is not None:
|
|
25
|
+
deploy()
|
|
26
|
+
return
|
|
27
|
+
# Fallback until the deploy port exposes run_cli_deploy: run `agentcore deploy --yes`.
|
|
28
|
+
print("Deploying project resources...")
|
|
29
|
+
code = subprocess.call(
|
|
30
|
+
[sys.executable, "-c", "from agentcore.cli.main import app; app()", "deploy", "--yes"],
|
|
31
|
+
)
|
|
32
|
+
if code != 0:
|
|
33
|
+
raise RuntimeError("Deploy failed.")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def is_deploy_skippable() -> bool:
|
|
37
|
+
try:
|
|
38
|
+
from agentcore.operations.deploy.change_detection import is_deploy_skippable as skippable
|
|
39
|
+
except ImportError:
|
|
40
|
+
return False
|
|
41
|
+
try:
|
|
42
|
+
return bool(skippable())
|
|
43
|
+
except Exception: # noqa: BLE001 - when unsure, deploy (as upstream's catch-all)
|
|
44
|
+
return False
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def require_project() -> None:
|
|
48
|
+
from agentcore.cli.commands.logs.guards import require_project as guard
|
|
49
|
+
|
|
50
|
+
guard()
|