agent-starter-pack 0.12.1__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. agent_starter_pack-0.13.0/.claude/settings.local.json +16 -0
  2. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/GEMINI.md +49 -9
  3. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/PKG-INFO +1 -1
  4. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/pyproject.toml +1 -1
  5. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/Makefile +18 -6
  6. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/README.md +13 -48
  7. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/commands/create.py +54 -58
  8. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/commands/list.py +59 -25
  9. agent_starter_pack-0.13.0/src/cli/utils/gcp.py +238 -0
  10. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/remote_template.py +170 -3
  11. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/template.py +72 -1
  12. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/Dockerfile +16 -0
  13. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py +49 -1
  14. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/App.tsx +3 -2
  15. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/multimodal-live-client.ts +3 -1
  16. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cicd/scripts/delete_alloydb_clusters.py +191 -7
  17. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/commands/test_create.py +4 -7
  18. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/commands/test_enhance.py +1 -1
  19. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/utils/test_remote_template.py +6 -2
  20. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/uv.lock +1 -1
  21. agent_starter_pack-0.12.1/.claude/settings.local.json +0 -10
  22. agent_starter_pack-0.12.1/src/cli/utils/gcp.py +0 -117
  23. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/cd/test_e2e.yaml +0 -0
  24. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/build_use_wheel.yaml +0 -0
  25. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/lint.yaml +0 -0
  26. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/lint_templated_agents.yaml +0 -0
  27. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/test.yaml +0 -0
  28. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/test_makefile.yaml +0 -0
  29. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/test_pipeline_parity.yaml +0 -0
  30. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/test_remote_template.yaml +0 -0
  31. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/ci/test_templated_agents.yaml +0 -0
  32. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/terraform/apis.tf +0 -0
  33. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/terraform/build_triggers.tf +0 -0
  34. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/terraform/service_account.tf +0 -0
  35. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/terraform/storage.tf +0 -0
  36. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.cloudbuild/terraform/variables.tf +0 -0
  37. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.github/workflows/docs.yml +0 -0
  38. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/.gitignore +0 -0
  39. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/CLAUDE.md +0 -0
  40. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/CODE_OF_CONDUCT.md +0 -0
  41. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/CONTRIBUTING.md +0 -0
  42. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/LICENSE +0 -0
  43. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/Makefile +0 -0
  44. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/README.md +0 -0
  45. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/README.md +0 -0
  46. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/.template/templateconfig.yaml +0 -0
  47. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/README.md +0 -0
  48. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/app/__init__.py +0 -0
  49. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/app/agent.py +0 -0
  50. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/notebooks/adk_app_testing.ipynb +0 -0
  51. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +0 -0
  52. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/adk_base/tests/integration/test_agent.py +0 -0
  53. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/.template/templateconfig.yaml +0 -0
  54. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/README.md +0 -0
  55. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/app/__init__.py +0 -0
  56. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/app/agent.py +0 -0
  57. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/app/retrievers.py +0 -0
  58. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/app/templates.py +0 -0
  59. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/notebooks/adk_app_testing.ipynb +0 -0
  60. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +0 -0
  61. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/agentic_rag/tests/integration/test_agent.py +0 -0
  62. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/.template/templateconfig.yaml +0 -0
  63. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/README.md +0 -0
  64. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/app/agent.py +0 -0
  65. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -0
  66. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -0
  67. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/app/crew/crew.py +0 -0
  68. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb +0 -0
  69. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  70. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/crewai_coding_crew/tests/integration/test_agent.py +0 -0
  71. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/langgraph_base_react/.template/templateconfig.yaml +0 -0
  72. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/langgraph_base_react/README.md +0 -0
  73. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/langgraph_base_react/app/agent.py +0 -0
  74. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  75. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/langgraph_base_react/tests/integration/test_agent.py +0 -0
  76. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/live_api/.template/templateconfig.yaml +0 -0
  77. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/live_api/README.md +0 -0
  78. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/live_api/app/agent.py +0 -0
  79. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/live_api/tests/integration/test_server_e2e.py +0 -0
  80. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/live_api/tests/load_test/load_test.py +0 -0
  81. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/agents/live_api/tests/unit/test_server.py +0 -0
  82. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/.vitepress/config.js +0 -0
  83. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/agents/overview.md +0 -0
  84. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/cli/create.md +0 -0
  85. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/cli/enhance.md +0 -0
  86. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/cli/index.md +0 -0
  87. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/cli/list.md +0 -0
  88. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/cli/setup_cicd.md +0 -0
  89. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/data-ingestion.md +0 -0
  90. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/deploy-ui.md +0 -0
  91. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/deployment.md +0 -0
  92. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/development-guide.md +0 -0
  93. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/getting-started.md +0 -0
  94. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/installation.md +0 -0
  95. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/observability.md +0 -0
  96. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/template-config-reference.md +0 -0
  97. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/troubleshooting.md +0 -0
  98. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/video-tutorials.md +0 -0
  99. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/guide/why_starter_pack.md +0 -0
  100. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/adk_gemini_fullstack.gif +0 -0
  101. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/adk_gemini_fullstack_architecture.png +0 -0
  102. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/adk_logo.png +0 -0
  103. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/agent_starter_pack_screenshot.png +0 -0
  104. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/ags_high_level_architecture.png +0 -0
  105. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/icon.png +0 -0
  106. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/logo.png +0 -0
  107. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/prototype_to_prod.png +0 -0
  108. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/why_sp_edited.png +0 -0
  109. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/images/why_starter_pack.png +0 -0
  110. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/index.md +0 -0
  111. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/package-lock.json +0 -0
  112. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/package.json +0 -0
  113. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/remote-templates/creating-remote-templates.md +0 -0
  114. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/remote-templates/index.md +0 -0
  115. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/docs/remote-templates/using-remote-templates.md +0 -0
  116. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/llm.txt +0 -0
  117. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/.gitignore +0 -0
  118. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/GEMINI.md +0 -0
  119. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/README.md +0 -0
  120. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/apis.tf +0 -0
  121. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/apis.tf +0 -0
  122. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/iam.tf +0 -0
  123. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/log_sinks.tf +0 -0
  124. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/providers.tf +0 -0
  125. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/storage.tf +0 -0
  126. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/variables.tf +0 -0
  127. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  128. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/github.tf +0 -0
  129. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/iam.tf +0 -0
  130. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/locals.tf +0 -0
  131. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/log_sinks.tf +0 -0
  132. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/providers.tf +0 -0
  133. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/service_accounts.tf +0 -0
  134. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/storage.tf +0 -0
  135. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/variables.tf +0 -0
  136. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/vars/env.tfvars +0 -0
  137. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +0 -0
  138. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +0 -0
  139. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/pyproject.toml +0 -0
  140. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/tests/unit/test_dummy.py +0 -0
  141. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +0 -0
  142. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +0 -0
  143. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +0 -0
  144. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +0 -0
  145. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +0 -0
  146. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +0 -0
  147. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py +0 -0
  148. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py +0 -0
  149. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/base_template/{{cookiecutter.agent_directory}}/utils/typing.py +0 -0
  150. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/commands/enhance.py +0 -0
  151. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/commands/setup_cicd.py +0 -0
  152. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/main.py +0 -0
  153. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/__init__.py +0 -0
  154. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/cicd.py +0 -0
  155. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/datastores.py +0 -0
  156. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/logging.py +0 -0
  157. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/cli/utils/version.py +0 -0
  158. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/README.md +0 -0
  159. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  160. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/data_ingestion_pipeline/components/process_data.py +0 -0
  161. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  162. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +0 -0
  163. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/pyproject.toml +0 -0
  164. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/data_ingestion/uv.lock +0 -0
  165. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  166. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -0
  167. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -0
  168. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  169. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/tests/load_test/README.md +0 -0
  170. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -0
  171. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +0 -0
  172. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +0 -0
  173. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/deployment/terraform/service.tf +0 -0
  174. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -0
  175. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  176. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/tests/load_test/README.md +0 -0
  177. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -0
  178. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/package-lock.json +0 -0
  179. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/package.json +0 -0
  180. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/public/favicon.ico +0 -0
  181. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/public/index.html +0 -0
  182. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/public/robots.txt +0 -0
  183. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/App.scss +0 -0
  184. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/App.test.tsx +0 -0
  185. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  186. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  187. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/control-tray/ControlTray.tsx +0 -0
  188. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/control-tray/control-tray.scss +0 -0
  189. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/logger/Logger.tsx +0 -0
  190. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/logger/logger.scss +0 -0
  191. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/logger/mock-logs.ts +0 -0
  192. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -0
  193. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +0 -0
  194. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  195. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/hooks/use-live-api.ts +0 -0
  196. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  197. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/hooks/use-screen-capture.ts +0 -0
  198. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/hooks/use-webcam.ts +0 -0
  199. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/index.css +0 -0
  200. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/index.tsx +0 -0
  201. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/multimodal-live-types.ts +0 -0
  202. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/react-app-env.d.ts +0 -0
  203. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/reportWebVitals.ts +0 -0
  204. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/setupTests.ts +0 -0
  205. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/audio-recorder.ts +0 -0
  206. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/audio-streamer.ts +0 -0
  207. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/audioworklet-registry.ts +0 -0
  208. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/store-logger.ts +0 -0
  209. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/utils.ts +0 -0
  210. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/worklets/audio-processing.ts +0 -0
  211. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/src/utils/worklets/vol-meter.ts +0 -0
  212. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/live_api_react/frontend/tsconfig.json +0 -0
  213. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/side_bar.py +0 -0
  214. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/streamlit_app.py +0 -0
  215. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/style/app_markdown.py +0 -0
  216. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/utils/chat_utils.py +0 -0
  217. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -0
  218. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/utils/message_editing.py +0 -0
  219. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -0
  220. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/utils/stream_handler.py +0 -0
  221. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/frontends/streamlit/frontend/utils/title_summary.py +0 -0
  222. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/containers/data_processing/Dockerfile +0 -0
  223. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/containers/e2e-tests/Dockerfile +0 -0
  224. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/docs/adk-cheatsheet.md +0 -0
  225. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/idx/.idx/dev.nix +0 -0
  226. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/idx/idx-template.json +0 -0
  227. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/idx/idx-template.nix +0 -0
  228. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-adk_base-agent_engine.lock +0 -0
  229. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-adk_base-cloud_run.lock +0 -0
  230. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -0
  231. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -0
  232. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -0
  233. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -0
  234. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -0
  235. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -0
  236. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/resources/locks/uv-live_api-cloud_run.lock +0 -0
  237. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/utils/generate_locks.py +0 -0
  238. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/utils/lock_utils.py +0 -0
  239. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/src/utils/watch_and_rebuild.py +0 -0
  240. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/__init__.py +0 -0
  241. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cicd/example.env +0 -0
  242. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cicd/scripts/delete_agent_engines.py +0 -0
  243. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cicd/scripts/delete_vector_search.py +0 -0
  244. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cicd/test_e2e_deployment.py +0 -0
  245. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/commands/test_create_local.py +0 -0
  246. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/commands/test_list.py +0 -0
  247. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/commands/test_setup_cicd.py +0 -0
  248. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/cli/utils/test_cicd.py +0 -0
  249. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/test_agent_directory_functionality.py +0 -0
  250. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/test_makefile_usability.py +0 -0
  251. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/test_pipeline_parity.py +0 -0
  252. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/test_remote_templating.py +0 -0
  253. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/test_template_linting.py +0 -0
  254. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/test_templated_patterns.py +0 -0
  255. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/integration/utils.py +0 -0
  256. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_side_bar.py +0 -0
  257. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_streamlit_app.py +0 -0
  258. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_utils/test_chat_utils.py +0 -0
  259. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_utils/test_local_chat_history.py +0 -0
  260. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_utils/test_message_editing.py +0 -0
  261. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_utils/test_multimodal_utils.py +0 -0
  262. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/test_frontend/test_utils/test_stream_handler.py +0 -0
  263. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/utils/__init__.py +0 -0
  264. {agent_starter_pack-0.12.1 → agent_starter_pack-0.13.0}/tests/utils/get_agents.py +0 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(PROJECT_IDS=agent-starter-pack-e2e-dev,agent-starter-pack-e2e-st,agent-starter-pack-e2e-pr python tests/cicd/scripts/delete_vector_search.py)",
