agent-starter-pack 0.3.3__py3-none-any.whl → 0.21.0__py3-none-any.whl

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 (255) hide show
  1. agent_starter_pack/agents/README.md +7 -0
  2. agents/langgraph_base_react/template/.templateconfig.yaml → agent_starter_pack/agents/adk_a2a_base/.template/templateconfig.yaml +5 -10
  3. agent_starter_pack/agents/adk_a2a_base/README.md +37 -0
  4. src/deployment_targets/cloud_run/Dockerfile → agent_starter_pack/agents/adk_a2a_base/app/__init__.py +2 -14
  5. agent_starter_pack/agents/adk_a2a_base/app/agent.py +70 -0
  6. agent_starter_pack/agents/adk_a2a_base/notebooks/adk_a2a_app_testing.ipynb +583 -0
  7. agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb → agent_starter_pack/agents/adk_a2a_base/notebooks/evaluating_adk_agent.ipynb +163 -199
  8. {agents/adk_base → agent_starter_pack/agents/adk_a2a_base}/tests/integration/test_agent.py +2 -2
  9. agents/adk_base/template/.templateconfig.yaml → agent_starter_pack/agents/adk_base/.template/templateconfig.yaml +4 -1
  10. {agents → agent_starter_pack/agents}/adk_base/README.md +1 -1
  11. agent_starter_pack/agents/adk_base/app/__init__.py +17 -0
  12. {agents → agent_starter_pack/agents}/adk_base/app/agent.py +5 -2
  13. {agents → agent_starter_pack/agents}/adk_base/notebooks/adk_app_testing.ipynb +128 -82
  14. agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb → agent_starter_pack/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +181 -207
  15. agent_starter_pack/agents/adk_base/tests/integration/test_agent.py +58 -0
  16. agents/crewai_coding_crew/template/.templateconfig.yaml → agent_starter_pack/agents/adk_live/.template/templateconfig.yaml +5 -9
  17. agent_starter_pack/agents/adk_live/README.md +32 -0
  18. agent_starter_pack/agents/adk_live/app/__init__.py +17 -0
  19. agent_starter_pack/agents/adk_live/app/agent.py +51 -0
  20. agent_starter_pack/agents/adk_live/tests/unit/test_dummy.py +38 -0
  21. agents/agentic_rag/template/.templateconfig.yaml → agent_starter_pack/agents/agentic_rag/.template/templateconfig.yaml +7 -3
  22. {agents → agent_starter_pack/agents}/agentic_rag/README.md +1 -1
  23. agent_starter_pack/agents/agentic_rag/app/__init__.py +17 -0
  24. {agents → agent_starter_pack/agents}/agentic_rag/app/agent.py +8 -4
  25. {agents → agent_starter_pack/agents}/agentic_rag/notebooks/adk_app_testing.ipynb +128 -82
  26. agent_starter_pack/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +1535 -0
  27. {agents → agent_starter_pack/agents}/agentic_rag/tests/integration/test_agent.py +3 -3
  28. agent_starter_pack/agents/langgraph_base/.template/templateconfig.yaml +31 -0
  29. agent_starter_pack/agents/langgraph_base/README.md +30 -0
  30. agent_starter_pack/agents/langgraph_base/app/__init__.py +17 -0
  31. agent_starter_pack/agents/langgraph_base/app/agent.py +34 -0
  32. {agents/crewai_coding_crew → agent_starter_pack/agents/langgraph_base}/notebooks/evaluating_langgraph_agent.ipynb +30 -17
  33. {agents/langgraph_base_react → agent_starter_pack/agents/langgraph_base}/tests/integration/test_agent.py +2 -2
  34. {src → agent_starter_pack}/base_template/.gitignore +5 -3
  35. agent_starter_pack/base_template/GEMINI.md +5 -0
  36. agent_starter_pack/base_template/Makefile +339 -0
  37. agent_starter_pack/base_template/README.md +267 -0
  38. agent_starter_pack/base_template/deployment/README.md +11 -0
  39. {src → agent_starter_pack}/base_template/deployment/terraform/apis.tf +2 -2
  40. {src → agent_starter_pack}/base_template/deployment/terraform/dev/apis.tf +6 -1
  41. {src → agent_starter_pack}/base_template/deployment/terraform/dev/iam.tf +12 -11
  42. {src → agent_starter_pack}/base_template/deployment/terraform/dev/providers.tf +5 -1
  43. {src → agent_starter_pack}/base_template/deployment/terraform/dev/storage.tf +1 -1
  44. {src → agent_starter_pack}/base_template/deployment/terraform/dev/variables.tf +10 -10
  45. agent_starter_pack/base_template/deployment/terraform/dev/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +193 -0
  46. agent_starter_pack/base_template/deployment/terraform/github.tf +337 -0
  47. {src → agent_starter_pack}/base_template/deployment/terraform/iam.tf +20 -41
  48. {src → agent_starter_pack}/base_template/deployment/terraform/locals.tf +10 -3
  49. {src/resources/setup_cicd → agent_starter_pack/base_template/deployment/terraform}/providers.tf +8 -1
  50. {src → agent_starter_pack}/base_template/deployment/terraform/service_accounts.tf +7 -8
  51. agent_starter_pack/base_template/deployment/terraform/sql/completions.sql +138 -0
  52. {src → agent_starter_pack}/base_template/deployment/terraform/storage.tf +7 -16
  53. {src → agent_starter_pack}/base_template/deployment/terraform/variables.tf +61 -28
  54. {src → agent_starter_pack}/base_template/deployment/terraform/vars/env.tfvars +6 -1
  55. agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +43 -0
  56. src/base_template/deployment/terraform/build_triggers.tf → agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +55 -38
  57. agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +206 -0
  58. {src → agent_starter_pack}/base_template/pyproject.toml +24 -37
  59. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +132 -0
  60. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +65 -0
  61. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +259 -0
  62. src/base_template/deployment/cd/deploy-to-prod.yaml → agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +38 -30
  63. src/base_template/deployment/ci/pr_checks.yaml → agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +5 -5
  64. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +322 -0
  65. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/telemetry.py +96 -0
  66. {src/base_template/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/typing.py +7 -9
  67. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}converters{% else %}unused_converters{% endif %}/__init__.py +25 -0
  68. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}converters{% else %}unused_converters{% endif %}/part_converter.py +138 -0
  69. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/__init__.py +13 -0
  70. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/a2a_agent_executor.py +265 -0
  71. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/task_result_aggregator.py +152 -0
  72. agent_starter_pack/cli/commands/create.py +1256 -0
  73. agent_starter_pack/cli/commands/enhance.py +611 -0
  74. agent_starter_pack/cli/commands/list.py +203 -0
  75. agent_starter_pack/cli/commands/register_gemini_enterprise.py +1070 -0
  76. agent_starter_pack/cli/commands/setup_cicd.py +862 -0
  77. {src → agent_starter_pack}/cli/main.py +10 -2
  78. {src → agent_starter_pack}/cli/utils/cicd.py +139 -48
  79. agent_starter_pack/cli/utils/gcp.py +263 -0
  80. agent_starter_pack/cli/utils/logging.py +103 -0
  81. agent_starter_pack/cli/utils/remote_template.py +677 -0
  82. agent_starter_pack/cli/utils/template.py +1466 -0
  83. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/process_data.py +1 -1
  84. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +20 -6
  85. {src → agent_starter_pack}/data_ingestion/pyproject.toml +1 -0
  86. {src → agent_starter_pack}/data_ingestion/uv.lock +602 -494
  87. agent_starter_pack/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +484 -0
  88. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/README.md +84 -0
  89. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py +424 -0
  90. agent_starter_pack/deployment_targets/agent_engine/tests/{% if cookiecutter.is_a2a %}helpers.py{% else %}unused_helpers.py{% endif %} +138 -0
  91. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +263 -0
  92. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/deploy.py +414 -0
  93. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_adk_live %}expose_app.py{% else %}unused_expose_app.py{% endif %} +519 -0
  94. agent_starter_pack/deployment_targets/cloud_run/Dockerfile +51 -0
  95. agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +243 -0
  96. agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/service.tf +417 -0
  97. agent_starter_pack/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +705 -0
  98. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +321 -0
  99. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/README.md +165 -0
  100. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/load_test.py +329 -0
  101. agent_starter_pack/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/fast_api_app.py +556 -0
  102. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package-lock.json +79 -1044
  103. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package.json +1 -9
  104. agent_starter_pack/frontends/adk_live_react/frontend/src/App.tsx +65 -0
  105. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/Logger.tsx +8 -3
  106. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/logger.scss +26 -0
  107. agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/SidePanel.tsx +516 -0
  108. agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/side-panel.scss +563 -0
  109. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/TranscriptionPreview.tsx +106 -0
  110. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/transcription-preview.scss +150 -0
  111. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-live-api.ts +8 -2
  112. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/multimodal-live-types.ts +40 -2
  113. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-recorder.ts +1 -1
  114. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-streamer.ts +1 -1
  115. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/multimodal-live-client.ts +210 -24
  116. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/utils.ts +27 -5
  117. agent_starter_pack/resources/docs/adk-cheatsheet.md +1628 -0
  118. agent_starter_pack/resources/locks/uv-adk_a2a_base-agent_engine.lock +4966 -0
  119. agent_starter_pack/resources/locks/uv-adk_a2a_base-cloud_run.lock +5011 -0
  120. agent_starter_pack/resources/locks/uv-adk_base-agent_engine.lock +4946 -0
  121. agent_starter_pack/resources/locks/uv-adk_base-cloud_run.lock +4991 -0
  122. agent_starter_pack/resources/locks/uv-adk_live-agent_engine.lock +4963 -0
  123. agent_starter_pack/resources/locks/uv-adk_live-cloud_run.lock +5006 -0
  124. agent_starter_pack/resources/locks/uv-agentic_rag-agent_engine.lock +5487 -0
  125. agent_starter_pack/resources/locks/uv-agentic_rag-cloud_run.lock +5532 -0
  126. agent_starter_pack/resources/locks/uv-langgraph_base-agent_engine.lock +5788 -0
  127. agent_starter_pack/resources/locks/uv-langgraph_base-cloud_run.lock +5811 -0
  128. {src → agent_starter_pack}/utils/generate_locks.py +15 -12
  129. {src → agent_starter_pack}/utils/lock_utils.py +4 -7
  130. {src → agent_starter_pack}/utils/watch_and_rebuild.py +2 -2
  131. agent_starter_pack-0.21.0.dist-info/METADATA +182 -0
  132. agent_starter_pack-0.21.0.dist-info/RECORD +171 -0
  133. agent_starter_pack-0.21.0.dist-info/entry_points.txt +2 -0
  134. llm.txt +362 -0
  135. agent_starter_pack-0.3.3.dist-info/METADATA +0 -164
  136. agent_starter_pack-0.3.3.dist-info/RECORD +0 -176
  137. agent_starter_pack-0.3.3.dist-info/entry_points.txt +0 -2
  138. agents/crewai_coding_crew/README.md +0 -34
  139. agents/crewai_coding_crew/app/agent.py +0 -86
  140. agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -39
  141. agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -37
  142. agents/crewai_coding_crew/app/crew/crew.py +0 -71
  143. agents/crewai_coding_crew/tests/integration/test_agent.py +0 -47
  144. agents/langgraph_base_react/README.md +0 -9
  145. agents/langgraph_base_react/app/agent.py +0 -73
  146. agents/live_api/README.md +0 -37
  147. agents/live_api/app/agent.py +0 -78
  148. agents/live_api/app/server.py +0 -196
  149. agents/live_api/app/templates.py +0 -51
  150. agents/live_api/app/vector_store.py +0 -55
  151. agents/live_api/template/.templateconfig.yaml +0 -29
  152. agents/live_api/tests/integration/test_server_e2e.py +0 -254
  153. agents/live_api/tests/load_test/load_test.py +0 -40
  154. agents/live_api/tests/unit/test_server.py +0 -143
  155. src/base_template/Makefile +0 -72
  156. src/base_template/README.md +0 -208
  157. src/base_template/app/__init__.py +0 -3
  158. src/base_template/app/utils/tracing.py +0 -155
  159. src/base_template/deployment/README.md +0 -126
  160. src/base_template/deployment/cd/staging.yaml +0 -216
  161. src/base_template/deployment/terraform/dev/log_sinks.tf +0 -63
  162. src/base_template/deployment/terraform/log_sinks.tf +0 -70
  163. src/base_template/deployment/terraform/providers.tf +0 -37
  164. src/cli/commands/create.py +0 -664
  165. src/cli/commands/setup_cicd.py +0 -829
  166. src/cli/utils/gcp.py +0 -117
  167. src/cli/utils/logging.py +0 -51
  168. src/cli/utils/template.py +0 -737
  169. src/deployment_targets/agent_engine/app/agent_engine_app.py +0 -336
  170. src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -1025
  171. src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -183
  172. src/deployment_targets/agent_engine/tests/load_test/README.md +0 -42
  173. src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -107
  174. src/deployment_targets/cloud_run/app/server.py +0 -154
  175. src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -249
  176. src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  177. src/deployment_targets/cloud_run/tests/load_test/README.md +0 -83
  178. src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -118
  179. src/deployment_targets/cloud_run/uv.lock +0 -6952
  180. src/frontends/live_api_react/frontend/src/App.tsx +0 -205
  181. src/frontends/live_api_react/frontend/src/components/control-tray/ControlTray.tsx +0 -217
  182. src/frontends/live_api_react/frontend/src/components/control-tray/control-tray.scss +0 -201
  183. src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -161
  184. src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +0 -285
  185. src/frontends/streamlit/frontend/side_bar.py +0 -214
  186. src/frontends/streamlit/frontend/streamlit_app.py +0 -265
  187. src/frontends/streamlit/frontend/style/app_markdown.py +0 -37
  188. src/frontends/streamlit/frontend/utils/chat_utils.py +0 -67
  189. src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -125
  190. src/frontends/streamlit/frontend/utils/message_editing.py +0 -59
  191. src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -217
  192. src/frontends/streamlit/frontend/utils/stream_handler.py +0 -301
  193. src/frontends/streamlit/frontend/utils/title_summary.py +0 -94
  194. src/frontends/streamlit_adk/frontend/side_bar.py +0 -214
  195. src/frontends/streamlit_adk/frontend/streamlit_app.py +0 -314
  196. src/frontends/streamlit_adk/frontend/style/app_markdown.py +0 -37
  197. src/frontends/streamlit_adk/frontend/utils/chat_utils.py +0 -84
  198. src/frontends/streamlit_adk/frontend/utils/local_chat_history.py +0 -110
  199. src/frontends/streamlit_adk/frontend/utils/message_editing.py +0 -61
  200. src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py +0 -223
  201. src/frontends/streamlit_adk/frontend/utils/stream_handler.py +0 -311
  202. src/frontends/streamlit_adk/frontend/utils/title_summary.py +0 -129
  203. src/resources/containers/data_processing/Dockerfile +0 -27
  204. src/resources/containers/e2e-tests/Dockerfile +0 -19
  205. src/resources/idx/.idx/dev.nix +0 -57
  206. src/resources/idx/idx-template.json +0 -21
  207. src/resources/idx/idx-template.nix +0 -26
  208. src/resources/locks/uv-adk_base-agent_engine.lock +0 -5338
  209. src/resources/locks/uv-adk_base-cloud_run.lock +0 -5930
  210. src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -5528
  211. src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -6120
  212. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -6231
  213. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -6839
  214. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -5233
  215. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -5862
  216. src/resources/locks/uv-live_api-cloud_run.lock +0 -5832
  217. src/resources/setup_cicd/cicd_variables.tf +0 -41
  218. src/resources/setup_cicd/github.tf +0 -87
  219. {agents → agent_starter_pack/agents}/agentic_rag/app/retrievers.py +0 -0
  220. {agents → agent_starter_pack/agents}/agentic_rag/app/templates.py +0 -0
  221. {src → agent_starter_pack}/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  222. {src → agent_starter_pack}/base_template/tests/unit/test_dummy.py +0 -0
  223. {src/deployment_targets/agent_engine/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/gcs.py +0 -0
  224. {src → agent_starter_pack}/cli/utils/__init__.py +0 -0
  225. {src → agent_starter_pack}/cli/utils/datastores.py +0 -0
  226. {src → agent_starter_pack}/cli/utils/version.py +0 -0
  227. {src → agent_starter_pack}/data_ingestion/README.md +0 -0
  228. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  229. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  230. {src → agent_starter_pack}/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  231. {src → agent_starter_pack}/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  232. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/favicon.ico +0 -0
  233. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/index.html +0 -0
  234. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/robots.txt +0 -0
  235. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.scss +0 -0
  236. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.test.tsx +0 -0
  237. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  238. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  239. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/mock-logs.ts +0 -0
  240. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  241. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  242. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-screen-capture.ts +0 -0
  243. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-webcam.ts +0 -0
  244. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.css +0 -0
  245. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.tsx +0 -0
  246. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/react-app-env.d.ts +0 -0
  247. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/reportWebVitals.ts +0 -0
  248. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/setupTests.ts +0 -0
  249. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audioworklet-registry.ts +0 -0
  250. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/store-logger.ts +0 -0
  251. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/audio-processing.ts +0 -0
  252. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/vol-meter.ts +0 -0
  253. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/tsconfig.json +0 -0
  254. {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/WHEEL +0 -0
  255. {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,243 @@
1
+ # Copyright 2025 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
+ # http://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
+ # Get project information to access the project number
16
+ data "google_project" "project" {
17
+ project_id = var.dev_project_id
18
+ }
19
+
20
+
21
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
22
+
23
+ # Generate a random password for the database user
24
+ resource "random_password" "db_password" {
25
+ length = 16
26
+ special = true
27
+ override_special = "!#$%&*()-_=+[]{}<>:?"
28
+ }
29
+
30
+ # Cloud SQL Instance
31
+ resource "google_sql_database_instance" "session_db" {
32
+ project = var.dev_project_id
33
+ name = "${var.project_name}-db-dev"
34
+ database_version = "POSTGRES_15"
35
+ region = var.region
36
+ deletion_protection = false
37
+
38
+ settings {
39
+ tier = "db-f1-micro"
40
+
41
+ backup_configuration {
42
+ enabled = false # No backups for dev
43
+ }
44
+
45
+ # Enable IAM authentication
46
+ database_flags {
47
+ name = "cloudsql.iam_authentication"
48
+ value = "on"
49
+ }
50
+ }
51
+
52
+ depends_on = [resource.google_project_service.services]
53
+ }
54
+
55
+ # Cloud SQL Database
56
+ resource "google_sql_database" "database" {
57
+ project = var.dev_project_id
58
+ name = "${var.project_name}" # Use project name for DB to avoid conflict with default 'postgres'
59
+ instance = google_sql_database_instance.session_db.name
60
+ }
61
+
62
+ # Cloud SQL User
63
+ resource "google_sql_user" "db_user" {
64
+ project = var.dev_project_id
65
+ name = "${var.project_name}" # Use project name for user to avoid conflict with default 'postgres'
66
+ instance = google_sql_database_instance.session_db.name
67
+ password = google_secret_manager_secret_version.db_password.secret_data
68
+ }
69
+
70
+ # Store the password in Secret Manager
71
+ resource "google_secret_manager_secret" "db_password" {
72
+ project = var.dev_project_id
73
+ secret_id = "${var.project_name}-db-password"
74
+
75
+ replication {
76
+ auto {}
77
+ }
78
+
79
+ depends_on = [resource.google_project_service.services]
80
+ }
81
+
82
+ resource "google_secret_manager_secret_version" "db_password" {
83
+ secret = google_secret_manager_secret.db_password.id
84
+ secret_data = random_password.db_password.result
85
+ }
86
+
87
+ {%- endif %}
88
+
89
+
90
+ resource "google_cloud_run_v2_service" "app" {
91
+ name = var.project_name
92
+ location = var.region
93
+ project = var.dev_project_id
94
+ deletion_protection = false
95
+ ingress = "INGRESS_TRAFFIC_ALL"
96
+ labels = {
97
+ {%- if cookiecutter.is_adk %}
98
+ "created-by" = "adk"
99
+ {%- endif %}
100
+ {%- if cookiecutter.agent_garden %}
101
+ "deployed-with" = "agent-garden"
102
+ {%- if cookiecutter.agent_sample_id %}
103
+ "vertex-agent-sample-id" = "{{cookiecutter.agent_sample_id}}"
104
+ "vertex-agent-sample-publisher" = "{{cookiecutter.agent_sample_publisher}}"
105
+ {%- endif %}
106
+ {%- endif %}
107
+ }
108
+
109
+ template {
110
+ containers {
111
+ image = "us-docker.pkg.dev/cloudrun/container/hello"
112
+
113
+ {%- if cookiecutter.is_a2a %}
114
+ env {
115
+ name = "APP_URL"
116
+ value = "https://${var.project_name}-${data.google_project.project.number}.${var.region}.run.app"
117
+ }
118
+
119
+ {%- endif %}
120
+ resources {
121
+ limits = {
122
+ cpu = "4"
123
+ memory = "8Gi"
124
+ }
125
+ }
126
+ {%- if cookiecutter.data_ingestion %}
127
+ {%- if cookiecutter.datastore_type == "vertex_ai_search" %}
128
+
129
+ env {
130
+ name = "DATA_STORE_ID"
131
+ value = resource.google_discovery_engine_data_store.data_store_dev.data_store_id
132
+ }
133
+
134
+ env {
135
+ name = "DATA_STORE_REGION"
136
+ value = var.data_store_region
137
+ }
138
+ {%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %}
139
+ env {
140
+ name = "VECTOR_SEARCH_INDEX"
141
+ value = resource.google_vertex_ai_index.vector_search_index.id
142
+ }
143
+
144
+ env {
145
+ name = "VECTOR_SEARCH_INDEX_ENDPOINT"
146
+ value = resource.google_vertex_ai_index_endpoint.vector_search_index_endpoint.id
147
+ }
148
+
149
+ env {
150
+ name = "VECTOR_SEARCH_BUCKET"
151
+ value = "gs://${resource.google_storage_bucket.data_ingestion_PIPELINE_GCS_ROOT.name}"
152
+ }
153
+ {%- endif %}
154
+ {%- endif %}
155
+
156
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
157
+ # Mount the volume
158
+ volume_mounts {
159
+ name = "cloudsql"
160
+ mount_path = "/cloudsql"
161
+ }
162
+
163
+ # Environment variables
164
+ env {
165
+ name = "INSTANCE_CONNECTION_NAME"
166
+ value = google_sql_database_instance.session_db.connection_name
167
+ }
168
+
169
+ env {
170
+ name = "DB_PASS"
171
+ value_source {
172
+ secret_key_ref {
173
+ secret = google_secret_manager_secret.db_password.secret_id
174
+ version = "latest"
175
+ }
176
+ }
177
+ }
178
+
179
+ env {
180
+ name = "DB_NAME"
181
+ value = "${var.project_name}"
182
+ }
183
+
184
+ env {
185
+ name = "DB_USER"
186
+ value = "${var.project_name}"
187
+ }
188
+ {%- endif %}
189
+
190
+ env {
191
+ name = "LOGS_BUCKET_NAME"
192
+ value = google_storage_bucket.logs_data_bucket.name
193
+ }
194
+
195
+ env {
196
+ name = "OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"
197
+ value = "NO_CONTENT"
198
+ }
199
+ }
200
+
201
+ service_account = google_service_account.app_sa.email
202
+ max_instance_request_concurrency = 40
203
+
204
+ scaling {
205
+ min_instance_count = 1
206
+ max_instance_count = 10
207
+ }
208
+
209
+ session_affinity = true
210
+
211
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
212
+ # Cloud SQL volume
213
+ volumes {
214
+ name = "cloudsql"
215
+ cloud_sql_instance {
216
+ instances = [google_sql_database_instance.session_db.connection_name]
217
+ }
218
+ }
219
+ {%- endif %}
220
+ }
221
+
222
+ traffic {
223
+ type = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
224
+ percent = 100
225
+ }
226
+
227
+ # This lifecycle block prevents Terraform from overwriting the container image when it's
228
+ # updated by Cloud Run deployments outside of Terraform (e.g., via CI/CD pipelines)
229
+ lifecycle {
230
+ ignore_changes = [
231
+ template[0].containers[0].image,
232
+ ]
233
+ }
234
+
235
+ # Make dependencies conditional to avoid errors.
236
+ depends_on = [
237
+ resource.google_project_service.services,
238
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
239
+ google_sql_user.db_user,
240
+ google_secret_manager_secret_version.db_password,
241
+ {%- endif %}
242
+ ]
243
+ }
@@ -0,0 +1,417 @@
1
+ # Copyright 2025 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
+ # http://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
+ # Get project information to access the project number
16
+ data "google_project" "project" {
17
+ for_each = local.deploy_project_ids
18
+
19
+ project_id = local.deploy_project_ids[each.key]
20
+ }
21
+
22
+
23
+
24
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
25
+
26
+ # Generate a random password for the database user
27
+ resource "random_password" "db_password" {
28
+ for_each = local.deploy_project_ids
29
+
30
+ length = 16
31
+ special = true
32
+ override_special = "!#$%&*()-_=+[]{}<>:?"
33
+ }
34
+
35
+ # Cloud SQL Instance
36
+ resource "google_sql_database_instance" "session_db" {
37
+ for_each = local.deploy_project_ids
38
+
39
+ project = local.deploy_project_ids[each.key]
40
+ name = "${var.project_name}-db-${each.key}"
41
+ database_version = "POSTGRES_15"
42
+ region = var.region
43
+ deletion_protection = false # For easier teardown in starter packs
44
+
45
+ settings {
46
+ tier = each.key == "prod" ? "db-custom-1-3840" : "db-f1-micro" # Use a custom machine type for prod to avoid tier restrictions
47
+
48
+ backup_configuration {
49
+ enabled = true
50
+ start_time = "03:00"
51
+ }
52
+
53
+ # Enable IAM authentication
54
+ database_flags {
55
+ name = "cloudsql.iam_authentication"
56
+ value = "on"
57
+ }
58
+ }
59
+
60
+ depends_on = [google_project_service.deploy_project_services]
61
+ }
62
+
63
+ # Cloud SQL Database
64
+ resource "google_sql_database" "database" {
65
+ for_each = local.deploy_project_ids
66
+
67
+ project = local.deploy_project_ids[each.key]
68
+ name = "${var.project_name}" # Use project name for DB to avoid conflict with default 'postgres'
69
+ instance = google_sql_database_instance.session_db[each.key].name
70
+ }
71
+
72
+ # Cloud SQL User
73
+ resource "google_sql_user" "db_user" {
74
+ for_each = local.deploy_project_ids
75
+
76
+ project = local.deploy_project_ids[each.key]
77
+ name = "${var.project_name}" # Use project name for user to avoid conflict with default 'postgres'
78
+ instance = google_sql_database_instance.session_db[each.key].name
79
+ password = random_password.db_password[each.key].result
80
+ }
81
+
82
+ # Store the password in Secret Manager
83
+ resource "google_secret_manager_secret" "db_password" {
84
+ for_each = local.deploy_project_ids
85
+
86
+ project = local.deploy_project_ids[each.key]
87
+ secret_id = "${var.project_name}-db-password"
88
+
89
+ replication {
90
+ auto {}
91
+ }
92
+
93
+ depends_on = [google_project_service.deploy_project_services]
94
+ }
95
+
96
+ resource "google_secret_manager_secret_version" "db_password" {
97
+ for_each = local.deploy_project_ids
98
+
99
+ secret = google_secret_manager_secret.db_password[each.key].id
100
+ secret_data = random_password.db_password[each.key].result
101
+ }
102
+
103
+ {%- endif %}
104
+
105
+ resource "google_cloud_run_v2_service" "app_staging" {
106
+ name = var.project_name
107
+ location = var.region
108
+ project = var.staging_project_id
109
+ deletion_protection = false
110
+ ingress = "INGRESS_TRAFFIC_ALL"
111
+ labels = {
112
+ {%- if cookiecutter.is_adk %}
113
+ "created-by" = "adk"
114
+ {%- endif %}
115
+ {%- if cookiecutter.agent_garden %}
116
+ "deployed-with" = "agent-garden"
117
+ {%- if cookiecutter.agent_sample_id %}
118
+ "vertex-agent-sample-id" = "{{cookiecutter.agent_sample_id}}"
119
+ "vertex-agent-sample-publisher" = "{{cookiecutter.agent_sample_publisher}}"
120
+ {%- endif %}
121
+ {%- endif %}
122
+ }
123
+
124
+ template {
125
+ containers {
126
+ # Placeholder, will be replaced by the CI/CD pipeline
127
+ image = "us-docker.pkg.dev/cloudrun/container/hello"
128
+
129
+ {%- if cookiecutter.is_a2a %}
130
+ env {
131
+ name = "APP_URL"
132
+ value = "https://${var.project_name}-${data.google_project.project["staging"].number}.${var.region}.run.app"
133
+ }
134
+
135
+ {%- endif %}
136
+ resources {
137
+ limits = {
138
+ cpu = "4"
139
+ memory = "8Gi"
140
+ }
141
+ cpu_idle = false
142
+ }
143
+ {%- if cookiecutter.data_ingestion %}
144
+ {%- if cookiecutter.datastore_type == "vertex_ai_search" %}
145
+
146
+ env {
147
+ name = "DATA_STORE_ID"
148
+ value = resource.google_discovery_engine_data_store.data_store_staging.data_store_id
149
+ }
150
+
151
+ env {
152
+ name = "DATA_STORE_REGION"
153
+ value = var.data_store_region
154
+ }
155
+ {%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %}
156
+ env {
157
+ name = "VECTOR_SEARCH_INDEX"
158
+ value = resource.google_vertex_ai_index.vector_search_index_staging.id
159
+ }
160
+
161
+ env {
162
+ name = "VECTOR_SEARCH_INDEX_ENDPOINT"
163
+ value = resource.google_vertex_ai_index_endpoint.vector_search_index_endpoint_staging.id
164
+ }
165
+
166
+ env {
167
+ name = "VECTOR_SEARCH_BUCKET"
168
+ value = resource.google_storage_bucket.vector_search_data_bucket["staging"].url
169
+ }
170
+ {%- endif %}
171
+ {%- endif %}
172
+
173
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
174
+ # Mount the volume
175
+ volume_mounts {
176
+ name = "cloudsql"
177
+ mount_path = "/cloudsql"
178
+ }
179
+
180
+ # Environment variables
181
+ env {
182
+ name = "INSTANCE_CONNECTION_NAME"
183
+ value = google_sql_database_instance.session_db["staging"].connection_name
184
+ }
185
+
186
+ env {
187
+ name = "DB_PASS"
188
+ value_source {
189
+ secret_key_ref {
190
+ secret = google_secret_manager_secret.db_password["staging"].secret_id
191
+ version = "latest"
192
+ }
193
+ }
194
+ }
195
+
196
+ env {
197
+ name = "DB_NAME"
198
+ value = "${var.project_name}"
199
+ }
200
+
201
+ env {
202
+ name = "DB_USER"
203
+ value = "${var.project_name}"
204
+ }
205
+ {%- endif %}
206
+
207
+ env {
208
+ name = "LOGS_BUCKET_NAME"
209
+ value = google_storage_bucket.logs_data_bucket[var.staging_project_id].name
210
+ }
211
+
212
+ env {
213
+ name = "OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"
214
+ value = "NO_CONTENT"
215
+ }
216
+ }
217
+
218
+ service_account = google_service_account.app_sa["staging"].email
219
+ max_instance_request_concurrency = 40
220
+
221
+ scaling {
222
+ min_instance_count = 1
223
+ max_instance_count = 10
224
+ }
225
+
226
+ session_affinity = true
227
+
228
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
229
+ # Cloud SQL volume
230
+ volumes {
231
+ name = "cloudsql"
232
+ cloud_sql_instance {
233
+ instances = [google_sql_database_instance.session_db["staging"].connection_name]
234
+ }
235
+ }
236
+ {%- endif %}
237
+ }
238
+
239
+ traffic {
240
+ type = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
241
+ percent = 100
242
+ }
243
+
244
+ # This lifecycle block prevents Terraform from overwriting the container image when it's
245
+ # updated by Cloud Run deployments outside of Terraform (e.g., via CI/CD pipelines)
246
+ lifecycle {
247
+ ignore_changes = [
248
+ template[0].containers[0].image,
249
+ ]
250
+ }
251
+
252
+ # Make dependencies conditional to avoid errors.
253
+ depends_on = [
254
+ google_project_service.deploy_project_services,
255
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
256
+ google_sql_user.db_user,
257
+ google_secret_manager_secret_version.db_password,
258
+ {%- endif %}
259
+ ]
260
+ }
261
+
262
+ resource "google_cloud_run_v2_service" "app_prod" {
263
+ name = var.project_name
264
+ location = var.region
265
+ project = var.prod_project_id
266
+ deletion_protection = false
267
+ ingress = "INGRESS_TRAFFIC_ALL"
268
+ labels = {
269
+ {%- if cookiecutter.is_adk %}
270
+ "created-by" = "adk"
271
+ {%- endif %}
272
+ {%- if cookiecutter.agent_garden %}
273
+ "deployed-with" = "agent-garden"
274
+ {%- if cookiecutter.agent_sample_id %}
275
+ "vertex-agent-sample-id" = "{{cookiecutter.agent_sample_id}}"
276
+ "vertex-agent-sample-publisher" = "{{cookiecutter.agent_sample_publisher}}"
277
+ {%- endif %}
278
+ {%- endif %}
279
+ }
280
+
281
+ template {
282
+ containers {
283
+ # Placeholder, will be replaced by the CI/CD pipeline
284
+ image = "us-docker.pkg.dev/cloudrun/container/hello"
285
+
286
+ {%- if cookiecutter.is_a2a %}
287
+ env {
288
+ name = "APP_URL"
289
+ value = "https://${var.project_name}-${data.google_project.project["prod"].number}.${var.region}.run.app"
290
+ }
291
+
292
+ {%- endif %}
293
+ resources {
294
+ limits = {
295
+ cpu = "4"
296
+ memory = "8Gi"
297
+ }
298
+ cpu_idle = false
299
+ }
300
+ {%- if cookiecutter.data_ingestion %}
301
+ {%- if cookiecutter.datastore_type == "vertex_ai_search" %}
302
+
303
+ env {
304
+ name = "DATA_STORE_ID"
305
+ value = resource.google_discovery_engine_data_store.data_store_prod.data_store_id
306
+ }
307
+
308
+ env {
309
+ name = "DATA_STORE_REGION"
310
+ value = var.data_store_region
311
+ }
312
+ {%- elif cookiecutter.datastore_type == "vertex_ai_vector_search" %}
313
+ env {
314
+ name = "VECTOR_SEARCH_INDEX"
315
+ value = resource.google_vertex_ai_index.vector_search_index_prod.id
316
+ }
317
+
318
+ env {
319
+ name = "VECTOR_SEARCH_INDEX_ENDPOINT"
320
+ value = resource.google_vertex_ai_index_endpoint.vector_search_index_endpoint_prod.id
321
+ }
322
+
323
+ env {
324
+ name = "VECTOR_SEARCH_BUCKET"
325
+ value = resource.google_storage_bucket.vector_search_data_bucket["prod"].url
326
+ }
327
+ {%- endif %}
328
+ {%- endif %}
329
+
330
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
331
+ # Mount the volume
332
+ volume_mounts {
333
+ name = "cloudsql"
334
+ mount_path = "/cloudsql"
335
+ }
336
+
337
+ # Environment variables
338
+ env {
339
+ name = "INSTANCE_CONNECTION_NAME"
340
+ value = google_sql_database_instance.session_db["prod"].connection_name
341
+ }
342
+
343
+ env {
344
+ name = "DB_PASS"
345
+ value_source {
346
+ secret_key_ref {
347
+ secret = google_secret_manager_secret.db_password["prod"].secret_id
348
+ version = "latest"
349
+ }
350
+ }
351
+ }
352
+
353
+ env {
354
+ name = "DB_NAME"
355
+ value = "${var.project_name}"
356
+ }
357
+
358
+ env {
359
+ name = "DB_USER"
360
+ value = "${var.project_name}"
361
+ }
362
+ {%- endif %}
363
+
364
+ env {
365
+ name = "LOGS_BUCKET_NAME"
366
+ value = google_storage_bucket.logs_data_bucket[var.prod_project_id].name
367
+ }
368
+
369
+ env {
370
+ name = "OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"
371
+ value = "NO_CONTENT"
372
+ }
373
+ }
374
+
375
+ service_account = google_service_account.app_sa["prod"].email
376
+ max_instance_request_concurrency = 40
377
+
378
+ scaling {
379
+ min_instance_count = 1
380
+ max_instance_count = 10
381
+ }
382
+
383
+ session_affinity = true
384
+
385
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
386
+ # Cloud SQL volume
387
+ volumes {
388
+ name = "cloudsql"
389
+ cloud_sql_instance {
390
+ instances = [google_sql_database_instance.session_db["prod"].connection_name]
391
+ }
392
+ }
393
+ {%- endif %}
394
+ }
395
+
396
+ traffic {
397
+ type = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
398
+ percent = 100
399
+ }
400
+
401
+ # This lifecycle block prevents Terraform from overwriting the container image when it's
402
+ # updated by Cloud Run deployments outside of Terraform (e.g., via CI/CD pipelines)
403
+ lifecycle {
404
+ ignore_changes = [
405
+ template[0].containers[0].image,
406
+ ]
407
+ }
408
+
409
+ # Make dependencies conditional to avoid errors.
410
+ depends_on = [
411
+ google_project_service.deploy_project_services,
412
+ {%- if cookiecutter.is_adk and cookiecutter.session_type == "cloud_sql" %}
413
+ google_sql_user.db_user,
414
+ google_secret_manager_secret_version.db_password,
415
+ {%- endif %}
416
+ ]
417
+ }