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.
Files changed (363) hide show
  1. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/PKG-INFO +2 -1
  2. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/pyproject.toml +2 -1
  3. google_agents_cli-1.7.0/src/google/agents/cli/_adk_client.py +453 -0
  4. google_agents_cli-1.7.0/src/google/agents/cli/_defaults.py +22 -0
  5. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_experiments.py +1 -1
  6. google_agents_cli-1.7.0/src/google/agents/cli/_modes.py +29 -0
  7. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_project.py +30 -3
  8. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_remote.py +41 -1
  9. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_skills_check.py +2 -1
  10. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/_operation.py +12 -0
  11. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/agent_runtime.py +245 -117
  12. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/cmd_deploy.py +129 -5
  13. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_playground.py +8 -18
  14. google_agents_cli-1.7.0/src/google/agents/cli/eval/_events.py +116 -0
  15. google_agents_cli-1.7.0/src/google/agents/cli/eval/_live.py +325 -0
  16. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/_paths.py +48 -5
  17. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_dataset.py +1 -1
  18. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_generate.py +107 -114
  19. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_grade.py +27 -3
  20. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_run.py +14 -1
  21. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_resolver.py +133 -25
  22. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/info/cmd_info.py +3 -0
  23. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_cicd.py +1 -1
  24. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/main.py +2 -2
  25. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/publish/cmd_publish.py +3 -2
  26. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/_local_server.py +57 -30
  27. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/cmd_run.py +400 -90
  28. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/.template/templateconfig.yaml +11 -3
  29. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/app/agent.py +5 -1
  30. {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
  31. {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
  32. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/Dockerfile +1 -0
  33. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/Makefile +4 -3
  34. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/README.md +3 -1
  35. {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
  36. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo.go +541 -0
  37. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo_test.go +956 -0
  38. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/apploader.go +55 -0
  39. {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
  40. {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
  41. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/README.md +117 -0
  42. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/datasets/basic-dataset.json +31 -0
  43. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/eval_config.yaml +13 -0
  44. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/eval/response_quality.py +65 -0
  45. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/go.mod +21 -11
  46. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/go.sum +55 -12
  47. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/main.go +168 -0
  48. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/observability.go +192 -0
  49. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/observability_test.go +178 -0
  50. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/agents/adk_go/sessions/sessions.go +237 -0
  51. {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
  52. {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
  53. {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
  54. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/package.json +7 -1
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/deploy-to-prod.yaml +103 -0
  69. {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
  70. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/staging.yaml +231 -0
  71. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.gcloudignore +15 -0
  72. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/deploy-to-prod.yaml +126 -0
  73. {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
  74. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/staging.yaml +197 -0
  75. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.golangci.yml +4 -0
  76. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry.tf +136 -0
  77. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/cicd/telemetry_outputs.tf +18 -0
  78. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/completions.sql +184 -0
  79. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/shared/genai_logs_schema.json +77 -0
  80. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry.tf +130 -0
  81. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/go/deployment/terraform/single-project/telemetry_outputs.tf +18 -0
  82. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/java/.gcloudignore +15 -0
  83. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/python/.gcloudignore +15 -0
  84. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/Dockerfile +2 -1
  85. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/base_templates/typescript/.gcloudignore +15 -0
  86. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/commands/create.py +1812 -0
  87. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/commands/enhance.py +27 -45
  88. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/commands/upgrade.py +10 -15
  89. {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
  90. {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
  91. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment_metadata.json +4 -0
  92. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service.tf +240 -0
  93. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service.tf +213 -0
  94. {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
  95. {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
  96. {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
  97. {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
  98. {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
  99. {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
  100. {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
  101. {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
  102. {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
  103. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/backup.py +39 -36
  104. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/cli_options.py +133 -0
  105. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/copy_files.py +443 -0
  106. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/fs.py +104 -0
  107. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/generate_locks.py +2 -2
  108. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/generation_metadata.py +5 -0
  109. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/merge.py +8 -8
  110. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/remote_template.py +77 -25
  111. google_agents_cli-1.7.0/src/google/agents/cli/scaffold/utils/symlinks.py +127 -0
  112. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/template.py +107 -312
  113. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/version.py +2 -2
  114. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/data/README.md +1 -1
  115. google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/SKILL.md +73 -0
  116. google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go-workflows.md +480 -0
  117. google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-go.md +720 -0
  118. google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/references/adk-python-live.md +753 -0
  119. 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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. {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
  131. {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
  132. google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-eval/references/live-eval.md +54 -0
  133. {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
  134. {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
  135. {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
  136. {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
  137. {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
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. google_agents_cli-1.7.0/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/internals.md +28 -0
  146. {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
  147. {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
  148. google_agents_cli-1.5.0/src/google/agents/cli/_adk_client.py +0 -114
  149. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo.go +0 -297
  150. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go/appinfo/appinfo_test.go +0 -185
  151. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/agents/adk_go/main.go +0 -137
  152. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/deploy-to-prod.yaml +0 -58
  153. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.cloudbuild/staging.yaml +0 -154
  154. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/deploy-to-prod.yaml +0 -90
  155. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/base_templates/go/.github/workflows/staging.yaml +0 -156
  156. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/commands/create.py +0 -1473
  157. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/deployment_targets/agent_runtime/_shared/deployment_metadata.json +0 -4
  158. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/cicd/service.tf +0 -105
  159. google_agents_cli-1.5.0/src/google/agents/cli/scaffold/deployment_targets/cloud_run/go/deployment/terraform/single-project/service.tf +0 -95
  160. google_agents_cli-1.5.0/src/google/agents/cli/skills/data/google-agents-cli-adk-code/SKILL.md +0 -78
  161. google_agents_cli-1.5.0/src/google/agents/cli/skills/data/google-agents-cli-workflow/references/internals.md +0 -24
  162. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/LICENSE +0 -0
  163. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/README.md +0 -0
  164. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/__init__.py +0 -0
  165. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_agent_platform.py +0 -0
  166. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_click.py +0 -0
  167. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_gcp_project.py +0 -0
  168. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_output.py +0 -0
  169. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_runner.py +0 -0
  170. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_tools.py +0 -0
  171. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/_trust.py +0 -0
  172. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/auth.py +0 -0
  173. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/data/__init__.py +0 -0
  174. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/data/_recipe.py +0 -0
  175. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/data/cmd_data_ingestion.py +0 -0
  176. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/__init__.py +0 -0
  177. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/deploy/_utils.py +0 -0
  178. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/__init__.py +0 -0
  179. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_build.py +0 -0
  180. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_install.py +0 -0
  181. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/dev/cmd_lint.py +0 -0
  182. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/__init__.py +0 -0
  183. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/_synthesize_runner.py +0 -0
  184. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_analyze.py +0 -0
  185. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_compare.py +0 -0
  186. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_eval_group.py +0 -0
  187. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_metric.py +0 -0
  188. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_optimize.py +0 -0
  189. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/cmd_submit.py +0 -0
  190. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/eval_utils.py +0 -0
  191. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/eval/optimize_utils.py +0 -0
  192. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/__init__.py +0 -0
  193. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_compat.py +0 -0
  194. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_loader.py +0 -0
  195. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_manifest.py +0 -0
  196. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_overrides.py +0 -0
  197. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_paths.py +0 -0
  198. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_refs.py +0 -0
  199. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_schema.py +0 -0
  200. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_spec.py +0 -0
  201. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_sync.py +0 -0
  202. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/_trust.py +0 -0
  203. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_add.py +0 -0
  204. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_group.py +0 -0
  205. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_list.py +0 -0
  206. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_remove.py +0 -0
  207. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/extension/cmd_extension_update.py +0 -0
  208. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/info/__init__.py +0 -0
  209. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/__init__.py +0 -0
  210. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/_cicd_utils.py +0 -0
  211. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/_terraform.py +0 -0
  212. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_datastore.py +0 -0
  213. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_infra.py +0 -0
  214. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_infra_show.py +0 -0
  215. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/infra/cmd_infra_single_project.py +0 -0
  216. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/publish/__init__.py +0 -0
  217. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/publish/cmd_publish_group.py +0 -0
  218. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/__init__.py +0 -0
  219. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/run/_multimodal.py +0 -0
  220. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/__init__.py +0 -0
  221. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/README.md +0 -0
  222. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk/app/__init__.py +0 -0
  223. {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
  224. {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
  225. {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
  226. {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
  227. {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
  228. {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
  229. {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
  230. {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
  231. {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
  232. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_go/appurl.go +0 -0
  233. {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
  234. {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
  235. {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
  236. {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
  237. {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
  238. {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
  239. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/Dockerfile +0 -0
  240. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/Makefile +0 -0
  241. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/README.md +0 -0
  242. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_java/pom.xml +0 -0
  243. {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
  244. {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
  245. {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
  246. {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
  247. {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
  248. {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
  249. {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
  250. {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
  251. {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
  252. {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
  253. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/Dockerfile +0 -0
  254. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/Makefile +0 -0
  255. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/agents/adk_ts/README.md +0 -0
  256. {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
  257. {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
  258. {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
  259. {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
  260. {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
  261. {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
  262. {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
  263. {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
  264. {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
  265. {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
  266. {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
  267. {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
  268. {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
  269. {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
  270. {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
  271. {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
  272. {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
  273. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.env +0 -0
  274. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.env.example +0 -0
  275. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/go/.gitignore +0 -0
  276. {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
  277. {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
  278. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/java/.env.example +0 -0
  279. {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
  280. {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
  281. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/java/.gitignore +0 -0
  282. {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
  283. {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
  284. {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
  285. {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
  286. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.env +0 -0
  287. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.env.example +0 -0
  288. {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
  289. {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
  290. {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
  291. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/.gitignore +0 -0
  292. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/README.md +0 -0
  293. {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
  294. {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
  295. {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
  296. {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
  297. {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
  298. {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
  299. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/python/pyproject.toml +0 -0
  300. {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
  301. {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
  302. {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
  303. {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
  304. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.dockerignore +0 -0
  305. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.env.example +0 -0
  306. {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
  307. {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
  308. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/.gitignore +0 -0
  309. {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
  310. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/base_templates/typescript/tsconfig.json +0 -0
  311. {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
  312. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/cmd_scaffold_group.py +0 -0
  313. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/commands/__init__.py +0 -0
  314. {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
  315. {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
  316. {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
  317. {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
  318. {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
  319. {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
  320. {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
  321. {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
  322. {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
  323. {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
  324. {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
  325. {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
  326. {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
  327. {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
  328. {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
  329. {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
  330. {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
  331. {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
  332. {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
  333. {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
  334. {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
  335. {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
  336. {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
  337. {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
  338. {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
  339. {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
  340. {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
  341. {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
  342. {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
  343. {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
  344. {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
  345. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/__init__.py +0 -0
  346. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/command.py +0 -0
  347. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/gcp.py +0 -0
  348. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/language.py +0 -0
  349. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/lock_utils.py +0 -0
  350. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/logging.py +0 -0
  351. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/scaffold/utils/upgrade.py +0 -0
  352. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/__init__.py +0 -0
  353. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/_antigravity.py +0 -0
  354. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/cmd_auth.py +0 -0
  355. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/cmd_setup.py +0 -0
  356. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/setup/cmd_update.py +0 -0
  357. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/__init__.py +0 -0
  358. {google_agents_cli-1.5.0 → google_agents_cli-1.7.0}/src/google/agents/cli/skills/_bundle.py +0 -0
  359. {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
  360. {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
  361. {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
  362. {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
  363. {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.5.0
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.5.0"
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, False),
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)