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,95 @@
|
|
|
1
|
+
"""Read and validate all on-disk inputs for a harness export (port of harness-resolver.ts)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from agentcore.cli.commands.export.constants import DEFAULT_SYSTEM_PROMPT
|
|
10
|
+
from agentcore.cli.commands.export.types import ResolvedHarnessContext
|
|
11
|
+
from agentcore.lib.errors.types import ValidationError
|
|
12
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO, to_jsonable
|
|
13
|
+
from agentcore.lib.schemas.io.path_resolver import require_config_root
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class PrefetchedHarness:
|
|
18
|
+
"""A harness spec + system prompt fetched out-of-band (the ``--arn`` path)."""
|
|
19
|
+
|
|
20
|
+
spec: dict[str, Any]
|
|
21
|
+
system_prompt: str | None = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def resolve_harness_context(
|
|
25
|
+
harness_name: str,
|
|
26
|
+
target_agent_name: str,
|
|
27
|
+
config_base_dir: str | None = None,
|
|
28
|
+
prefetched: PrefetchedHarness | None = None,
|
|
29
|
+
) -> ResolvedHarnessContext:
|
|
30
|
+
base_dir = config_base_dir or require_config_root()
|
|
31
|
+
config_io = ConfigIO(base_dir=base_dir)
|
|
32
|
+
project_root = os.path.normpath(os.path.join(base_dir, ".."))
|
|
33
|
+
|
|
34
|
+
project = to_jsonable(config_io.read_project_spec())
|
|
35
|
+
if prefetched is None:
|
|
36
|
+
harnesses = project.get("harnesses") or []
|
|
37
|
+
if not any(h["name"] == harness_name for h in harnesses):
|
|
38
|
+
available = ", ".join(h["name"] for h in harnesses) or "none"
|
|
39
|
+
raise ValidationError(
|
|
40
|
+
f'Harness "{harness_name}" not found in agentcore.json. Available harnesses: {available}'
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
if any(r["name"] == target_agent_name for r in project.get("runtimes") or []):
|
|
44
|
+
raise ValidationError(
|
|
45
|
+
f'A runtime agent named "{target_agent_name}" already exists. Choose a different --target-agent-name.'
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
if os.path.exists(os.path.join(project_root, "app", target_agent_name)):
|
|
49
|
+
raise ValidationError(
|
|
50
|
+
f'The directory "app/{target_agent_name}/" already exists. Remove it or choose a different '
|
|
51
|
+
"--target-agent-name."
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
if prefetched is not None:
|
|
55
|
+
spec = prefetched.spec
|
|
56
|
+
trimmed = (prefetched.system_prompt or "").strip()
|
|
57
|
+
system_prompt = trimmed or spec.get("systemPrompt") or DEFAULT_SYSTEM_PROMPT
|
|
58
|
+
else:
|
|
59
|
+
spec = to_jsonable(config_io.read_harness_spec(harness_name))
|
|
60
|
+
prompt_path = os.path.join(project_root, "app", harness_name, "system-prompt.md")
|
|
61
|
+
if os.path.exists(prompt_path):
|
|
62
|
+
with open(prompt_path, encoding="utf-8") as fh:
|
|
63
|
+
system_prompt = fh.read().strip()
|
|
64
|
+
else:
|
|
65
|
+
system_prompt = spec.get("systemPrompt") or DEFAULT_SYSTEM_PROMPT
|
|
66
|
+
|
|
67
|
+
deployed_resources: dict[str, Any] | None = None
|
|
68
|
+
try:
|
|
69
|
+
state = to_jsonable(config_io.read_deployed_state())
|
|
70
|
+
first = next(iter((state.get("targets") or {}).values()), None)
|
|
71
|
+
deployed_resources = (first or {}).get("resources") or None
|
|
72
|
+
except Exception: # noqa: BLE001 - absent before first deploy
|
|
73
|
+
pass
|
|
74
|
+
|
|
75
|
+
region: str | None = None
|
|
76
|
+
try:
|
|
77
|
+
targets = to_jsonable(config_io.read_aws_deployment_targets())
|
|
78
|
+
region = targets[0].get("region") if targets else None
|
|
79
|
+
except Exception: # noqa: BLE001
|
|
80
|
+
pass
|
|
81
|
+
|
|
82
|
+
return ResolvedHarnessContext(
|
|
83
|
+
harness_name=harness_name,
|
|
84
|
+
target_agent_name=target_agent_name,
|
|
85
|
+
spec=spec,
|
|
86
|
+
system_prompt=system_prompt,
|
|
87
|
+
project_spec=project,
|
|
88
|
+
deployed_resources=deployed_resources,
|
|
89
|
+
config_base_dir=base_dir,
|
|
90
|
+
project_root=project_root,
|
|
91
|
+
region=region,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
__all__ = ["PrefetchedHarness", "resolve_harness_context"]
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Export types (port of src/cli/commands/export/types.ts).
|
|
2
|
+
|
|
3
|
+
Specs are carried in their camelCase JSON form (``dict``), as read through ``to_jsonable``.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from dataclasses import dataclass, field
|
|
9
|
+
from typing import Any, Literal
|
|
10
|
+
|
|
11
|
+
from agentcore.templates.types import AgentRenderConfig
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class ExportHarnessOptions:
|
|
16
|
+
name: str | None = None
|
|
17
|
+
arn: str | None = None
|
|
18
|
+
target_agent_name: str | None = None
|
|
19
|
+
build: str | None = None
|
|
20
|
+
json: bool | None = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class ExportNote:
|
|
25
|
+
category: str
|
|
26
|
+
message: str
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class ExportNoteLine:
|
|
31
|
+
text: str
|
|
32
|
+
tone: Literal["warn", "dim"]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class ResolvedHarnessContext:
|
|
37
|
+
harness_name: str
|
|
38
|
+
target_agent_name: str
|
|
39
|
+
spec: dict[str, Any]
|
|
40
|
+
system_prompt: str
|
|
41
|
+
project_spec: dict[str, Any]
|
|
42
|
+
deployed_resources: dict[str, Any] | None
|
|
43
|
+
config_base_dir: str
|
|
44
|
+
project_root: str
|
|
45
|
+
export_notes: list[ExportNote] = field(default_factory=list)
|
|
46
|
+
region: str | None = None
|
|
47
|
+
local_env_vars: dict[str, str] = field(default_factory=dict)
|
|
48
|
+
generated_policy_files: dict[str, Any] = field(default_factory=dict)
|
|
49
|
+
additional_policies: list[str] = field(default_factory=list)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@dataclass
|
|
53
|
+
class McpCredentialEntry:
|
|
54
|
+
credential: dict[str, Any]
|
|
55
|
+
env_var_name: str
|
|
56
|
+
value: str
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class HarnessMappingResult:
|
|
61
|
+
render_config: AgentRenderConfig
|
|
62
|
+
agent_env_spec: dict[str, Any]
|
|
63
|
+
credential_entry: dict[str, Any] | None
|
|
64
|
+
mcp_credential_entries: list[McpCredentialEntry]
|
|
65
|
+
git_credential_entries: list[dict[str, Any]]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def format_export_notes(notes: list[ExportNote], notes_file_hint: str) -> list[ExportNoteLine]:
|
|
69
|
+
"""Styled lines for the export success path (shared wording for CLI + interactive)."""
|
|
70
|
+
if not notes:
|
|
71
|
+
return [ExportNoteLine(f"No manual follow-up required. (Details: {notes_file_hint})", "dim")]
|
|
72
|
+
label = "note" if len(notes) == 1 else "notes"
|
|
73
|
+
lines = [ExportNoteLine(f"⚠ {len(notes)} export {label} requiring manual follow-up:", "warn")]
|
|
74
|
+
for note in notes:
|
|
75
|
+
lines.append(ExportNoteLine(f" • {note.category}", "warn"))
|
|
76
|
+
for message_line in note.message.split("\n"):
|
|
77
|
+
lines.append(ExportNoteLine(f" {message_line}", "dim"))
|
|
78
|
+
lines.append(ExportNoteLine(f"These notes are also saved to {notes_file_hint}", "dim"))
|
|
79
|
+
return lines
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
__all__ = [
|
|
83
|
+
"ExportHarnessOptions",
|
|
84
|
+
"ExportNote",
|
|
85
|
+
"ExportNoteLine",
|
|
86
|
+
"HarnessMappingResult",
|
|
87
|
+
"McpCredentialEntry",
|
|
88
|
+
"ResolvedHarnessContext",
|
|
89
|
+
"format_export_notes",
|
|
90
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Interactive `export harness` (port of tui/screens/export: ExportHarnessFlow + ExportHarnessScreen)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from agentcore.cli import interactive
|
|
8
|
+
from agentcore.cli.errors import get_error_message
|
|
9
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO, to_jsonable
|
|
10
|
+
|
|
11
|
+
C = interactive.Choice
|
|
12
|
+
TITLE = "Export Harness to Python Strands Agent"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def run_export_harness_wizard() -> None:
|
|
16
|
+
from agentcore.cli.commands.add._common import first_issue
|
|
17
|
+
from agentcore.cli.commands.export.harness_action import handle_export_harness
|
|
18
|
+
from agentcore.cli.commands.export.types import ExportHarnessOptions, format_export_notes
|
|
19
|
+
from agentcore.schema import AgentName
|
|
20
|
+
|
|
21
|
+
io = ConfigIO()
|
|
22
|
+
project = to_jsonable(io.read_project_spec())
|
|
23
|
+
harness_names = [h["name"] for h in project.get("harnesses") or []]
|
|
24
|
+
existing_agents = [r["name"] for r in project.get("runtimes") or []]
|
|
25
|
+
if not harness_names:
|
|
26
|
+
typer.echo("No harnesses found", err=True)
|
|
27
|
+
typer.echo("Add a harness first with `agentcore add harness` before exporting.", err=True)
|
|
28
|
+
raise typer.Exit(1)
|
|
29
|
+
container_only: set[str] = set()
|
|
30
|
+
for name in harness_names:
|
|
31
|
+
try:
|
|
32
|
+
spec = to_jsonable(io.read_harness_spec(name))
|
|
33
|
+
except Exception: # noqa: BLE001
|
|
34
|
+
continue
|
|
35
|
+
if spec.get("containerUri") or spec.get("dockerfile"):
|
|
36
|
+
container_only.add(name)
|
|
37
|
+
|
|
38
|
+
typer.echo(TITLE)
|
|
39
|
+
harness = (
|
|
40
|
+
harness_names[0]
|
|
41
|
+
if len(harness_names) <= 1
|
|
42
|
+
else interactive.select(
|
|
43
|
+
"Select harness to export (Choose the harness configuration to generate a runtime agent from)",
|
|
44
|
+
[C(n, n) for n in harness_names],
|
|
45
|
+
)
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
def validate(value: str) -> str | None:
|
|
49
|
+
trimmed = value.strip()
|
|
50
|
+
if not trimmed:
|
|
51
|
+
return "Name is required"
|
|
52
|
+
issue = first_issue(AgentName, trimmed)
|
|
53
|
+
if issue:
|
|
54
|
+
return issue
|
|
55
|
+
return f'Agent "{trimmed}" already exists' if trimmed in existing_agents else None
|
|
56
|
+
|
|
57
|
+
target = interactive.text("Runtime agent name", default=f"{harness}Agent", validate=validate).strip()
|
|
58
|
+
builds = [
|
|
59
|
+
C("CodeZip", "CodeZip", "Package Python source as a zip artifact (default)"),
|
|
60
|
+
C("Container", "Container", "Build a Docker container image via ECR and CodeBuild"),
|
|
61
|
+
]
|
|
62
|
+
if harness in container_only:
|
|
63
|
+
builds = [b for b in builds if b.value == "Container"]
|
|
64
|
+
description = "This harness uses a custom container — only Container builds are supported"
|
|
65
|
+
else:
|
|
66
|
+
description = "How the agent will be packaged and deployed"
|
|
67
|
+
build = interactive.select(f"Build type ({description})", builds)
|
|
68
|
+
|
|
69
|
+
typer.echo("Export configuration")
|
|
70
|
+
typer.echo(f" Harness: {harness}")
|
|
71
|
+
typer.echo(f" Runtime agent: {target}")
|
|
72
|
+
typer.echo(f" Build type: {build}")
|
|
73
|
+
if not interactive.confirm("Export?", default=True):
|
|
74
|
+
typer.echo("Cancelled.")
|
|
75
|
+
return
|
|
76
|
+
|
|
77
|
+
try:
|
|
78
|
+
result = handle_export_harness(
|
|
79
|
+
ExportHarnessOptions(name=harness, target_agent_name=target, build=build),
|
|
80
|
+
lambda message: typer.echo(f" ✓ {message}"),
|
|
81
|
+
)
|
|
82
|
+
except Exception as exc: # noqa: BLE001
|
|
83
|
+
typer.echo("Export failed", err=True)
|
|
84
|
+
typer.echo(get_error_message(exc), err=True)
|
|
85
|
+
raise typer.Exit(1) from None
|
|
86
|
+
if not result.success:
|
|
87
|
+
typer.echo("Export failed", err=True)
|
|
88
|
+
typer.echo(get_error_message(result.error), err=True)
|
|
89
|
+
raise typer.Exit(1)
|
|
90
|
+
agent = result.value["agentName"]
|
|
91
|
+
typer.echo(f"✓ Exported harness → runtime agent {agent}")
|
|
92
|
+
typer.echo(f"Generated: app/{agent}/ · agentcore/agentcore.json updated")
|
|
93
|
+
for line in format_export_notes(result.value["notes"], result.value["notesPath"]):
|
|
94
|
+
typer.echo(line.text)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
__all__ = ["run_export_harness_wizard"]
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""`agentcore feedback` (port of src/cli/commands/feedback)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
|
|
7
|
+
import typer
|
|
8
|
+
|
|
9
|
+
from agentcore.cli.commands.feedback.action import handle_feedback
|
|
10
|
+
from agentcore.cli.constants import ANSI
|
|
11
|
+
from agentcore.cli.run_command import run_cli_command
|
|
12
|
+
|
|
13
|
+
HELP = "Send feedback about the AgentCore CLI to the team."
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def feedback(
|
|
17
|
+
message: str | None = typer.Argument(None, help="Feedback message [non-interactive]"),
|
|
18
|
+
screenshot: str | None = typer.Option(
|
|
19
|
+
None, "--screenshot", help="Path to a PNG or JPG screenshot (max 100MB) [non-interactive]"
|
|
20
|
+
),
|
|
21
|
+
as_json: bool = typer.Option(False, "--json", help="Output result as JSON [non-interactive]"),
|
|
22
|
+
) -> None:
|
|
23
|
+
if message is None:
|
|
24
|
+
if as_json:
|
|
25
|
+
typer.echo("Error: --json requires a feedback message argument.", err=True)
|
|
26
|
+
raise typer.Exit(1)
|
|
27
|
+
from agentcore.cli import interactive
|
|
28
|
+
from agentcore.cli.commands.feedback.wizard import run_feedback_wizard
|
|
29
|
+
|
|
30
|
+
interactive.require_tty()
|
|
31
|
+
run_feedback_wizard(screenshot)
|
|
32
|
+
raise typer.Exit(0)
|
|
33
|
+
|
|
34
|
+
def action() -> None:
|
|
35
|
+
outcome = handle_feedback(message, screenshot)
|
|
36
|
+
if outcome.kind == "no-tty":
|
|
37
|
+
raise Exception("Feedback consent must be confirmed interactively. Re-run agentcore feedback in a TTY.")
|
|
38
|
+
if outcome.kind == "error":
|
|
39
|
+
raise outcome.error # type: ignore[misc]
|
|
40
|
+
if outcome.kind == "declined":
|
|
41
|
+
if as_json:
|
|
42
|
+
typer.echo(json.dumps({"success": False, "error": "Feedback cancelled."}, separators=(",", ":")))
|
|
43
|
+
else:
|
|
44
|
+
typer.echo("Feedback cancelled. Nothing was submitted.")
|
|
45
|
+
return
|
|
46
|
+
result = outcome.result or {}
|
|
47
|
+
if as_json:
|
|
48
|
+
typer.echo(
|
|
49
|
+
json.dumps(
|
|
50
|
+
{
|
|
51
|
+
"success": True,
|
|
52
|
+
"id": result.get("id"),
|
|
53
|
+
"timestamp": result.get("timestamp"),
|
|
54
|
+
"reference": result.get("reference"),
|
|
55
|
+
},
|
|
56
|
+
separators=(",", ":"),
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
else:
|
|
60
|
+
typer.echo(f"{ANSI.green}Thank you. Your feedback has been submitted (id: {result.get('id')}).{ANSI.reset}")
|
|
61
|
+
|
|
62
|
+
run_cli_command(as_json, action)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def register(app: typer.Typer) -> None:
|
|
66
|
+
app.command("feedback", help=HELP)(feedback)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
__all__ = ["feedback", "register"]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Port of commands/feedback/action.ts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Any, Literal
|
|
7
|
+
|
|
8
|
+
from agentcore.cli.commands.feedback.consent_prompt import prompt_for_consent
|
|
9
|
+
from agentcore.lib.errors.types import to_error
|
|
10
|
+
from agentcore.operations.feedback import submit_feedback
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class FeedbackOutcome:
|
|
15
|
+
kind: Literal["submitted", "declined", "no-tty", "error"]
|
|
16
|
+
result: dict[str, Any] | None = None
|
|
17
|
+
error: BaseException | None = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def handle_feedback(message: str, screenshot: str | None = None) -> FeedbackOutcome:
|
|
21
|
+
consent = prompt_for_consent()
|
|
22
|
+
if not consent.accepted:
|
|
23
|
+
return FeedbackOutcome("no-tty" if consent.reason == "no-tty" else "declined")
|
|
24
|
+
try:
|
|
25
|
+
return FeedbackOutcome("submitted", result=submit_feedback(message, screenshot=screenshot, mode="cli"))
|
|
26
|
+
except Exception as exc: # noqa: BLE001
|
|
27
|
+
return FeedbackOutcome("error", error=to_error(exc))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
__all__ = ["FeedbackOutcome", "handle_feedback"]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""AWS Customer Agreement consent prompt (port of commands/feedback/consent-prompt.ts)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from typing import Literal, TextIO
|
|
8
|
+
|
|
9
|
+
from agentcore.operations.feedback.constants import CONSENT_TEXT
|
|
10
|
+
|
|
11
|
+
PROMPT_LINE = "Submit feedback? [y/N] "
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class ConsentPromptResult:
|
|
16
|
+
accepted: bool
|
|
17
|
+
reason: Literal["declined", "no-tty"] | None = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def prompt_for_consent(stdin: TextIO | None = None, stdout: TextIO | None = None) -> ConsentPromptResult:
|
|
21
|
+
"""Show the consent text and read y/N; bare Enter means no, and non-TTY stdin is refused."""
|
|
22
|
+
stdin = stdin or sys.stdin
|
|
23
|
+
stdout = stdout or sys.stdout
|
|
24
|
+
if not stdin.isatty():
|
|
25
|
+
return ConsentPromptResult(False, "no-tty")
|
|
26
|
+
stdout.write(f"\n{CONSENT_TEXT}\n\n")
|
|
27
|
+
stdout.write(PROMPT_LINE)
|
|
28
|
+
stdout.flush()
|
|
29
|
+
line = stdin.readline()
|
|
30
|
+
answer = line.strip().lower()
|
|
31
|
+
accepted = answer in ("y", "yes")
|
|
32
|
+
return ConsentPromptResult(accepted, None if accepted else "declined")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
__all__ = ["PROMPT_LINE", "ConsentPromptResult", "prompt_for_consent"]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Interactive feedback (port of tui/screens/feedback: message -> screenshot -> consent -> submit)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from agentcore.cli import interactive
|
|
8
|
+
from agentcore.cli.errors import get_error_message
|
|
9
|
+
from agentcore.operations.feedback import (
|
|
10
|
+
CONSENT_TEXT,
|
|
11
|
+
submit_feedback,
|
|
12
|
+
validate_feedback_message,
|
|
13
|
+
validate_screenshot_path,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def run_feedback_wizard(initial_screenshot: str | None = None) -> None:
|
|
18
|
+
typer.echo("Tell us what's on your mind")
|
|
19
|
+
message = interactive.text("Feedback", validate=validate_feedback_message)
|
|
20
|
+
|
|
21
|
+
def validate_path(value: str) -> str | None:
|
|
22
|
+
return validate_screenshot_path(value.strip()) if value.strip() else None
|
|
23
|
+
|
|
24
|
+
screenshot = interactive.text(
|
|
25
|
+
"Attach a screenshot (optional, PNG/JPG, max 100MB) — path, or press Enter to skip",
|
|
26
|
+
default=initial_screenshot or "",
|
|
27
|
+
validate=validate_path,
|
|
28
|
+
).strip()
|
|
29
|
+
|
|
30
|
+
typer.echo("")
|
|
31
|
+
typer.echo("AWS Customer Agreement")
|
|
32
|
+
typer.echo(CONSENT_TEXT)
|
|
33
|
+
if screenshot:
|
|
34
|
+
typer.echo(f"Screenshot: {screenshot}")
|
|
35
|
+
if not interactive.confirm("Submit feedback?", default=False):
|
|
36
|
+
typer.echo("Feedback cancelled. Nothing was submitted.")
|
|
37
|
+
return
|
|
38
|
+
|
|
39
|
+
typer.echo("Submitting feedback…")
|
|
40
|
+
try:
|
|
41
|
+
submit_feedback(message, screenshot=screenshot or None, mode="tui")
|
|
42
|
+
except Exception as exc: # noqa: BLE001
|
|
43
|
+
typer.echo("Failed to submit feedback.", err=True)
|
|
44
|
+
typer.echo(get_error_message(exc), err=True)
|
|
45
|
+
raise typer.Exit(1) from None
|
|
46
|
+
typer.echo("Thank you. Your feedback has been submitted.")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
__all__ = ["run_feedback_wizard"]
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""`agentcore fetch access` (port of src/cli/commands/fetch)."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from agentcore.cli.commands.fetch.action import FetchAccessOptions, handle_fetch_access
|
|
8
|
+
from agentcore.cli.commands.logs.guards import require_project
|
|
9
|
+
from agentcore.cli.errors import get_error_message
|
|
10
|
+
from agentcore.cli.groups import group
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def fetch_access_command(
|
|
14
|
+
name: str | None = typer.Option(None, "--name", help="Gateway, agent, or harness name [non-interactive]"),
|
|
15
|
+
resource_type: str = typer.Option(
|
|
16
|
+
"gateway", "--type", help="Resource type: gateway (default), agent, or harness [non-interactive]"
|
|
17
|
+
),
|
|
18
|
+
target: str | None = typer.Option(None, "--target", help="Deployment target [non-interactive]"),
|
|
19
|
+
identity_name: str | None = typer.Option(
|
|
20
|
+
None, "--identity-name", help="Identity credential name for token fetch [non-interactive]"
|
|
21
|
+
),
|
|
22
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON [non-interactive]"),
|
|
23
|
+
) -> None:
|
|
24
|
+
require_project()
|
|
25
|
+
options = FetchAccessOptions(
|
|
26
|
+
name=name, type=resource_type, target=target, identity_name=identity_name, json=as_json
|
|
27
|
+
)
|
|
28
|
+
try:
|
|
29
|
+
result = handle_fetch_access(options)
|
|
30
|
+
except Exception as exc: # noqa: BLE001 - top-level command boundary, as upstream
|
|
31
|
+
if as_json:
|
|
32
|
+
typer.echo(json.dumps({"success": False, "error": get_error_message(exc)}, separators=(",", ":")))
|
|
33
|
+
else:
|
|
34
|
+
typer.secho(f"Error: {get_error_message(exc)}", fg=typer.colors.RED)
|
|
35
|
+
raise typer.Exit(1) from None
|
|
36
|
+
|
|
37
|
+
if not result.success:
|
|
38
|
+
if as_json:
|
|
39
|
+
payload = {"success": False, "error": result.error}
|
|
40
|
+
if result.available_gateways:
|
|
41
|
+
payload["availableGateways"] = result.available_gateways
|
|
42
|
+
typer.echo(json.dumps(payload, separators=(",", ":"), ensure_ascii=False))
|
|
43
|
+
else:
|
|
44
|
+
typer.secho(result.error or "", fg=typer.colors.RED)
|
|
45
|
+
if result.available_gateways:
|
|
46
|
+
typer.echo("Available gateways:")
|
|
47
|
+
for gw in result.available_gateways:
|
|
48
|
+
typer.echo(f" {gw['name']} [{gw['authType']}]")
|
|
49
|
+
raise typer.Exit(1)
|
|
50
|
+
|
|
51
|
+
r = result.result or {}
|
|
52
|
+
if as_json:
|
|
53
|
+
typer.echo(json.dumps({"success": True, **r}, indent=2, ensure_ascii=False))
|
|
54
|
+
return
|
|
55
|
+
typer.echo(typer.style("URL:", bold=True) + typer.style(f" {r.get('url', '')}", fg=typer.colors.GREEN))
|
|
56
|
+
typer.echo(typer.style("Auth:", bold=True) + f" {r.get('authType')}")
|
|
57
|
+
if r.get("message"):
|
|
58
|
+
typer.echo(r["message"])
|
|
59
|
+
if r.get("token"):
|
|
60
|
+
typer.echo(typer.style("Token:", bold=True) + f" {r['token']}")
|
|
61
|
+
if r.get("expiresIn") is not None:
|
|
62
|
+
typer.echo(typer.style("Expires in:", bold=True) + f" {r['expiresIn']}s")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def register(app: typer.Typer) -> None:
|
|
66
|
+
group("fetch").command(
|
|
67
|
+
"access",
|
|
68
|
+
help="Fetch access info (URL, token, auth guidance) for a deployed gateway, agent, or harness.",
|
|
69
|
+
)(fetch_access_command)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Port of src/cli/commands/fetch/action.ts."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from agentcore.operations import fetch_access
|
|
8
|
+
from agentcore.operations.fetch_access import OAuthTokenResult, TokenFetchResult
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class FetchAccessOptions:
|
|
13
|
+
name: str | None = None
|
|
14
|
+
type: str | None = None
|
|
15
|
+
target: str | None = None
|
|
16
|
+
identity_name: str | None = None
|
|
17
|
+
json: bool = False
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class FetchAccessResult:
|
|
22
|
+
success: bool
|
|
23
|
+
result: TokenFetchResult | None = None
|
|
24
|
+
available_gateways: list[dict[str, Any]] | None = None
|
|
25
|
+
error: str | None = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def handle_fetch_access(options: FetchAccessOptions) -> FetchAccessResult:
|
|
29
|
+
resource_type = options.type or "gateway"
|
|
30
|
+
if resource_type == "agent":
|
|
31
|
+
return _fetch_token_access(options, "agent", fetch_access.fetch_runtime_token)
|
|
32
|
+
if resource_type == "harness":
|
|
33
|
+
return _fetch_token_access(options, "harness", fetch_access.fetch_harness_token)
|
|
34
|
+
return _handle_fetch_gateway_access(options)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _handle_fetch_gateway_access(options: FetchAccessOptions) -> FetchAccessResult:
|
|
38
|
+
if not options.name:
|
|
39
|
+
gateways = fetch_access.list_gateways(deploy_target=options.target)
|
|
40
|
+
if not gateways:
|
|
41
|
+
return FetchAccessResult(False, error="No deployed gateways found. Run `agentcore deploy` first.")
|
|
42
|
+
return FetchAccessResult(False, error="Missing required option: --name", available_gateways=list(gateways))
|
|
43
|
+
result = fetch_access.fetch_gateway_token(
|
|
44
|
+
options.name, deploy_target=options.target, identity_name=options.identity_name
|
|
45
|
+
)
|
|
46
|
+
return FetchAccessResult(True, result=result)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _fetch_token_access(
|
|
50
|
+
options: FetchAccessOptions, label: str, fetch_token: Callable[..., OAuthTokenResult]
|
|
51
|
+
) -> FetchAccessResult:
|
|
52
|
+
"""Shared CUSTOM_JWT flow for agent runtimes and harnesses (no invoke URL)."""
|
|
53
|
+
if not options.name:
|
|
54
|
+
return FetchAccessResult(False, error=f"Missing required option: --name <{label}>")
|
|
55
|
+
try:
|
|
56
|
+
token = fetch_token(options.name, deploy_target=options.target, identity_name=options.identity_name)
|
|
57
|
+
except Exception as exc: # noqa: BLE001 - surfaced as a failed result, as upstream
|
|
58
|
+
return FetchAccessResult(False, error=str(exc))
|
|
59
|
+
result: TokenFetchResult = {"url": "", "authType": "CUSTOM_JWT", "token": token.token}
|
|
60
|
+
if token.expires_in is not None:
|
|
61
|
+
result["expiresIn"] = token.expires_in
|
|
62
|
+
return FetchAccessResult(True, result=result)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""`agentcore help` / `agentcore help modes` (port of src/cli/commands/help/command.tsx)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from agentcore.cli.groups import group
|
|
8
|
+
|
|
9
|
+
MODES_HELP = """
|
|
10
|
+
INTERACTIVE MODE (TUI)
|
|
11
|
+
Run any command without flags to launch the interactive terminal UI.
|
|
12
|
+
|
|
13
|
+
Features:
|
|
14
|
+
• Guided prompts walk you through options
|
|
15
|
+
• Real-time streaming for invoke and dev
|
|
16
|
+
• Visual feedback and progress indicators
|
|
17
|
+
|
|
18
|
+
Examples:
|
|
19
|
+
agentcore # Launch main menu
|
|
20
|
+
agentcore create # Guided project creation
|
|
21
|
+
agentcore add # Add resources interactively
|
|
22
|
+
agentcore invoke # Chat with deployed agent
|
|
23
|
+
|
|
24
|
+
NON-INTERACTIVE MODE (CLI)
|
|
25
|
+
Pass any flag marked [non-interactive] to run in CLI mode.
|
|
26
|
+
|
|
27
|
+
Features:
|
|
28
|
+
• Scriptable for CI/CD pipelines
|
|
29
|
+
• JSON output with --json flag
|
|
30
|
+
• No prompts - fails fast on missing required options
|
|
31
|
+
|
|
32
|
+
Examples:
|
|
33
|
+
agentcore create --name MyProject --defaults --json
|
|
34
|
+
agentcore deploy --target prod --yes
|
|
35
|
+
agentcore invoke "Hello" --stream
|
|
36
|
+
agentcore remove agent --name OldAgent --yes
|
|
37
|
+
|
|
38
|
+
FLAGS THAT TRIGGER CLI MODE
|
|
39
|
+
Most flags trigger non-interactive mode, including:
|
|
40
|
+
--name, --json, --yes, --target, --stream, etc.
|
|
41
|
+
|
|
42
|
+
Some flags work in both modes:
|
|
43
|
+
--session-id (invoke), --port (dev), --runtime (dev)
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def register(app: typer.Typer) -> None:
|
|
48
|
+
help_group = group("help")
|
|
49
|
+
help_group.info.no_args_is_help = False
|
|
50
|
+
help_group.info.help = "Display help topics"
|
|
51
|
+
|
|
52
|
+
@help_group.callback(invoke_without_command=True)
|
|
53
|
+
def help_root(ctx: typer.Context) -> None:
|
|
54
|
+
"""Display help topics"""
|
|
55
|
+
if ctx.invoked_subcommand is not None:
|
|
56
|
+
return
|
|
57
|
+
typer.echo("Available help topics: modes")
|
|
58
|
+
typer.echo("Run `agentcore help <topic>` for details.")
|
|
59
|
+
|
|
60
|
+
@help_group.command("modes", help="Explain interactive vs non-interactive modes")
|
|
61
|
+
def modes() -> None:
|
|
62
|
+
typer.echo(MODES_HELP)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
__all__ = ["MODES_HELP", "register"]
|