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,490 @@
|
|
|
1
|
+
"""`agentcore invoke` (port of commands/invoke/command.tsx)."""
|
|
2
|
+
|
|
3
|
+
import itertools
|
|
4
|
+
import json
|
|
5
|
+
import os
|
|
6
|
+
import re
|
|
7
|
+
import sys
|
|
8
|
+
import threading
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import typer
|
|
12
|
+
|
|
13
|
+
from agentcore.cli.commands.invoke.action import (
|
|
14
|
+
InvokeContext,
|
|
15
|
+
handle_harness_invoke_by_arn,
|
|
16
|
+
handle_invoke,
|
|
17
|
+
load_invoke_config,
|
|
18
|
+
)
|
|
19
|
+
from agentcore.cli.commands.invoke.constants import INVOKE_DESCRIPTION
|
|
20
|
+
from agentcore.cli.commands.invoke.guards import require_project
|
|
21
|
+
from agentcore.cli.commands.invoke.interactive import run_invoke_interactive
|
|
22
|
+
from agentcore.cli.commands.invoke.resolve_prompt import PromptSources, resolve_prompt
|
|
23
|
+
from agentcore.cli.commands.invoke.types import InvokeOptions, InvokeResult, result
|
|
24
|
+
from agentcore.cli.commands.invoke.validate import validate_invoke_options
|
|
25
|
+
from agentcore.cli.commands.shared.header_utils import parse_header_flags
|
|
26
|
+
from agentcore.cli.errors import get_error_message
|
|
27
|
+
from agentcore.cli.interactive import require_tty
|
|
28
|
+
from agentcore.lib.errors.types import ValidationError
|
|
29
|
+
from agentcore.lib.result import serialize_result
|
|
30
|
+
from agentcore.primitives.base import ADDITIONAL_PARAMS_JSON_ERROR
|
|
31
|
+
|
|
32
|
+
SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
|
|
33
|
+
|
|
34
|
+
HELP_EPILOG = """\
|
|
35
|
+
Payments [non-interactive]
|
|
36
|
+
--payment-user-id <id> End-user/wallet-owner identity (defaults to --user-id)
|
|
37
|
+
--payment-instrument-id <id> Payment instrument (wallet) ID
|
|
38
|
+
--payment-session-id <id> Payment session ID for budget tracking
|
|
39
|
+
--auto-session Auto-create/reuse a payment session for testing
|
|
40
|
+
|
|
41
|
+
Output [non-interactive]
|
|
42
|
+
--json Output as JSON
|
|
43
|
+
--stream Stream response in real-time
|
|
44
|
+
|
|
45
|
+
MCP & Advanced [non-interactive]
|
|
46
|
+
--tool <name> MCP tool name (use with "call-tool" prompt)
|
|
47
|
+
--input <json> MCP tool arguments as JSON (use with --tool)
|
|
48
|
+
--exec Execute a shell command in the runtime container
|
|
49
|
+
--timeout <seconds> Timeout in seconds for --exec commands
|
|
50
|
+
-H, --header <header> Custom header "Name: Value" (repeatable)
|
|
51
|
+
--bearer-token <token> Bearer token for CUSTOM_JWT auth (bypasses SigV4)
|
|
52
|
+
|
|
53
|
+
Harness [non-interactive]
|
|
54
|
+
--harness <name> Select specific harness to invoke
|
|
55
|
+
--harness-arn <arn> Invoke a harness by ARN (no project required)
|
|
56
|
+
--region <region> AWS region (required with --harness-arn)
|
|
57
|
+
--verbose Print verbose streaming JSON events
|
|
58
|
+
|
|
59
|
+
Model & Runtime Overrides (harness only) [non-interactive]
|
|
60
|
+
--model-id <id> Override model
|
|
61
|
+
--model-provider <provider> bedrock, open_ai, or gemini
|
|
62
|
+
--api-key-arn <arn> API key ARN for open_ai/gemini
|
|
63
|
+
--tools <tools> Override tools (comma-separated)
|
|
64
|
+
--allowed-tools <tools> Override allowed tools (comma-separated)
|
|
65
|
+
--skills <paths> Skills (comma-separated paths)
|
|
66
|
+
--system-prompt <text> Override system prompt
|
|
67
|
+
--actor-id <id> Override memory actor ID
|
|
68
|
+
--max-iterations <n> Override max iterations
|
|
69
|
+
--max-tokens <n> Override max tokens
|
|
70
|
+
--harness-timeout <seconds> Override timeout seconds
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class _Spinner:
|
|
75
|
+
"""stderr spinner (upstream writes it unconditionally, like here)."""
|
|
76
|
+
|
|
77
|
+
def __init__(self, message: str):
|
|
78
|
+
self._message = message
|
|
79
|
+
self._stop = threading.Event()
|
|
80
|
+
sys.stderr.write(f"{SPINNER_FRAMES[0]} {message}")
|
|
81
|
+
sys.stderr.flush()
|
|
82
|
+
self._thread = threading.Thread(target=self._run, daemon=True)
|
|
83
|
+
self._thread.start()
|
|
84
|
+
|
|
85
|
+
def _run(self) -> None:
|
|
86
|
+
for frame in itertools.cycle(SPINNER_FRAMES[1:] + SPINNER_FRAMES[:1]):
|
|
87
|
+
if self._stop.wait(0.08):
|
|
88
|
+
return
|
|
89
|
+
sys.stderr.write(f"\r{frame} {self._message}")
|
|
90
|
+
sys.stderr.flush()
|
|
91
|
+
|
|
92
|
+
def stop(self) -> None:
|
|
93
|
+
self._stop.set()
|
|
94
|
+
self._thread.join()
|
|
95
|
+
sys.stderr.write("\r\x1b[K")
|
|
96
|
+
sys.stderr.flush()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _handle_invoke_cli(options: InvokeOptions, preloaded: InvokeContext | None = None) -> InvokeResult:
|
|
100
|
+
validation = validate_invoke_options(options)
|
|
101
|
+
if not validation.valid:
|
|
102
|
+
return result(False, error=ValidationError(validation.error or "Validation failed"))
|
|
103
|
+
|
|
104
|
+
spinner: _Spinner | None = None
|
|
105
|
+
try:
|
|
106
|
+
if options.harness_arn:
|
|
107
|
+
region = options.region or os.environ.get("AWS_REGION") or os.environ.get("AWS_DEFAULT_REGION")
|
|
108
|
+
if not region:
|
|
109
|
+
msg = "--region is required with --harness-arn (or set AWS_REGION)"
|
|
110
|
+
if options.json:
|
|
111
|
+
typer.echo(json.dumps({"success": False, "error": msg}, separators=(",", ":")))
|
|
112
|
+
else:
|
|
113
|
+
typer.echo(msg, err=True)
|
|
114
|
+
raise typer.Exit(1)
|
|
115
|
+
return handle_harness_invoke_by_arn(options.harness_arn, region, options)
|
|
116
|
+
|
|
117
|
+
context = preloaded or load_invoke_config()
|
|
118
|
+
project = context.project
|
|
119
|
+
is_harness = options.harness_name is not None or (
|
|
120
|
+
len(project.harnesses or []) > 0 and len(project.runtimes or []) == 0
|
|
121
|
+
)
|
|
122
|
+
if not options.stream and not options.json and not options.exec and not is_harness:
|
|
123
|
+
spinner = _Spinner("Invoking agent...")
|
|
124
|
+
out = handle_invoke(context, options)
|
|
125
|
+
if spinner:
|
|
126
|
+
spinner.stop()
|
|
127
|
+
spinner = None
|
|
128
|
+
return out
|
|
129
|
+
finally:
|
|
130
|
+
if spinner:
|
|
131
|
+
spinner.stop()
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def redact_sensitive_text(value: str) -> str:
|
|
135
|
+
# A JWT always begins with `eyJ` (base64url of `{"`); matching by shape never touches prose.
|
|
136
|
+
value = re.sub(r"eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+", "[REDACTED]", value)
|
|
137
|
+
value = re.sub(
|
|
138
|
+
r"""(client[_-]?secret["']?\s*[:=]\s*["']?)([^"',\s}]+)""", r"\1[REDACTED]", value, flags=re.IGNORECASE
|
|
139
|
+
)
|
|
140
|
+
value = re.sub(
|
|
141
|
+
r"""((?:access[_-]?)?token["']?\s*[:=]\s*["']?)([^"',\s}]+)""", r"\1[REDACTED]", value, flags=re.IGNORECASE
|
|
142
|
+
)
|
|
143
|
+
return value
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def _print_invoke_result(res: InvokeResult, as_json: bool | None, stream: bool | None) -> None:
|
|
147
|
+
if as_json:
|
|
148
|
+
serialized = serialize_result(res)
|
|
149
|
+
if isinstance(serialized.get("response"), str):
|
|
150
|
+
serialized["response"] = redact_sensitive_text(serialized["response"])
|
|
151
|
+
if isinstance(serialized.get("error"), str):
|
|
152
|
+
serialized["error"] = redact_sensitive_text(serialized["error"])
|
|
153
|
+
typer.echo(
|
|
154
|
+
json.dumps(
|
|
155
|
+
{k: v for k, v in serialized.items() if v is not None}, separators=(",", ":"), ensure_ascii=False
|
|
156
|
+
)
|
|
157
|
+
)
|
|
158
|
+
return
|
|
159
|
+
|
|
160
|
+
def footer() -> None:
|
|
161
|
+
if res.get("sessionId"):
|
|
162
|
+
typer.echo(f"\nSession: {res['sessionId']}", err=True)
|
|
163
|
+
typer.echo(f"To resume: agentcore invoke --session-id {res['sessionId']}", err=True)
|
|
164
|
+
if res.get("logFilePath"):
|
|
165
|
+
typer.echo(f"Log: {res['logFilePath']}", err=True)
|
|
166
|
+
|
|
167
|
+
if stream:
|
|
168
|
+
footer()
|
|
169
|
+
return
|
|
170
|
+
if res.get("success") and res.get("response"):
|
|
171
|
+
typer.echo(redact_sensitive_text(res["response"]))
|
|
172
|
+
elif not res.get("success") and res.get("error") is not None:
|
|
173
|
+
typer.echo(redact_sensitive_text(str(res["error"])), err=True)
|
|
174
|
+
footer()
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def _stdin_piped() -> bool:
|
|
178
|
+
try:
|
|
179
|
+
return not sys.stdin.isatty()
|
|
180
|
+
except (AttributeError, ValueError):
|
|
181
|
+
return True
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _match_runtime_name(name: str | None) -> str | None:
|
|
185
|
+
"""Accept `my-agent` for the runtime `my_agent` (`agentcore init` turns hyphens into underscores)."""
|
|
186
|
+
if not name or "-" not in name:
|
|
187
|
+
return name
|
|
188
|
+
try:
|
|
189
|
+
from agentcore.lib.schemas.io.config_io import ConfigIO
|
|
190
|
+
|
|
191
|
+
runtimes = {r.name for r in ConfigIO().read_project_spec().runtimes or []}
|
|
192
|
+
except Exception: # noqa: BLE001 - no project yet; let the normal resolution report it
|
|
193
|
+
return name
|
|
194
|
+
candidate = name.replace("-", "_")
|
|
195
|
+
return candidate if name not in runtimes and candidate in runtimes else name
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def invoke_command(
|
|
199
|
+
positional_prompt: str | None = typer.Argument(
|
|
200
|
+
None,
|
|
201
|
+
metavar="[PROMPT]",
|
|
202
|
+
help="Prompt to send to the agent. Also accepts piped stdin when no prompt is provided and stdin is not a "
|
|
203
|
+
"TTY [non-interactive]",
|
|
204
|
+
show_default=False,
|
|
205
|
+
),
|
|
206
|
+
prompt: str | None = typer.Option(None, "--prompt", help="Prompt to send to the agent [non-interactive]"),
|
|
207
|
+
prompt_file: str | None = typer.Option(
|
|
208
|
+
None,
|
|
209
|
+
"--prompt-file",
|
|
210
|
+
help="Read the prompt from a file (for long or structured payloads that exceed shell arg limits) "
|
|
211
|
+
"[non-interactive]",
|
|
212
|
+
),
|
|
213
|
+
runtime: str | None = typer.Option(
|
|
214
|
+
None, "--runtime", "--agent-name", help="Select specific runtime [non-interactive]"
|
|
215
|
+
),
|
|
216
|
+
gateway: str | None = typer.Option(None, "--gateway", help="Invoke through a gateway [non-interactive]"),
|
|
217
|
+
gateway_target_name: str | None = typer.Option(
|
|
218
|
+
None, "--gateway-target-name", help="HTTP runtime target on the gateway [non-interactive]"
|
|
219
|
+
),
|
|
220
|
+
target: str | None = typer.Option(None, "--target", help="Select deployment target [non-interactive]"),
|
|
221
|
+
session_id: str | None = typer.Option(
|
|
222
|
+
None, "--session-id", help="Use specific session ID for conversation continuity"
|
|
223
|
+
),
|
|
224
|
+
user_id: str | None = typer.Option(
|
|
225
|
+
None, "--user-id", help='User ID for runtime invocation (default: "default-user")'
|
|
226
|
+
),
|
|
227
|
+
as_json: bool = typer.Option(False, "--json", help="Output as JSON [non-interactive]", hidden=True),
|
|
228
|
+
stream: bool = typer.Option(
|
|
229
|
+
False, "--stream", help="Stream response in real-time (TUI streams by default) [non-interactive]", hidden=True
|
|
230
|
+
),
|
|
231
|
+
tool: str | None = typer.Option(
|
|
232
|
+
None, "--tool", help='MCP tool name (use with "call-tool" prompt) [non-interactive]', hidden=True
|
|
233
|
+
),
|
|
234
|
+
input_: str | None = typer.Option(
|
|
235
|
+
None,
|
|
236
|
+
"--input",
|
|
237
|
+
help="Prompt to send to the agent; with --tool, MCP tool arguments as JSON [non-interactive]",
|
|
238
|
+
),
|
|
239
|
+
exec_: bool = typer.Option(
|
|
240
|
+
False,
|
|
241
|
+
"--exec",
|
|
242
|
+
help="Execute a shell command in the runtime container (use `agentcore exec` instead) [non-interactive]",
|
|
243
|
+
hidden=True,
|
|
244
|
+
),
|
|
245
|
+
timeout: int | None = typer.Option(
|
|
246
|
+
None, "--timeout", help="Timeout in seconds for --exec commands [non-interactive]", hidden=True
|
|
247
|
+
),
|
|
248
|
+
header: list[str] = typer.Option(
|
|
249
|
+
[],
|
|
250
|
+
"-H",
|
|
251
|
+
"--header",
|
|
252
|
+
help='Custom header to forward to the agent (format: "Name: Value", repeatable) [non-interactive]',
|
|
253
|
+
hidden=True,
|
|
254
|
+
),
|
|
255
|
+
bearer_token: str | None = typer.Option(
|
|
256
|
+
None, "--bearer-token", help="Bearer token for CUSTOM_JWT auth (bypasses SigV4) [non-interactive]", hidden=True
|
|
257
|
+
),
|
|
258
|
+
payment_instrument_id: str | None = typer.Option(
|
|
259
|
+
None, "--payment-instrument-id", help="Payment instrument ID for x402 payments [non-interactive]", hidden=True
|
|
260
|
+
),
|
|
261
|
+
payment_session_id: str | None = typer.Option(
|
|
262
|
+
None, "--payment-session-id", help="Payment session ID for budget tracking [non-interactive]", hidden=True
|
|
263
|
+
),
|
|
264
|
+
auto_session: bool = typer.Option(
|
|
265
|
+
False, "--auto-session", help="Auto-create/reuse a payment session for testing [non-interactive]", hidden=True
|
|
266
|
+
),
|
|
267
|
+
payment_user_id: str | None = typer.Option(
|
|
268
|
+
None,
|
|
269
|
+
"--payment-user-id",
|
|
270
|
+
help="End-user identity (wallet owner) for payments; scopes the instrument/session/budget. Defaults to "
|
|
271
|
+
"--user-id when omitted.",
|
|
272
|
+
hidden=True,
|
|
273
|
+
),
|
|
274
|
+
harness: str | None = typer.Option(
|
|
275
|
+
None, "--harness", help="Select specific harness to invoke [non-interactive]", hidden=True
|
|
276
|
+
),
|
|
277
|
+
harness_arn: str | None = typer.Option(
|
|
278
|
+
None, "--harness-arn", help="Invoke a harness by ARN (no project required) [non-interactive]", hidden=True
|
|
279
|
+
),
|
|
280
|
+
region: str | None = typer.Option(
|
|
281
|
+
None, "--region", help="AWS region (required with --harness-arn when no project) [non-interactive]", hidden=True
|
|
282
|
+
),
|
|
283
|
+
verbose: bool = typer.Option(
|
|
284
|
+
False, "--verbose", help="Print verbose streaming JSON events (harness only) [non-interactive]", hidden=True
|
|
285
|
+
),
|
|
286
|
+
model_id: str | None = typer.Option(
|
|
287
|
+
None, "--model-id", help="Override model for this invocation (harness only) [non-interactive]", hidden=True
|
|
288
|
+
),
|
|
289
|
+
model_provider: str | None = typer.Option(
|
|
290
|
+
None,
|
|
291
|
+
"--model-provider",
|
|
292
|
+
help="Override model provider: bedrock, open_ai, gemini, lite_llm (harness only) [non-interactive]",
|
|
293
|
+
hidden=True,
|
|
294
|
+
),
|
|
295
|
+
api_key_arn: str | None = typer.Option(
|
|
296
|
+
None,
|
|
297
|
+
"--api-key-arn",
|
|
298
|
+
help="Override API key ARN for open_ai/gemini (harness only) [non-interactive]",
|
|
299
|
+
hidden=True,
|
|
300
|
+
),
|
|
301
|
+
api_base: str | None = typer.Option(
|
|
302
|
+
None, "--api-base", help="Override LiteLLM API base URL (harness only, lite_llm) [non-interactive]"
|
|
303
|
+
),
|
|
304
|
+
additional_params: str | None = typer.Option(
|
|
305
|
+
None,
|
|
306
|
+
"--additional-params",
|
|
307
|
+
help="Override LiteLLM additional params as a JSON object (harness only, lite_llm) [non-interactive]",
|
|
308
|
+
),
|
|
309
|
+
tools: str | None = typer.Option(
|
|
310
|
+
None, "--tools", help="Override tools, comma-separated (harness only) [non-interactive]", hidden=True
|
|
311
|
+
),
|
|
312
|
+
max_iterations: int | None = typer.Option(
|
|
313
|
+
None, "--max-iterations", help="Override max iterations (harness only) [non-interactive]", hidden=True
|
|
314
|
+
),
|
|
315
|
+
max_tokens: int | None = typer.Option(
|
|
316
|
+
None, "--max-tokens", help="Override max tokens (harness only) [non-interactive]", hidden=True
|
|
317
|
+
),
|
|
318
|
+
harness_timeout: int | None = typer.Option(
|
|
319
|
+
None, "--harness-timeout", help="Override timeout seconds (harness only) [non-interactive]", hidden=True
|
|
320
|
+
),
|
|
321
|
+
skills: str | None = typer.Option(
|
|
322
|
+
None,
|
|
323
|
+
"--skills",
|
|
324
|
+
help="Skills override, comma-separated (path, s3://uri, or https://git-url). Git auth not supported here — "
|
|
325
|
+
"configure via agentcore add skill [non-interactive]",
|
|
326
|
+
hidden=True,
|
|
327
|
+
),
|
|
328
|
+
system_prompt: str | None = typer.Option(
|
|
329
|
+
None, "--system-prompt", help="Override system prompt (harness only) [non-interactive]", hidden=True
|
|
330
|
+
),
|
|
331
|
+
allowed_tools: str | None = typer.Option(
|
|
332
|
+
None,
|
|
333
|
+
"--allowed-tools",
|
|
334
|
+
help="Override allowed tools, comma-separated (harness only) [non-interactive]",
|
|
335
|
+
hidden=True,
|
|
336
|
+
),
|
|
337
|
+
actor_id: str | None = typer.Option(
|
|
338
|
+
None, "--actor-id", help="Override memory actor ID (harness only) [non-interactive]", hidden=True
|
|
339
|
+
),
|
|
340
|
+
) -> None:
|
|
341
|
+
try:
|
|
342
|
+
if not harness_arn:
|
|
343
|
+
require_project()
|
|
344
|
+
|
|
345
|
+
# Load config once (protocol resolution / reuse in the action); failures resurface later.
|
|
346
|
+
invoke_context: InvokeContext | None = None
|
|
347
|
+
try:
|
|
348
|
+
invoke_context = load_invoke_config()
|
|
349
|
+
except Exception: # noqa: BLE001, S110
|
|
350
|
+
pass
|
|
351
|
+
|
|
352
|
+
# Python-port convenience: `--input` is the prompt unless it carries MCP tool arguments.
|
|
353
|
+
if input_ is not None and not tool and prompt is None:
|
|
354
|
+
prompt, input_ = input_, None
|
|
355
|
+
runtime = _match_runtime_name(runtime)
|
|
356
|
+
|
|
357
|
+
resolved = resolve_prompt(
|
|
358
|
+
PromptSources(flag=prompt, positional=positional_prompt, file=prompt_file, stdin_piped=_stdin_piped())
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
# Payment flags alone do not force CLI mode: with a prompt they run one-shot, without one they
|
|
362
|
+
# carry into the interactive flow.
|
|
363
|
+
cli_mode = (
|
|
364
|
+
not resolved.success
|
|
365
|
+
or resolved.prompt is not None
|
|
366
|
+
or as_json
|
|
367
|
+
or target
|
|
368
|
+
or gateway_target_name
|
|
369
|
+
or stream
|
|
370
|
+
or runtime
|
|
371
|
+
or gateway
|
|
372
|
+
or tool
|
|
373
|
+
or exec_
|
|
374
|
+
or bearer_token
|
|
375
|
+
or harness
|
|
376
|
+
or harness_arn
|
|
377
|
+
or verbose
|
|
378
|
+
)
|
|
379
|
+
if cli_mode:
|
|
380
|
+
res = _run_cli(
|
|
381
|
+
resolved,
|
|
382
|
+
header=header,
|
|
383
|
+
additional_params=additional_params,
|
|
384
|
+
as_json=as_json,
|
|
385
|
+
invoke_context=invoke_context,
|
|
386
|
+
options=InvokeOptions(
|
|
387
|
+
agent_name=runtime,
|
|
388
|
+
gateway=gateway,
|
|
389
|
+
gateway_target=gateway_target_name,
|
|
390
|
+
target_name=target if target is not None else "default",
|
|
391
|
+
session_id=session_id,
|
|
392
|
+
user_id=user_id,
|
|
393
|
+
json=as_json or None,
|
|
394
|
+
stream=stream or None,
|
|
395
|
+
tool=tool,
|
|
396
|
+
input=input_,
|
|
397
|
+
exec=exec_ or None,
|
|
398
|
+
timeout=timeout,
|
|
399
|
+
bearer_token=bearer_token,
|
|
400
|
+
harness_name=harness,
|
|
401
|
+
harness_arn=harness_arn,
|
|
402
|
+
region=region,
|
|
403
|
+
verbose=verbose or None,
|
|
404
|
+
model_id=model_id,
|
|
405
|
+
model_provider=model_provider,
|
|
406
|
+
api_key_arn=api_key_arn,
|
|
407
|
+
api_base=api_base,
|
|
408
|
+
tools=tools,
|
|
409
|
+
max_iterations=max_iterations,
|
|
410
|
+
max_tokens=max_tokens,
|
|
411
|
+
harness_timeout=harness_timeout,
|
|
412
|
+
skills=skills,
|
|
413
|
+
system_prompt=system_prompt,
|
|
414
|
+
allowed_tools=allowed_tools,
|
|
415
|
+
actor_id=actor_id,
|
|
416
|
+
payment_instrument_id=payment_instrument_id,
|
|
417
|
+
payment_session_id=payment_session_id,
|
|
418
|
+
auto_session=auto_session or None,
|
|
419
|
+
payment_user_id=payment_user_id,
|
|
420
|
+
),
|
|
421
|
+
)
|
|
422
|
+
_print_invoke_result(res, as_json, stream)
|
|
423
|
+
exit_code = res.get("exitCode")
|
|
424
|
+
raise typer.Exit(exit_code if exit_code is not None else (0 if res.get("success") else 1))
|
|
425
|
+
|
|
426
|
+
# Interactive mode. Validate flag combinations before the TTY check.
|
|
427
|
+
validation = validate_invoke_options(
|
|
428
|
+
InvokeOptions(auto_session=auto_session or None, payment_session_id=payment_session_id)
|
|
429
|
+
)
|
|
430
|
+
if not validation.valid:
|
|
431
|
+
typer.echo(validation.error, err=True)
|
|
432
|
+
raise typer.Exit(1)
|
|
433
|
+
|
|
434
|
+
require_tty()
|
|
435
|
+
headers = parse_header_flags(header) if header else None
|
|
436
|
+
run_invoke_interactive(
|
|
437
|
+
session_id=session_id,
|
|
438
|
+
user_id=user_id,
|
|
439
|
+
headers=headers,
|
|
440
|
+
bearer_token=bearer_token,
|
|
441
|
+
payment_instrument_id=payment_instrument_id,
|
|
442
|
+
payment_session_id=payment_session_id,
|
|
443
|
+
auto_session=auto_session,
|
|
444
|
+
payment_user_id=payment_user_id if payment_user_id is not None else user_id,
|
|
445
|
+
)
|
|
446
|
+
except typer.Exit:
|
|
447
|
+
raise
|
|
448
|
+
except Exception as exc: # noqa: BLE001 - top-level command boundary, as upstream
|
|
449
|
+
msg = redact_sensitive_text(get_error_message(exc))
|
|
450
|
+
if as_json:
|
|
451
|
+
typer.echo(json.dumps({"success": False, "error": msg}, separators=(",", ":"), ensure_ascii=False))
|
|
452
|
+
else:
|
|
453
|
+
typer.echo(f"Error: {msg}")
|
|
454
|
+
raise typer.Exit(1) from None
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
def _run_cli(
|
|
458
|
+
resolved: Any,
|
|
459
|
+
*,
|
|
460
|
+
header: list[str],
|
|
461
|
+
additional_params: str | None,
|
|
462
|
+
as_json: bool,
|
|
463
|
+
invoke_context: InvokeContext | None,
|
|
464
|
+
options: InvokeOptions,
|
|
465
|
+
) -> InvokeResult:
|
|
466
|
+
if not resolved.success:
|
|
467
|
+
return result(False, error=ValidationError(resolved.error or "Prompt resolution failed"))
|
|
468
|
+
|
|
469
|
+
headers = parse_header_flags(header) if header else None
|
|
470
|
+
|
|
471
|
+
parsed_params: dict[str, Any] | None = None
|
|
472
|
+
if additional_params:
|
|
473
|
+
try:
|
|
474
|
+
parsed_params = json.loads(additional_params)
|
|
475
|
+
except ValueError:
|
|
476
|
+
if as_json:
|
|
477
|
+
typer.echo(json.dumps({"success": False, "error": ADDITIONAL_PARAMS_JSON_ERROR}, separators=(",", ":")))
|
|
478
|
+
else:
|
|
479
|
+
typer.echo(ADDITIONAL_PARAMS_JSON_ERROR, err=True)
|
|
480
|
+
raise typer.Exit(1) from None
|
|
481
|
+
|
|
482
|
+
return _handle_invoke_cli(
|
|
483
|
+
options.with_(prompt=resolved.prompt, headers=headers, additional_params=parsed_params), invoke_context
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
def register_invoke(app: typer.Typer) -> None:
|
|
488
|
+
settings = {"help": INVOKE_DESCRIPTION, "epilog": HELP_EPILOG}
|
|
489
|
+
app.command("invoke", **settings)(invoke_command)
|
|
490
|
+
app.command("i", hidden=True, **settings)(invoke_command)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Constants from upstream ``src/cli/constants.ts`` used by `invoke` and `exec`.
|
|
2
|
+
|
|
3
|
+
Duplicated here (rather than imported from ``agentcore.cli.constants``, owned by another area) so
|
|
4
|
+
these commands don't depend on that module's evolution.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
from typing import Final
|
|
10
|
+
|
|
11
|
+
INVOKE_DESCRIPTION: Final = "Invoke a deployed agent endpoint."
|
|
12
|
+
EXEC_DESCRIPTION: Final = "Open an interactive shell or run a one-shot command in a deployed agent container."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _styling_enabled() -> bool:
|
|
16
|
+
if os.environ.get("FORCE_COLOR"):
|
|
17
|
+
return True
|
|
18
|
+
return not os.environ.get("NO_COLOR") and sys.stdout.isatty() and sys.stderr.isatty()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
_STYLING = _styling_enabled()
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _style(code: str) -> str:
|
|
25
|
+
return code if _STYLING else ""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ANSI:
|
|
29
|
+
"""ANSI escape codes for console output; colors are disabled when piped or NO_COLOR is set."""
|
|
30
|
+
|
|
31
|
+
red = _style("\x1b[31m")
|
|
32
|
+
green = _style("\x1b[32m")
|
|
33
|
+
yellow = _style("\x1b[33m")
|
|
34
|
+
cyan = _style("\x1b[36m")
|
|
35
|
+
dim = _style("\x1b[2m")
|
|
36
|
+
reset = _style("\x1b[0m")
|
|
37
|
+
clear_line = "\x1b[K"
|
|
38
|
+
enter_alt_screen = "\x1b[?1049h\x1b[H"
|
|
39
|
+
exit_alt_screen = "\x1b[?1049l"
|
|
40
|
+
show_cursor = "\x1b[?25h"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Plain-text port of ``tui/guards/project.tsx`` ``requireProject`` (Ink's FatalError renders to stdout)."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from agentcore.lib.schemas.io.path_resolver import find_config_root, get_working_directory
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def require_project() -> None:
|
|
11
|
+
cwd = get_working_directory()
|
|
12
|
+
config_root = find_config_root(cwd)
|
|
13
|
+
if not config_root:
|
|
14
|
+
typer.echo("No agentcore project found.")
|
|
15
|
+
typer.echo("Run agentcore create to fix this.")
|
|
16
|
+
raise typer.Exit(1)
|
|
17
|
+
project_root = os.path.realpath(os.path.dirname(config_root))
|
|
18
|
+
resolved_cwd = os.path.realpath(cwd)
|
|
19
|
+
if resolved_cwd != project_root:
|
|
20
|
+
typer.echo("Please run this command from your project root directory.")
|
|
21
|
+
typer.echo(f"You are in: {resolved_cwd}\nProject root: {project_root}")
|
|
22
|
+
typer.echo(f"Run cd {project_root} to fix this.")
|
|
23
|
+
raise typer.Exit(1)
|