google-agents-cli 1.5.0__tar.gz → 1.6.1__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.5.0 → google_agents_cli-1.6.1}/PKG-INFO +2 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/pyproject.toml +2 -1
- google_agents_cli-1.6.1/src/google/agents/cli/_adk_client.py +382 -0
- google_agents_cli-1.6.1/src/google/agents/cli/_defaults.py +22 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_experiments.py +1 -1
- google_agents_cli-1.6.1/src/google/agents/cli/_modes.py +31 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_project.py +24 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_remote.py +41 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_skills_check.py +2 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/deploy/agent_runtime.py +148 -72
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/deploy/cmd_deploy.py +89 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/dev/cmd_playground.py +7 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/_paths.py +48 -5
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_dataset.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_generate.py +29 -9
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_grade.py +27 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_run.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_resolver.py +133 -25
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/info/cmd_info.py +3 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/cmd_cicd.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/main.py +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/run/_local_server.py +28 -10
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/run/cmd_run.py +210 -39
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/.template/templateconfig.yaml +11 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/app/agent.py +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/tests/eval/response_quality.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/.template/templateconfig.yaml +1 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/Dockerfile +1 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/Makefile +4 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/README.md +3 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/app/agent.go +6 -7
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo.go +541 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo_test.go +956 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/apploader.go +55 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/e2e/integration/server_e2e_test.go +16 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/load_test.go +3 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/README.md +117 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/basic-dataset.json +31 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/eval/eval_config.yaml +13 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/eval/response_quality.py +65 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/go.mod +21 -11
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/go.sum +55 -12
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/main.go +168 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/observability.go +192 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/observability_test.go +178 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/agents/adk_go/sessions/sessions.go +237 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/src/main/java/{{cookiecutter.java_package_path}}/Agent.java +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/app/agent.ts +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/package-lock.json +726 -345
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/package.json +7 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/agents-cli-manifest.yaml +4 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/apis.tf +25 -8
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/build_triggers.tf +15 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/github.tf +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/iam.tf +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/locals.tf +7 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/providers.tf +7 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/wif.tf +4 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/apis.tf +24 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/iam.tf +4 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/providers.tf +7 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/deploy-to-prod.yaml +103 -0
- {google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go → google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go}/.cloudbuild/pr_checks.yaml +3 -3
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/staging.yaml +231 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/.gcloudignore +15 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/deploy-to-prod.yaml +126 -0
- {google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go → google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go}/.github/workflows/pr_checks.yaml +2 -2
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/staging.yaml +197 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/go/.golangci.yml +4 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry.tf +136 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry_outputs.tf +18 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/completions.sql +184 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/genai_logs_schema.json +77 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry.tf +130 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry_outputs.tf +18 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/java/.gcloudignore +15 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/python/.gcloudignore +15 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/Dockerfile +2 -1
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/base_templates/typescript/.gcloudignore +15 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/commands/create.py +1173 -916
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/commands/enhance.py +13 -24
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/commands/upgrade.py +7 -13
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/cicd/service.tf +4 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/single-project/service.tf +4 -1
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service.tf +240 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service.tf +213 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/cicd/service.tf +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/cicd/service.tf +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/cicd/service.tf +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/cicd/service.tf +57 -23
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/single-project/service.tf +26 -10
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/resources/locks/uv-adk-agent_runtime.lock +965 -957
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/resources/locks/uv-adk-cloud_run.lock +1021 -1007
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/resources/locks/uv-adk-gke.lock +1021 -1007
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/backup.py +41 -34
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/utils/cli_options.py +123 -0
- google_agents_cli-1.6.1/src/google/agents/cli/scaffold/utils/fs.py +81 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/generate_locks.py +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/generation_metadata.py +5 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/merge.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/remote_template.py +56 -19
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/template.py +108 -60
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/version.py +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/README.md +1 -1
- google_agents_cli-1.6.1/src/google/agents/cli/skills/data/google-agents-cli-adk-code/SKILL.md +72 -0
- google_agents_cli-1.6.1/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go-workflows.md +480 -0
- google_agents_cli-1.6.1/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go.md +720 -0
- google_agents_cli-1.5.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-workflows.md → google_agents_cli-1.6.1/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python-workflows.md +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python.md +14 -14
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/samples.md +6 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/SKILL.md +12 -12
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/agent-runtime.md +24 -11
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/batch-inference.md +59 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/cicd-pipeline.md +4 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/cloud-run.md +8 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/gke.md +4 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/terraform-patterns.md +5 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/testing-deployed-agents.md +17 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/SKILL.md +5 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/advanced-commands.md +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/metrics-guide.md +5 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/multimodal-eval.md +4 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/user-simulation.md +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-observability/SKILL.md +17 -12
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/bigquery-agent-analytics.md +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/cloud-trace-and-logging.md +27 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/feedback-mechanism.md +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-publish/SKILL.md +5 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-scaffold/SKILL.md +31 -13
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-scaffold/references/flags.md +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-workflow/SKILL.md +21 -13
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/brainstorming.md +9 -7
- google_agents_cli-1.6.1/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/internals.md +28 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/spec-template.md +3 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/terminology.md +2 -1
- google_agents_cli-1.5.0/src/google/agents/cli/_adk_client.py +0 -114
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo.go +0 -297
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo_test.go +0 -185
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go/main.go +0 -137
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/deploy-to-prod.yaml +0 -58
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/staging.yaml +0 -154
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/deploy-to-prod.yaml +0 -90
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/staging.yaml +0 -156
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service.tf +0 -105
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service.tf +0 -95
- google_agents_cli-1.5.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/SKILL.md +0 -78
- google_agents_cli-1.5.0/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/internals.md +0 -24
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/LICENSE +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_agent_platform.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_click.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_gcp_project.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_output.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_runner.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_tools.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/_trust.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/auth.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/data/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/data/_recipe.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/data/cmd_data_ingestion.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/deploy/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/deploy/_operation.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/deploy/_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/dev/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/dev/cmd_build.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/dev/cmd_install.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/dev/cmd_lint.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/_synthesize_runner.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_analyze.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_compare.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_eval_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_metric.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_optimize.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/cmd_submit.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/eval_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/eval/optimize_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_compat.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_loader.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_manifest.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_overrides.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_paths.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_refs.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_schema.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_spec.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_sync.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/_trust.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/cmd_extension_add.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/cmd_extension_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/cmd_extension_list.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/cmd_extension_remove.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/extension/cmd_extension_update.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/info/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/_cicd_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/_terraform.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/cmd_datastore.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/cmd_infra.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/cmd_infra_show.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/infra/cmd_infra_single_project.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/publish/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/publish/cmd_publish.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/publish/cmd_publish_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/run/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/run/_multimodal.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/app/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/app/app_utils/a2a.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/app/app_utils/reasoning_engine_adapter.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/app/app_utils/services.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/app/fast_api_app.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/tests/eval/datasets/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/tests/eval/datasets/basic-dataset.json +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/tests/eval/eval_config.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk/tests/integration/test_agent.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/app/agent_test.go +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/appurl.go +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_go/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/Dockerfile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/Makefile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/pom.xml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/src/main/java/{{cookiecutter.java_package_path}}/Main.java +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/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.5.0 → google_agents_cli-1.6.1}/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.5.0 → google_agents_cli-1.6.1}/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.5.0 → google_agents_cli-1.6.1}/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.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/src/test/java/{{cookiecutter.java_package_path}}/unit/AgentTest.java +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_java/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/Dockerfile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/Makefile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/tests/integration/agent.test.ts +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/tests/integration/server_e2e.test.ts +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/tests/load_test/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/tests/load_test/load_test.ts +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/adk_ts/tests/unit/dummy.test.ts +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/empty_go/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/empty_java/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/empty_py/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/agents/empty_ts/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/service_accounts.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/storage.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/variables.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/vars/env.tfvars +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/storage.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/variables.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/vars/env.tfvars +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/go/.env +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/go/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/go/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/java/src/main/resources/application.properties +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.env +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/cicd/telemetry.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/cicd/telemetry_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/shared/completions.sql +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/shared/genai_logs_schema.json +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/single-project/telemetry.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/deployment/terraform/single-project/telemetry_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/pyproject.toml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/tests/unit/test_dummy.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/python/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.cloudbuild/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.dockerignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.github/workflows/deploy-to-prod.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/eslint.config.mjs +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/tsconfig.json +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/base_templates/typescript/vitest.config.ts +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/cmd_scaffold_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/commands/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/shared/dummy_source.b64 +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment_metadata.json +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/integration/test_server_e2e.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/single-project/service.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/java/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/single-project/service.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/integration/test_server_e2e.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/single-project/service.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/typescript/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/cicd/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/single-project/service_outputs.tf +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/integration/test_server_e2e.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/gke/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/integration/test_server_e2e.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/load_test/.results/.placeholder +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/load_test/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/deployment_targets/none/python/tests/load_test/load_test.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/command.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/gcp.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/language.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/lock_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/logging.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/scaffold/utils/upgrade.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/setup/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/setup/_antigravity.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/setup/cmd_auth.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/setup/cmd_setup.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/setup/cmd_update.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/_bundle.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/builtin-tools-eval.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/dataset_schema.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-observability/references/adk-docs.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/commands.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.6.1}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/extension.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.6.1
|
|
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
|
|
@@ -20,6 +20,7 @@ Requires-Dist: pyopenssl<26.2
|
|
|
20
20
|
Requires-Dist: rich>=13.7.0
|
|
21
21
|
Requires-Dist: backoff>=2.2.1
|
|
22
22
|
Requires-Dist: requests>=2.31.0
|
|
23
|
+
Requires-Dist: websockets>=13.0
|
|
23
24
|
Requires-Dist: a2a-sdk>=1.0,<2
|
|
24
25
|
Requires-Dist: protobuf>=5.29.5,<7
|
|
25
26
|
Requires-Dist: tomlkit>=0.13.0,<1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "google-agents-cli"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.6.1"
|
|
4
4
|
description = "Agents CLI — Agent Development Lifecycle toolchain for ADK"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -25,6 +25,7 @@ dependencies = [
|
|
|
25
25
|
"rich>=13.7.0",
|
|
26
26
|
"backoff>=2.2.1",
|
|
27
27
|
"requests>=2.31.0",
|
|
28
|
+
"websockets>=13.0",
|
|
28
29
|
"a2a-sdk>=1.0,<2",
|
|
29
30
|
# Pin the a2a-sdk (>=5.29.5) .. aiplatform (<7) window so pip won't chase
|
|
30
31
|
# protobuf 7 and backtrack into old google-api-core (protobuf<5).
|
|
@@ -0,0 +1,382 @@
|
|
|
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
|
+
"""Shared ADK FastAPI client: session create + ``/run_sse`` and ``/run_live``."""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import asyncio
|
|
20
|
+
import json
|
|
21
|
+
import logging
|
|
22
|
+
from collections.abc import (
|
|
23
|
+
AsyncGenerator,
|
|
24
|
+
Iterable,
|
|
25
|
+
Iterator,
|
|
26
|
+
)
|
|
27
|
+
from typing import NamedTuple
|
|
28
|
+
from urllib.parse import urlencode
|
|
29
|
+
|
|
30
|
+
import requests
|
|
31
|
+
|
|
32
|
+
_SESSION_TIMEOUT = 30
|
|
33
|
+
_RUN_SSE_TIMEOUT = 120
|
|
34
|
+
_APP_INFO_TIMEOUT = 10
|
|
35
|
+
|
|
36
|
+
DEFAULT_WS_PATH = "/run_live"
|
|
37
|
+
DEFAULT_TURN_TIMEOUT = 120 # seconds to wait for a turn's turnComplete
|
|
38
|
+
|
|
39
|
+
# /run_live transcribes it back to text, so output stays gradable.
|
|
40
|
+
DEFAULT_MODALITIES = ("AUDIO",)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def create_session(
|
|
44
|
+
base_url: str,
|
|
45
|
+
app_name: str,
|
|
46
|
+
user_id: str,
|
|
47
|
+
*,
|
|
48
|
+
headers: dict,
|
|
49
|
+
prior_events: list[dict] | None = None,
|
|
50
|
+
) -> str:
|
|
51
|
+
"""Create an ADK session and return its ID.
|
|
52
|
+
|
|
53
|
+
When ``prior_events`` are supplied, the ADK server seeds the fresh
|
|
54
|
+
session with them.
|
|
55
|
+
"""
|
|
56
|
+
session_url = f"{base_url}/apps/{app_name}/users/{user_id}/sessions"
|
|
57
|
+
body: dict = {}
|
|
58
|
+
if prior_events:
|
|
59
|
+
body["events"] = prior_events
|
|
60
|
+
|
|
61
|
+
resp = requests.post(
|
|
62
|
+
session_url, headers=headers, json=body, timeout=_SESSION_TIMEOUT
|
|
63
|
+
)
|
|
64
|
+
resp.raise_for_status()
|
|
65
|
+
return resp.json().get("id")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def fetch_app_info(
|
|
69
|
+
*,
|
|
70
|
+
base_url: str,
|
|
71
|
+
app_name: str,
|
|
72
|
+
headers: dict,
|
|
73
|
+
) -> tuple[str | None, dict]:
|
|
74
|
+
"""Fetch agent metadata from ADK's /apps/{app_name}/app-info endpoint.
|
|
75
|
+
|
|
76
|
+
Returns (root_agent_name, agents), where agents is the raw ADK agents
|
|
77
|
+
map keyed by agent id. root_agent_name may be None if the server omits
|
|
78
|
+
it; agents may be empty.
|
|
79
|
+
|
|
80
|
+
Raises requests.RequestException (or a subclass: ConnectionError,
|
|
81
|
+
HTTPError, JSONDecodeError) if the endpoint isn't reachable, returns a
|
|
82
|
+
non-2xx status, or returns a body that isn't valid JSON.
|
|
83
|
+
"""
|
|
84
|
+
url = f"{base_url}/apps/{app_name}/app-info"
|
|
85
|
+
resp = requests.get(url, headers=headers, timeout=_APP_INFO_TIMEOUT)
|
|
86
|
+
resp.raise_for_status()
|
|
87
|
+
payload = resp.json()
|
|
88
|
+
# Accept both camelCase and snake_case for cross language compatibility
|
|
89
|
+
root_agent_name = payload.get("rootAgentName", payload.get("root_agent_name"))
|
|
90
|
+
agents = payload.get("agents") or {}
|
|
91
|
+
return root_agent_name, agents
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def run_sse(
|
|
95
|
+
base_url: str,
|
|
96
|
+
app_name: str,
|
|
97
|
+
session_id: str,
|
|
98
|
+
*,
|
|
99
|
+
user_message: dict,
|
|
100
|
+
headers: dict,
|
|
101
|
+
user_id: str,
|
|
102
|
+
) -> Iterator[dict]:
|
|
103
|
+
"""Stream ADK events for a single user turn.
|
|
104
|
+
|
|
105
|
+
Yields each ``data:`` line's decoded JSON dict as it arrives. Blank
|
|
106
|
+
lines, non-``data:`` lines, and payloads that fail to JSON-decode are
|
|
107
|
+
silently skipped.
|
|
108
|
+
"""
|
|
109
|
+
run_url = f"{base_url}/run_sse"
|
|
110
|
+
payload = {
|
|
111
|
+
"appName": app_name,
|
|
112
|
+
"userId": user_id,
|
|
113
|
+
"sessionId": session_id,
|
|
114
|
+
"newMessage": user_message,
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
with requests.post(
|
|
118
|
+
run_url, headers=headers, json=payload, stream=True, timeout=_RUN_SSE_TIMEOUT
|
|
119
|
+
) as resp:
|
|
120
|
+
resp.raise_for_status()
|
|
121
|
+
# Honor the server's explicit charset if provided; otherwise,
|
|
122
|
+
# fall back to UTF-8 rather than latin-1.
|
|
123
|
+
if "charset" not in resp.headers.get("Content-Type", "").lower():
|
|
124
|
+
resp.encoding = "utf-8"
|
|
125
|
+
for line in resp.iter_lines(decode_unicode=True):
|
|
126
|
+
if not isinstance(line, str) or not line.startswith("data: "):
|
|
127
|
+
continue
|
|
128
|
+
data_str = line[len("data: ") :]
|
|
129
|
+
try:
|
|
130
|
+
yield json.loads(data_str)
|
|
131
|
+
except json.JSONDecodeError:
|
|
132
|
+
continue
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _event_parts(event: dict) -> list:
|
|
136
|
+
"""Return event's content parts, or an empty list when it carries none."""
|
|
137
|
+
content = event.get("content")
|
|
138
|
+
if not isinstance(content, dict):
|
|
139
|
+
return []
|
|
140
|
+
parts = content.get("parts")
|
|
141
|
+
return parts if isinstance(parts, list) else []
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _event_has_function_call(event: dict) -> bool:
|
|
145
|
+
"""Return True if event carries a model function call."""
|
|
146
|
+
return any(
|
|
147
|
+
isinstance(part, dict) and part.get("functionCall")
|
|
148
|
+
for part in _event_parts(event)
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _event_has_function_response(event: dict) -> bool:
|
|
153
|
+
"""Return True if event carries a tool's function response."""
|
|
154
|
+
return any(
|
|
155
|
+
isinstance(part, dict) and part.get("functionResponse")
|
|
156
|
+
for part in _event_parts(event)
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def _event_has_answer_content(event: dict) -> bool:
|
|
161
|
+
"""Return true if event carries gradable model answer content."""
|
|
162
|
+
transcription = event.get("outputTranscription")
|
|
163
|
+
if isinstance(transcription, dict) and transcription.get("text"):
|
|
164
|
+
return True
|
|
165
|
+
return any(
|
|
166
|
+
isinstance(part, dict) and (part.get("text") or part.get("inlineData"))
|
|
167
|
+
for part in _event_parts(event)
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class FinishedTranscript(NamedTuple):
|
|
172
|
+
"""A completed Live transcription frame."""
|
|
173
|
+
|
|
174
|
+
# "user" for input transcription, else the event's author (or "model").
|
|
175
|
+
author: str
|
|
176
|
+
# "user" or "model" -- the genai Content role for the rendered text.
|
|
177
|
+
role: str
|
|
178
|
+
text: str
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
# Live transcription keys mapped to the Content role they represent.
|
|
182
|
+
_TRANSCRIPTION_KEYS = (
|
|
183
|
+
("inputTranscription", "user"),
|
|
184
|
+
("outputTranscription", "model"),
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def finished_transcript(event: dict) -> FinishedTranscript | None:
|
|
189
|
+
"""Return the finished transcript carried by event, else None"""
|
|
190
|
+
for key, role in _TRANSCRIPTION_KEYS:
|
|
191
|
+
transcription = event.get(key)
|
|
192
|
+
if not isinstance(transcription, dict):
|
|
193
|
+
continue
|
|
194
|
+
if not transcription.get("finished"):
|
|
195
|
+
return None # partial chunk; the finished aggregate carries the text
|
|
196
|
+
text = transcription.get("text")
|
|
197
|
+
if not text:
|
|
198
|
+
return None
|
|
199
|
+
author = "user" if role == "user" else (event.get("author") or "model")
|
|
200
|
+
return FinishedTranscript(author=author, role=role, text=text)
|
|
201
|
+
return None
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def is_transcription_event(event: dict) -> bool:
|
|
205
|
+
"""True if event is a Live transcription frame (finished or partial)."""
|
|
206
|
+
# An empty transcription is still a transcription frame, not a malformed one.
|
|
207
|
+
return any(key in event for key, _ in _TRANSCRIPTION_KEYS)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def stream_live_events(
|
|
211
|
+
ws_base: str,
|
|
212
|
+
app_name: str,
|
|
213
|
+
session_id: str,
|
|
214
|
+
*,
|
|
215
|
+
user_turns: Iterable[dict],
|
|
216
|
+
headers: dict,
|
|
217
|
+
user_id: str,
|
|
218
|
+
) -> Iterator[dict | None]:
|
|
219
|
+
"""Stream ADK events for a Live conversation over one /run_live socket."""
|
|
220
|
+
return _iter_async(
|
|
221
|
+
_stream_live_events(
|
|
222
|
+
ws_base,
|
|
223
|
+
app_name,
|
|
224
|
+
session_id,
|
|
225
|
+
user_turns=user_turns,
|
|
226
|
+
headers=headers,
|
|
227
|
+
user_id=user_id,
|
|
228
|
+
)
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def group_turns(stream: Iterable[dict | None]) -> Iterator[list[dict]]:
|
|
233
|
+
"""Batch a stream_live_events stream into one event list per turn."""
|
|
234
|
+
events: list[dict] = []
|
|
235
|
+
for item in stream:
|
|
236
|
+
if item is None:
|
|
237
|
+
yield events
|
|
238
|
+
events = []
|
|
239
|
+
else:
|
|
240
|
+
events.append(item)
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
def build_run_live_url(
|
|
244
|
+
ws_base: str,
|
|
245
|
+
app_name: str,
|
|
246
|
+
session_id: str,
|
|
247
|
+
*,
|
|
248
|
+
user_id: str,
|
|
249
|
+
) -> str:
|
|
250
|
+
"""Build the ADK /run_live WebSocket URL from a ws-base."""
|
|
251
|
+
base = ws_base.rstrip("/")
|
|
252
|
+
query = [
|
|
253
|
+
("app_name", app_name),
|
|
254
|
+
("user_id", user_id),
|
|
255
|
+
("session_id", session_id),
|
|
256
|
+
]
|
|
257
|
+
query.extend(("modalities", m) for m in DEFAULT_MODALITIES)
|
|
258
|
+
return f"{base}{DEFAULT_WS_PATH}?{urlencode(query)}"
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
async def _stream_live_events(
|
|
262
|
+
ws_base: str,
|
|
263
|
+
app_name: str,
|
|
264
|
+
session_id: str,
|
|
265
|
+
*,
|
|
266
|
+
user_turns: Iterable[dict],
|
|
267
|
+
headers: dict,
|
|
268
|
+
user_id: str,
|
|
269
|
+
) -> AsyncGenerator[dict | None, None]:
|
|
270
|
+
"""Play user_turns over one socket, yielding each event as it arrives."""
|
|
271
|
+
from websockets.asyncio.client import connect as ws_connect
|
|
272
|
+
from websockets.exceptions import ConnectionClosed, ConnectionClosedOK
|
|
273
|
+
|
|
274
|
+
ws_url = build_run_live_url(ws_base, app_name, session_id, user_id=user_id)
|
|
275
|
+
user_turns = list(user_turns)
|
|
276
|
+
expected_turns = len(user_turns)
|
|
277
|
+
extra_headers = {
|
|
278
|
+
k: v for k, v in (headers or {}).items() if k.lower() != "content-type"
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
async with ws_connect(ws_url, additional_headers=extra_headers or None) as ws:
|
|
282
|
+
try:
|
|
283
|
+
for turn_index, content in enumerate(user_turns):
|
|
284
|
+
# One `content` frame per turn; ADK validates each frame.
|
|
285
|
+
await ws.send(json.dumps({"content": content}))
|
|
286
|
+
|
|
287
|
+
boundary = _TurnBoundary()
|
|
288
|
+
while True:
|
|
289
|
+
try:
|
|
290
|
+
raw = await asyncio.wait_for(
|
|
291
|
+
ws.recv(), timeout=DEFAULT_TURN_TIMEOUT
|
|
292
|
+
)
|
|
293
|
+
except TimeoutError:
|
|
294
|
+
logging.warning(
|
|
295
|
+
"Turn %d: no event for %ds, giving up on the turn.",
|
|
296
|
+
turn_index,
|
|
297
|
+
DEFAULT_TURN_TIMEOUT,
|
|
298
|
+
)
|
|
299
|
+
break
|
|
300
|
+
except ConnectionClosedOK:
|
|
301
|
+
if turn_index + 1 < expected_turns:
|
|
302
|
+
logging.warning(
|
|
303
|
+
"Turn %d: the agent closed the stream; "
|
|
304
|
+
"%d later turn(s) were never sent.",
|
|
305
|
+
turn_index,
|
|
306
|
+
expected_turns - turn_index - 1,
|
|
307
|
+
)
|
|
308
|
+
yield None # end of turn
|
|
309
|
+
return
|
|
310
|
+
|
|
311
|
+
event = _decode_ws_frame(raw)
|
|
312
|
+
if event is None:
|
|
313
|
+
continue
|
|
314
|
+
yield event
|
|
315
|
+
if boundary.is_terminal(event):
|
|
316
|
+
break
|
|
317
|
+
|
|
318
|
+
yield None # end of turn
|
|
319
|
+
finally:
|
|
320
|
+
try:
|
|
321
|
+
await ws.send(json.dumps({"close": True}))
|
|
322
|
+
except ConnectionClosed:
|
|
323
|
+
pass
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
class _TurnBoundary:
|
|
327
|
+
"""Detect the terminal turnComplete of one logical live turn."""
|
|
328
|
+
|
|
329
|
+
def __init__(self) -> None:
|
|
330
|
+
self._tool_call_open = False
|
|
331
|
+
self._tool_response_seen = False
|
|
332
|
+
|
|
333
|
+
def is_terminal(self, event: dict) -> bool:
|
|
334
|
+
"""Feed one event; return True if it ends the current logical turn."""
|
|
335
|
+
if _event_has_function_call(event):
|
|
336
|
+
# Anything spoken before the call is not the post-tool answer.
|
|
337
|
+
self._tool_call_open = True
|
|
338
|
+
self._tool_response_seen = False
|
|
339
|
+
elif _event_has_function_response(event):
|
|
340
|
+
if self._tool_call_open:
|
|
341
|
+
self._tool_response_seen = True
|
|
342
|
+
elif _event_has_answer_content(event):
|
|
343
|
+
self._tool_call_open = False
|
|
344
|
+
self._tool_response_seen = False
|
|
345
|
+
|
|
346
|
+
if event.get("turnComplete"):
|
|
347
|
+
if self._tool_call_open and self._tool_response_seen:
|
|
348
|
+
# Terminator for the tool round-trip; keep reading for the answer.
|
|
349
|
+
self._tool_call_open = False
|
|
350
|
+
self._tool_response_seen = False
|
|
351
|
+
return False
|
|
352
|
+
return True
|
|
353
|
+
return False
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
def _decode_ws_frame(raw) -> dict | None:
|
|
357
|
+
"""Decode a /run_live frame into an ADK event dict, or None for audio."""
|
|
358
|
+
if isinstance(raw, (bytes, bytearray)):
|
|
359
|
+
try:
|
|
360
|
+
return json.loads(bytes(raw).decode("utf-8"))
|
|
361
|
+
except (UnicodeDecodeError, json.JSONDecodeError):
|
|
362
|
+
return None
|
|
363
|
+
try:
|
|
364
|
+
return json.loads(raw)
|
|
365
|
+
except json.JSONDecodeError:
|
|
366
|
+
return None
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
def _iter_async(agen) -> Iterator:
|
|
370
|
+
"""Drive an async generator from sync code on a dedicated event loop."""
|
|
371
|
+
loop = asyncio.new_event_loop()
|
|
372
|
+
try:
|
|
373
|
+
while True:
|
|
374
|
+
try:
|
|
375
|
+
yield loop.run_until_complete(agen.__anext__())
|
|
376
|
+
except StopAsyncIteration:
|
|
377
|
+
break
|
|
378
|
+
finally:
|
|
379
|
+
loop.run_until_complete(agen.aclose())
|
|
380
|
+
# Finalize websockets' own async generators before closing the loop.
|
|
381
|
+
loop.run_until_complete(loop.shutdown_asyncgens())
|
|
382
|
+
loop.close()
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
"""Defaults shared by the CLI and the projects it scaffolds."""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
# Reaches the templates as the ``default_model`` cookiecutter variable. Nothing
|
|
20
|
+
# renders the skills, docs, eval goldens or extension templates, so their copies
|
|
21
|
+
# of the model id are updated by hand alongside this one.
|
|
22
|
+
DEFAULT_MODEL = "gemini-3.8-flash"
|
|
@@ -27,7 +27,7 @@ class Experiment(NamedTuple):
|
|
|
27
27
|
# Central registry of experiments: new experiment flags get added here.
|
|
28
28
|
_REGISTRY: dict[str, Experiment] = {
|
|
29
29
|
# Hides the `build` command until Go (compiled-language) support launches.
|
|
30
|
-
"build_command": Experiment("build_command", bool,
|
|
30
|
+
"build_command": Experiment("build_command", bool, True),
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
"""Protocol values shared by every command that talks to an agent."""
|
|
16
|
+
|
|
17
|
+
# A2A protocol.
|
|
18
|
+
MODE_A2A = "a2a"
|
|
19
|
+
# ADK over HTTP: POST /run_sse, or :streamQuery on Agent Runtime.
|
|
20
|
+
MODE_ADK = "adk"
|
|
21
|
+
# ADK over a bidi WebSocket: /run_live, the transport Live (voice) agents use.
|
|
22
|
+
MODE_ADK_LIVE = "adk_live"
|
|
23
|
+
|
|
24
|
+
# What each command accepts. Build every click.Choice and every "choose from"
|
|
25
|
+
# message from these, so adding a mode is one edit per set rather than one per
|
|
26
|
+
# call site.
|
|
27
|
+
RUN_MODES = (MODE_A2A, MODE_ADK, MODE_ADK_LIVE)
|
|
28
|
+
# A local server serves ADK only, so a2a needs a --url.
|
|
29
|
+
LOCAL_RUN_MODES = (MODE_ADK, MODE_ADK_LIVE)
|
|
30
|
+
# eval speaks ADK only.
|
|
31
|
+
EVAL_MODES = (MODE_ADK, MODE_ADK_LIVE)
|
|
@@ -45,6 +45,9 @@ class ProjectConfig:
|
|
|
45
45
|
cicd_runner: str = "skip"
|
|
46
46
|
agent_gateway: bool = False
|
|
47
47
|
agent_guidance_filename: str = "GEMINI.md"
|
|
48
|
+
# The ADK name of the root agent. Empty means "derive it from the project
|
|
49
|
+
# name"; see resolve_root_agent_name.
|
|
50
|
+
root_agent_name: str = ""
|
|
48
51
|
|
|
49
52
|
@property
|
|
50
53
|
def create_params(self) -> dict[str, Any]:
|
|
@@ -55,6 +58,7 @@ class ProjectConfig:
|
|
|
55
58
|
"cicd_runner": self.cicd_runner,
|
|
56
59
|
"agent_gateway": self.agent_gateway,
|
|
57
60
|
"agent_guidance_filename": self.agent_guidance_filename,
|
|
61
|
+
"root_agent_name": self.root_agent_name,
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
@classmethod
|
|
@@ -93,6 +97,7 @@ class ProjectConfig:
|
|
|
93
97
|
)
|
|
94
98
|
cfg.is_a2a = create_params.get("is_a2a", cfg.is_a2a)
|
|
95
99
|
cfg.agent_gateway = create_params.get("agent_gateway", cfg.agent_gateway)
|
|
100
|
+
cfg.root_agent_name = create_params.get("root_agent_name") or ""
|
|
96
101
|
|
|
97
102
|
return cfg
|
|
98
103
|
|
|
@@ -108,10 +113,12 @@ def _warn_legacy_config() -> None:
|
|
|
108
113
|
"\n⚠️ Legacy configuration detected in pyproject.toml.",
|
|
109
114
|
fg="yellow",
|
|
110
115
|
bold=True,
|
|
116
|
+
err=True,
|
|
111
117
|
)
|
|
112
118
|
click.secho(
|
|
113
119
|
" Run `agents-cli scaffold upgrade` to migrate to agents-cli-manifest.yaml.\n",
|
|
114
120
|
fg="yellow",
|
|
121
|
+
err=True,
|
|
115
122
|
)
|
|
116
123
|
_WARNED_LEGACY_CONFIG = True
|
|
117
124
|
|
|
@@ -216,13 +223,15 @@ def check_cli_version(cfg: ProjectConfig) -> None:
|
|
|
216
223
|
click.echo(
|
|
217
224
|
f"\n⚠️ Version mismatch: project was scaffolded with agents-cli {acli_version},"
|
|
218
225
|
f" running {__version__}.\n"
|
|
219
|
-
f" Upgrade the CLI: uv tool install google-agents-cli@{acli_version}\n"
|
|
226
|
+
f" Upgrade the CLI: uv tool install google-agents-cli@{acli_version}\n",
|
|
227
|
+
err=True,
|
|
220
228
|
)
|
|
221
229
|
elif cli_ver > project_ver:
|
|
222
230
|
click.echo(
|
|
223
231
|
f"\n⚠️ Version mismatch: project was scaffolded with agents-cli {acli_version},"
|
|
224
232
|
f" running {__version__}.\n"
|
|
225
|
-
" Upgrade the project: agents-cli scaffold upgrade\n"
|
|
233
|
+
" Upgrade the project: agents-cli scaffold upgrade\n",
|
|
234
|
+
err=True,
|
|
226
235
|
)
|
|
227
236
|
|
|
228
237
|
|
|
@@ -309,7 +318,7 @@ def chdir_project_root(dir: Path | None = None) -> None:
|
|
|
309
318
|
)
|
|
310
319
|
# Only announce the root when we actually move (i.e. run from a subdir).
|
|
311
320
|
if root.resolve() != Path.cwd().resolve():
|
|
312
|
-
click.echo(f"Using project root directory: {root}")
|
|
321
|
+
click.echo(f"Using project root directory: {root}", err=True)
|
|
313
322
|
os.chdir(root)
|
|
314
323
|
|
|
315
324
|
|
|
@@ -383,3 +392,15 @@ def root_agent_name(project_name: str) -> str:
|
|
|
383
392
|
return "root_agent"
|
|
384
393
|
# A leading digit is legal in a project name but not in an identifier.
|
|
385
394
|
return f"agent_{candidate}" if candidate[0].isdigit() else candidate
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
def resolve_root_agent_name(cfg: ProjectConfig) -> str:
|
|
398
|
+
"""The project's root agent name: recorded in the manifest, else derived.
|
|
399
|
+
|
|
400
|
+
The recorded value wins so that renaming the agent in code stays
|
|
401
|
+
expressible. Derivation alone can only produce names that follow from the
|
|
402
|
+
project name, so a project called ``it-support-agent`` whose agent is
|
|
403
|
+
``billing_bot`` has no way to say so -- and nothing reports the mismatch,
|
|
404
|
+
because a telemetry query filtered on the wrong name simply returns no rows.
|
|
405
|
+
"""
|
|
406
|
+
return cfg.root_agent_name or root_agent_name(cfg.project_name)
|
|
@@ -21,7 +21,8 @@ how a ``--url`` is classified and what auth token it gets.
|
|
|
21
21
|
from __future__ import annotations
|
|
22
22
|
|
|
23
23
|
import re
|
|
24
|
-
from
|
|
24
|
+
from typing import NamedTuple
|
|
25
|
+
from urllib.parse import urlparse, urlsplit, urlunsplit
|
|
25
26
|
|
|
26
27
|
import click
|
|
27
28
|
|
|
@@ -32,6 +33,10 @@ _REASONING_ENGINE_PATH = "reasoningEngines"
|
|
|
32
33
|
# A valid Agent Runtime host carries a location prefix: <location>-aiplatform.googleapis.com
|
|
33
34
|
_AGENT_RUNTIME_HOST_RE = re.compile(rf".+-{re.escape(_AGENT_ENGINE_URL_FRAGMENT)}$")
|
|
34
35
|
|
|
36
|
+
# WebSocket traffic has its own ingress; HTTP goes through reasoningEngines/v1.
|
|
37
|
+
# https://github.com/GoogleCloudPlatform/generative-ai/blob/main/agents/agent_engine/tutorial_bidi_stream_v2.ipynb
|
|
38
|
+
_AGENT_RUNTIME_WS_INGRESS = "reasoningEngines/ws/internal"
|
|
39
|
+
|
|
35
40
|
|
|
36
41
|
def is_agent_runtime_url(url: str) -> bool:
|
|
37
42
|
"""Return ``True`` if *url* points to an Agent Runtime endpoint."""
|
|
@@ -79,6 +84,41 @@ def build_agent_runtime_passthrough_url(location: str, runtime_resource: str) ->
|
|
|
79
84
|
)
|
|
80
85
|
|
|
81
86
|
|
|
87
|
+
class AgentEndpoints(NamedTuple):
|
|
88
|
+
"""HTTP and WebSocket base URLs for one remote agent."""
|
|
89
|
+
|
|
90
|
+
http_base: str
|
|
91
|
+
ws_base: str
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def http_to_ws_url(base_url: str) -> str:
|
|
95
|
+
"""Normalize a URL's scheme to ws/wss"""
|
|
96
|
+
parts = urlsplit(base_url)
|
|
97
|
+
scheme = {"http": "ws", "https": "wss"}.get(parts.scheme, parts.scheme)
|
|
98
|
+
return urlunsplit(parts._replace(scheme=scheme))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def build_agent_runtime_endpoints(location: str, runtime_resource: str) -> AgentEndpoints:
|
|
102
|
+
"""Build Agent Runtime ingress base URLs for a deployed engine."""
|
|
103
|
+
host = f"{location}-{_AGENT_ENGINE_URL_FRAGMENT}"
|
|
104
|
+
resource = runtime_resource.strip("/")
|
|
105
|
+
return AgentEndpoints(
|
|
106
|
+
http_base=build_agent_runtime_passthrough_url(location, resource),
|
|
107
|
+
ws_base=f"wss://{host}/{_AGENT_RUNTIME_WS_INGRESS}/{resource}/api",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def resolve_agent_endpoints(url: str) -> AgentEndpoints:
|
|
112
|
+
"""Resolve the HTTP and WebSocket base URLs for a remote agent."""
|
|
113
|
+
http_url = url.rstrip("/")
|
|
114
|
+
if not is_agent_runtime_url(http_url):
|
|
115
|
+
return AgentEndpoints(http_base=http_url, ws_base=http_to_ws_url(http_url))
|
|
116
|
+
|
|
117
|
+
validate_agent_runtime_url(http_url)
|
|
118
|
+
location, resource = parse_agent_runtime_service_url(http_url)
|
|
119
|
+
return build_agent_runtime_endpoints(location, resource.removesuffix("/api"))
|
|
120
|
+
|
|
121
|
+
|
|
82
122
|
def parse_agent_runtime_service_url(service_url: str) -> tuple[str, str]:
|
|
83
123
|
"""Split an Agent Runtime service URL into (location, runtime_resource).
|
|
84
124
|
|
|
@@ -218,5 +218,6 @@ def check_skills_version() -> None:
|
|
|
218
218
|
f"\n⚠️ Skills version mismatch — CLI is v{__version__}, "
|
|
219
219
|
f"but {len(mismatched)} skill(s) differ:\n"
|
|
220
220
|
+ "\n".join(lines)
|
|
221
|
-
+ "\n Run 'agents-cli update' to sync.\n"
|
|
221
|
+
+ "\n Run 'agents-cli update' to sync.\n",
|
|
222
|
+
err=True,
|
|
222
223
|
)
|