5
+ "Bash(make lint)",
6
+ "Bash(uv run pytest tests/cli/commands/test_create.py::TestCreateCommand::test_create_existing_project_dir -v -s)",
7
+ "Bash(gcloud serverless vpc-connectors list --project=agent-starter-pack-e2e-dev --region=europe-west1)",
8
+ "Bash(gcloud compute networks vpc-access connectors list --project=agent-starter-pack-e2e-dev --region=europe-west1)",
9
+ "Bash(gcloud alpha network-services address-reservations list --project=agent-starter-pack-e2e-dev --location=europe-west1)",
10
+ "Bash(gcloud beta serverless address-reservations list --project=agent-starter-pack-e2e-dev --location=europe-west1)",
11
+ "Bash(gcloud run services delete test-797fa619-1755528509 --region=europe-west1 --project=agent-starter-pack-e2e-dev --quiet)"
12
+ ],
13
+ "deny": [],
14
+ "ask": []
15
+ }
16
+ }
@@ -114,17 +114,57 @@ The project maintains parallel CI/CD implementations. **Any change to CI/CD logi
114
114
 
115
115
  When adding a new variable or secret, ensure it is configured correctly for both systems in the Terraform scripts that manage them (e.g., `github_actions_variable` resource and Cloud Build trigger substitutions).
