google-agents-cli 1.12.0__tar.gz → 1.13.0__tar.gz
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.
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/PKG-INFO +23 -18
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/README.md +4 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/pyproject.toml +26 -22
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_adk_client.py +3 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_click.py +34 -11
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_experiments.py +2 -0
- google_agents_cli-1.13.0/src/google/agents/cli/_gcloud_auth.py +290 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_gcp_project.py +44 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_project.py +45 -17
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_remote.py +65 -8
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_runner.py +13 -0
- google_agents_cli-1.12.0/src/google/agents/cli/scaffold/utils/symlinks.py → google_agents_cli-1.13.0/src/google/agents/cli/_symlinks.py +57 -16
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_telemetry.py +8 -7
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/auth.py +30 -13
- google_agents_cli-1.13.0/src/google/agents/cli/command_center/_app.py +85 -0
- google_agents_cli-1.13.0/src/google/agents/cli/command_center/_proxy.py +268 -0
- google_agents_cli-1.13.0/src/google/agents/cli/command_center/cmd_command_center.py +170 -0
- google_agents_cli-1.13.0/src/google/agents/cli/deploy/_agent_identity.py +223 -0
- google_agents_cli-1.13.0/src/google/agents/cli/deploy/_agent_runtime_validation.py +269 -0
- google_agents_cli-1.13.0/src/google/agents/cli/deploy/_cloud_run_validation.py +473 -0
- google_agents_cli-1.13.0/src/google/agents/cli/deploy/_cloud_validation.py +670 -0
- google_agents_cli-1.13.0/src/google/agents/cli/deploy/_gke_validation.py +561 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/_utils.py +21 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/agent_runtime.py +289 -54
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/cloud_run.py +271 -27
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/cmd_deploy.py +21 -14
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/gke.py +11 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/dev/cmd_build.py +1 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/dev/cmd_install.py +1 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/dev/cmd_lint.py +1 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/dev/cmd_playground.py +2 -5
- google_agents_cli-1.13.0/src/google/agents/cli/eval/_verdict.py +307 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_generate.py +5 -9
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_grade.py +47 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_run.py +9 -6
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_submit.py +7 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/eval_utils.py +97 -27
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_loader.py +103 -61
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_overrides.py +9 -3
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_refs.py +60 -12
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_resolver.py +247 -63
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_skills.py +43 -23
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_spec.py +3 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_sync.py +7 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_trust.py +3 -3
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/cmd_extension_add.py +26 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/cmd_extension_update.py +78 -19
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/main.py +20 -3
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/publish/cmd_publish.py +42 -73
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/run/_local_server.py +4 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/run/cmd_run.py +3 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/apploader.go +2 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/appurl.go +19 -3
- google_agents_cli-1.13.0/src/google/agents/cli/scaffold/agents/adk_go/appurl_test.go +58 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/scaffold/agents/adk_python/tests → google_agents_cli-1.13.0/src/google/agents/cli/scaffold/agents/adk_go}/eval/eval_config.yaml +5 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/main.go +1 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/main/java/{{cookiecutter.java_package_path}}/Agent.java +25 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/app/agent.py +1 -1
- {google_agents_cli-1.12.0/src/google/agents/cli/scaffold/agents/adk_go → google_agents_cli-1.13.0/src/google/agents/cli/scaffold/agents/adk_python/tests}/eval/eval_config.yaml +5 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/Dockerfile +3 -3
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/Makefile +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/package-lock.json +349 -280
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/package.json +9 -8
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/tests/integration/server_e2e.test.ts +4 -5
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/tests/load_test/load_test.ts +2 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/agents-cli-manifest.yaml +6 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/iam.tf +49 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/providers.tf +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/service_accounts.tf +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/variables.tf +4 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/iam.tf +42 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/providers.tf +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/variables.tf +4 -0
- google_agents_cli-1.13.0/src/google/agents/cli/scaffold/base_templates/typescript/.env +11 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/tsconfig.json +3 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/commands/create.py +23 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/commands/enhance.py +16 -9
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/commands/upgrade.py +8 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/cicd/service.tf +4 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/single-project/service.tf +4 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/integration/test_server_e2e.py +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service.tf +28 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service.tf +26 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/cicd/service.tf +13 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/single-project/service.tf +13 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/cicd/service.tf +28 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/single-project/service.tf +26 -2
- {google_agents_cli-1.12.0/src/google/agents/cli/scaffold/deployment_targets/none → google_agents_cli-1.13.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run}/python/tests/integration/test_server_e2e.py +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/cicd/service.tf +13 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/single-project/service.tf +13 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/cli_options.py +12 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/copy_files.py +5 -2
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/generation_metadata.py +29 -13
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/go_overlay.py +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/language.py +51 -17
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/template.py +51 -28
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/upgrade.py +16 -8
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/setup/cmd_setup.py +6 -0
- google_agents_cli-1.13.0/src/google/agents/cli/skills/__init__.py +13 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/SKILL.md +3 -3
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/recipes.md +6 -10
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/SKILL.md +11 -11
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/agent-runtime.md +9 -5
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/SKILL.md +13 -5
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/metrics-guide.md +2 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-observability/SKILL.md +1 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-publish/SKILL.md +3 -1
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-scaffold/SKILL.md +4 -4
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-scaffold/references/flags.md +3 -3
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/SKILL.md +5 -5
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/extension.md +8 -5
- google_agents_cli-1.12.0/src/google/agents/cli/deploy/_agent_identity.py +0 -51
- google_agents_cli-1.12.0/src/google/agents/cli/deploy/_cloud_validation.py +0 -1011
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/LICENSE +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_agent_platform.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_agent_platform_types.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_defaults.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_fs.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_git.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_modes.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_output.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_sdk_compat.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_skills_check.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_telemetry_worker.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_tools.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_trust.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/_uv_index.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/data → google_agents_cli-1.13.0/src/google/agents/cli/command_center}/__init__.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/deploy → google_agents_cli-1.13.0/src/google/agents/cli/data}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/data/_recipe.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/data/cmd_data_ingestion.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/dev → google_agents_cli-1.13.0/src/google/agents/cli/deploy}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/_build_logs.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/deploy/_operation.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/info → google_agents_cli-1.13.0/src/google/agents/cli/dev}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/_events.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/_live.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/_paths.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/_synthesize_runner.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_analyze.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_compare.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_dataset.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_eval_group.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_metric.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/cmd_optimize.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/eval/optimize_utils.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_compat.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_manifest.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_paths.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/_schema.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/cmd_extension_group.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/cmd_extension_list.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/extension/cmd_extension_remove.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/infra → google_agents_cli-1.13.0/src/google/agents/cli/info}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/info/cmd_info.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/publish → google_agents_cli-1.13.0/src/google/agents/cli/infra}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/_cicd_utils.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/_terraform.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/cmd_cicd.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/cmd_datastore.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/cmd_infra.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/cmd_infra_show.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/infra/cmd_infra_single_project.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/scaffold/commands → google_agents_cli-1.13.0/src/google/agents/cli/publish}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/publish/cmd_publish_group.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/run/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/run/_a2a_pinning.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/run/_multimodal.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/Dockerfile +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/Makefile +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/app/agent.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/app/agent_test.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo_test.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/e2e/integration/server_e2e_test.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/load_test.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/basic-dataset.json +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/eval/response_quality.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/go.mod +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/go.sum +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/observability.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/observability_test.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/sessions/backends.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/sessions/sessions.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/sessions/sessions_test.go +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_go/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/Dockerfile +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/Makefile +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/pom.xml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/main/java/{{cookiecutter.java_package_path}}/Main.java +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/test/java/{{cookiecutter.java_package_path}}/e2e/integration/ServerE2ETest.java +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/test/java/{{cookiecutter.java_package_path}}/e2e/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/test/java/{{cookiecutter.java_package_path}}/e2e/load_test/LoadTest.java +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/test/java/{{cookiecutter.java_package_path}}/e2e/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/src/test/java/{{cookiecutter.java_package_path}}/unit/AgentTest.java +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_java/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/app/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/app/app_utils/a2a.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/app/app_utils/reasoning_engine_adapter.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/app/app_utils/services.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/app/fast_api_app.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/tests/eval/datasets/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/tests/eval/datasets/basic-dataset.json +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/tests/eval/response_quality.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_python/tests/integration/test_agent.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/app/agent.ts +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/tests/integration/agent.test.ts +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/tests/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/adk_ts/tests/unit/dummy.test.ts +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/empty_go/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/empty_java/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/empty_py/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/agents/empty_ts/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/apis.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/build_triggers.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/github.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/locals.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/storage.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/vars/env.tfvars +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/wif.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/apis.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/storage.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/vars/env.tfvars +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.env +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.env.example +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.gcloudignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.gitignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/.golangci.yml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/completions.sql +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/genai_logs_schema.json +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.env.example +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.gcloudignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/.gitignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/java/src/main/resources/application.properties +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.env +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.env.example +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.gcloudignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/.gitignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/Dockerfile +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/cicd/telemetry.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/cicd/telemetry_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/shared/completions.sql +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/shared/genai_logs_schema.json +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/single-project/telemetry.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/single-project/telemetry_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/pyproject.toml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/tests/unit/test_dummy.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/python/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.dockerignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.env.example +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.gcloudignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/.gitignore +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/eslint.config.mjs +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/base_templates/typescript/vitest.config.ts +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/cmd_scaffold_group.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/setup → google_agents_cli-1.13.0/src/google/agents/cli/scaffold/commands}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/shared/dummy_source.b64 +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment_metadata.json +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/cicd/service.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/single-project/service.tf +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run → google_agents_cli-1.13.0/src/google/agents/cli/scaffold/deployment_targets/gke}/python/tests/integration/test_server_e2e.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/scaffold/deployment_targets/gke → google_agents_cli-1.13.0/src/google/agents/cli/scaffold/deployment_targets/none}/python/tests/integration/test_server_e2e.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/resources/locks/uv-adk_python-agent_runtime.lock +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/resources/locks/uv-adk_python-cloud_run.lock +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/resources/locks/uv-adk_python-gke.lock +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/adk_shortcut.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/backup.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/command.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/fs.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/gcp.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/generate_locks.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/lock_utils.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/logging.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/merge.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/remote_template.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/scaffold/utils/version.py +0 -0
- {google_agents_cli-1.12.0/src/google/agents/cli/skills → google_agents_cli-1.13.0/src/google/agents/cli/setup}/__init__.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/setup/_antigravity.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/setup/cmd_auth.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/setup/cmd_update.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/_bundle.py +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/README.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go-workflows.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python-live.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python-workflows.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/batch-inference.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/cicd-pipeline.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/cloud-run.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/cmek.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/gke.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/terraform-patterns.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/testing-deployed-agents.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/advanced-commands.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/builtin-tools-eval.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/dataset_schema.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/live-eval.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/multimodal-eval.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/user-simulation.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/adk-docs.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/bigquery-agent-analytics.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/cloud-trace-and-logging.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/feedback-mechanism.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/brainstorming.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/commands.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/internals.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/spec-template.md +0 -0
- {google_agents_cli-1.12.0 → google_agents_cli-1.13.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/terminology.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: google-agents-cli
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.13.0
|
|
4
4
|
Summary: Agents CLI — Agent Development Lifecycle toolchain for ADK
|
|
5
5
|
Author-email: Google LLC <agents-cli-dev-pypi@google.com>
|
|
6
6
|
Requires-Python: >=3.11
|
|
@@ -12,27 +12,30 @@ License-File: LICENSE
|
|
|
12
12
|
Requires-Dist: click>=8.1.8,<9
|
|
13
13
|
Requires-Dist: PyYAML>=6.0.2,<7
|
|
14
14
|
Requires-Dist: cookiecutter>=2.6.0,<3
|
|
15
|
-
Requires-Dist: jinja2>=3.1.0
|
|
15
|
+
Requires-Dist: jinja2>=3.1.0,<4
|
|
16
16
|
Requires-Dist: google-cloud-aiplatform[evaluation]>=2.2.0,<3
|
|
17
|
-
Requires-Dist: google-cloud-resource-manager>=1.12.0
|
|
18
|
-
Requires-Dist: google-auth[pyopenssl]>=2.47.0
|
|
17
|
+
Requires-Dist: google-cloud-resource-manager>=1.12.0,<2
|
|
18
|
+
Requires-Dist: google-auth[pyopenssl]>=2.47.0,<3
|
|
19
19
|
Requires-Dist: pyopenssl<26.2
|
|
20
|
-
Requires-Dist: rich>=13.7.0
|
|
21
|
-
Requires-Dist: backoff>=2.2.1
|
|
22
|
-
Requires-Dist: requests>=2.31.0
|
|
23
|
-
Requires-Dist: websockets>=13.0
|
|
20
|
+
Requires-Dist: rich>=13.7.0,<16
|
|
21
|
+
Requires-Dist: backoff>=2.2.1,<3
|
|
22
|
+
Requires-Dist: requests>=2.31.0,<3
|
|
23
|
+
Requires-Dist: websockets>=13.0,<17
|
|
24
24
|
Requires-Dist: a2a-sdk>=1.0,<2
|
|
25
25
|
Requires-Dist: protobuf>=5.29.5,<7
|
|
26
26
|
Requires-Dist: tomlkit>=0.13.0,<1
|
|
27
|
-
Requires-Dist: psutil>=5.9.0
|
|
28
|
-
Requires-Dist: python-dotenv>=1.0.0
|
|
29
|
-
Requires-Dist: pathspec>=0.12.1
|
|
30
|
-
Requires-Dist: filelock>=
|
|
31
|
-
Requires-Dist: packaging>=24
|
|
27
|
+
Requires-Dist: psutil>=5.9.0,<8
|
|
28
|
+
Requires-Dist: python-dotenv>=1.0.0,<2
|
|
29
|
+
Requires-Dist: pathspec>=0.12.1,<2
|
|
30
|
+
Requires-Dist: filelock>=4.2.1,<5
|
|
31
|
+
Requires-Dist: packaging>=24,<27
|
|
32
32
|
Requires-Dist: pydantic>=2.10,<3
|
|
33
|
-
Requires-Dist:
|
|
34
|
-
Requires-Dist:
|
|
35
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: starlette>=1.0,<2
|
|
34
|
+
Requires-Dist: uvicorn>=0.34,<1
|
|
35
|
+
Requires-Dist: httpx>=0.28,<1
|
|
36
|
+
Requires-Dist: ruff>=0.15,<0.16 ; extra == "lint"
|
|
37
|
+
Requires-Dist: ty>=0.0.38,<0.1 ; extra == "lint"
|
|
38
|
+
Requires-Dist: codespell>=2.4,<3 ; extra == "lint"
|
|
36
39
|
Project-URL: documentation, https://google.github.io/agents-cli/
|
|
37
40
|
Project-URL: homepage, https://github.com/google/agents-cli
|
|
38
41
|
Project-URL: issues, https://github.com/google/agents-cli/issues
|
|
@@ -193,7 +196,7 @@ Yes. `agents-cli scaffold enhance` adds deployment and CI/CD to existing project
|
|
|
193
196
|
Yes. The CLI works standalone — you can run `agents-cli scaffold`, `eval`, `deploy`, and every other command directly from your terminal. The skills just make it easier for coding agents to do it for you.
|
|
194
197
|
|
|
195
198
|
**How can I extend `agents-cli` with other skills?**<br>
|
|
196
|
-
`agents-cli` skills cover the agent-building lifecycle (scaffold, ADK code patterns, evals, deploy, publish, observability). For adjacent concerns, you could install another skill suite alongside. For example, [agent-skills](https://github.com/addyosmani/agent-skills) covers general software-engineering workflows (ideation, spec gates, planning, code review), and [google/skills](https://github.com/google/skills) covers Google Cloud foundations (BigQuery, Cloud Run, Firebase, GKE).
|
|
199
|
+
`agents-cli` skills cover the agent-building lifecycle (scaffold, ADK code patterns, evals, deploy, publish, observability). For adjacent concerns, you could install another skill suite alongside. For example, [agent-skills](https://github.com/addyosmani/agent-skills) covers general software-engineering workflows (ideation, spec gates, planning, code review), and [google/skills](https://github.com/google/skills) covers Google Cloud foundations (BigQuery, Cloud Run, Firebase, GKE). [genai-factory](https://github.com/GoogleCloudPlatform/genai-factory) has Terraform blueprints for enterprise GenAI infrastructure and ships as an extension: `agents-cli extension add GoogleCloudPlatform/genai-factory`.
|
|
197
200
|
|
|
198
201
|
## Feedback
|
|
199
202
|
|
|
@@ -219,7 +222,9 @@ it in Cloud Logging. It records only the metadata such as command name
|
|
|
219
222
|
(e.g. `deploy`, `scaffold.create`), exit code, error class, duration (measured
|
|
220
223
|
from command dispatch to exit, so it excludes CLI startup), CLI/Python versions,
|
|
221
224
|
and OS — never file contents, arguments, or other input. Commands added by
|
|
222
|
-
extensions are recorded without their names.
|
|
225
|
+
extensions are recorded without their names. A command an extension serves is
|
|
226
|
+
marked as such, and the extension is named only if it was installed from a
|
|
227
|
+
repository in the `google` GitHub organization.
|
|
223
228
|
|
|
224
229
|
The request that writes the entry also carries usage metadata in its
|
|
225
230
|
`User-Agent` and `X-Goog-Api-Client` headers, which Google receives for
|
|
@@ -152,7 +152,7 @@ Yes. `agents-cli scaffold enhance` adds deployment and CI/CD to existing project
|
|
|
152
152
|
Yes. The CLI works standalone — you can run `agents-cli scaffold`, `eval`, `deploy`, and every other command directly from your terminal. The skills just make it easier for coding agents to do it for you.
|
|
153
153
|
|
|
154
154
|
**How can I extend `agents-cli` with other skills?**<br>
|
|
155
|
-
`agents-cli` skills cover the agent-building lifecycle (scaffold, ADK code patterns, evals, deploy, publish, observability). For adjacent concerns, you could install another skill suite alongside. For example, [agent-skills](https://github.com/addyosmani/agent-skills) covers general software-engineering workflows (ideation, spec gates, planning, code review), and [google/skills](https://github.com/google/skills) covers Google Cloud foundations (BigQuery, Cloud Run, Firebase, GKE).
|
|
155
|
+
`agents-cli` skills cover the agent-building lifecycle (scaffold, ADK code patterns, evals, deploy, publish, observability). For adjacent concerns, you could install another skill suite alongside. For example, [agent-skills](https://github.com/addyosmani/agent-skills) covers general software-engineering workflows (ideation, spec gates, planning, code review), and [google/skills](https://github.com/google/skills) covers Google Cloud foundations (BigQuery, Cloud Run, Firebase, GKE). [genai-factory](https://github.com/GoogleCloudPlatform/genai-factory) has Terraform blueprints for enterprise GenAI infrastructure and ships as an extension: `agents-cli extension add GoogleCloudPlatform/genai-factory`.
|
|
156
156
|
|
|
157
157
|
## Feedback
|
|
158
158
|
|
|
@@ -178,7 +178,9 @@ it in Cloud Logging. It records only the metadata such as command name
|
|
|
178
178
|
(e.g. `deploy`, `scaffold.create`), exit code, error class, duration (measured
|
|
179
179
|
from command dispatch to exit, so it excludes CLI startup), CLI/Python versions,
|
|
180
180
|
and OS — never file contents, arguments, or other input. Commands added by
|
|
181
|
-
extensions are recorded without their names.
|
|
181
|
+
extensions are recorded without their names. A command an extension serves is
|
|
182
|
+
marked as such, and the extension is named only if it was installed from a
|
|
183
|
+
repository in the `google` GitHub organization.
|
|
182
184
|
|
|
183
185
|
The request that writes the entry also carries usage metadata in its
|
|
184
186
|
`User-Agent` and `X-Goog-Api-Client` headers, which Google receives for
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "google-agents-cli"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.13.0"
|
|
4
4
|
description = "Agents CLI — Agent Development Lifecycle toolchain for ADK"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -15,29 +15,33 @@ dependencies = [
|
|
|
15
15
|
"click>=8.1.8,<9",
|
|
16
16
|
"PyYAML>=6.0.2,<7",
|
|
17
17
|
"cookiecutter>=2.6.0,<3",
|
|
18
|
-
"jinja2>=3.1.0",
|
|
18
|
+
"jinja2>=3.1.0,<4",
|
|
19
19
|
"google-cloud-aiplatform[evaluation]>=2.2.0,<3",
|
|
20
|
-
"google-cloud-resource-manager>=1.12.0",
|
|
21
|
-
"google-auth[pyopenssl]>=2.47.0",
|
|
20
|
+
"google-cloud-resource-manager>=1.12.0,<2",
|
|
21
|
+
"google-auth[pyopenssl]>=2.47.0,<3",
|
|
22
22
|
# pyOpenSSL 26.2 forbids mutating a used SSL Context; urllib3 does it per
|
|
23
23
|
# connection under google-auth's mTLS shim (urllib3#5107). Lift when fixed.
|
|
24
24
|
"pyopenssl<26.2",
|
|
25
|
-
"rich>=13.7.0",
|
|
26
|
-
"backoff>=2.2.1",
|
|
27
|
-
"requests>=2.31.0",
|
|
28
|
-
"websockets>=13.0",
|
|
25
|
+
"rich>=13.7.0,<16",
|
|
26
|
+
"backoff>=2.2.1,<3",
|
|
27
|
+
"requests>=2.31.0,<3",
|
|
28
|
+
"websockets>=13.0,<17",
|
|
29
29
|
"a2a-sdk>=1.0,<2",
|
|
30
30
|
# Pin the a2a-sdk (>=5.29.5) .. aiplatform (<7) window so pip won't chase
|
|
31
31
|
# protobuf 7 and backtrack into old google-api-core (protobuf<5).
|
|
32
32
|
"protobuf>=5.29.5,<7",
|
|
33
33
|
"tomlkit>=0.13.0,<1",
|
|
34
|
-
"psutil>=5.9.0",
|
|
35
|
-
"python-dotenv>=1.0.0",
|
|
36
|
-
"pathspec>=0.12.1",
|
|
37
|
-
"filelock>=
|
|
38
|
-
"packaging>=24",
|
|
34
|
+
"psutil>=5.9.0,<8",
|
|
35
|
+
"python-dotenv>=1.0.0,<2",
|
|
36
|
+
"pathspec>=0.12.1,<2",
|
|
37
|
+
"filelock>=4.2.1,<5",
|
|
38
|
+
"packaging>=24,<27",
|
|
39
39
|
# 2.10+: earlier versions emit `enum` beside `const`, which the schema sync test sees.
|
|
40
40
|
"pydantic>=2.10,<3",
|
|
41
|
+
# Agent Command Center server (`agents-cli command-center`).
|
|
42
|
+
"starlette>=1.0,<2",
|
|
43
|
+
"uvicorn>=0.34,<1",
|
|
44
|
+
"httpx>=0.28,<1",
|
|
41
45
|
]
|
|
42
46
|
|
|
43
47
|
[project.urls]
|
|
@@ -68,9 +72,9 @@ include = [
|
|
|
68
72
|
|
|
69
73
|
[project.optional-dependencies]
|
|
70
74
|
lint = [
|
|
71
|
-
"ruff",
|
|
72
|
-
"ty",
|
|
73
|
-
"codespell",
|
|
75
|
+
"ruff>=0.15,<0.16",
|
|
76
|
+
"ty>=0.0.38,<0.1",
|
|
77
|
+
"codespell>=2.4,<3",
|
|
74
78
|
]
|
|
75
79
|
|
|
76
80
|
[tool.pytest.ini_options]
|
|
@@ -84,12 +88,12 @@ log_cli_date_format = "%Y-%m-%d %H:%M:%S"
|
|
|
84
88
|
|
|
85
89
|
[dependency-groups]
|
|
86
90
|
dev = [
|
|
87
|
-
"pytest>=9.0.2",
|
|
88
|
-
"pytest-mock>=3.15.1",
|
|
89
|
-
"pytest-rerunfailures>=15.0",
|
|
90
|
-
"pytest-xdist>=3.6.1",
|
|
91
|
-
"pytest-cov>=4.1.0",
|
|
92
|
-
"jsonschema>=4.20",
|
|
91
|
+
"pytest>=9.0.2,<10",
|
|
92
|
+
"pytest-mock>=3.15.1,<4",
|
|
93
|
+
"pytest-rerunfailures>=15.0,<17",
|
|
94
|
+
"pytest-xdist>=3.6.1,<4",
|
|
95
|
+
"pytest-cov>=4.1.0,<8",
|
|
96
|
+
"jsonschema>=4.20,<5",
|
|
93
97
|
]
|
|
94
98
|
|
|
95
99
|
[tool.ruff]
|
|
@@ -139,9 +139,10 @@ def run_sse(
|
|
|
139
139
|
if "charset" not in resp.headers.get("Content-Type", "").lower():
|
|
140
140
|
resp.encoding = "utf-8"
|
|
141
141
|
for line in resp.iter_lines(decode_unicode=True):
|
|
142
|
-
|
|
142
|
+
# The space after "data:" is optional; ADK Java's server omits it.
|
|
143
|
+
if not isinstance(line, str) or not line.startswith("data:"):
|
|
143
144
|
continue
|
|
144
|
-
data_str = line[len("data:
|
|
145
|
+
data_str = line[len("data:") :]
|
|
145
146
|
try:
|
|
146
147
|
yield json.loads(data_str)
|
|
147
148
|
except json.JSONDecodeError:
|
|
@@ -18,6 +18,7 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
import importlib
|
|
20
20
|
import inspect
|
|
21
|
+
from dataclasses import dataclass
|
|
21
22
|
from typing import Any
|
|
22
23
|
|
|
23
24
|
import click
|
|
@@ -33,10 +34,20 @@ COMMAND_PATH_META_KEY = "agents_cli.command_path"
|
|
|
33
34
|
# view (``--help``, or a group given no subcommand) can be told apart from a
|
|
34
35
|
# run. Consumed by ``_telemetry``.
|
|
35
36
|
COMMAND_INVOKED_META_KEY = "agents_cli.command_invoked"
|
|
36
|
-
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
|
|
37
|
+
# Separates a recorded path segment from the extension that serves it:
|
|
38
|
+
# ``generate~<name>`` for a first-party extension's override, ``generate~ext``
|
|
39
|
+
# for any other. A command an extension adds is recorded as ``~<extension>``,
|
|
40
|
+
# never by name, since the extension author chose that name.
|
|
41
|
+
EXTENSION_PATH_SEPARATOR = "~"
|
|
42
|
+
_UNNAMED_EXTENSION = "ext"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@dataclass(frozen=True)
|
|
46
|
+
class _Override:
|
|
47
|
+
command: click.Command
|
|
48
|
+
extension_name: str
|
|
49
|
+
# Only a first-party extension is recorded by name.
|
|
50
|
+
first_party: bool
|
|
40
51
|
|
|
41
52
|
|
|
42
53
|
class LazyGroup(click.Group):
|
|
@@ -64,7 +75,7 @@ class LazyGroup(click.Group):
|
|
|
64
75
|
self._lazy_commands: dict[str, tuple[str, str]] = {}
|
|
65
76
|
# name -> experiment label
|
|
66
77
|
self._experiment_gates: dict[str, str] = {}
|
|
67
|
-
self._overrides: dict[str,
|
|
78
|
+
self._overrides: dict[str, _Override] = {}
|
|
68
79
|
self._hidden: set[str] = set()
|
|
69
80
|
|
|
70
81
|
def add_lazy_command(
|
|
@@ -95,6 +106,12 @@ class LazyGroup(click.Group):
|
|
|
95
106
|
if hidden:
|
|
96
107
|
self._hidden.add(name)
|
|
97
108
|
|
|
109
|
+
def add_override(
|
|
110
|
+
self, name: str, cmd: click.Command, extension_name: str, first_party: bool
|
|
111
|
+
) -> None:
|
|
112
|
+
"""Serve `name` with `cmd` from extension `extension_name`."""
|
|
113
|
+
self._overrides[name] = _Override(cmd, extension_name, first_party)
|
|
114
|
+
|
|
98
115
|
@property
|
|
99
116
|
def hidden_commands(self) -> frozenset[str]:
|
|
100
117
|
"""Names registered with `hidden=True`: invocable, but not listed."""
|
|
@@ -121,7 +138,7 @@ class LazyGroup(click.Group):
|
|
|
121
138
|
if not self._is_visible(cmd_name):
|
|
122
139
|
return None
|
|
123
140
|
if cmd_name in self._overrides:
|
|
124
|
-
return self._overrides[cmd_name]
|
|
141
|
+
return self._overrides[cmd_name].command
|
|
125
142
|
if cmd_name in self._lazy_commands and cmd_name not in self.commands:
|
|
126
143
|
import_path, _ = self._lazy_commands[cmd_name]
|
|
127
144
|
module_path, attr = import_path.split(":")
|
|
@@ -151,17 +168,23 @@ class LazyGroup(click.Group):
|
|
|
151
168
|
Overrides only apply to built-ins and added commands never share a
|
|
152
169
|
built-in's name, so an extension-served built-in name is an override.
|
|
153
170
|
"""
|
|
154
|
-
|
|
171
|
+
override = self._overrides.get(cmd_name)
|
|
172
|
+
if override is None:
|
|
155
173
|
return cmd_name
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
174
|
+
is_builtin = cmd_name in self._lazy_commands or cmd_name in self.commands
|
|
175
|
+
recorded_name = cmd_name if is_builtin else ""
|
|
176
|
+
extension = (
|
|
177
|
+
override.extension_name if override.first_party else _UNNAMED_EXTENSION
|
|
178
|
+
)
|
|
179
|
+
return f"{recorded_name}{EXTENSION_PATH_SEPARATOR}{extension}"
|
|
159
180
|
|
|
160
181
|
def format_commands(self, ctx: click.Context, formatter: click.HelpFormatter) -> None:
|
|
161
182
|
rows: list[tuple[str, str]] = []
|
|
162
183
|
for name in self.list_commands(ctx):
|
|
163
184
|
if name in self._overrides:
|
|
164
|
-
rows.append(
|
|
185
|
+
rows.append(
|
|
186
|
+
(name, self._overrides[name].command.get_short_help_str(limit=1000))
|
|
187
|
+
)
|
|
165
188
|
continue
|
|
166
189
|
if name in self.commands:
|
|
167
190
|
# Don't truncate — Click's default of 45 would cut our docstring summaries.
|
|
@@ -32,6 +32,8 @@ _REGISTRY: dict[str, Experiment] = {
|
|
|
32
32
|
"adk_java": Experiment("adk_java", bool, False),
|
|
33
33
|
"adk_kotlin": Experiment("adk_kotlin", bool, False),
|
|
34
34
|
"adk_typescript": Experiment("adk_typescript", bool, False),
|
|
35
|
+
# Hides Agent Command Center (`command-center`, `acc`, `cc`) while in progress.
|
|
36
|
+
"command_center": Experiment("command_center", bool, False),
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# Copyright 2026 Google LLC
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Let gcloud subprocesses fall back to Application Default Credentials.
|
|
16
|
+
|
|
17
|
+
gcloud reads only its own credential store, never ADC, so in an environment
|
|
18
|
+
that has ADC but no `gcloud auth login` (CI with a service account key, a
|
|
19
|
+
container with ADC mounted) every gcloud command fails with "You do not
|
|
20
|
+
currently have an active account selected". When gcloud has no account of its
|
|
21
|
+
own, agents-cli hands it an ADC access token instead.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import json
|
|
25
|
+
import logging
|
|
26
|
+
import math
|
|
27
|
+
import os
|
|
28
|
+
import subprocess
|
|
29
|
+
import time
|
|
30
|
+
from collections.abc import Mapping, Sequence
|
|
31
|
+
from dataclasses import dataclass
|
|
32
|
+
|
|
33
|
+
from google.agents.cli._runner import run_resolved
|
|
34
|
+
from google.agents.cli._tools import ToolNotExecutableError, ToolNotFoundError
|
|
35
|
+
|
|
36
|
+
_ACCESS_TOKEN_ENV = "CLOUDSDK_AUTH_ACCESS_TOKEN"
|
|
37
|
+
# Any of these means the user already chose how gcloud authenticates.
|
|
38
|
+
_GCLOUD_AUTH_OVERRIDE_ENVS = (
|
|
39
|
+
_ACCESS_TOKEN_ENV,
|
|
40
|
+
"CLOUDSDK_AUTH_ACCESS_TOKEN_FILE",
|
|
41
|
+
"CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE",
|
|
42
|
+
)
|
|
43
|
+
# gcloud command groups that never send credentials, so they skip the account check.
|
|
44
|
+
_CREDENTIAL_FREE_GROUPS = frozenset(
|
|
45
|
+
{"components", "config", "help", "info", "topic", "version"}
|
|
46
|
+
)
|
|
47
|
+
# gcloud's config folder defaults to one under these (~/.config/gcloud, or
|
|
48
|
+
# %APPDATA%\gcloud on Windows).
|
|
49
|
+
_GCLOUD_CONFIG_DIR_ENVS = frozenset({"HOME", "APPDATA"})
|
|
50
|
+
# A release track goes before the command group, as in `gcloud beta auth login`.
|
|
51
|
+
_RELEASE_TRACKS = frozenset({"alpha", "beta"})
|
|
52
|
+
# `gcloud auth` subcommands that only read credentials; any other one may change
|
|
53
|
+
# the account gcloud or ADC signs in as.
|
|
54
|
+
_READ_ONLY_AUTH_COMMANDS = frozenset(
|
|
55
|
+
{"list", "print-access-token", "print-identity-token"}
|
|
56
|
+
)
|
|
57
|
+
# A missing or blocked gcloud, which matters when adc_token_for_gcloud() is
|
|
58
|
+
# called directly rather than from a gcloud call that already found gcloud.
|
|
59
|
+
_GCLOUD_RUN_ERRORS = (
|
|
60
|
+
ToolNotFoundError,
|
|
61
|
+
ToolNotExecutableError,
|
|
62
|
+
OSError,
|
|
63
|
+
subprocess.TimeoutExpired,
|
|
64
|
+
)
|
|
65
|
+
# gcloud doesn't say when a token it prints expires, so reuse it only briefly.
|
|
66
|
+
_GCLOUD_TOKEN_TTL_SECONDS = 300
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
@dataclass(frozen=True)
|
|
70
|
+
class _CachedToken:
|
|
71
|
+
token: str | None
|
|
72
|
+
expires_at: float # A time.monotonic() deadline.
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
_cached_token: _CachedToken | None = None
|
|
76
|
+
# Whether gcloud has credentials of its own, per gcloud environment (see
|
|
77
|
+
# _gcloud_env_key). Cleared when a `gcloud auth` command may change accounts.
|
|
78
|
+
_own_credentials: dict[tuple[tuple[str, str], ...], bool] = {}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def fallback_token_env(
|
|
82
|
+
gcloud_args: Sequence[str], env: Mapping[str, str] | None
|
|
83
|
+
) -> dict[str, str] | None:
|
|
84
|
+
"""Return the environment for a gcloud subprocess with an ADC token added.
|
|
85
|
+
|
|
86
|
+
Returns None, meaning "run gcloud as is", when the command is a
|
|
87
|
+
`gcloud auth` command or doesn't use credentials, or when
|
|
88
|
+
`adc_token_for_gcloud` returns None.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
gcloud_args: The gcloud arguments, without the leading "gcloud".
|
|
92
|
+
env: The environment the caller passes to the subprocess, or None for
|
|
93
|
+
the current process environment.
|
|
94
|
+
"""
|
|
95
|
+
command = _command_path(gcloud_args)
|
|
96
|
+
group = command[0] if command else None
|
|
97
|
+
# `gcloud auth` commands manage gcloud's own credentials; a token would
|
|
98
|
+
# override them (e.g. print-identity-token fails with one).
|
|
99
|
+
if group == "auth":
|
|
100
|
+
if not _READ_ONLY_AUTH_COMMANDS.intersection(command[1:]):
|
|
101
|
+
# The account may change, so check it again on the next call.
|
|
102
|
+
_clear_caches()
|
|
103
|
+
return None
|
|
104
|
+
if group is None or group in _CREDENTIAL_FREE_GROUPS:
|
|
105
|
+
return None
|
|
106
|
+
base_env = dict(os.environ if env is None else env)
|
|
107
|
+
token = adc_token_for_gcloud(base_env)
|
|
108
|
+
if token is None:
|
|
109
|
+
return None
|
|
110
|
+
return {**base_env, _ACCESS_TOKEN_ENV: token}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def adc_token_for_gcloud(env: Mapping[str, str] | None = None) -> str | None:
|
|
114
|
+
"""Return the ADC token that gcloud commands from agents-cli run with.
|
|
115
|
+
|
|
116
|
+
Returns None when gcloud uses its own credentials: an active account, or
|
|
117
|
+
an access token or credential file set in the environment or in gcloud's
|
|
118
|
+
config. Also returns None when ADC is unavailable.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
env: The environment gcloud runs with, or None for the current
|
|
122
|
+
process environment.
|
|
123
|
+
"""
|
|
124
|
+
base_env = os.environ if env is None else env
|
|
125
|
+
if any(base_env.get(name) for name in _GCLOUD_AUTH_OVERRIDE_ENVS):
|
|
126
|
+
return None
|
|
127
|
+
if _gcloud_has_own_credentials(base_env):
|
|
128
|
+
return None
|
|
129
|
+
token = _get_adc_token()
|
|
130
|
+
if token is not None:
|
|
131
|
+
logging.debug("gcloud has no credentials of its own; passing it the ADC token.")
|
|
132
|
+
return token
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _command_path(gcloud_args: Sequence[str]) -> list[str]:
|
|
136
|
+
"""The command group and subcommands, without flags or a release track.
|
|
137
|
+
|
|
138
|
+
Global flags before the group must use the `--flag=value` form, or their
|
|
139
|
+
value would be taken for the group.
|
|
140
|
+
"""
|
|
141
|
+
command = [arg for arg in gcloud_args if not arg.startswith("-")]
|
|
142
|
+
if command and command[0] in _RELEASE_TRACKS:
|
|
143
|
+
return command[1:]
|
|
144
|
+
return command
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _clear_caches() -> None:
|
|
148
|
+
# Imported here: auth imports _runner, which imports this module lazily.
|
|
149
|
+
from google.agents.cli.auth import reset_adc_credentials
|
|
150
|
+
|
|
151
|
+
global _cached_token
|
|
152
|
+
_cached_token = None
|
|
153
|
+
_own_credentials.clear()
|
|
154
|
+
reset_adc_credentials()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _gcloud_has_own_credentials(env: Mapping[str, str]) -> bool:
|
|
158
|
+
# The checks run with the gcloud call's own environment: a CLOUDSDK_CONFIG
|
|
159
|
+
# or CLOUDSDK_ACTIVE_CONFIG_NAME there selects other accounts and config.
|
|
160
|
+
key = _gcloud_env_key(env)
|
|
161
|
+
if key not in _own_credentials:
|
|
162
|
+
check_env = dict(env)
|
|
163
|
+
_own_credentials[key] = _gcloud_has_active_account(
|
|
164
|
+
check_env
|
|
165
|
+
) or _gcloud_auth_configured(check_env)
|
|
166
|
+
return _own_credentials[key]
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def _gcloud_env_key(env: Mapping[str, str]) -> tuple[tuple[str, str], ...]:
|
|
170
|
+
"""The variables that change which accounts and config gcloud reads."""
|
|
171
|
+
return tuple(
|
|
172
|
+
sorted(
|
|
173
|
+
(name, value)
|
|
174
|
+
for name, value in env.items()
|
|
175
|
+
if name.startswith("CLOUDSDK_") or name in _GCLOUD_CONFIG_DIR_ENVS
|
|
176
|
+
)
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def _gcloud_has_active_account(env: dict[str, str]) -> bool:
|
|
181
|
+
try:
|
|
182
|
+
result = run_resolved(
|
|
183
|
+
[
|
|
184
|
+
"gcloud",
|
|
185
|
+
"auth",
|
|
186
|
+
"list",
|
|
187
|
+
"--filter=status:ACTIVE",
|
|
188
|
+
"--format=value(account)",
|
|
189
|
+
],
|
|
190
|
+
env=env,
|
|
191
|
+
capture_output=True,
|
|
192
|
+
text=True,
|
|
193
|
+
encoding="utf-8",
|
|
194
|
+
errors="replace",
|
|
195
|
+
timeout=30,
|
|
196
|
+
)
|
|
197
|
+
except _GCLOUD_RUN_ERRORS as e:
|
|
198
|
+
logging.debug("Could not list gcloud accounts: %s", e)
|
|
199
|
+
return True
|
|
200
|
+
# If gcloud can't tell, leave it alone rather than override an account it may have.
|
|
201
|
+
return result.returncode != 0 or bool(result.stdout.strip())
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def _gcloud_auth_configured(env: dict[str, str]) -> bool:
|
|
205
|
+
"""Whether gcloud's config sets an access token file or credential file.
|
|
206
|
+
|
|
207
|
+
`gcloud auth list` shows no account for these, and the ADC token would
|
|
208
|
+
take precedence over them.
|
|
209
|
+
"""
|
|
210
|
+
try:
|
|
211
|
+
result = run_resolved(
|
|
212
|
+
["gcloud", "config", "list", "--format=json(auth)"],
|
|
213
|
+
env=env,
|
|
214
|
+
capture_output=True,
|
|
215
|
+
text=True,
|
|
216
|
+
encoding="utf-8",
|
|
217
|
+
errors="replace",
|
|
218
|
+
timeout=30,
|
|
219
|
+
)
|
|
220
|
+
except _GCLOUD_RUN_ERRORS as e:
|
|
221
|
+
logging.debug("Could not read the gcloud config: %s", e)
|
|
222
|
+
return True
|
|
223
|
+
if result.returncode != 0:
|
|
224
|
+
return True
|
|
225
|
+
try:
|
|
226
|
+
# gcloud prints `{"auth": {...}}`, or `null` when no auth property is set.
|
|
227
|
+
auth = (json.loads(result.stdout.strip() or "null") or {}).get("auth") or {}
|
|
228
|
+
return bool(auth.get("access_token_file") or auth.get("credential_file_override"))
|
|
229
|
+
except (json.JSONDecodeError, AttributeError) as e:
|
|
230
|
+
logging.debug("Could not parse the gcloud auth config: %s", e)
|
|
231
|
+
return True
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
def _get_adc_token() -> str | None:
|
|
235
|
+
global _cached_token
|
|
236
|
+
if _cached_token is not None and time.monotonic() < _cached_token.expires_at:
|
|
237
|
+
return _cached_token.token
|
|
238
|
+
|
|
239
|
+
# Imported here: auth imports _runner, which imports this module lazily.
|
|
240
|
+
import google.auth.exceptions
|
|
241
|
+
from google.auth.transport.requests import Request as GoogleAuthRequest
|
|
242
|
+
|
|
243
|
+
from google.agents.cli.auth import get_adc_credentials
|
|
244
|
+
|
|
245
|
+
try:
|
|
246
|
+
credentials, _ = get_adc_credentials()
|
|
247
|
+
# The cached credentials refresh only when expired, so a long command
|
|
248
|
+
# doesn't pay for a token request on every gcloud call.
|
|
249
|
+
if not credentials.valid:
|
|
250
|
+
credentials.refresh(GoogleAuthRequest())
|
|
251
|
+
return credentials.token
|
|
252
|
+
except (google.auth.exceptions.DefaultCredentialsError, OSError) as e:
|
|
253
|
+
# gcloud reads the same ADC file, so it can't find a token either. An
|
|
254
|
+
# unreadable GOOGLE_APPLICATION_CREDENTIALS file raises OSError.
|
|
255
|
+
logging.debug("No Application Default Credentials for gcloud: %s", e)
|
|
256
|
+
_cached_token = _CachedToken(None, math.inf)
|
|
257
|
+
return None
|
|
258
|
+
except google.auth.exceptions.RefreshError as e:
|
|
259
|
+
# google-auth can't refresh some user credentials that gcloud can, e.g.
|
|
260
|
+
# when the organization requires reauthentication.
|
|
261
|
+
logging.debug("google-auth could not refresh ADC: %s", e)
|
|
262
|
+
except google.auth.exceptions.GoogleAuthError as e:
|
|
263
|
+
# Not cached: a network error may pass before the next gcloud call.
|
|
264
|
+
logging.debug("Could not get an ADC access token: %s", e)
|
|
265
|
+
return None
|
|
266
|
+
|
|
267
|
+
token = _print_adc_token_with_gcloud()
|
|
268
|
+
ttl = _GCLOUD_TOKEN_TTL_SECONDS if token else math.inf
|
|
269
|
+
_cached_token = _CachedToken(token, time.monotonic() + ttl)
|
|
270
|
+
return token
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def _print_adc_token_with_gcloud() -> str | None:
|
|
274
|
+
try:
|
|
275
|
+
result = run_resolved(
|
|
276
|
+
["gcloud", "auth", "application-default", "print-access-token", "--quiet"],
|
|
277
|
+
capture_output=True,
|
|
278
|
+
text=True,
|
|
279
|
+
encoding="utf-8",
|
|
280
|
+
errors="replace",
|
|
281
|
+
timeout=30,
|
|
282
|
+
)
|
|
283
|
+
except _GCLOUD_RUN_ERRORS as e:
|
|
284
|
+
logging.debug("Could not print the ADC access token: %s", e)
|
|
285
|
+
return None
|
|
286
|
+
if result.returncode != 0 or not result.stdout.strip():
|
|
287
|
+
# gcloud then fails with its own "run gcloud auth login" message.
|
|
288
|
+
logging.debug("No Application Default Credentials for gcloud: %s", result.stderr)
|
|
289
|
+
return None
|
|
290
|
+
return result.stdout.strip()
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
|
|
15
15
|
"""GCP project resolution and lookup utilities."""
|
|
16
16
|
|
|
17
|
+
import json
|
|
18
|
+
import logging
|
|
17
19
|
import os
|
|
20
|
+
from dataclasses import dataclass
|
|
18
21
|
|
|
19
22
|
import click
|
|
20
23
|
|
|
@@ -91,3 +94,44 @@ def get_gcp_project_number(project_id: str) -> str | None:
|
|
|
91
94
|
if project_id.isdigit():
|
|
92
95
|
return project_id
|
|
93
96
|
return None
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass(frozen=True)
|
|
100
|
+
class ProjectAncestor:
|
|
101
|
+
"""A resource a project sits under, as `gcloud projects get-ancestors` lists it."""
|
|
102
|
+
|
|
103
|
+
id: str
|
|
104
|
+
# "project", "folder" or "organization".
|
|
105
|
+
type: str
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def get_gcp_project_ancestors(project_id: str) -> list[ProjectAncestor] | None:
|
|
109
|
+
"""Get the resource hierarchy a project sits in.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
project_id: GCP project ID or project number.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
The ancestry (possibly empty), or None if it can't be read.
|
|
116
|
+
"""
|
|
117
|
+
res = run(
|
|
118
|
+
["gcloud", "projects", "get-ancestors", project_id, "--format=json"],
|
|
119
|
+
check=False,
|
|
120
|
+
capture=True,
|
|
121
|
+
print_cmd=False,
|
|
122
|
+
)
|
|
123
|
+
if res.returncode != 0:
|
|
124
|
+
logging.warning(
|
|
125
|
+
"Could not read the ancestry of project %s: %s",
|
|
126
|
+
project_id,
|
|
127
|
+
res.stderr.strip(),
|
|
128
|
+
)
|
|
129
|
+
return None
|
|
130
|
+
try:
|
|
131
|
+
return [
|
|
132
|
+
ProjectAncestor(id=entry["id"], type=entry["type"])
|
|
133
|
+
for entry in json.loads(res.stdout)
|
|
134
|
+
]
|
|
135
|
+
except (json.JSONDecodeError, TypeError, KeyError) as e:
|
|
136
|
+
logging.warning("Could not read the ancestry of project %s: %s", project_id, e)
|
|
137
|
+
return None
|