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,149 @@
|
|
|
1
|
+
"""Port of commands/invoke/resolve.ts: resolve which deployed runtime an invoke targets."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from agentcore.aws._http import encode_uri_component
|
|
7
|
+
from agentcore.cli.commands.invoke import _deps
|
|
8
|
+
from agentcore.lib.errors.types import ResourceNotFoundError, ValidationError
|
|
9
|
+
from agentcore.operations.session import generate_session_id
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class ResolveInvokeResult:
|
|
14
|
+
"""``{success: true, ...ResolvedInvokeTarget}`` or ``{success: false, error}``."""
|
|
15
|
+
|
|
16
|
+
success: bool
|
|
17
|
+
error: Exception | None = None
|
|
18
|
+
agent_spec: Any = None
|
|
19
|
+
target_name: str | None = None
|
|
20
|
+
target_config: Any = None
|
|
21
|
+
region: str | None = None
|
|
22
|
+
runtime_arn: str | None = None
|
|
23
|
+
bearer_token: str | None = None
|
|
24
|
+
session_id: str | None = None
|
|
25
|
+
baggage: str | None = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def build_config_bundle_baggage(project: Any, target_state: Any, agent_name: str) -> str | None:
|
|
29
|
+
"""W3C baggage for the config bundle whose components reference ``{{runtime:<agent>}}``, if deployed."""
|
|
30
|
+
key = f"{{{{runtime:{agent_name}}}}}"
|
|
31
|
+
bundle_spec = next(
|
|
32
|
+
(b for b in (project.config_bundles or []) if key in (b.components or {})),
|
|
33
|
+
None,
|
|
34
|
+
)
|
|
35
|
+
if bundle_spec is None:
|
|
36
|
+
return None
|
|
37
|
+
resources = target_state.resources if target_state else None
|
|
38
|
+
deployed = (resources.config_bundles if resources else None) or {}
|
|
39
|
+
state = deployed.get(bundle_spec.name)
|
|
40
|
+
if state and state.bundle_arn and state.version_id:
|
|
41
|
+
return (
|
|
42
|
+
f"aws.agentcore.configbundle_arn={encode_uri_component(state.bundle_arn)},"
|
|
43
|
+
f"aws.agentcore.configbundle_version={encode_uri_component(state.version_id)}"
|
|
44
|
+
)
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def resolve_invoke_target(
|
|
49
|
+
*,
|
|
50
|
+
project: Any,
|
|
51
|
+
deployed_state: Any,
|
|
52
|
+
aws_targets: list[Any],
|
|
53
|
+
agent_name: str | None = None,
|
|
54
|
+
target_name: str | None = None,
|
|
55
|
+
bearer_token: str | None = None,
|
|
56
|
+
session_id: str | None = None,
|
|
57
|
+
config_io: Any = None,
|
|
58
|
+
) -> ResolveInvokeResult:
|
|
59
|
+
targets = deployed_state.targets or {}
|
|
60
|
+
target_names = list(targets)
|
|
61
|
+
if not target_names:
|
|
62
|
+
return ResolveInvokeResult(
|
|
63
|
+
False, error=ResourceNotFoundError("No deployed targets found. Run `agentcore deploy` first.")
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
selected = target_name if target_name is not None else target_names[0]
|
|
67
|
+
if target_name and target_name not in target_names:
|
|
68
|
+
return ResolveInvokeResult(
|
|
69
|
+
False,
|
|
70
|
+
error=ResourceNotFoundError(f"Target '{target_name}' not found. Available: {', '.join(target_names)}"),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
target_state = targets.get(selected)
|
|
74
|
+
target_config = next((t for t in aws_targets if t.name == selected), None)
|
|
75
|
+
if target_config is None:
|
|
76
|
+
return ResolveInvokeResult(
|
|
77
|
+
False, error=ResourceNotFoundError(f"Target config '{selected}' not found in aws-targets")
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
runtimes = project.runtimes or []
|
|
81
|
+
if not runtimes:
|
|
82
|
+
return ResolveInvokeResult(False, error=ValidationError("No agents defined in configuration"))
|
|
83
|
+
|
|
84
|
+
agent_names = [a.name for a in runtimes]
|
|
85
|
+
if not agent_name and len(runtimes) > 1:
|
|
86
|
+
return ResolveInvokeResult(
|
|
87
|
+
False,
|
|
88
|
+
error=ValidationError(f"Multiple runtimes found. Use --runtime to specify one: {', '.join(agent_names)}"),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
agent_spec = next((a for a in runtimes if a.name == agent_name), None) if agent_name else runtimes[0]
|
|
92
|
+
if agent_name and agent_spec is None:
|
|
93
|
+
return ResolveInvokeResult(
|
|
94
|
+
False,
|
|
95
|
+
error=ResourceNotFoundError(f"Agent '{agent_name}' not found. Available: {', '.join(agent_names)}"),
|
|
96
|
+
)
|
|
97
|
+
if agent_spec is None:
|
|
98
|
+
return ResolveInvokeResult(False, error=ValidationError("No agents defined in configuration"))
|
|
99
|
+
|
|
100
|
+
resources = target_state.resources if target_state else None
|
|
101
|
+
agent_state = ((resources.runtimes if resources else None) or {}).get(agent_spec.name)
|
|
102
|
+
if not agent_state:
|
|
103
|
+
return ResolveInvokeResult(
|
|
104
|
+
False, error=ValidationError(f"Agent '{agent_spec.name}' is not deployed to target '{selected}'")
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
baggage = build_config_bundle_baggage(project, target_state, agent_spec.name)
|
|
108
|
+
|
|
109
|
+
token = bearer_token
|
|
110
|
+
if agent_spec.authorizer_type == "CUSTOM_JWT" and not token:
|
|
111
|
+
if _deps.can_fetch_runtime_token(agent_spec.name, config_io=config_io):
|
|
112
|
+
try:
|
|
113
|
+
token = _deps.token_of(
|
|
114
|
+
_deps.fetch_runtime_token(agent_spec.name, config_io=config_io, deploy_target=selected)
|
|
115
|
+
)
|
|
116
|
+
except Exception as exc: # noqa: BLE001 - surfaced as a validation error, as upstream
|
|
117
|
+
return ResolveInvokeResult(
|
|
118
|
+
False,
|
|
119
|
+
error=ValidationError(
|
|
120
|
+
f"CUSTOM_JWT agent requires a bearer token. Auto-fetch failed: {exc}\n"
|
|
121
|
+
"Provide one manually with --bearer-token.",
|
|
122
|
+
cause=exc,
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
else:
|
|
126
|
+
return ResolveInvokeResult(
|
|
127
|
+
False,
|
|
128
|
+
error=ValidationError(
|
|
129
|
+
f"Agent '{agent_spec.name}' is configured for CUSTOM_JWT but no bearer token is available.\n"
|
|
130
|
+
"Either provide --bearer-token or re-add the agent with --client-id and --client-secret to "
|
|
131
|
+
"enable auto-fetch."
|
|
132
|
+
),
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
sid = session_id
|
|
136
|
+
if token and not sid:
|
|
137
|
+
sid = generate_session_id()
|
|
138
|
+
|
|
139
|
+
return ResolveInvokeResult(
|
|
140
|
+
True,
|
|
141
|
+
agent_spec=agent_spec,
|
|
142
|
+
target_name=selected,
|
|
143
|
+
target_config=target_config,
|
|
144
|
+
region=target_config.region,
|
|
145
|
+
runtime_arn=agent_state.runtime_arn,
|
|
146
|
+
bearer_token=token,
|
|
147
|
+
session_id=sid,
|
|
148
|
+
baggage=baggage,
|
|
149
|
+
)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Port of commands/invoke/resolve-prompt.ts."""
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
import sys
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import IO
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class PromptSources:
|
|
11
|
+
flag: str | None = None
|
|
12
|
+
"""Value from --prompt."""
|
|
13
|
+
positional: str | None = None
|
|
14
|
+
file: str | None = None
|
|
15
|
+
"""Path from --prompt-file."""
|
|
16
|
+
stdin_piped: bool = False
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class ResolvedPrompt:
|
|
21
|
+
success: bool
|
|
22
|
+
prompt: str | None = None
|
|
23
|
+
error: str | None = None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _read_prompt_file(path: str) -> ResolvedPrompt:
|
|
27
|
+
try:
|
|
28
|
+
with open(path, encoding="utf-8") as f:
|
|
29
|
+
content = f.read()
|
|
30
|
+
return ResolvedPrompt(True, prompt=re.sub(r"\r?\n$", "", content, count=1))
|
|
31
|
+
except OSError as exc:
|
|
32
|
+
message = f"{exc.strerror}" if exc.strerror else str(exc)
|
|
33
|
+
if isinstance(exc, FileNotFoundError):
|
|
34
|
+
message = f"ENOENT: no such file or directory, open '{path}'"
|
|
35
|
+
return ResolvedPrompt(False, error=f"Failed to read --prompt-file '{path}': {message}")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _read_stdin(stdin: IO[str]) -> str:
|
|
39
|
+
return stdin.read().strip()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def resolve_prompt(sources: PromptSources, stdin: IO[str] | None = None) -> ResolvedPrompt:
|
|
43
|
+
"""Precedence: --prompt, positional, --prompt-file, piped stdin. --prompt-file plus piped stdin is an error."""
|
|
44
|
+
if sources.flag is not None:
|
|
45
|
+
return ResolvedPrompt(True, prompt=sources.flag)
|
|
46
|
+
if sources.positional is not None:
|
|
47
|
+
return ResolvedPrompt(True, prompt=sources.positional)
|
|
48
|
+
|
|
49
|
+
stdin_content = _read_stdin(stdin or sys.stdin) if sources.stdin_piped else ""
|
|
50
|
+
has_stdin = len(stdin_content) > 0
|
|
51
|
+
|
|
52
|
+
if sources.file is not None and has_stdin:
|
|
53
|
+
return ResolvedPrompt(
|
|
54
|
+
False, error="Cannot combine --prompt-file with piped stdin. Provide only one prompt source."
|
|
55
|
+
)
|
|
56
|
+
if sources.file is not None:
|
|
57
|
+
return _read_prompt_file(sources.file)
|
|
58
|
+
if has_stdin:
|
|
59
|
+
return ResolvedPrompt(True, prompt=stdin_content)
|
|
60
|
+
return ResolvedPrompt(True, prompt=None)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Port of commands/invoke/types.ts."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, replace
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
# Upstream's InvokeResult is `Result & {logFilePath?, agentName?, targetName?, response?, sessionId?, exitCode?}`.
|
|
7
|
+
# It is kept as a plain dict so `--json` output preserves upstream key order (each return site builds
|
|
8
|
+
# the dict in the same order as the upstream object literal; ``None`` means undefined).
|
|
9
|
+
InvokeResult = dict[str, Any]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class InvokeOptions:
|
|
14
|
+
agent_name: str | None = None
|
|
15
|
+
harness_name: str | None = None
|
|
16
|
+
harness_arn: str | None = None
|
|
17
|
+
"""Direct harness ARN — bypasses project config and deployed state resolution."""
|
|
18
|
+
gateway: str | None = None
|
|
19
|
+
gateway_target: str | None = None
|
|
20
|
+
region: str | None = None
|
|
21
|
+
target_name: str | None = None
|
|
22
|
+
prompt: str | None = None
|
|
23
|
+
prompt_file: str | None = None
|
|
24
|
+
session_id: str | None = None
|
|
25
|
+
user_id: str | None = None
|
|
26
|
+
json: bool | None = None
|
|
27
|
+
stream: bool | None = None
|
|
28
|
+
tool: str | None = None
|
|
29
|
+
input: str | None = None
|
|
30
|
+
exec: bool | None = None
|
|
31
|
+
timeout: int | None = None
|
|
32
|
+
headers: dict[str, str] | None = None
|
|
33
|
+
bearer_token: str | None = None
|
|
34
|
+
verbose: bool | None = None
|
|
35
|
+
model_id: str | None = None
|
|
36
|
+
model_provider: str | None = None
|
|
37
|
+
api_key_arn: str | None = None
|
|
38
|
+
api_base: str | None = None
|
|
39
|
+
additional_params: dict[str, Any] | None = None
|
|
40
|
+
tools: str | None = None
|
|
41
|
+
max_iterations: int | None = None
|
|
42
|
+
harness_timeout: int | None = None
|
|
43
|
+
max_tokens: int | None = None
|
|
44
|
+
skills: str | None = None
|
|
45
|
+
system_prompt: str | None = None
|
|
46
|
+
allowed_tools: str | None = None
|
|
47
|
+
actor_id: str | None = None
|
|
48
|
+
payment_instrument_id: str | None = None
|
|
49
|
+
payment_session_id: str | None = None
|
|
50
|
+
auto_session: bool | None = None
|
|
51
|
+
payment_user_id: str | None = None
|
|
52
|
+
|
|
53
|
+
def with_(self, **changes: Any) -> "InvokeOptions":
|
|
54
|
+
return replace(self, **changes)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def result(success: bool, **fields: Any) -> InvokeResult:
|
|
58
|
+
"""Build an InvokeResult dict: ``success`` first, then fields in the given order (``None`` dropped)."""
|
|
59
|
+
out: InvokeResult = {"success": success}
|
|
60
|
+
out.update({k: v for k, v in fields.items() if v is not None})
|
|
61
|
+
return out
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Port of commands/invoke/validate.ts."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
from agentcore.cli.commands.invoke.types import InvokeOptions
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class ValidationResult:
|
|
10
|
+
valid: bool
|
|
11
|
+
error: str | None = None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def validate_invoke_options(options: InvokeOptions) -> ValidationResult:
|
|
15
|
+
if options.exec and not options.prompt:
|
|
16
|
+
return ValidationResult(False, 'A command is required with --exec. Usage: agentcore invoke --exec "ls -la"')
|
|
17
|
+
if options.exec and (options.tool or options.input):
|
|
18
|
+
return ValidationResult(False, "--exec cannot be combined with --tool or --input")
|
|
19
|
+
if options.exec and options.stream:
|
|
20
|
+
return ValidationResult(False, "--exec already streams output; --stream is not needed")
|
|
21
|
+
if options.json and not options.prompt:
|
|
22
|
+
return ValidationResult(False, "Prompt is required for JSON output")
|
|
23
|
+
if options.stream and not options.prompt:
|
|
24
|
+
return ValidationResult(False, "Prompt is required for streaming")
|
|
25
|
+
if options.auto_session and options.payment_session_id:
|
|
26
|
+
return ValidationResult(
|
|
27
|
+
False, "--auto-session and --payment-session-id are mutually exclusive. Use one or the other."
|
|
28
|
+
)
|
|
29
|
+
if options.payment_instrument_id is not None and options.payment_instrument_id.strip() == "":
|
|
30
|
+
return ValidationResult(False, "--payment-instrument-id cannot be empty")
|
|
31
|
+
if options.payment_session_id is not None and options.payment_session_id.strip() == "":
|
|
32
|
+
return ValidationResult(False, "--payment-session-id cannot be empty")
|
|
33
|
+
return ValidationResult(True)
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"""Job lifecycle commands: `pause`/`resume` (online-eval, online-insights, ab-test), `stop`
|
|
2
|
+
(ab-test, batch-evaluation), `archive` (batch-evaluation, recommendation, ab-test, insights) and
|
|
3
|
+
`promote ab-test` (ports of commands/pause, stop, archive and promote).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
|
|
8
|
+
from agentcore.cli.commands._jobs_common import fail_early, print_json, red, require_project
|
|
9
|
+
from agentcore.cli.errors import get_error_message
|
|
10
|
+
from agentcore.cli.groups import group
|
|
11
|
+
from agentcore.cli.run_command import run_cli_command
|
|
12
|
+
from agentcore.lib import ConfigIO, serialize_result
|
|
13
|
+
from agentcore.operations.eval.pause_resume import handle_pause_resume
|
|
14
|
+
from agentcore.operations.jobs import create_job_engine
|
|
15
|
+
|
|
16
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
# pause / resume
|
|
18
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _online_config_action(name: str | None, arn: str | None, region: str | None, as_json: bool, action: str, kind: str):
|
|
22
|
+
if not arn and not name:
|
|
23
|
+
fail_early(as_json, "Either a config name or --arn is required")
|
|
24
|
+
if not arn or name:
|
|
25
|
+
require_project()
|
|
26
|
+
past = "Paused" if action == "pause" else "Resumed"
|
|
27
|
+
try:
|
|
28
|
+
result = handle_pause_resume(name=name or "", action=action, arn=arn, region=region)
|
|
29
|
+
if as_json:
|
|
30
|
+
print_json(serialize_result(result))
|
|
31
|
+
elif result.success:
|
|
32
|
+
display = result.value["configId"] if arn else name
|
|
33
|
+
typer.echo(f'{past} {kind} config "{display}" (status: {result.value["executionStatus"]})')
|
|
34
|
+
else:
|
|
35
|
+
red(str(result.error))
|
|
36
|
+
raise typer.Exit(0 if result.success else 1)
|
|
37
|
+
except typer.Exit:
|
|
38
|
+
raise
|
|
39
|
+
except Exception as exc: # noqa: BLE001
|
|
40
|
+
if as_json:
|
|
41
|
+
print_json({"success": False, "error": get_error_message(exc)})
|
|
42
|
+
else:
|
|
43
|
+
red(f"Error: {get_error_message(exc)}")
|
|
44
|
+
raise typer.Exit(1) from None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _register_pause_resume(action: str) -> None:
|
|
48
|
+
app = group(action)
|
|
49
|
+
verb = "Pause" if action == "pause" else "Resume"
|
|
50
|
+
online_help = (
|
|
51
|
+
"Pause a deployed online eval config. Use --arn to target configs outside the project."
|
|
52
|
+
if action == "pause"
|
|
53
|
+
else "Resume a paused online eval config. Use --arn to target configs outside the project."
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
@app.command("online-eval", help=online_help)
|
|
57
|
+
def online_eval(
|
|
58
|
+
name: str | None = typer.Argument(None, help="Config name from project (not needed with --arn)"),
|
|
59
|
+
arn: str | None = typer.Option(
|
|
60
|
+
None, "--arn", help="Online eval config ARN — operate without a project directory"
|
|
61
|
+
),
|
|
62
|
+
region: str | None = typer.Option(
|
|
63
|
+
None, "--region", help="AWS region override (auto-detected from ARN otherwise)"
|
|
64
|
+
),
|
|
65
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
66
|
+
) -> None:
|
|
67
|
+
_online_config_action(name, arn, region, as_json, action, "online eval")
|
|
68
|
+
|
|
69
|
+
insights_help = (
|
|
70
|
+
"[preview] Pause a deployed online insights config. Use --arn to target configs outside the project."
|
|
71
|
+
if action == "pause"
|
|
72
|
+
else "[preview] Resume a paused online insights config. Use --arn to target configs outside the project."
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
@app.command("online-insights", help=insights_help)
|
|
76
|
+
def online_insights(
|
|
77
|
+
name: str | None = typer.Argument(None, help="Config name from project (not needed with --arn)"),
|
|
78
|
+
arn: str | None = typer.Option(
|
|
79
|
+
None, "--arn", help="Online insights config ARN — operate without a project directory"
|
|
80
|
+
),
|
|
81
|
+
region: str | None = typer.Option(
|
|
82
|
+
None, "--region", help="AWS region override (auto-detected from ARN otherwise)"
|
|
83
|
+
),
|
|
84
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
85
|
+
) -> None:
|
|
86
|
+
_online_config_action(name, arn, region, as_json, action, "online insights")
|
|
87
|
+
|
|
88
|
+
@app.command("ab-test", help=f"{verb} a running A/B test")
|
|
89
|
+
def ab_test(
|
|
90
|
+
job_id: str = typer.Option(..., "-i", "--id", help="A/B test ID"),
|
|
91
|
+
region: str | None = typer.Option(None, "--region", help="AWS region (auto-detected if omitted)"),
|
|
92
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
93
|
+
) -> None:
|
|
94
|
+
require_project()
|
|
95
|
+
|
|
96
|
+
def run() -> None:
|
|
97
|
+
engine = create_job_engine(ConfigIO())
|
|
98
|
+
result = engine.pause("ab-test", job_id) if action == "pause" else engine.resume("ab-test", job_id)
|
|
99
|
+
if not result.success:
|
|
100
|
+
raise result.error
|
|
101
|
+
if as_json:
|
|
102
|
+
print_json({"success": True, "id": job_id})
|
|
103
|
+
else:
|
|
104
|
+
typer.echo(f"\n✓ A/B test {job_id} {'paused' if action == 'pause' else 'resumed'}.\n")
|
|
105
|
+
|
|
106
|
+
run_cli_command(as_json, run)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
_register_pause_resume("pause")
|
|
110
|
+
_register_pause_resume("resume")
|
|
111
|
+
|
|
112
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
113
|
+
# stop
|
|
114
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
115
|
+
|
|
116
|
+
stop_app = group("stop")
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _stop(job_type: str, job_id: str, as_json: bool, label: str) -> None:
|
|
120
|
+
require_project()
|
|
121
|
+
|
|
122
|
+
def run() -> None:
|
|
123
|
+
result = create_job_engine(ConfigIO()).stop(job_type, job_id)
|
|
124
|
+
if not result.success:
|
|
125
|
+
raise result.error
|
|
126
|
+
if as_json:
|
|
127
|
+
print_json({"success": True, "id": job_id})
|
|
128
|
+
else:
|
|
129
|
+
typer.echo(f"\n✓ {label} {job_id} stop requested.\n")
|
|
130
|
+
|
|
131
|
+
run_cli_command(as_json, run)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
@stop_app.command("ab-test", help="Stop a running A/B test permanently")
|
|
135
|
+
def stop_ab_test(
|
|
136
|
+
job_id: str = typer.Option(..., "-i", "--id", help="A/B test ID to stop"),
|
|
137
|
+
region: str | None = typer.Option(None, "--region", help="AWS region (auto-detected if omitted)"),
|
|
138
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
139
|
+
) -> None:
|
|
140
|
+
_stop("ab-test", job_id, as_json, "A/B test")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@stop_app.command("batch-evaluation", help="Stop a running batch evaluation")
|
|
144
|
+
def stop_batch_evaluation(
|
|
145
|
+
job_id: str = typer.Option(..., "-i", "--id", help="Batch evaluation ID to stop"),
|
|
146
|
+
region: str | None = typer.Option(None, "--region", help="AWS region (auto-detected if omitted)"),
|
|
147
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
148
|
+
) -> None:
|
|
149
|
+
_stop("batch-evaluation", job_id, as_json, "Batch evaluation")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
153
|
+
# archive
|
|
154
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
155
|
+
|
|
156
|
+
archive_app = group("archive")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def execute_archive(job_type: str, job_id: str, as_json: bool, label: str) -> None:
|
|
160
|
+
require_project()
|
|
161
|
+
|
|
162
|
+
def run() -> None:
|
|
163
|
+
result = create_job_engine(ConfigIO()).archive(job_type, job_id)
|
|
164
|
+
if not result.success:
|
|
165
|
+
raise result.error
|
|
166
|
+
if as_json:
|
|
167
|
+
print_json({"success": True, "id": job_id})
|
|
168
|
+
else:
|
|
169
|
+
typer.echo(f"\n✓ {label} {job_id} archived.\n")
|
|
170
|
+
|
|
171
|
+
run_cli_command(as_json, run)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _register_archive(job_type: str, help_text: str, id_help: str, label: str) -> None:
|
|
175
|
+
def command(
|
|
176
|
+
job_id: str = typer.Option(..., "-i", "--id", help=id_help),
|
|
177
|
+
region: str | None = typer.Option(None, "--region", help="AWS region (auto-detected if omitted)"),
|
|
178
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
179
|
+
) -> None:
|
|
180
|
+
execute_archive(job_type, job_id, as_json, label)
|
|
181
|
+
|
|
182
|
+
archive_app.command(job_type, help=help_text)(command)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
_register_archive(
|
|
186
|
+
"batch-evaluation",
|
|
187
|
+
"Archive a batch evaluation job record on the service and clear local history",
|
|
188
|
+
"Batch evaluation ID to archive",
|
|
189
|
+
"Batch evaluation",
|
|
190
|
+
)
|
|
191
|
+
_register_archive(
|
|
192
|
+
"recommendation",
|
|
193
|
+
"Archive a recommendation job record on the service and clear local history",
|
|
194
|
+
"Recommendation ID to archive",
|
|
195
|
+
"Recommendation",
|
|
196
|
+
)
|
|
197
|
+
_register_archive(
|
|
198
|
+
"ab-test",
|
|
199
|
+
"Archive (delete) an A/B test on the service and clear local history",
|
|
200
|
+
"A/B test ID to archive",
|
|
201
|
+
"A/B test",
|
|
202
|
+
)
|
|
203
|
+
_register_archive(
|
|
204
|
+
"insights",
|
|
205
|
+
"[preview] Archive an insights job record on the service and clear local history",
|
|
206
|
+
"Insights job ID to archive",
|
|
207
|
+
"Insights job",
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
211
|
+
# promote
|
|
212
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
213
|
+
|
|
214
|
+
promote_app = group("promote")
|
|
215
|
+
promote_app.info.help = "Promote resources"
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@promote_app.command(
|
|
219
|
+
"ab-test",
|
|
220
|
+
help="Promote the winning treatment of an A/B test (stops the test and updates agentcore.json)",
|
|
221
|
+
)
|
|
222
|
+
def promote_ab_test(
|
|
223
|
+
job_id: str = typer.Option(..., "-i", "--id", help="A/B test ID"),
|
|
224
|
+
region: str | None = typer.Option(None, "--region", help="AWS region (auto-detected if omitted)"),
|
|
225
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON"),
|
|
226
|
+
) -> None:
|
|
227
|
+
require_project()
|
|
228
|
+
|
|
229
|
+
def run() -> None:
|
|
230
|
+
result = create_job_engine(ConfigIO()).promote("ab-test", job_id)
|
|
231
|
+
if not result.success:
|
|
232
|
+
raise result.error
|
|
233
|
+
if as_json:
|
|
234
|
+
print_json({"success": True, "id": job_id})
|
|
235
|
+
else:
|
|
236
|
+
typer.echo(f"\n✓ A/B test {job_id} stopped and winning variant applied to agentcore.json.")
|
|
237
|
+
typer.echo("\nRun: agentcore deploy\n")
|
|
238
|
+
|
|
239
|
+
run_cli_command(as_json, run)
|