116
116
 
117
- ## File Modification Checklist
117
+ ## Advanced Template System Patterns
118
+
119
+ ### 4-Layer Architecture
120
+ Template processing follows this hierarchy (later layers override earlier ones):
121
+ 1. **Base Template** (`src/base_template/`) - Applied to ALL projects
122
+ 2. **Deployment Targets** (`src/deployment_targets/`) - Environment overrides
123
+ 3. **Frontend Types** (`src/frontends/`) - UI-specific files
124
+ 4. **Agent Templates** (`agents/*/`) - Individual agent logic
125
+
126
+ **Rule**: Always place changes in the correct layer. Check if deployment targets need corresponding updates.
127
+
128
+ ### Template Processing Flow
129
+ 1. Variable resolution from `cookiecutter.json`
130
+ 2. File copying (base → overlays)
131
+ 3. Jinja2 rendering of content
132
+ 4. File/directory name rendering
133
+
134
+ ### Cross-File Dependencies
135
+ Changes often require coordinated updates:
136
+ - **Configuration**: `templateconfig.yaml` → `cookiecutter.json` → rendered templates
137
+ - **CI/CD**: `.github/workflows/` ↔ `.cloudbuild/` (must stay in sync)
138
+ - **Infrastructure**: Base terraform → deployment target overrides
139
+
140
+ ### Conditional Logic Patterns
141
+ ```jinja
142
+ {%- if cookiecutter.agent_name == "live_api" %}
143
+ # Agent-specific logic
144
+ {%- elif cookiecutter.deployment_target == "cloud_run" %}
145
+ # Deployment-specific logic
146
+ {%- endif %}
147
+ ```
118
148
 
