google-agents-cli 1.5.0__tar.gz → 1.7.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.5.0 → google_agents_cli-1.7.0}/PKG-INFO +2 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/pyproject.toml +2 -1
- google_agents_cli-1.7.0/src/google/agents/cli/_adk_client.py +453 -0
- google_agents_cli-1.7.0/src/google/agents/cli/_defaults.py +22 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_experiments.py +1 -1
- google_agents_cli-1.7.0/src/google/agents/cli/_modes.py +29 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_project.py +30 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_remote.py +41 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_skills_check.py +2 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/_operation.py +12 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/agent_runtime.py +245 -117
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/cmd_deploy.py +129 -5
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_playground.py +8 -18
- google_agents_cli-1.7.0/src/google/agents/cli/eval/_events.py +116 -0
- google_agents_cli-1.7.0/src/google/agents/cli/eval/_live.py +325 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/_paths.py +48 -5
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_dataset.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_generate.py +107 -114
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_grade.py +27 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_run.py +14 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_resolver.py +133 -25
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/info/cmd_info.py +3 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_cicd.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/main.py +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/publish/cmd_publish.py +3 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/_local_server.py +57 -30
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/cmd_run.py +400 -90
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/.template/templateconfig.yaml +11 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/app/agent.py +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/tests/eval/response_quality.py +1 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/.template/templateconfig.yaml +1 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/Dockerfile +1 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/Makefile +4 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/README.md +3 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/app/agent.go +6 -7
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo.go +541 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo_test.go +956 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/apploader.go +55 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk_go/e2e/load_test/load_test.go +3 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/README.md +117 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/basic-dataset.json +31 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/eval_config.yaml +13 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/response_quality.py +65 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/go.mod +21 -11
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/go.sum +55 -12
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/main.go +168 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/observability.go +192 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/observability_test.go +178 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/sessions/sessions.go +237 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/app/agent.ts +5 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/package-lock.json +726 -345
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/package.json +7 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/_shared/agents-cli-manifest.yaml +5 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/providers.tf +8 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/cicd/variables.tf +8 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/providers.tf +8 -1
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/_shared/deployment/terraform/single-project/variables.tf +9 -0
- google_agents_cli-1.7.0/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.7.0/src/google/agents/cli/scaffold/base_templates/go}/.cloudbuild/pr_checks.yaml +3 -3
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/staging.yaml +231 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.gcloudignore +15 -0
- google_agents_cli-1.7.0/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.7.0/src/google/agents/cli/scaffold/base_templates/go}/.github/workflows/pr_checks.yaml +2 -2
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/staging.yaml +197 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.golangci.yml +4 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry.tf +136 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry_outputs.tf +18 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/completions.sql +184 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/genai_logs_schema.json +77 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry.tf +130 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry_outputs.tf +18 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/java/.gcloudignore +15 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/python/.gcloudignore +15 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/Dockerfile +2 -1
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/typescript/.gcloudignore +15 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/commands/create.py +1812 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/commands/enhance.py +27 -45
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/commands/upgrade.py +10 -15
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/cicd/service.tf +6 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment/terraform/single-project/service.tf +6 -2
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment_metadata.json +4 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service.tf +240 -0
- google_agents_cli-1.7.0/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/cicd/service.tf +15 -6
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/deployment_targets/cloud_run/python/deployment/terraform/single-project/service.tf +10 -5
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/cicd/service.tf +76 -34
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/deployment_targets/gke/_shared/deployment/terraform/single-project/service.tf +41 -18
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/resources/locks/uv-adk-agent_runtime.lock +965 -957
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/resources/locks/uv-adk-cloud_run.lock +1021 -1007
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/resources/locks/uv-adk-gke.lock +1021 -1007
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/backup.py +39 -36
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/cli_options.py +133 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/copy_files.py +443 -0
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/fs.py +104 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/generate_locks.py +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/generation_metadata.py +5 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/merge.py +8 -8
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/remote_template.py +77 -25
- google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/symlinks.py +127 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/template.py +107 -312
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/version.py +2 -2
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/README.md +1 -1
- google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/SKILL.md +73 -0
- google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go-workflows.md +480 -0
- google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go.md +720 -0
- google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python-live.md +753 -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.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python-workflows.md +3 -3
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python.md +35 -14
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/SKILL.md +16 -12
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/agent-runtime.md +28 -11
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/skills/data/google-agents-cli-deploy/references/gke.md +7 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/SKILL.md +21 -7
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/google-agents-cli-eval/references/advanced-commands.md +1 -1
- google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-eval/references/live-eval.md +54 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/skills/data/google-agents-cli-observability/SKILL.md +17 -12
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/skills/data/google-agents-cli-publish/SKILL.md +7 -4
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/google-agents-cli-scaffold/SKILL.md +35 -13
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/SKILL.md +25 -16
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/brainstorming.md +9 -7
- google_agents_cli-1.7.0/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.7.0}/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.7.0}/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/commands/create.py +0 -1473
- google_agents_cli-1.5.0/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment_metadata.json +0 -4
- 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.7.0}/LICENSE +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_agent_platform.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_click.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_gcp_project.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_output.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_runner.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_tools.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_trust.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/auth.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/data/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/data/_recipe.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/data/cmd_data_ingestion.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_build.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_install.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_lint.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/_synthesize_runner.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_analyze.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_compare.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_eval_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_metric.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_optimize.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_submit.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/eval_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/optimize_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_compat.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_loader.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_manifest.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_overrides.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_paths.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_refs.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_schema.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_spec.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_sync.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_trust.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_add.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_list.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_remove.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_update.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/info/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/_cicd_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/_terraform.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_datastore.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_infra.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_infra_show.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_infra_single_project.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/publish/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/publish/cmd_publish_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/_multimodal.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/app/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/app/app_utils/a2a.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk/app/app_utils/services.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/app/fast_api_app.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/tests/eval/datasets/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk/tests/eval/eval_config.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/tests/integration/test_agent.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/app/agent_test.go +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/appurl.go +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk_go/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk_java/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/Dockerfile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/Makefile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/pom.xml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.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.5.0 → google_agents_cli-1.7.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.5.0 → google_agents_cli-1.7.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.5.0 → google_agents_cli-1.7.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.5.0 → google_agents_cli-1.7.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.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/Dockerfile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/Makefile +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/agents/empty_go/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/empty_java/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/empty_py/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/empty_ts/.template/templateconfig.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/go/.env +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/java/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/java/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/java/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/java/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/pr_checks.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.env +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/python/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/README.md +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/python/pyproject.toml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/python/{{cookiecutter.agent_guidance_filename}} +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.cloudbuild/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.dockerignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.env.example +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.github/workflows/staging.yaml +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.gitignore +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/eslint.config.mjs +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/tsconfig.json +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/vitest.config.ts +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/cmd_scaffold_group.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/commands/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/src/google/agents/cli/scaffold/utils/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/command.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/gcp.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/language.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/lock_utils.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/logging.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/upgrade.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/_antigravity.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/cmd_auth.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/cmd_setup.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/cmd_update.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/__init__.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/_bundle.py +0 -0
- {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.0}/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.7.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
|
|
@@ -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.7.0"
|
|
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,453 @@
|
|
|
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 enum
|
|
21
|
+
import json
|
|
22
|
+
import logging
|
|
23
|
+
import time
|
|
24
|
+
from collections.abc import (
|
|
25
|
+
AsyncGenerator,
|
|
26
|
+
Iterable,
|
|
27
|
+
Iterator,
|
|
28
|
+
)
|
|
29
|
+
from typing import NamedTuple
|
|
30
|
+
from urllib.parse import urlencode
|
|
31
|
+
|
|
32
|
+
import requests
|
|
33
|
+
|
|
34
|
+
_SESSION_TIMEOUT = 30
|
|
35
|
+
_RUN_SSE_TIMEOUT = 120
|
|
36
|
+
_APP_INFO_TIMEOUT = 10
|
|
37
|
+
|
|
38
|
+
DEFAULT_WS_PATH = "/run_live"
|
|
39
|
+
DEFAULT_TURN_TIMEOUT = 120 # seconds to wait for a turn's turnComplete
|
|
40
|
+
|
|
41
|
+
# Live sessions where the server keeps working after a turnComplete report it
|
|
42
|
+
# as `interactionStatus`. IN_PROGRESS means more model output is still coming;
|
|
43
|
+
# anything else (IDLE, or its deprecated REQUIRES_ACTION spelling) ends the
|
|
44
|
+
# turn. UNSPECIFIED is the enum's zero value and carries no signal.
|
|
45
|
+
_STATUS_IN_PROGRESS = "IN_PROGRESS"
|
|
46
|
+
_STATUS_UNSPECIFIED = "INTERACTION_STATUS_UNSPECIFIED"
|
|
47
|
+
# An unrecognized status still ends the turn, but gets logged.
|
|
48
|
+
_STATUS_TERMINAL = frozenset({"IDLE", "REQUIRES_ACTION"})
|
|
49
|
+
|
|
50
|
+
# Fallback for models that don't report interactionStatus: ADK can schedule a
|
|
51
|
+
# NON_BLOCKING tool's response past the terminator, and on the wire that is
|
|
52
|
+
# indistinguishable from a call that is never answered.
|
|
53
|
+
DEFAULT_DEFERRED_RESPONSE_TIMEOUT = 30
|
|
54
|
+
|
|
55
|
+
# /run_live transcribes it back to text, so output stays gradable.
|
|
56
|
+
DEFAULT_MODALITIES = ("AUDIO",)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def create_session(
|
|
60
|
+
base_url: str,
|
|
61
|
+
app_name: str,
|
|
62
|
+
user_id: str,
|
|
63
|
+
*,
|
|
64
|
+
headers: dict,
|
|
65
|
+
prior_events: list[dict] | None = None,
|
|
66
|
+
) -> str:
|
|
67
|
+
"""Create an ADK session and return its ID.
|
|
68
|
+
|
|
69
|
+
When ``prior_events`` are supplied, the ADK server seeds the fresh
|
|
70
|
+
session with them.
|
|
71
|
+
"""
|
|
72
|
+
session_url = f"{base_url}/apps/{app_name}/users/{user_id}/sessions"
|
|
73
|
+
body: dict = {}
|
|
74
|
+
if prior_events:
|
|
75
|
+
body["events"] = prior_events
|
|
76
|
+
|
|
77
|
+
resp = requests.post(
|
|
78
|
+
session_url, headers=headers, json=body, timeout=_SESSION_TIMEOUT
|
|
79
|
+
)
|
|
80
|
+
resp.raise_for_status()
|
|
81
|
+
return resp.json().get("id")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def fetch_app_info(
|
|
85
|
+
*,
|
|
86
|
+
base_url: str,
|
|
87
|
+
app_name: str,
|
|
88
|
+
headers: dict,
|
|
89
|
+
) -> tuple[str | None, dict]:
|
|
90
|
+
"""Fetch agent metadata from ADK's /apps/{app_name}/app-info endpoint.
|
|
91
|
+
|
|
92
|
+
Returns (root_agent_name, agents), where agents is the raw ADK agents
|
|
93
|
+
map keyed by agent id. root_agent_name may be None if the server omits
|
|
94
|
+
it; agents may be empty.
|
|
95
|
+
|
|
96
|
+
Raises requests.RequestException (or a subclass: ConnectionError,
|
|
97
|
+
HTTPError, JSONDecodeError) if the endpoint isn't reachable, returns a
|
|
98
|
+
non-2xx status, or returns a body that isn't valid JSON.
|
|
99
|
+
"""
|
|
100
|
+
url = f"{base_url}/apps/{app_name}/app-info"
|
|
101
|
+
resp = requests.get(url, headers=headers, timeout=_APP_INFO_TIMEOUT)
|
|
102
|
+
resp.raise_for_status()
|
|
103
|
+
payload = resp.json()
|
|
104
|
+
# Accept both camelCase and snake_case for cross language compatibility
|
|
105
|
+
root_agent_name = payload.get("rootAgentName", payload.get("root_agent_name"))
|
|
106
|
+
agents = payload.get("agents") or {}
|
|
107
|
+
return root_agent_name, agents
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def run_sse(
|
|
111
|
+
base_url: str,
|
|
112
|
+
app_name: str,
|
|
113
|
+
session_id: str,
|
|
114
|
+
*,
|
|
115
|
+
user_message: dict,
|
|
116
|
+
headers: dict,
|
|
117
|
+
user_id: str,
|
|
118
|
+
) -> Iterator[dict]:
|
|
119
|
+
"""Stream ADK events for a single user turn.
|
|
120
|
+
|
|
121
|
+
Yields each ``data:`` line's decoded JSON dict as it arrives. Blank
|
|
122
|
+
lines, non-``data:`` lines, and payloads that fail to JSON-decode are
|
|
123
|
+
silently skipped.
|
|
124
|
+
"""
|
|
125
|
+
run_url = f"{base_url}/run_sse"
|
|
126
|
+
payload = {
|
|
127
|
+
"appName": app_name,
|
|
128
|
+
"userId": user_id,
|
|
129
|
+
"sessionId": session_id,
|
|
130
|
+
"newMessage": user_message,
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
with requests.post(
|
|
134
|
+
run_url, headers=headers, json=payload, stream=True, timeout=_RUN_SSE_TIMEOUT
|
|
135
|
+
) as resp:
|
|
136
|
+
resp.raise_for_status()
|
|
137
|
+
# Honor the server's explicit charset if provided; otherwise,
|
|
138
|
+
# fall back to UTF-8 rather than latin-1.
|
|
139
|
+
if "charset" not in resp.headers.get("Content-Type", "").lower():
|
|
140
|
+
resp.encoding = "utf-8"
|
|
141
|
+
for line in resp.iter_lines(decode_unicode=True):
|
|
142
|
+
if not isinstance(line, str) or not line.startswith("data: "):
|
|
143
|
+
continue
|
|
144
|
+
data_str = line[len("data: ") :]
|
|
145
|
+
try:
|
|
146
|
+
yield json.loads(data_str)
|
|
147
|
+
except json.JSONDecodeError:
|
|
148
|
+
continue
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _event_parts(event: dict) -> list:
|
|
152
|
+
"""Return event's content parts, or an empty list when it carries none."""
|
|
153
|
+
content = event.get("content")
|
|
154
|
+
if not isinstance(content, dict):
|
|
155
|
+
return []
|
|
156
|
+
parts = content.get("parts")
|
|
157
|
+
return parts if isinstance(parts, list) else []
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def _event_has_function_call(event: dict) -> bool:
|
|
161
|
+
"""Return True if event carries a model function call."""
|
|
162
|
+
return any(
|
|
163
|
+
isinstance(part, dict) and part.get("functionCall")
|
|
164
|
+
for part in _event_parts(event)
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _event_has_function_response(event: dict) -> bool:
|
|
169
|
+
"""Return True if event carries a tool's function response."""
|
|
170
|
+
return any(
|
|
171
|
+
isinstance(part, dict) and part.get("functionResponse")
|
|
172
|
+
for part in _event_parts(event)
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _event_has_answer_content(event: dict) -> bool:
|
|
177
|
+
"""Return true if event carries gradable model answer content."""
|
|
178
|
+
transcription = event.get("outputTranscription")
|
|
179
|
+
if isinstance(transcription, dict) and transcription.get("text"):
|
|
180
|
+
return True
|
|
181
|
+
return any(
|
|
182
|
+
isinstance(part, dict) and (part.get("text") or part.get("inlineData"))
|
|
183
|
+
for part in _event_parts(event)
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class FinishedTranscript(NamedTuple):
|
|
188
|
+
"""A completed Live transcription frame."""
|
|
189
|
+
|
|
190
|
+
# "user" for input transcription, else the event's author (or "model").
|
|
191
|
+
author: str
|
|
192
|
+
# "user" or "model" -- the genai Content role for the rendered text.
|
|
193
|
+
role: str
|
|
194
|
+
text: str
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
# Live transcription keys mapped to the Content role they represent.
|
|
198
|
+
_TRANSCRIPTION_KEYS = (
|
|
199
|
+
("inputTranscription", "user"),
|
|
200
|
+
("outputTranscription", "model"),
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def finished_transcript(event: dict) -> FinishedTranscript | None:
|
|
205
|
+
"""Return the finished transcript carried by event, else None"""
|
|
206
|
+
for key, role in _TRANSCRIPTION_KEYS:
|
|
207
|
+
transcription = event.get(key)
|
|
208
|
+
if not isinstance(transcription, dict):
|
|
209
|
+
continue
|
|
210
|
+
if not transcription.get("finished"):
|
|
211
|
+
return None # partial chunk; the finished aggregate carries the text
|
|
212
|
+
text = transcription.get("text")
|
|
213
|
+
if not text:
|
|
214
|
+
return None
|
|
215
|
+
author = "user" if role == "user" else (event.get("author") or "model")
|
|
216
|
+
return FinishedTranscript(author=author, role=role, text=text)
|
|
217
|
+
return None
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
def is_transcription_event(event: dict) -> bool:
|
|
221
|
+
"""True if event is a Live transcription frame (finished or partial)."""
|
|
222
|
+
# An empty transcription is still a transcription frame, not a malformed one.
|
|
223
|
+
return any(key in event for key, _ in _TRANSCRIPTION_KEYS)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def stream_live_events(
|
|
227
|
+
ws_base: str,
|
|
228
|
+
app_name: str,
|
|
229
|
+
session_id: str,
|
|
230
|
+
*,
|
|
231
|
+
user_turns: Iterable[dict],
|
|
232
|
+
headers: dict,
|
|
233
|
+
user_id: str,
|
|
234
|
+
) -> Iterator[dict | None]:
|
|
235
|
+
"""Stream ADK events for a Live conversation over one /run_live socket."""
|
|
236
|
+
return _iter_async(
|
|
237
|
+
_stream_live_events(
|
|
238
|
+
ws_base,
|
|
239
|
+
app_name,
|
|
240
|
+
session_id,
|
|
241
|
+
user_turns=user_turns,
|
|
242
|
+
headers=headers,
|
|
243
|
+
user_id=user_id,
|
|
244
|
+
)
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def group_turns(stream: Iterable[dict | None]) -> Iterator[list[dict]]:
|
|
249
|
+
"""Batch a stream_live_events stream into one event list per turn."""
|
|
250
|
+
events: list[dict] = []
|
|
251
|
+
for item in stream:
|
|
252
|
+
if item is None:
|
|
253
|
+
yield events
|
|
254
|
+
events = []
|
|
255
|
+
else:
|
|
256
|
+
events.append(item)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def build_run_live_url(
|
|
260
|
+
ws_base: str,
|
|
261
|
+
app_name: str,
|
|
262
|
+
session_id: str,
|
|
263
|
+
*,
|
|
264
|
+
user_id: str,
|
|
265
|
+
) -> str:
|
|
266
|
+
"""Build the ADK /run_live WebSocket URL from a ws-base."""
|
|
267
|
+
base = ws_base.rstrip("/")
|
|
268
|
+
query = [
|
|
269
|
+
("app_name", app_name),
|
|
270
|
+
("user_id", user_id),
|
|
271
|
+
("session_id", session_id),
|
|
272
|
+
]
|
|
273
|
+
query.extend(("modalities", m) for m in DEFAULT_MODALITIES)
|
|
274
|
+
return f"{base}{DEFAULT_WS_PATH}?{urlencode(query)}"
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
async def _stream_live_events(
|
|
278
|
+
ws_base: str,
|
|
279
|
+
app_name: str,
|
|
280
|
+
session_id: str,
|
|
281
|
+
*,
|
|
282
|
+
user_turns: Iterable[dict],
|
|
283
|
+
headers: dict,
|
|
284
|
+
user_id: str,
|
|
285
|
+
) -> AsyncGenerator[dict | None, None]:
|
|
286
|
+
"""Play user_turns over one socket, yielding each event as it arrives."""
|
|
287
|
+
from websockets.asyncio.client import connect as ws_connect
|
|
288
|
+
from websockets.exceptions import ConnectionClosed, ConnectionClosedOK
|
|
289
|
+
|
|
290
|
+
ws_url = build_run_live_url(ws_base, app_name, session_id, user_id=user_id)
|
|
291
|
+
user_turns = list(user_turns)
|
|
292
|
+
expected_turns = len(user_turns)
|
|
293
|
+
extra_headers = {
|
|
294
|
+
k: v for k, v in (headers or {}).items() if k.lower() != "content-type"
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
async with ws_connect(ws_url, additional_headers=extra_headers or None) as ws:
|
|
298
|
+
try:
|
|
299
|
+
for turn_index, content in enumerate(user_turns):
|
|
300
|
+
# One `content` frame per turn; ADK validates each frame.
|
|
301
|
+
await ws.send(json.dumps({"content": content}))
|
|
302
|
+
|
|
303
|
+
boundary = _TurnBoundary()
|
|
304
|
+
# Set once a turnComplete arrives with a tool call still open.
|
|
305
|
+
deferred_deadline: float | None = None
|
|
306
|
+
while True:
|
|
307
|
+
if deferred_deadline is None:
|
|
308
|
+
timeout = float(DEFAULT_TURN_TIMEOUT)
|
|
309
|
+
else:
|
|
310
|
+
timeout = max(0.0, deferred_deadline - time.monotonic())
|
|
311
|
+
try:
|
|
312
|
+
raw = await asyncio.wait_for(ws.recv(), timeout=timeout)
|
|
313
|
+
except TimeoutError:
|
|
314
|
+
if deferred_deadline is not None:
|
|
315
|
+
# Nothing followed the provisional terminator, so it
|
|
316
|
+
# was the real end of the turn. An ordinary ending
|
|
317
|
+
# for a fire-and-forget tool -- not a stall.
|
|
318
|
+
break
|
|
319
|
+
logging.warning(
|
|
320
|
+
"Turn %d: no event for %ds, giving up on the turn.",
|
|
321
|
+
turn_index,
|
|
322
|
+
DEFAULT_TURN_TIMEOUT,
|
|
323
|
+
)
|
|
324
|
+
break
|
|
325
|
+
except ConnectionClosedOK:
|
|
326
|
+
if turn_index + 1 < expected_turns:
|
|
327
|
+
logging.warning(
|
|
328
|
+
"Turn %d: the agent closed the stream; "
|
|
329
|
+
"%d later turn(s) were never sent.",
|
|
330
|
+
turn_index,
|
|
331
|
+
expected_turns - turn_index - 1,
|
|
332
|
+
)
|
|
333
|
+
yield None # end of turn
|
|
334
|
+
return
|
|
335
|
+
|
|
336
|
+
event = _decode_ws_frame(raw)
|
|
337
|
+
if event is None:
|
|
338
|
+
continue
|
|
339
|
+
yield event
|
|
340
|
+
|
|
341
|
+
state = boundary.classify(event)
|
|
342
|
+
if state is _Boundary.TERMINAL:
|
|
343
|
+
break
|
|
344
|
+
if state is _Boundary.PROVISIONAL:
|
|
345
|
+
deferred_deadline = (
|
|
346
|
+
time.monotonic() + DEFAULT_DEFERRED_RESPONSE_TIMEOUT
|
|
347
|
+
)
|
|
348
|
+
elif deferred_deadline is not None:
|
|
349
|
+
# Only the answer extends the wait: metadata frames
|
|
350
|
+
# routinely follow a turnComplete and would hold it open.
|
|
351
|
+
if _event_has_function_response(event):
|
|
352
|
+
deferred_deadline = None # full turn budget again
|
|
353
|
+
elif _event_has_answer_content(event):
|
|
354
|
+
deferred_deadline = (
|
|
355
|
+
time.monotonic() + DEFAULT_DEFERRED_RESPONSE_TIMEOUT
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
yield None # end of turn
|
|
359
|
+
finally:
|
|
360
|
+
try:
|
|
361
|
+
await ws.send(json.dumps({"close": True}))
|
|
362
|
+
except ConnectionClosed:
|
|
363
|
+
pass
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
class _Boundary(enum.Enum):
|
|
367
|
+
"""What one event means for the end of the current logical turn."""
|
|
368
|
+
|
|
369
|
+
CONTINUE = "continue"
|
|
370
|
+
PROVISIONAL = "provisional"
|
|
371
|
+
TERMINAL = "terminal"
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
class _TurnBoundary:
|
|
375
|
+
"""Detect the end of one logical live turn.
|
|
376
|
+
|
|
377
|
+
Some live models answer one prompt with several turns and report
|
|
378
|
+
``interactionStatus``; models that omit it use the heuristic below.
|
|
379
|
+
"""
|
|
380
|
+
|
|
381
|
+
def __init__(self) -> None:
|
|
382
|
+
self._tool_call_open = False
|
|
383
|
+
self._tool_response_seen = False
|
|
384
|
+
|
|
385
|
+
def classify(self, event: dict) -> _Boundary:
|
|
386
|
+
"""Feed one event; report what it means for the current logical turn."""
|
|
387
|
+
if _event_has_function_call(event):
|
|
388
|
+
# Anything spoken before the call is not the post-tool answer.
|
|
389
|
+
self._tool_call_open = True
|
|
390
|
+
self._tool_response_seen = False
|
|
391
|
+
elif _event_has_function_response(event):
|
|
392
|
+
if self._tool_call_open:
|
|
393
|
+
self._tool_response_seen = True
|
|
394
|
+
elif _event_has_answer_content(event):
|
|
395
|
+
self._tool_call_open = False
|
|
396
|
+
self._tool_response_seen = False
|
|
397
|
+
|
|
398
|
+
if not event.get("turnComplete"):
|
|
399
|
+
return _Boundary.CONTINUE
|
|
400
|
+
|
|
401
|
+
status = str(event.get("interactionStatus") or "").upper()
|
|
402
|
+
# UNSPECIFIED carries no signal, so it falls through to the heuristic
|
|
403
|
+
# below rather than being read as an authoritative end of turn.
|
|
404
|
+
if status and status != _STATUS_UNSPECIFIED:
|
|
405
|
+
if status == _STATUS_IN_PROGRESS:
|
|
406
|
+
return _Boundary.CONTINUE
|
|
407
|
+
if status not in _STATUS_TERMINAL:
|
|
408
|
+
logging.debug(
|
|
409
|
+
"Unrecognized interactionStatus %r; ending the turn.", status
|
|
410
|
+
)
|
|
411
|
+
return _Boundary.TERMINAL
|
|
412
|
+
|
|
413
|
+
if self._tool_call_open and self._tool_response_seen:
|
|
414
|
+
# Terminator for the tool round-trip; keep reading for the answer.
|
|
415
|
+
self._tool_call_open = False
|
|
416
|
+
self._tool_response_seen = False
|
|
417
|
+
return _Boundary.CONTINUE
|
|
418
|
+
if self._tool_call_open:
|
|
419
|
+
# A terminator while the call is still unanswered. Either the
|
|
420
|
+
# response was scheduled past it and the answer is still coming,
|
|
421
|
+
# or the call is never answered and this really is the end. The
|
|
422
|
+
# two shapes are identical here, so the caller waits it out.
|
|
423
|
+
return _Boundary.PROVISIONAL
|
|
424
|
+
return _Boundary.TERMINAL
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
def _decode_ws_frame(raw) -> dict | None:
|
|
428
|
+
"""Decode a /run_live frame into an ADK event dict, or None for audio."""
|
|
429
|
+
if isinstance(raw, (bytes, bytearray)):
|
|
430
|
+
try:
|
|
431
|
+
return json.loads(bytes(raw).decode("utf-8"))
|
|
432
|
+
except (UnicodeDecodeError, json.JSONDecodeError):
|
|
433
|
+
return None
|
|
434
|
+
try:
|
|
435
|
+
return json.loads(raw)
|
|
436
|
+
except json.JSONDecodeError:
|
|
437
|
+
return None
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def _iter_async(agen) -> Iterator:
|
|
441
|
+
"""Drive an async generator from sync code on a dedicated event loop."""
|
|
442
|
+
loop = asyncio.new_event_loop()
|
|
443
|
+
try:
|
|
444
|
+
while True:
|
|
445
|
+
try:
|
|
446
|
+
yield loop.run_until_complete(agen.__anext__())
|
|
447
|
+
except StopAsyncIteration:
|
|
448
|
+
break
|
|
449
|
+
finally:
|
|
450
|
+
loop.run_until_complete(agen.aclose())
|
|
451
|
+
# Finalize websockets' own async generators before closing the loop.
|
|
452
|
+
loop.run_until_complete(loop.shutdown_asyncgens())
|
|
453
|
+
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,29 @@
|
|
|
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
|
+
# eval speaks ADK only.
|
|
29
|
+
EVAL_MODES = (MODE_ADK, MODE_ADK_LIVE)
|
|
@@ -28,6 +28,10 @@ from typing import Any
|
|
|
28
28
|
import click
|
|
29
29
|
import yaml
|
|
30
30
|
|
|
31
|
+
# Fallback for manifests written before the framework key existed. Those are all
|
|
32
|
+
# ADK; new projects get the value from their template.
|
|
33
|
+
DEFAULT_FRAMEWORK = "google-adk"
|
|
34
|
+
|
|
31
35
|
|
|
32
36
|
@dataclass
|
|
33
37
|
class ProjectConfig:
|
|
@@ -41,10 +45,14 @@ class ProjectConfig:
|
|
|
41
45
|
base_template: str = "adk"
|
|
42
46
|
acli_version: str = ""
|
|
43
47
|
language: str = "python"
|
|
48
|
+
framework: str = DEFAULT_FRAMEWORK
|
|
44
49
|
session_type: str = "none"
|
|
45
50
|
cicd_runner: str = "skip"
|
|
46
51
|
agent_gateway: bool = False
|
|
47
52
|
agent_guidance_filename: str = "GEMINI.md"
|
|
53
|
+
# The ADK name of the root agent. Empty means "derive it from the project
|
|
54
|
+
# name"; see resolve_root_agent_name.
|
|
55
|
+
root_agent_name: str = ""
|
|
48
56
|
|
|
49
57
|
@property
|
|
50
58
|
def create_params(self) -> dict[str, Any]:
|
|
@@ -55,6 +63,7 @@ class ProjectConfig:
|
|
|
55
63
|
"cicd_runner": self.cicd_runner,
|
|
56
64
|
"agent_gateway": self.agent_gateway,
|
|
57
65
|
"agent_guidance_filename": self.agent_guidance_filename,
|
|
66
|
+
"root_agent_name": self.root_agent_name,
|
|
58
67
|
}
|
|
59
68
|
|
|
60
69
|
@classmethod
|
|
@@ -76,6 +85,7 @@ class ProjectConfig:
|
|
|
76
85
|
data.get("acli_version") or data.get("version") or cfg.acli_version
|
|
77
86
|
)
|
|
78
87
|
cfg.language = data.get("language", cfg.language)
|
|
88
|
+
cfg.framework = data.get("framework", cfg.framework)
|
|
79
89
|
|
|
80
90
|
create_params = data.get("create_params")
|
|
81
91
|
if create_params is None:
|
|
@@ -93,6 +103,7 @@ class ProjectConfig:
|
|
|
93
103
|
)
|
|
94
104
|
cfg.is_a2a = create_params.get("is_a2a", cfg.is_a2a)
|
|
95
105
|
cfg.agent_gateway = create_params.get("agent_gateway", cfg.agent_gateway)
|
|
106
|
+
cfg.root_agent_name = create_params.get("root_agent_name") or ""
|
|
96
107
|
|
|
97
108
|
return cfg
|
|
98
109
|
|
|
@@ -108,10 +119,12 @@ def _warn_legacy_config() -> None:
|
|
|
108
119
|
"\n⚠️ Legacy configuration detected in pyproject.toml.",
|
|
109
120
|
fg="yellow",
|
|
110
121
|
bold=True,
|
|
122
|
+
err=True,
|
|
111
123
|
)
|
|
112
124
|
click.secho(
|
|
113
125
|
" Run `agents-cli scaffold upgrade` to migrate to agents-cli-manifest.yaml.\n",
|
|
114
126
|
fg="yellow",
|
|
127
|
+
err=True,
|
|
115
128
|
)
|
|
116
129
|
_WARNED_LEGACY_CONFIG = True
|
|
117
130
|
|
|
@@ -216,13 +229,15 @@ def check_cli_version(cfg: ProjectConfig) -> None:
|
|
|
216
229
|
click.echo(
|
|
217
230
|
f"\n⚠️ Version mismatch: project was scaffolded with agents-cli {acli_version},"
|
|
218
231
|
f" running {__version__}.\n"
|
|
219
|
-
f" Upgrade the CLI: uv tool install google-agents-cli@{acli_version}\n"
|
|
232
|
+
f" Upgrade the CLI: uv tool install google-agents-cli@{acli_version}\n",
|
|
233
|
+
err=True,
|
|
220
234
|
)
|
|
221
235
|
elif cli_ver > project_ver:
|
|
222
236
|
click.echo(
|
|
223
237
|
f"\n⚠️ Version mismatch: project was scaffolded with agents-cli {acli_version},"
|
|
224
238
|
f" running {__version__}.\n"
|
|
225
|
-
" Upgrade the project: agents-cli scaffold upgrade\n"
|
|
239
|
+
" Upgrade the project: agents-cli scaffold upgrade\n",
|
|
240
|
+
err=True,
|
|
226
241
|
)
|
|
227
242
|
|
|
228
243
|
|
|
@@ -309,7 +324,7 @@ def chdir_project_root(dir: Path | None = None) -> None:
|
|
|
309
324
|
)
|
|
310
325
|
# Only announce the root when we actually move (i.e. run from a subdir).
|
|
311
326
|
if root.resolve() != Path.cwd().resolve():
|
|
312
|
-
click.echo(f"Using project root directory: {root}")
|
|
327
|
+
click.echo(f"Using project root directory: {root}", err=True)
|
|
313
328
|
os.chdir(root)
|
|
314
329
|
|
|
315
330
|
|
|
@@ -383,3 +398,15 @@ def root_agent_name(project_name: str) -> str:
|
|
|
383
398
|
return "root_agent"
|
|
384
399
|
# A leading digit is legal in a project name but not in an identifier.
|
|
385
400
|
return f"agent_{candidate}" if candidate[0].isdigit() else candidate
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def resolve_root_agent_name(cfg: ProjectConfig) -> str:
|
|
404
|
+
"""The project's root agent name: recorded in the manifest, else derived.
|
|
405
|
+
|
|
406
|
+
The recorded value wins so that renaming the agent in code stays
|
|
407
|
+
expressible. Derivation alone can only produce names that follow from the
|
|
408
|
+
project name, so a project called ``it-support-agent`` whose agent is
|
|
409
|
+
``billing_bot`` has no way to say so -- and nothing reports the mismatch,
|
|
410
|
+
because a telemetry query filtered on the wrong name simply returns no rows.
|
|
411
|
+
"""
|
|
412
|
+
return cfg.root_agent_name or root_agent_name(cfg.project_name)
|