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,34 @@
|
|
|
1
|
+
"""Port of src/cli/operations/fetch-access/types.ts (camelCase JSON-shaped records)."""
|
|
2
|
+
|
|
3
|
+
from typing import Literal, NotRequired, TypedDict
|
|
4
|
+
|
|
5
|
+
FetchResourceType = Literal["gateway", "agent", "harness"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TokenFetchResult(TypedDict):
|
|
9
|
+
url: str
|
|
10
|
+
authType: str
|
|
11
|
+
token: NotRequired[str]
|
|
12
|
+
expiresIn: NotRequired[int]
|
|
13
|
+
message: NotRequired[str]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GatewayInfo(TypedDict):
|
|
17
|
+
name: str
|
|
18
|
+
authType: str
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class AgentInfo(TypedDict):
|
|
22
|
+
name: str
|
|
23
|
+
authType: str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class HarnessInfo(TypedDict):
|
|
27
|
+
name: str
|
|
28
|
+
authType: str
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ResourceInfo(TypedDict):
|
|
32
|
+
name: str
|
|
33
|
+
resourceType: FetchResourceType
|
|
34
|
+
authType: str
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Harness operations (port of upstream ``src/cli/operations/harness``)."""
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Preview-build ("orphan") harness detection (port of ``operations/harness/orphan.ts``).
|
|
2
|
+
|
|
3
|
+
An orphan is a harness recorded in deployed-state.json that the old imperative preview build
|
|
4
|
+
created: a real harness NOT part of any CloudFormation stack. The GA path stamps every CFN-managed
|
|
5
|
+
record with ``provisioner: 'cloudformation'``, so a record without that marker can only be an
|
|
6
|
+
orphan. Detection reads local state only — no AWS calls.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from collections.abc import Mapping
|
|
12
|
+
from dataclasses import dataclass
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass(frozen=True)
|
|
17
|
+
class OrphanHarness:
|
|
18
|
+
name: str
|
|
19
|
+
target_name: str
|
|
20
|
+
harness_id: str
|
|
21
|
+
harness_arn: str
|
|
22
|
+
region: str
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _field(record: Any, camel: str, snake: str) -> Any:
|
|
26
|
+
if isinstance(record, Mapping):
|
|
27
|
+
return record.get(camel)
|
|
28
|
+
return getattr(record, snake, None)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def is_orphan_harness_record(record: Any) -> bool:
|
|
32
|
+
return record is not None and _field(record, "provisioner", "provisioner") != "cloudformation"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def region_from_harness_arn(harness_arn: str) -> str | None:
|
|
36
|
+
"""Region segment of ``arn:aws:bedrock-agentcore:<region>:<account>:harness/<id>``."""
|
|
37
|
+
parts = harness_arn.split(":")
|
|
38
|
+
region = parts[3] if len(parts) > 3 else ""
|
|
39
|
+
return region or None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _targets(deployed_state: Any) -> Mapping[str, Any]:
|
|
43
|
+
if deployed_state is None:
|
|
44
|
+
return {}
|
|
45
|
+
if isinstance(deployed_state, Mapping):
|
|
46
|
+
return deployed_state.get("targets") or {}
|
|
47
|
+
return getattr(deployed_state, "targets", None) or {}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _harnesses(target: Any) -> Mapping[str, Any]:
|
|
51
|
+
resources = target.get("resources") if isinstance(target, Mapping) else getattr(target, "resources", None)
|
|
52
|
+
if resources is None:
|
|
53
|
+
return {}
|
|
54
|
+
if isinstance(resources, Mapping):
|
|
55
|
+
return resources.get("harnesses") or {}
|
|
56
|
+
return getattr(resources, "harnesses", None) or {}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def find_orphan_harnesses(deployed_state: Any, harness_name: str | None = None) -> list[OrphanHarness]:
|
|
60
|
+
"""Orphans across every target (optionally one name); records without a parseable region are skipped."""
|
|
61
|
+
orphans: list[OrphanHarness] = []
|
|
62
|
+
for target_name, target in _targets(deployed_state).items():
|
|
63
|
+
for name, record in _harnesses(target).items():
|
|
64
|
+
if harness_name and name != harness_name:
|
|
65
|
+
continue
|
|
66
|
+
if not is_orphan_harness_record(record):
|
|
67
|
+
continue
|
|
68
|
+
arn = _field(record, "harnessArn", "harness_arn") or ""
|
|
69
|
+
region = region_from_harness_arn(arn)
|
|
70
|
+
if not region:
|
|
71
|
+
continue
|
|
72
|
+
orphans.append(
|
|
73
|
+
OrphanHarness(
|
|
74
|
+
name=name,
|
|
75
|
+
target_name=target_name,
|
|
76
|
+
harness_id=_field(record, "harnessId", "harness_id"),
|
|
77
|
+
harness_arn=arn,
|
|
78
|
+
region=region,
|
|
79
|
+
)
|
|
80
|
+
)
|
|
81
|
+
return orphans
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
__all__ = ["OrphanHarness", "find_orphan_harnesses", "is_orphan_harness_record", "region_from_harness_arn"]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Harness skill helpers (port of ``operations/harness/skill-utils.ts``).
|
|
2
|
+
|
|
3
|
+
Skills are handled in their camelCase JSON form (``{"s3Uri": ...}``, ``{"gitUrl": ..., "path": ...}``,
|
|
4
|
+
``{"awsSkills": {"paths": [...]}}`` or ``{"path": ...}``).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from collections.abc import Mapping
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
from agentcore.lib.errors.types import ValidationError
|
|
13
|
+
from agentcore.lib.result import Err, Ok
|
|
14
|
+
from agentcore.lib.schemas.io.config_io import to_jsonable
|
|
15
|
+
|
|
16
|
+
KEY_SEPARATOR = "::"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def get_skill_key(skill: Any) -> str:
|
|
20
|
+
s = to_jsonable(skill)
|
|
21
|
+
if not isinstance(s, Mapping):
|
|
22
|
+
return f"path:{s}"
|
|
23
|
+
if "s3Uri" in s:
|
|
24
|
+
return f"s3:{s['s3Uri']}"
|
|
25
|
+
if "gitUrl" in s:
|
|
26
|
+
return f"git:{s['gitUrl']}{KEY_SEPARATOR + s['path'] if s.get('path') else ''}"
|
|
27
|
+
if "awsSkills" in s:
|
|
28
|
+
paths = (s.get("awsSkills") or {}).get("paths")
|
|
29
|
+
return f"awsSkills:{','.join(sorted(paths)) if paths is not None else '*'}"
|
|
30
|
+
return f"path:{s.get('path')}"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def build_git_skill_key(git_url: str, git_path: str | None = None) -> str:
|
|
34
|
+
return f"git:{git_url}{KEY_SEPARATOR + git_path if git_path else ''}"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def validate_git_skill_credential(project: Any, credential_name: str) -> Ok[None] | Err[Exception]:
|
|
38
|
+
spec = to_jsonable(project)
|
|
39
|
+
credential = next((c for c in spec.get("credentials") or [] if c.get("name") == credential_name), None)
|
|
40
|
+
if credential is None:
|
|
41
|
+
return Err(
|
|
42
|
+
ValidationError(
|
|
43
|
+
f"Credential '{credential_name}' not found in project. Run 'agentcore add credential' first."
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
if credential.get("authorizerType") != "ApiKeyCredentialProvider":
|
|
47
|
+
return Err(
|
|
48
|
+
ValidationError(
|
|
49
|
+
f"Credential '{credential_name}' is type '{credential.get('authorizerType')}'. Git skill auth "
|
|
50
|
+
"requires an ApiKeyCredentialProvider credential."
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
return Ok(None)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
__all__ = ["build_git_skill_key", "get_skill_key", "validate_git_skill_credential"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""AgentCore Identity credential-provider operations (port of src/cli/operations/identity)."""
|
|
2
|
+
|
|
3
|
+
from agentcore.operations.identity.api_key_credential_provider import (
|
|
4
|
+
api_key_provider_exists,
|
|
5
|
+
create_api_key_provider,
|
|
6
|
+
set_token_vault_kms_key,
|
|
7
|
+
update_api_key_provider,
|
|
8
|
+
)
|
|
9
|
+
from agentcore.operations.identity.oauth2_credential_provider import (
|
|
10
|
+
OAuth2ProviderParams,
|
|
11
|
+
OAuth2ProviderResult,
|
|
12
|
+
create_oauth2_provider,
|
|
13
|
+
get_oauth2_provider,
|
|
14
|
+
o_auth2_provider_exists,
|
|
15
|
+
oauth2_provider_exists,
|
|
16
|
+
update_oauth2_provider,
|
|
17
|
+
)
|
|
18
|
+
from agentcore.primitives.credential_utils import compute_default_credential_env_var_name
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"OAuth2ProviderParams",
|
|
22
|
+
"OAuth2ProviderResult",
|
|
23
|
+
"api_key_provider_exists",
|
|
24
|
+
"compute_default_credential_env_var_name",
|
|
25
|
+
"create_api_key_provider",
|
|
26
|
+
"create_oauth2_provider",
|
|
27
|
+
"get_oauth2_provider",
|
|
28
|
+
"o_auth2_provider_exists",
|
|
29
|
+
"oauth2_provider_exists",
|
|
30
|
+
"set_token_vault_kms_key",
|
|
31
|
+
"update_api_key_provider",
|
|
32
|
+
"update_oauth2_provider",
|
|
33
|
+
]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Imperative AWS SDK operations for API key credential providers
|
|
2
|
+
(port of src/cli/operations/identity/api-key-credential-provider.ts).
|
|
3
|
+
|
|
4
|
+
AgentCore Identity resources are not modeled as CDK constructs; these run as a pre-deploy step.
|
|
5
|
+
``client`` is a boto3 ``bedrock-agentcore-control`` client.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from agentcore.aws._aws_errors import aws_error_name
|
|
11
|
+
from agentcore.lib.errors.types import to_error
|
|
12
|
+
from agentcore.lib.result import Err, Ok
|
|
13
|
+
|
|
14
|
+
_CONFLICT_CODES = ("ConflictException", "ResourceAlreadyExistsException")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _arn(response: dict[str, Any]) -> dict[str, Any]:
|
|
18
|
+
arn = response.get("credentialProviderArn")
|
|
19
|
+
return {"credentialProviderArn": arn} if arn is not None else {}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def api_key_provider_exists(client: Any, provider_name: str) -> bool:
|
|
23
|
+
"""True if the provider exists; False on ResourceNotFoundException; other errors propagate."""
|
|
24
|
+
try:
|
|
25
|
+
client.get_api_key_credential_provider(name=provider_name)
|
|
26
|
+
return True
|
|
27
|
+
except Exception as exc:
|
|
28
|
+
if aws_error_name(exc) == "ResourceNotFoundException":
|
|
29
|
+
return False
|
|
30
|
+
raise
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def create_api_key_provider(client: Any, provider_name: str, api_key: str) -> Ok[dict[str, Any]] | Err[Exception]:
|
|
34
|
+
"""Create an API key credential provider. Idempotent: an existing provider counts as success."""
|
|
35
|
+
try:
|
|
36
|
+
client.create_api_key_credential_provider(name=provider_name, apiKey=api_key)
|
|
37
|
+
# The create response doesn't include credentialProviderArn — fetch it.
|
|
38
|
+
return Ok(_arn(client.get_api_key_credential_provider(name=provider_name)))
|
|
39
|
+
except Exception as exc: # noqa: BLE001
|
|
40
|
+
if aws_error_name(exc) in _CONFLICT_CODES:
|
|
41
|
+
try:
|
|
42
|
+
return Ok(_arn(client.get_api_key_credential_provider(name=provider_name)))
|
|
43
|
+
except Exception: # noqa: BLE001
|
|
44
|
+
return Ok({})
|
|
45
|
+
return Err(to_error(exc))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def update_api_key_provider(client: Any, provider_name: str, api_key: str) -> Ok[dict[str, Any]] | Err[Exception]:
|
|
49
|
+
"""Update an existing API key credential provider with a new API key."""
|
|
50
|
+
try:
|
|
51
|
+
client.update_api_key_credential_provider(name=provider_name, apiKey=api_key)
|
|
52
|
+
return Ok(_arn(client.get_api_key_credential_provider(name=provider_name)))
|
|
53
|
+
except Exception as exc: # noqa: BLE001
|
|
54
|
+
return Err(to_error(exc))
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def set_token_vault_kms_key(
|
|
58
|
+
client: Any, kms_key_arn: str, token_vault_id: str | None = None
|
|
59
|
+
) -> Ok[None] | Err[Exception]:
|
|
60
|
+
"""Configure customer-managed KMS encryption for the token vault."""
|
|
61
|
+
params: dict[str, Any] = {"kmsConfiguration": {"keyType": "CustomerManagedKey", "kmsKeyArn": kms_key_arn}}
|
|
62
|
+
if token_vault_id is not None:
|
|
63
|
+
params["tokenVaultId"] = token_vault_id
|
|
64
|
+
try:
|
|
65
|
+
client.set_token_vault_cmk(**params)
|
|
66
|
+
return Ok(None)
|
|
67
|
+
except Exception as exc: # noqa: BLE001
|
|
68
|
+
return Err(to_error(exc))
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Imperative AWS SDK operations for OAuth2 credential providers
|
|
2
|
+
(port of src/cli/operations/identity/oauth2-credential-provider.ts).
|
|
3
|
+
|
|
4
|
+
``client`` is a boto3 ``bedrock-agentcore-control`` client.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from agentcore.aws._aws_errors import aws_error_name
|
|
11
|
+
from agentcore.lib.errors.types import ServiceError, to_error
|
|
12
|
+
from agentcore.lib.result import Err, Ok
|
|
13
|
+
|
|
14
|
+
OAuth2ProviderResult = Ok[dict[str, Any]] | Err[Exception]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class OAuth2ProviderParams:
|
|
19
|
+
name: str
|
|
20
|
+
vendor: str
|
|
21
|
+
discovery_url: str
|
|
22
|
+
client_id: str
|
|
23
|
+
client_secret: str
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _extract_result(response: dict[str, Any]) -> OAuth2ProviderResult:
|
|
27
|
+
"""Create/Get/Update responses share the same shape."""
|
|
28
|
+
arn = response.get("credentialProviderArn")
|
|
29
|
+
if not arn:
|
|
30
|
+
return Err(ServiceError("missing credentialProviderArn in response"))
|
|
31
|
+
value: dict[str, Any] = {"credentialProviderArn": arn}
|
|
32
|
+
secret_arn = (response.get("clientSecretArn") or {}).get("secretArn")
|
|
33
|
+
if secret_arn is not None:
|
|
34
|
+
value["clientSecretArn"] = secret_arn
|
|
35
|
+
if response.get("callbackUrl") is not None:
|
|
36
|
+
value["callbackUrl"] = response["callbackUrl"]
|
|
37
|
+
return Ok(value)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def o_auth2_provider_exists(client: Any, provider_name: str) -> bool:
|
|
41
|
+
try:
|
|
42
|
+
client.get_oauth2_credential_provider(name=provider_name)
|
|
43
|
+
return True
|
|
44
|
+
except Exception as exc:
|
|
45
|
+
if aws_error_name(exc) == "ResourceNotFoundException":
|
|
46
|
+
return False
|
|
47
|
+
raise
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
oauth2_provider_exists = o_auth2_provider_exists
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _build_oauth2_config(params: OAuth2ProviderParams) -> dict[str, Any]:
|
|
54
|
+
"""Always customOauth2ProviderConfig; the vendor field controls server-side behaviour."""
|
|
55
|
+
return {
|
|
56
|
+
"name": params.name,
|
|
57
|
+
"credentialProviderVendor": params.vendor,
|
|
58
|
+
"oauth2ProviderConfigInput": {
|
|
59
|
+
"customOauth2ProviderConfig": {
|
|
60
|
+
"clientId": params.client_id,
|
|
61
|
+
"clientSecret": params.client_secret,
|
|
62
|
+
"oauthDiscovery": {"discoveryUrl": params.discovery_url},
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def create_oauth2_provider(client: Any, params: OAuth2ProviderParams) -> OAuth2ProviderResult:
|
|
69
|
+
"""Create an OAuth2 provider; on conflict (created concurrently) fall back to update."""
|
|
70
|
+
try:
|
|
71
|
+
result = _extract_result(client.create_oauth2_credential_provider(**_build_oauth2_config(params)))
|
|
72
|
+
if not result.success:
|
|
73
|
+
result = get_oauth2_provider(client, params.name)
|
|
74
|
+
return result
|
|
75
|
+
except Exception as exc: # noqa: BLE001
|
|
76
|
+
if aws_error_name(exc) in ("ConflictException", "ResourceAlreadyExistsException"):
|
|
77
|
+
return update_oauth2_provider(client, params)
|
|
78
|
+
return Err(to_error(exc))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_oauth2_provider(client: Any, name: str) -> OAuth2ProviderResult:
|
|
82
|
+
try:
|
|
83
|
+
return _extract_result(client.get_oauth2_credential_provider(name=name))
|
|
84
|
+
except Exception as exc: # noqa: BLE001
|
|
85
|
+
return Err(to_error(exc))
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def update_oauth2_provider(client: Any, params: OAuth2ProviderParams) -> OAuth2ProviderResult:
|
|
89
|
+
try:
|
|
90
|
+
result = _extract_result(client.update_oauth2_credential_provider(**_build_oauth2_config(params)))
|
|
91
|
+
if not result.success:
|
|
92
|
+
result = get_oauth2_provider(client, params.name)
|
|
93
|
+
return result
|
|
94
|
+
except Exception as exc: # noqa: BLE001
|
|
95
|
+
return Err(to_error(exc))
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"""Start KB ingestion jobs for a deployed knowledge base (port of operations/ingest/index.ts)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
import threading
|
|
7
|
+
from collections.abc import Callable, Mapping
|
|
8
|
+
from dataclasses import dataclass, field
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from agentcore.aws import bedrock_agent
|
|
12
|
+
from agentcore.aws._aws_errors import aws_error_name, get_error_message
|
|
13
|
+
from agentcore.lib.errors.types import IngestionError
|
|
14
|
+
from agentcore.lib.result import Err, Ok
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclass(frozen=True)
|
|
18
|
+
class ConcurrentRetryPolicy:
|
|
19
|
+
max_attempts: int
|
|
20
|
+
"""Max attempts per data source (1 = no retry)."""
|
|
21
|
+
delay_ms: int
|
|
22
|
+
"""Delay before each retry, in milliseconds."""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# Bedrock allows only one in-flight ingestion job per KB; a second StartIngestionJob for a multi-DS
|
|
26
|
+
# KB usually races and gets a ConflictException. Retry up to 4 times (~5min at 75s intervals).
|
|
27
|
+
DEFAULT_CONCURRENT_RETRY_POLICY = ConcurrentRetryPolicy(max_attempts=5, delay_ms=75_000)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class StartedIngestion:
|
|
32
|
+
data_source_id: str
|
|
33
|
+
uri: str
|
|
34
|
+
ingestion_job_id: str
|
|
35
|
+
|
|
36
|
+
def to_json(self) -> dict[str, str]:
|
|
37
|
+
return {"dataSourceId": self.data_source_id, "uri": self.uri, "ingestionJobId": self.ingestion_job_id}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@dataclass
|
|
41
|
+
class RunKbIngestionInput:
|
|
42
|
+
knowledge_base_name: str
|
|
43
|
+
deployed_state: Any
|
|
44
|
+
"""``DeployedState`` model or camelCase dict."""
|
|
45
|
+
target_name: str
|
|
46
|
+
region: str
|
|
47
|
+
data_source_uri: str | None = None
|
|
48
|
+
"""When set, ingest only the data source whose recorded URI matches."""
|
|
49
|
+
concurrent_retry_policy: ConcurrentRetryPolicy | None = None
|
|
50
|
+
on_progress: Callable[[str], None] | None = None
|
|
51
|
+
signal: threading.Event | None = None
|
|
52
|
+
"""Abort signal: when set, cancels pending retry sleeps and fails the in-flight data source."""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclass
|
|
56
|
+
class RunKbIngestionSuccess:
|
|
57
|
+
started_jobs: list[StartedIngestion] = field(default_factory=list)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
_CONCURRENT_RE = re.compile(r"concurrent ingestion jobs", re.IGNORECASE)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _is_concurrent_limit_error(err: BaseException) -> bool:
|
|
64
|
+
if aws_error_name(err) == "ConflictException":
|
|
65
|
+
return True
|
|
66
|
+
return bool(_CONCURRENT_RE.search(get_error_message(err)))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _sleep(ms: int, signal: threading.Event | None) -> None:
|
|
70
|
+
"""Sleep that returns early when the abort signal fires."""
|
|
71
|
+
if signal is None:
|
|
72
|
+
threading.Event().wait(ms / 1000)
|
|
73
|
+
elif not signal.is_set():
|
|
74
|
+
signal.wait(ms / 1000)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _get(obj: Any, snake: str, camel: str) -> Any:
|
|
78
|
+
if obj is None:
|
|
79
|
+
return None
|
|
80
|
+
return obj.get(camel) if isinstance(obj, Mapping) else getattr(obj, snake, None)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def _find_deployed_kb(state: Any, target_name: str, kb_name: str) -> Any:
|
|
84
|
+
target = (_get(state, "targets", "targets") or {}).get(target_name)
|
|
85
|
+
resources = _get(target, "resources", "resources")
|
|
86
|
+
return (_get(resources, "knowledge_bases", "knowledgeBases") or {}).get(kb_name)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def run_kb_ingestion_by_name(
|
|
90
|
+
input: RunKbIngestionInput,
|
|
91
|
+
) -> Ok[RunKbIngestionSuccess] | Err[IngestionError]:
|
|
92
|
+
"""Start ingestion for every data source on a deployed KB (sequentially, retrying on conflicts).
|
|
93
|
+
|
|
94
|
+
Pre-flight failures (KB not deployed, no data sources, unknown URI) are user errors. If any data
|
|
95
|
+
source fails to start, returns a failure listing them; successful starts are not rolled back.
|
|
96
|
+
"""
|
|
97
|
+
retry_policy = input.concurrent_retry_policy or DEFAULT_CONCURRENT_RETRY_POLICY
|
|
98
|
+
name, target_name, signal = input.knowledge_base_name, input.target_name, input.signal
|
|
99
|
+
|
|
100
|
+
deployed = _find_deployed_kb(input.deployed_state, target_name, name)
|
|
101
|
+
if not deployed:
|
|
102
|
+
return Err(
|
|
103
|
+
IngestionError(
|
|
104
|
+
f"Knowledge base '{name}' has not been deployed to target '{target_name}'. Run 'agentcore deploy' first.",
|
|
105
|
+
error_source="user",
|
|
106
|
+
)
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
data_sources = [
|
|
110
|
+
(_get(ds, "data_source_id", "dataSourceId"), _get(ds, "uri", "uri"))
|
|
111
|
+
for ds in _get(deployed, "data_sources", "dataSources") or []
|
|
112
|
+
]
|
|
113
|
+
if not data_sources:
|
|
114
|
+
return Err(IngestionError(f"Knowledge base '{name}' has no data sources to ingest.", error_source="user"))
|
|
115
|
+
|
|
116
|
+
to_ingest = data_sources
|
|
117
|
+
if input.data_source_uri:
|
|
118
|
+
to_ingest = [ds for ds in data_sources if ds[1] == input.data_source_uri]
|
|
119
|
+
if not to_ingest:
|
|
120
|
+
return Err(
|
|
121
|
+
IngestionError(
|
|
122
|
+
f"Data source '{input.data_source_uri}' not found on knowledge base '{name}'.",
|
|
123
|
+
error_source="user",
|
|
124
|
+
)
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
kb_id = _get(deployed, "knowledge_base_id", "knowledgeBaseId")
|
|
128
|
+
started_jobs: list[StartedIngestion] = []
|
|
129
|
+
failures: list[tuple[str, str, Any]] = []
|
|
130
|
+
for ds_id, uri in to_ingest:
|
|
131
|
+
if signal is not None and signal.is_set():
|
|
132
|
+
failures.append((ds_id, uri, Exception("Aborted before start")))
|
|
133
|
+
continue
|
|
134
|
+
last_error: Any = None
|
|
135
|
+
started = False
|
|
136
|
+
for attempt in range(1, retry_policy.max_attempts + 1):
|
|
137
|
+
try:
|
|
138
|
+
job = bedrock_agent.start_ingestion_job(
|
|
139
|
+
region=input.region, knowledge_base_id=kb_id, data_source_id=ds_id
|
|
140
|
+
)
|
|
141
|
+
job_id = job.get("ingestionJobId") if isinstance(job, Mapping) else None
|
|
142
|
+
if not job_id:
|
|
143
|
+
last_error = Exception("No ingestionJobId in StartIngestionJob response")
|
|
144
|
+
break
|
|
145
|
+
started_jobs.append(StartedIngestion(ds_id, uri, job_id))
|
|
146
|
+
started = True
|
|
147
|
+
break
|
|
148
|
+
except Exception as exc: # noqa: BLE001 - every service error is reported per data source
|
|
149
|
+
last_error = exc
|
|
150
|
+
if not _is_concurrent_limit_error(exc) or attempt == retry_policy.max_attempts:
|
|
151
|
+
break
|
|
152
|
+
delay_seconds = round(retry_policy.delay_ms / 1000)
|
|
153
|
+
if input.on_progress:
|
|
154
|
+
input.on_progress(
|
|
155
|
+
f"{ds_id} ({uri}): another ingestion job is running on this KB, retry "
|
|
156
|
+
f"{attempt}/{retry_policy.max_attempts - 1} in {delay_seconds}s…"
|
|
157
|
+
)
|
|
158
|
+
_sleep(retry_policy.delay_ms, signal)
|
|
159
|
+
if signal is not None and signal.is_set():
|
|
160
|
+
last_error = Exception("Aborted while waiting for concurrent ingestion job to drain")
|
|
161
|
+
break
|
|
162
|
+
if not started:
|
|
163
|
+
failures.append((ds_id, uri, last_error))
|
|
164
|
+
|
|
165
|
+
if failures:
|
|
166
|
+
detail = "\n".join(
|
|
167
|
+
f" {ds_id} ({uri}): {get_error_message(e) if isinstance(e, BaseException) else str(e)}"
|
|
168
|
+
for ds_id, uri, e in failures
|
|
169
|
+
)
|
|
170
|
+
return Err(
|
|
171
|
+
IngestionError(f"Failed to start ingestion for {len(failures)} of {len(to_ingest)} data sources:\n{detail}")
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
return Ok(RunKbIngestionSuccess(started_jobs=started_jobs))
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
__all__ = [
|
|
178
|
+
"DEFAULT_CONCURRENT_RETRY_POLICY",
|
|
179
|
+
"ConcurrentRetryPolicy",
|
|
180
|
+
"RunKbIngestionInput",
|
|
181
|
+
"RunKbIngestionSuccess",
|
|
182
|
+
"StartedIngestion",
|
|
183
|
+
"run_kb_ingestion_by_name",
|
|
184
|
+
]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Project init helpers (port of src/cli/operations/init/files.ts)."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Literal
|
|
6
|
+
|
|
7
|
+
from agentcore.lib import run_subprocess_capture
|
|
8
|
+
|
|
9
|
+
AGENTCORE_GITIGNORE = """# Secrets (local environment files are never committed)
|
|
10
|
+
.env.local
|
|
11
|
+
|
|
12
|
+
# CDK Build Artifacts
|
|
13
|
+
cdk/cdk.out/
|
|
14
|
+
cdk/node_modules/
|
|
15
|
+
|
|
16
|
+
# CLI Internals
|
|
17
|
+
.cli/*
|
|
18
|
+
|
|
19
|
+
# Ephemeral Staging
|
|
20
|
+
.cache/*
|
|
21
|
+
|
|
22
|
+
# Exception: Commit the State
|
|
23
|
+
!.cli/deployed-state.json
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def write_gitignore(config_base_dir: str) -> None:
|
|
28
|
+
with open(os.path.join(config_base_dir, ".gitignore"), "w", encoding="utf-8", newline="") as fh:
|
|
29
|
+
fh.write(AGENTCORE_GITIGNORE)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def write_env_file(config_base_dir: str) -> None:
|
|
33
|
+
"""Write an empty .env.local file for storing secrets."""
|
|
34
|
+
with open(os.path.join(config_base_dir, ".env.local"), "w", encoding="utf-8") as fh:
|
|
35
|
+
fh.write("")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclass
|
|
39
|
+
class InitGitRepoResult:
|
|
40
|
+
status: Literal["success", "skipped", "error"]
|
|
41
|
+
message: str | None = None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def init_git_repo(project_root: str) -> InitGitRepoResult:
|
|
45
|
+
"""Initialize a git repository at the project root; skipped if git is missing or already in a repo."""
|
|
46
|
+
if run_subprocess_capture("git", ["--version"], cwd=project_root).code != 0:
|
|
47
|
+
return InitGitRepoResult("skipped", "git not available")
|
|
48
|
+
if run_subprocess_capture("git", ["rev-parse", "--is-inside-work-tree"], cwd=project_root).code == 0:
|
|
49
|
+
return InitGitRepoResult("skipped", "already in a git repository")
|
|
50
|
+
result = run_subprocess_capture("git", ["init"], cwd=project_root)
|
|
51
|
+
if result.code != 0:
|
|
52
|
+
return InitGitRepoResult("error", result.stderr or "git init failed")
|
|
53
|
+
result = run_subprocess_capture("git", ["add", "."], cwd=project_root)
|
|
54
|
+
if result.code != 0:
|
|
55
|
+
return InitGitRepoResult("error", result.stderr or "git add failed")
|
|
56
|
+
result = run_subprocess_capture("git", ["commit", "-m", "Initial commit"], cwd=project_root)
|
|
57
|
+
if result.code != 0:
|
|
58
|
+
return InitGitRepoResult("error", result.stderr or "git commit failed")
|
|
59
|
+
return InitGitRepoResult("success")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""Legacy insights operations (port of operations/insights/index.ts)."""
|
|
2
|
+
|
|
3
|
+
from agentcore.operations.insights.insights_storage import (
|
|
4
|
+
INSIGHTS_DIR,
|
|
5
|
+
delete_local_insights_run,
|
|
6
|
+
list_insights_runs,
|
|
7
|
+
load_insights_run,
|
|
8
|
+
save_insights_run,
|
|
9
|
+
update_insights_run,
|
|
10
|
+
)
|
|
11
|
+
from agentcore.operations.insights.run_insights import run_insights_command
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"INSIGHTS_DIR",
|
|
15
|
+
"delete_local_insights_run",
|
|
16
|
+
"list_insights_runs",
|
|
17
|
+
"load_insights_run",
|
|
18
|
+
"run_insights_command",
|
|
19
|
+
"save_insights_run",
|
|
20
|
+
"update_insights_run",
|
|
21
|
+
]
|