119
- Before finalizing any change, verify the following:
149
+ ### Testing Strategy
150
+ Test changes across multiple dimensions:
151
+ - Agent types (live_api, adk_base, etc.)
152
+ - Deployment targets (cloud_run, agent_engine)
153
+ - Feature combinations (data_ingestion, frontend_type)
154
+
155
+ ### Common Pitfalls
156
+ - **Hardcoded URLs**: Use relative paths for frontend connections
157
+ - **Missing Conditionals**: Wrap agent-specific code in proper `{% if %}` blocks
158
+ - **Dependency Conflicts**: Some agents lack certain extras (e.g., live_api + lint)
159
+
160
+ ## File Modification Checklist
120
161
 
121
- - [ ] **Jinja Syntax:** Are all `{% if %}` and `{% for %}` blocks correctly closed with `{% endif %}` and `{% endfor %}`?
122
- - [ ] **Variable Consistency:** Is the `cookiecutter.` variable name spelled correctly and used consistently across all modified files?
123
- - [ ] **Cross-Target Impact:** If you changed the `base_template`, have you checked if any `deployment_targets` need corresponding updates?
124
- - [ ] **CI/CD Parity:** If you modified a CI/CD workflow, did you apply the equivalent change to the other system (GitHub Actions vs. Cloud Build)?
125
- - [ ] **Terraform Validation:** If you changed Terraform files, are resource references correct? Does it pass `terraform validate`?
126
- - [ ] **Documentation:** Does any user-facing documentation in `docs/` need to be updated to reflect the change?
162
+ - [ ] **Jinja Syntax:** All `{% if %}` and `{% for %}` blocks correctly closed?
163
+ - [ ] **Variable Consistency:** `cookiecutter.` variables spelled correctly?
164
+ - [ ] **Cross-Target Impact:** Base template changes checked against deployment targets?
165
+ - [ ] **CI/CD Parity:** Changes applied to both GitHub Actions and Cloud Build?
166
+ - [ ] **Multi-Agent Testing:** Tested with different agent types and configurations?
127
167
 
128
168
  ### Key Tooling
129
169
 
130
- - **`uv` for Python Command Execution:** `uv` is the primary tool used for managing Python dependencies and executing Python commands within the project, including CLI operations and CI/CD steps. This ensures consistent, isolated, and efficient execution environments.
170
+ - **`uv` for Python:** Primary tool for dependency management and CLI execution
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-starter-pack
3
- Version: 0.12.1
3
+ Version: 0.13.0
4
4
  Summary: CLI to bootstrap production-ready Google Cloud GenAI agent projects from templates.
5
5
  Author-email: Google LLC <agent-starter-pack@google.com>
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-starter-pack"
3
- version = "0.12.1"
3
+ version = "0.13.0"
4
4
  description = "CLI to bootstrap production-ready Google Cloud GenAI agent projects from templates."
5
5
  authors = [
6
6
  { name = "Google LLC", email = "agent-starter-pack@google.com" },
@@ -4,7 +4,7 @@ install:
4
4
  {%- if cookiecutter.settings.get("commands", {}).get("override", {}).get("install") %}
5
5
  {{cookiecutter.settings.get("commands", {}).get("override", {}).get("install")}}
6
6
  {%- else %}
7
- uv sync --dev{% if cookiecutter.agent_name != 'live_api' and "adk" not in cookiecutter.tags %} --extra streamlit{%- endif %} --extra jupyter{% if cookiecutter.agent_name == 'live_api' %} && (cd frontend && npm install){%- endif %}
7
+ uv sync --dev{% if cookiecutter.agent_name != 'live_api' and "adk" not in cookiecutter.tags %} --extra streamlit{%- endif %}{% if cookiecutter.agent_name == 'live_api' %} && (cd frontend && npm install){%- endif %}
8
8
  {%- endif %}
9
9
 
10
10
  {%- if cookiecutter.settings.get("commands", {}).get("extra", {}) %}
@@ -23,14 +23,23 @@ install:
23
23
  {%- endif %}
24
24
  {%- endfor %}{%- endif %}
25
25
 
26
+ {%- if cookiecutter.agent_name == 'live_api' %}
27
+ # Build the frontend for production
28
+ build-frontend:
29
+ (cd frontend && npm run build)
30
+
31
+ {%- endif %}
26
32
  # Launch local dev playground
27
- playground:
33
+ playground:{%- if cookiecutter.agent_name == 'live_api' %} build-frontend{%- endif %}
28
34
  {%- if cookiecutter.settings.get("commands", {}).get("override", {}).get("playground") %}
29
35
  {{cookiecutter.settings.get("commands", {}).get("override", {}).get("playground")}}
30
36
  {%- else %}
31
37
  @echo "==============================================================================="
32
38
  @echo "| 🚀 Starting your agent playground... |"
33
39
  @echo "| |"
40
+ {%- if cookiecutter.agent_name == 'live_api' %}
41
+ @echo "| 🌐 Access your app at: http://localhost:8000 |"
42
+ {%- endif %}
34
43
  @echo "| 💡 Try asking: {{cookiecutter.example_question}}|"
35
44
  {%- if "adk" in cookiecutter.tags %}
36
45
  @echo "| |"
@@ -41,11 +50,13 @@ playground:
41
50
  uv run adk web . --port 8501
42
51
  {%- else %}
43
52
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
44
- uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload &
45
- {%- endif %}
46
53
  {%- if cookiecutter.agent_name == 'live_api' %}
47
- (cd frontend && PORT=8501 npm start)
54
+ uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload
48
55
  {%- else %}
56
+ uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload &
57
+ {%- endif %}
58
+ {%- endif %}
59
+ {%- if cookiecutter.agent_name != 'live_api' %}
49
60
  {% if cookiecutter.deployment_target == 'agent_engine' %}PYTHONPATH=. {% endif %}uv run streamlit run frontend/streamlit_app.py --browser.serverAddress=localhost --server.enableCORS=false --server.enableXsrfProtection=false
50
61
  {%- endif %}
51
62
  {%- endif %}
@@ -84,7 +95,7 @@ local-backend:
84
95
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
85
96
  {%- if cookiecutter.agent_name == 'live_api' %}
86
97
 
87
- # Start the frontend UI for development
98
+ # Start the frontend UI separately for development (requires backend running separately)
88
99
  ui:
89
100
  (cd frontend && PORT=8501 npm start)
90
101
  {%- endif %}
@@ -122,6 +133,7 @@ test:
122
133
 
123
134
  # Run code quality checks (codespell, ruff, mypy)
124
135
  lint:
136
+ uv sync --dev --extra lint
125
137
  uv run codespell
126
138
  uv run ruff check . --diff
127
139
  uv run ruff format . --check --diff
@@ -92,12 +92,12 @@ Here’s the recommended workflow for local development:
92
92
  make install
93
93
  ```
94
94
 
95
- 2. **Start the Backend Server:**
96
- Open a terminal and run:
95
+ 2. **Start the Full Stack Server:**
96
+ The FastAPI server now serves both the backend API and frontend interface:
97
97
  ```bash
98
98
  make local-backend
99
99
  ```
100
- The backend is ready when you see `INFO: Application startup complete.` Wait for this message before starting the frontend.
100
+ The server is ready when you see `INFO: Application startup complete.` The frontend will be available at `http://localhost:8000`.
101
101
 
102
102
  <details>
103
103
  <summary><b>Optional: Use AI Studio / API Key instead of Vertex AI</b></summary>
@@ -113,47 +113,23 @@ Here’s the recommended workflow for local development:
113
113
  </details>
114
114
  <br>
115
115
 
116
- 3. **Start the Frontend UI:**
117
- Open *another* terminal and run:
116
+ <details>
117
+ <summary><b>Alternative: Run Frontend Separately</b></summary>
118
+
119
+ If you prefer to run the frontend separately (useful for frontend development), you can still use:
118
120
  ```bash
119
121
  make ui
120
122
  ```
121
- This launches the Streamlit application, which connects to the backend server (by default at `http://localhost:8000`).
123
+ This launches the Streamlit application, which connects to the backend server at `http://localhost:8000`.
124
+ </details>
125
+ <br>
122
126
 
123
- 4. **Interact and Iterate:**
124
- * Open the Streamlit UI in your browser (usually `http://localhost:8501` or `http://localhost:3001`).
127
+ 3. **Interact and Iterate:**
128
+ * Open your browser and navigate to `http://localhost:8000` to access the integrated frontend.
125
129
  * Click the play button in the UI to connect to the backend.
126
130
  * Interact with the agent! Try prompts like: *"Using the tool you have, define Governance in the context MLOPs"*
127
131
  * Modify the agent logic in `{{cookiecutter.agent_directory}}/agent.py`. The backend server (FastAPI with `uvicorn --reload`) should automatically restart when you save changes. Refresh the frontend if needed to see behavioral changes.
128
132
 
129
- <details>
130
- <summary><b>Cloud Shell Usage</b></summary>
131
-
132
- To run the agent using Google Cloud Shell:
133
-
134
- 1. **Start the Frontend:**
135
- In a Cloud Shell tab, run:
136
- ```bash
137
- make ui
138
- ```
139
- Accept prompts to use a different port if 3000 is busy. Click the `localhost:PORT` link for the web preview.
140
-
141
- 2. **Start the Backend:**
142
- Open a *new* Cloud Shell tab. Set your project: `gcloud config set project [PROJECT_ID]`. Then run:
143
- ```bash
144
- make local-backend
145
- ```
146
-
147
- 3. **Configure Backend Web Preview:**
148
- Use the Cloud Shell Web Preview feature to expose port 8000. Change the default port from 8080 to 8000. See [Cloud Shell Web Preview documentation](https://cloud.google.com/shell/docs/using-web-preview#preview_the_application).
149
-
150
- 4. **Connect Frontend to Backend:**
151
- * Copy the URL generated by the backend web preview (e.g., `https://8000-cs-....cloudshell.dev/`).
152
- * Paste this URL into the "Server URL" field in the frontend UI settings (in the first tab).
153
- * Click the "Play button" to connect.
154
-
155
- * **Note:** The feedback feature in the frontend might not work reliably in Cloud Shell due to cross-origin issues between the preview URLs.
156
- </details>
157
133
 
158
134
  </details>
159
135
  {%- else %}
@@ -183,18 +159,7 @@ gcloud config set project <your-dev-project-id>
183
159
  make backend
184
160
  ```
185
161
  {% if cookiecutter.agent_name == 'live_api' %}
186
- **Accessing the Deployed Backend Locally:**
187
-
188
- To connect your local frontend (`make ui`) to the backend deployed on Cloud Run, use the `gcloud` proxy:
189
-
190
- 1. **Start the proxy:**
191
- ```bash
192
- # Replace with your actual service name, project, and region
193
- gcloud run services proxy gemini-agent-service --port 8000 --project $PROJECT_ID --region $REGION
194
- ```
195
- Keep this terminal running.
196
-
197
- 2. **Connect Frontend:** Your deployed backend is now accessible locally at `http://localhost:8000`. Point your Streamlit UI to this address.
162
+ **Note:** For secure access to your deployed backend, consider using Identity-Aware Proxy (IAP) by running `make backend IAP=true`.
198
163
  {%- endif %}
199
164
 
200
165
  The repository includes a Terraform configuration for the setup of the Dev Google Cloud project.
@@ -18,17 +18,11 @@ import os
18
18
  import pathlib
19
19
  import shutil
20
20
  import subprocess
21
- import sys
22
21
  import tempfile
23
22
  from collections.abc import Callable
24
23
 
25
24
  import click
26
25
  from click.core import ParameterSource
27
-
28
- if sys.version_info >= (3, 11):
29
- import tomllib
30
- else:
31
- import tomli as tomllib
32
26
  from rich.console import Console
33
27
  from rich.prompt import IntPrompt, Prompt
34
28
 
@@ -249,6 +243,8 @@ def create(
249
243
  ) -> None:
250
244
  """Create GCP-based AI agent projects from templates."""
251
245
  try:
246
+ console = Console()
247
+
252
248
  # Display welcome banner (unless skipped)
253
249
  if not skip_welcome:
254
250
  display_welcome_banner(agent)
@@ -312,6 +308,7 @@ def create(
312
308
  selected_agent = None
313
309
  template_source_path = None
314
310
  temp_dir_to_clean = None
311
+ remote_spec = None
315
312
 
316
313
  if agent:
317
314
  if agent.startswith("local@"):
@@ -353,6 +350,20 @@ def create(
353
350
  )
354
351
  temp_dir_to_clean = str(temp_dir_path)
355
352
  selected_agent = f"remote_{hash(agent)}" # Generate unique name for remote template
353
+
354
+ # Show informational message for ADK samples with smart defaults
355
+ if remote_spec.is_adk_samples:
356
+ config = load_remote_template_config(
357
+ template_source_path, is_adk_sample=True
358
+ )
359
+ if not config.get("has_explicit_config", True):
360
+ console = Console()
361
+ console.print(
362
+ "\n[blue]ℹ️ Note: The starter pack uses heuristics to template this ADK sample agent.[/]"
363
+ )
364
+ console.print(
365
+ "[dim] The starter pack attempts to create a working codebase, but you'll need to follow the generated README for complete setup.[/]"
366
+ )
356
367
  else:
357
368
  # Handle local agent selection
358
369
  agents = get_available_agents()
@@ -402,6 +413,20 @@ def create(
402
413
  temp_dir_to_clean = str(temp_dir_path)
403
414
  final_agent = f"remote_{hash(agent)}" # Generate unique name for remote template
404
415
 
416
+ # Show informational message for ADK samples with smart defaults
417
+ if remote_spec.is_adk_samples:
418
+ config = load_remote_template_config(
419
+ template_source_path, is_adk_sample=True
420
+ )
421
+ if not config.get("has_explicit_config", True):
422
+ console = Console()
423
+ console.print(
424
+ "\n[blue]ℹ️ Note: The starter pack uses heuristics to template this ADK sample agent.[/]"
425
+ )
426
+ console.print(
427
+ "[dim] The starter pack attempts to create a working codebase, but you'll need to follow the generated README for complete setup.[/]"
428
+ )
429
+
405
430
  if debug:
406
431
  logging.debug(f"Selected agent: {final_agent}")
407
432
 
@@ -414,7 +439,9 @@ def create(
414
439
 
415
440
  # Load remote template config
416
441
  source_config = load_remote_template_config(
417
- template_source_path, cli_overrides
442
+ template_source_path,
443
+ cli_overrides,
444
+ is_adk_sample=remote_spec.is_adk_samples if remote_spec else False,
418
445
  )
419
446
 
420
447
  # Remote templates now work even without pyproject.toml thanks to defaults
@@ -779,56 +806,10 @@ def display_adk_samples_selection() -> str:
779
806
  # Fetch the repository
780
807
  repo_path, _ = fetch_remote_template(spec)
781
808
 
782
- # Scan for agents in the repository
783
- adk_agents = {}
784
- agent_count = 1
785
-
786
- # Search for pyproject.toml files to identify agents
787
- for config_path in sorted(repo_path.glob("**/pyproject.toml")):
788
- try:
789
- with open(config_path, "rb") as f:
790
- pyproject_data = tomllib.load(f)
791
-
792
- config = pyproject_data.get("tool", {}).get("agent-starter-pack", {})
793
-
794
- # Skip pyproject.toml files that don't have agent-starter-pack config
795
- if not config:
796
- continue
797
-
798
- template_root = config_path.parent
799
-
800
- # Use fallbacks to [project] section if needed
801
- project_info = pyproject_data.get("project", {})
802
- agent_name = (
803
- config.get("name") or project_info.get("name") or template_root.name
804
- )
805
- description = (
806
- config.get("description") or project_info.get("description") or ""
807
- )
809
+ # Use shared ADK discovery function
810
+ from ..utils.remote_template import discover_adk_agents
808
811
 
809
- # Get the relative path from repo root
810
- relative_path = template_root.relative_to(repo_path)
811
-
812
- # For adk-samples, use just the agent name for the spec
813
- # This handles cases like python/agents/gemini-fullstack -> gemini-fullstack
814
- agent_spec_name = (
815
- relative_path.name
816
- if relative_path != relative_path.parent
817
- else str(relative_path)
818
- )
819
-
820
- adk_agents[agent_count] = {
821
- "name": agent_name,
822
- "description": description,
823
- "path": str(relative_path),
824
- "spec": f"adk@{agent_spec_name}",
825
- }
826
- agent_count += 1
827
-
828
- except Exception as e:
829
- logging.warning(
830
- f"Could not load agent from {config_path.parent.parent}: {e}"
831
- )
812
+ adk_agents = discover_adk_agents(repo_path)
832
813
 
833
814
  if not adk_agents:
834
815
  console.print("No agents found in adk-samples repository", style="yellow")
@@ -836,9 +817,19 @@ def display_adk_samples_selection() -> str:
836
817
  return display_agent_selection()
837
818
 
838
819
  console.print("\n> Available agents from [bold blue]google/adk-samples[/]:")
820
+
821
+ # Show explanation for inferred agents at the top
822
+ from ..utils.remote_template import display_adk_caveat_if_needed
823
+
824
+ display_adk_caveat_if_needed(adk_agents)
825
+
839
826
  for num, agent in adk_agents.items():
827
+ name_with_indicator = agent["name"]
828
+ if not agent.get("has_explicit_config", True):
829
+ name_with_indicator += " *"
830
+
840
831
  console.print(
841
- f"{num}. [bold]{agent['name']}[/] - [dim]{agent['description']}[/]"
832
+ f"{num}. [bold]{name_with_indicator}[/] - [dim]{agent['description']}[/]"
842
833
  )
843
834
 
844
835
  # Add option to go back to local agents
@@ -1035,18 +1026,22 @@ def _handle_credential_verification(creds_info: dict) -> dict:
1035
1026
  return creds_info
1036
1027
 
1037
1028
 
1038
- def _test_vertex_ai_connection(project_id: str, region: str) -> None:
1029
+ def _test_vertex_ai_connection(
1030
+ project_id: str, region: str, auto_approve: bool = False
1031
+ ) -> None:
1039
1032
  """Test connection to Vertex AI.
1040
1033
 
1041
1034
  Args:
1042
1035
  project_id: GCP project ID
1043
1036
  region: GCP region for deployment
1037
+ auto_approve: Whether to auto-approve API enablement
1044
1038
  """
1045
1039
  console.print("> Testing GCP and Vertex AI Connection...")
1046
1040
  try:
1047
1041
  verify_vertex_connection(
1048
1042
  project_id=project_id,
1049
1043
  location=region,
1044
+ auto_approve=auto_approve,
1050
1045
  )
1051
1046
  console.print(
1052
1047
  f"> ✓ Successfully verified connection to Vertex AI in project {project_id}"
@@ -1058,6 +1053,7 @@ def _test_vertex_ai_connection(project_id: str, region: str) -> None:
1058
1053
  f"Visit https://cloud.google.com/vertex-ai/docs/authentication for help.",
1059
1054
  style="bold red",
1060
1055
  )
1056
+ raise
1061
1057
 
1062
1058
 
1063
1059
  def replace_region_in_files(
@@ -31,7 +31,9 @@ from ..utils.template import get_available_agents
31
31
  console = Console()
32
32
 
33
33
 
34
- def display_agents_from_path(base_path: pathlib.Path, source_name: str) -> None:
34
+ def display_agents_from_path(
35
+ base_path: pathlib.Path, source_name: str, is_adk_samples: bool = False
36
+ ) -> None:
35
37
  """Scans a directory and displays available agents."""
36
38
  table = Table(
37
39
  title=f"Available agents in [bold blue]{source_name}[/]",
@@ -47,41 +49,66 @@ def display_agents_from_path(base_path: pathlib.Path, source_name: str) -> None:
47
49
  return
48
50
 
49
51
  found_agents = False
50
- # Search for pyproject.toml files to identify agents (explicit opt-in)
51
- for config_path in sorted(base_path.glob("**/pyproject.toml")):
52
- try:
53
- with open(config_path, "rb") as f:
54
- pyproject_data = tomllib.load(f)
52
+ adk_agents = {}
55
53
 
56
- config = pyproject_data.get("tool", {}).get("agent-starter-pack", {})
54
+ if is_adk_samples:
55
+ # For ADK samples, use the shared discovery function
56
+ from ..utils.remote_template import discover_adk_agents
57
57
 
58
- # Skip pyproject.toml files that don't have agent-starter-pack config
59
- if not config:
60
- continue
58
+ adk_agents = discover_adk_agents(base_path)
61
59
 
62
- template_root = config_path.parent
60
+ for agent_info in adk_agents.values():
61
+ # Add indicator for inferred agents
62
+ name_with_indicator = agent_info["name"]
63
+ if not agent_info.get("has_explicit_config", True):
64
+ name_with_indicator += " *"
63
65
 
64
- # Use fallbacks to [project] section if needed
65
- project_info = pyproject_data.get("project", {})
66
- agent_name = (
67
- config.get("name") or project_info.get("name") or template_root.name
68
- )
69
- description = (
70
- config.get("description") or project_info.get("description") or ""
66
+ table.add_row(
67
+ name_with_indicator, f"/{agent_info['path']}", agent_info["description"]
71
68
  )
69
+ found_agents = True
70
+ else:
71
+ # Original logic for non-ADK sources: Search for pyproject.toml files with explicit config
72
+ for config_path in sorted(base_path.glob("**/pyproject.toml")):
73
+ try:
74
+ with open(config_path, "rb") as f:
75
+ pyproject_data = tomllib.load(f)
72
76
 
73
- # Display the agent's path relative to the scanned directory
74
- relative_path = template_root.relative_to(base_path)
77
+ config = pyproject_data.get("tool", {}).get("agent-starter-pack", {})
75
78
 
76
- table.add_row(agent_name, f"/{relative_path}", description)
77
- found_agents = True
79
+ # Skip pyproject.toml files that don't have agent-starter-pack config
80
+ if not config:
81
+ continue
82
+
83
+ template_root = config_path.parent
84
+
85
+ # Use fallbacks to [project] section if needed
86
+ project_info = pyproject_data.get("project", {})
87
+ agent_name = (
88
+ config.get("name") or project_info.get("name") or template_root.name
89
+ )
90
+ description = (
91
+ config.get("description") or project_info.get("description") or ""
92
+ )
93
+
94
+ # Display the agent's path relative to the scanned directory
95
+ relative_path = template_root.relative_to(base_path)
78
96
 
79
- except Exception as e:
80
- logging.warning(f"Could not load agent from {config_path.parent}: {e}")
97
+ table.add_row(agent_name, f"/{relative_path}", description)
98
+ found_agents = True
99
+
100
+ except Exception as e:
101
+ logging.warning(f"Could not load agent from {config_path.parent}: {e}")
81
102
 
82
103
  if not found_agents:
83
104
  console.print(f"No agents found in {source_name}", style="yellow")
84
105
  else:
106
+ # Show explanation for inferred agents at the top (only for ADK samples)
107
+ if is_adk_samples:
108
+ from ..utils.remote_template import display_adk_caveat_if_needed
109
+
110
+ display_adk_caveat_if_needed(adk_agents)
111
+
85
112
  console.print(table)
86
113
 
87
114
 
@@ -103,7 +130,14 @@ def list_remote_agents(remote_source: str, scan_from_root: bool = False) -> None
103
130
  repo_path, template_path = template_dir_path
104
131
  scan_path = repo_path if scan_from_root else template_path
105
132
 
106
- display_agents_from_path(scan_path, remote_source)
133
+ # Check if this is ADK samples to enable inference
134
+ is_adk_samples = (
135
+ spec.is_adk_samples if hasattr(spec, "is_adk_samples") else False
136
+ )
137
+
138
+ display_agents_from_path(
139
+ scan_path, remote_source, is_adk_samples=is_adk_samples
140
+ )
107
141
 
108
142
  except (RuntimeError, FileNotFoundError) as e:
109
143
  console.print(f"Error: {e}", style="bold red")