agent-starter-pack 0.11.2__py3-none-any.whl → 0.12.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 (68) hide show
  1. {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/METADATA +1 -1
  2. {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/RECORD +41 -66
  3. agents/adk_base/app/__init__.py +17 -0
  4. agents/adk_base/notebooks/adk_app_testing.ipynb +4 -1
  5. agents/adk_base/tests/integration/test_agent.py +1 -1
  6. agents/agentic_rag/app/__init__.py +17 -0
  7. agents/agentic_rag/app/agent.py +2 -2
  8. agents/agentic_rag/notebooks/adk_app_testing.ipynb +4 -1
  9. agents/agentic_rag/tests/integration/test_agent.py +2 -2
  10. agents/crewai_coding_crew/tests/integration/test_agent.py +1 -1
  11. agents/langgraph_base_react/tests/integration/test_agent.py +1 -1
  12. agents/live_api/tests/unit/test_server.py +6 -6
  13. llm.txt +15 -4
  14. src/base_template/Makefile +5 -5
  15. src/base_template/README.md +4 -4
  16. src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +2 -2
  17. src/base_template/pyproject.toml +2 -2
  18. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +1 -1
  19. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +1 -1
  20. src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +2 -2
  21. src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +1 -1
  22. src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +1 -1
  23. src/cli/commands/create.py +25 -2
  24. src/cli/commands/enhance.py +94 -15
  25. src/cli/commands/list.py +1 -1
  26. src/cli/utils/remote_template.py +1 -1
  27. src/cli/utils/template.py +120 -41
  28. src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +3 -3
  29. src/deployment_targets/agent_engine/{app → {{cookiecutter.agent_directory}}}/agent_engine_app.py +10 -10
  30. src/deployment_targets/cloud_run/Dockerfile +2 -2
  31. src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +3 -3
  32. src/deployment_targets/cloud_run/tests/load_test/README.md +1 -1
  33. src/deployment_targets/cloud_run/tests/load_test/load_test.py +2 -2
  34. {agents/live_api/app → src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}}/server.py +186 -7
  35. src/resources/docs/adk-cheatsheet.md +3 -3
  36. src/base_template/app/__init__.py +0 -3
  37. src/deployment_targets/cloud_run/app/server.py +0 -206
  38. src/frontends/adk_gemini_fullstack/frontend/components.json +0 -21
  39. src/frontends/adk_gemini_fullstack/frontend/eslint.config.js +0 -28
  40. src/frontends/adk_gemini_fullstack/frontend/index.html +0 -12
  41. src/frontends/adk_gemini_fullstack/frontend/package-lock.json +0 -6105
  42. src/frontends/adk_gemini_fullstack/frontend/package.json +0 -47
  43. src/frontends/adk_gemini_fullstack/frontend/src/App.tsx +0 -564
  44. src/frontends/adk_gemini_fullstack/frontend/src/components/ActivityTimeline.tsx +0 -244
  45. src/frontends/adk_gemini_fullstack/frontend/src/components/ChatMessagesView.tsx +0 -420
  46. src/frontends/adk_gemini_fullstack/frontend/src/components/InputForm.tsx +0 -60
  47. src/frontends/adk_gemini_fullstack/frontend/src/components/WelcomeScreen.tsx +0 -56
  48. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/badge.tsx +0 -46
  49. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/button.tsx +0 -59
  50. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/card.tsx +0 -92
  51. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/input.tsx +0 -21
  52. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/scroll-area.tsx +0 -56
  53. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/select.tsx +0 -183
  54. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/tabs.tsx +0 -64
  55. src/frontends/adk_gemini_fullstack/frontend/src/components/ui/textarea.tsx +0 -18
  56. src/frontends/adk_gemini_fullstack/frontend/src/global.css +0 -154
  57. src/frontends/adk_gemini_fullstack/frontend/src/main.tsx +0 -13
  58. src/frontends/adk_gemini_fullstack/frontend/src/utils.ts +0 -7
  59. src/frontends/adk_gemini_fullstack/frontend/src/vite-env.d.ts +0 -1
  60. src/frontends/adk_gemini_fullstack/frontend/tsconfig.json +0 -28
  61. src/frontends/adk_gemini_fullstack/frontend/tsconfig.node.json +0 -24
  62. src/frontends/adk_gemini_fullstack/frontend/vite.config.ts +0 -41
  63. {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/WHEEL +0 -0
  64. {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/entry_points.txt +0 -0
  65. {agent_starter_pack-0.11.2.dist-info → agent_starter_pack-0.12.0.dist-info}/licenses/LICENSE +0 -0
  66. /src/base_template/{app → {{cookiecutter.agent_directory}}}/utils/gcs.py +0 -0
  67. /src/base_template/{app → {{cookiecutter.agent_directory}}}/utils/tracing.py +0 -0
  68. /src/base_template/{app → {{cookiecutter.agent_directory}}}/utils/typing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-starter-pack
3
- Version: 0.11.2
3
+ Version: 0.12.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,18 +1,20 @@
1
1
  agents/README.md,sha256=L8__lIXXjxLTZbkCmTC4taTFUMRVrO3QI2mCKZTdhJM,462
2
2
  agents/adk_base/README.md,sha256=eLf-F9Z4u_mQOchAnUaSrOAHXRSx8wUQN29kkwz1SF4,894
3
3
  agents/adk_base/.template/templateconfig.yaml,sha256=8mQ_IIgC0h4eiTUM7FEIPSxwI73aenspcHsnqUb4AfY,923
4
+ agents/adk_base/app/__init__.py,sha256=wT1TtenBOdA4LTtf6mQjvAT5aRR1N2PCx_A-MrDLGsg,631
4
5
  agents/adk_base/app/agent.py,sha256=6Q6QegQDxEaAck989DPIb3ArHMZtw_YJBqhHFqg-UjQ,2182
5
- agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1ptiQbM_8he3XxJu4yM,9763
6
+ agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=WFyizTOhbIgTPgQ115WTQaH9qNkozTESsNmxLYUb3JY,10003
6
7
  agents/adk_base/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
7
- agents/adk_base/tests/integration/test_agent.py,sha256=VypgpEWrQegJBgc58V-BlIsbqh-Hii-hwmkwcz5feFw,1969
8
+ agents/adk_base/tests/integration/test_agent.py,sha256=_zb3GMWMtMRq2rOyYC-uL1eNhpg2XBkm8Noj0O_UOng,1998
8
9
  agents/agentic_rag/README.md,sha256=cPeY_XGt79ava22PIM0x92oi67R-TnlEKBQGpK1MOkA,2262
9
10
  agents/agentic_rag/.template/templateconfig.yaml,sha256=Gfw3FOjj3XNxoXn6WGwC2PG59f4qB3p2cYTQ49ykvJc,1248
10
- agents/agentic_rag/app/agent.py,sha256=tKtzez7vGu6JgMWmZN7QrKkyLBvHu1ondAuICjKoC-g,3983
11
+ agents/agentic_rag/app/__init__.py,sha256=wT1TtenBOdA4LTtf6mQjvAT5aRR1N2PCx_A-MrDLGsg,631
12
+ agents/agentic_rag/app/agent.py,sha256=joSAfrVcS9eRtOT3MXPSoiwElpwVq-hjpCHkqTj6vuM,4041
11
13
  agents/agentic_rag/app/retrievers.py,sha256=qfxwSEixMddvAu4FvUTZAFh1Gdp3RPY65s0Wp6gEFVk,4561
12
14
  agents/agentic_rag/app/templates.py,sha256=8N_uRchwiN7hlH9Y8rdJ1CAtOhpHUWZkXZZ7IU-YJJk,867
13
- agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1ptiQbM_8he3XxJu4yM,9763
15
+ agents/agentic_rag/notebooks/adk_app_testing.ipynb,sha256=WFyizTOhbIgTPgQ115WTQaH9qNkozTESsNmxLYUb3JY,10003
14
16
  agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
15
- agents/agentic_rag/tests/integration/test_agent.py,sha256=mxsKFyZrwXzIvAoxlqZv2JndM3VTVTKcugRYdF3APr4,2112
17
+ agents/agentic_rag/tests/integration/test_agent.py,sha256=YcwOZXa9uJqcqZN8UPikNm_dlSh9XduEfcuQa0wkby8,2170
16
18
  agents/crewai_coding_crew/README.md,sha256=4No7sfHQVHELARGiT3fWANJzDR0NP48ow4ct3FoPwlA,1672
17
19
  agents/crewai_coding_crew/.template/templateconfig.yaml,sha256=WjsvXcih4zqrhV0pX_3eH7PZIf3H1KHdcUAaD2n5I6U,1051
18
20
  agents/crewai_coding_crew/app/agent.py,sha256=yd-P2Jzx3Do4FQuhwDsok-YRNYFi9Vl8OTqSlbdn4Sw,3260
@@ -21,29 +23,24 @@ agents/crewai_coding_crew/app/crew/config/agents.yaml,sha256=Cn9zTcP3C-8MvlV19cY
21
23
  agents/crewai_coding_crew/app/crew/config/tasks.yaml,sha256=SSFuiSQPhi4dM0V5HdNuMqtN7JJr5RUCMhhBzUkPBpc,1511
22
24
  agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb,sha256=ifTn4RfrJeYQ8ell9n6VE65ZEfcnKGkMLFG8RBlPK70,57974
23
25
  agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb,sha256=PlW41fL-ji9NKkimW6u25YRLGWN2pgoX2G8w5nzIEPE,58737
24
- agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=hg6kqtVPtyCLmQkNr45JPM91VwmScco7-f_mXq_YBJw,1611
26
+ agents/crewai_coding_crew/tests/integration/test_agent.py,sha256=f4QgY100tXR4D70qaM8blad2cgCfxCZ5RJ2Pv3amDcs,1640
25
27
  agents/langgraph_base_react/README.md,sha256=KZQ0e8q9CqnIEiItH9Tc2Ceb2mC3sBcyQUo-ZAmO-zs,482
26
28
  agents/langgraph_base_react/.template/templateconfig.yaml,sha256=58k6Lhkn_3mYOmUMFFQ_mMq6Df4LerCZVju9uM2RDuQ,1049
27
29
  agents/langgraph_base_react/app/agent.py,sha256=yzCc5JaOJgItoBiZOzHPiSy9aD2HGeGI_pH7nrysSmg,2505
28
30
  agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb,sha256=PlW41fL-ji9NKkimW6u25YRLGWN2pgoX2G8w5nzIEPE,58737
29
- agents/langgraph_base_react/tests/integration/test_agent.py,sha256=5aFkYL6XcnlihoDOpGhb49inK20Ljvx1tzhdwTS-1y4,1601
31
+ agents/langgraph_base_react/tests/integration/test_agent.py,sha256=xy0A_3eGhxM8A5rc81revMztJN5GtFA-o5-CG5JzeQw,1630
30
32
  agents/live_api/README.md,sha256=c3lu5WguOUBc5hO_UtNZfVhfYxvSzMXuGFICn9M38mU,2897
31
33
  agents/live_api/.template/templateconfig.yaml,sha256=DD_hihMsuqmd5VWS18vVGZ3ZGVVpFWVXJ2dU07eKb6k,964
32
34
  agents/live_api/app/agent.py,sha256=dYE2qd64OhL-fOgwzrjqN50LYXAgJ1TWbx6ohqtV5Rc,2434
33
- agents/live_api/app/server.py,sha256=ZXriNDl_zo7WDRBke85lyzMsy66qGzPaRXY1FMy4Fdw,7793
34
35
  agents/live_api/tests/integration/test_server_e2e.py,sha256=SBowHiVj-_Okbk1dqyITFVIG6yvr5BGNrfxHVpO4TFs,8635
35
36
  agents/live_api/tests/load_test/load_test.py,sha256=HHZyfC4gqiQtZVF_CbbxENGgWQccMLpwMv0IdoQ6cbQ,1275
36
- agents/live_api/tests/unit/test_server.py,sha256=zvNlbz_qOq28IFegq5X2tcwF1gCRnx7Si3d4az-nKT0,4829
37
- llm.txt,sha256=wvqbxa1A8kVRdQyOX-ZcN2rOp2314Kw1y4TTe9n9usI,13714
37
+ agents/live_api/tests/unit/test_server.py,sha256=_tf9nHkb7aOe3lZRlyp7cVklOTOYTuXDTy7Djn_lhik,5003
38
+ llm.txt,sha256=onvCAhaPcye3YWfCkQeX4Y-LWF1TsAsZ09cO_iO-i3Y,14607
38
39
  src/base_template/.gitignore,sha256=Fq0w34x4sfbwP4RqDqh6hdHNYRUEsFNI-9XONzLWBIs,2580
39
40
  src/base_template/GEMINI.md,sha256=WzscHWlQeYkKORZ-453P8KM9IHuj1kAxW-69c7Ytuwk,133
40
- src/base_template/Makefile,sha256=Evt9HcJGBhyoYdVxj5AdfHsQ_vVnbh-g2IlUxM4PFP4,6149
41
- src/base_template/README.md,sha256=3okWVHq8Mnm9WwaLR88O9pUq3zUO8fmHilK7ulWHrB4,11342
42
- src/base_template/pyproject.toml,sha256=Ow_R0OhPbaACmJ9bgXqu703Q-tCL8FZhfyJ1xVwhveU,2874
43
- src/base_template/app/__init__.py,sha256=UyAgc2l8nkVIUPUzL9hKR7EgzCsc2jSYcOcjHNNmpMU,59
44
- src/base_template/app/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
45
- src/base_template/app/utils/tracing.py,sha256=2rv1Ukh2jTBENDwoghCItJ28l-Sjz9gMlzdojlVgJa4,6052
46
- src/base_template/app/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
41
+ src/base_template/Makefile,sha256=tUPxvZI-XyAs2cXa3L3aTh3DFkwUBYkF5BOGs0DtvIk,6267
42
+ src/base_template/README.md,sha256=KkHKYpnkU7gzfvzyULlTyt7gUxkf1IcK7Y4ydceLVzc,11458
43
+ src/base_template/pyproject.toml,sha256=dTyxaWetB-XCKQEDV3lXxAUxtBEpustNdlAEcT8ZZpo,2932
47
44
  src/base_template/deployment/README.md,sha256=gZJvSWdQh_Mi-bZ3dmuPv7fMezIw04fgN5tq7KgglPw,692
48
45
  src/base_template/deployment/terraform/apis.tf,sha256=KX8Oe2gjT-gh9Bkntz9yIAyRjPc1gZvwOhroJ6NZVp4,1513
49
46
  src/base_template/deployment/terraform/github.tf,sha256=KhfNBAzeUH9jDr8FOw_DiypesA5AEC8IZT1PRqntSt8,10838
@@ -55,7 +52,7 @@ src/base_template/deployment/terraform/service_accounts.tf,sha256=iSRrRzxL16pZHe
55
52
  src/base_template/deployment/terraform/storage.tf,sha256=W0l34U7Ql2wdegfWsWfKzaEooaMaTL2TkU18KM_Vuys,8695
56
53
  src/base_template/deployment/terraform/variables.tf,sha256=JD-lvsVYSgE0pR15ZJhmNAn2SAWo5CNDCofXGNVJy1o,6749
57
54
  src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %},sha256=rCupUnvaTVj75ahJOckNuzlQ-xcLTik_HpqXzVEEB5g,2666
58
- src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %},sha256=wb8Frd95PF0PHDRoh9v3QF5kpF-Fi-GDcD7mKmTxGJ8,6813
55
+ src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %},sha256=e-9vA6hpS-vsq9ttZZj2mUASPAcUFJB7b-PrUW4G96M,6871
59
56
  src/base_template/deployment/terraform/dev/apis.tf,sha256=R5fyLQGHsZy7JyDdFpuNzUBute6Rn9xR32zIMjkGxzc,1592
60
57
  src/base_template/deployment/terraform/dev/iam.tf,sha256=q8dfqbMNSpgMXW96hP7rnApFoNaAUzZgUXs5HIl7ZFI,3329
61
58
  src/base_template/deployment/terraform/dev/log_sinks.tf,sha256=uVdMtDdd8MnxtKhqzVaYqadE11P3r4fs2IdgNecxM4I,2671
@@ -65,24 +62,27 @@ src/base_template/deployment/terraform/dev/variables.tf,sha256=l95zljQbchR6b--wJ
65
62
  src/base_template/deployment/terraform/dev/vars/env.tfvars,sha256=LoQMjh1AAMR-MGfaSCsVMjdoYTk2T4oS4D9vMH54CdQ,714
66
63
  src/base_template/deployment/terraform/vars/env.tfvars,sha256=Jyc36pt-0xNMwQsoXucad0QAWFMeGe67fdimCKXx-tw,1411
67
64
  src/base_template/tests/unit/test_dummy.py,sha256=2exfCH8qhkZrLWvK04ZxNTO9MV3fdTbZkJN3uK6zvok,850
68
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=I9uwH0mpuQQU3wbqaniWMb37UPEUnbY4o1YhRJ5egM8,5739
69
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml,sha256=vy51dSiRFEFlFq9eEWuUsemG0jXj3VL4lCRMcodPiok,1981
70
- src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=fYX-IBKHD-gSoFNLpAJUM0v2okL32AbMTn-eJpstSqU,8494
71
- src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=Zv3oE3YC8P2iYJ2_ie1PPo0HjNLxiMkY3IwJrS0bFcM,3703
65
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml,sha256=79RK2xyUTfkAzRyDiZH-1tePdcoeMwTczeVozppD1ao,5768
66
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml,sha256=urlWV4ncjKm-M1Wwg5nlw9E9LGob40rWO7fEOxyxE4U,2010
67
+ src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml,sha256=jU4DV9wGI8GzbYjER0eTdzZvtiFcc86RuFmy7L4bU0U,8552
68
+ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml,sha256=9bzz2gsnd6jUbOyH3KkP9P9uk3wQeg0YAnrPo5ZA5sk,3732
72
69
  src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml,sha256=VFdF6q_-zETCMlJkJ0znW8T7gCYE59BZNliNPz2Bh18,1517
73
- src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=Spy8ziGCHUtY5hqSIiIDTTywjmSoUw8N1YlwGo0aL04,7367
70
+ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=JeSGuOkgiS1awojOdohu23IX70ZhISIT73A6AT_vKus,7396
71
+ src/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py,sha256=jKblaWOGQEigw3esaawcfX178shhZi2Fyk0fJSA4T68,1501
72
+ src/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py,sha256=2rv1Ukh2jTBENDwoghCItJ28l-Sjz9gMlzdojlVgJa4,6052
73
+ src/base_template/{{cookiecutter.agent_directory}}/utils/typing.py,sha256=DP5OZC3IGvqA1XbvWt8kI3gyAK3ZjzUSL5Ca17wNeLI,4249
74
74
  src/cli/main.py,sha256=Dya7Sw3ozMTaGDcwMh_-W7udkGZHGzgAj8aBdSZaZxI,1832
75
- src/cli/commands/create.py,sha256=mUFukCCpuFV6bgS-JmQEZ6D-zB-_ddxmTMeuygrhogI,43876
76
- src/cli/commands/enhance.py,sha256=KcSLRmhNDxbQa_XoJqcXtC16enyx8FWq20bkpmLSpyQ,11370
77
- src/cli/commands/list.py,sha256=qey_XDoJkjBvvuVMilFqjMUdBRmbHkSyqGeM23E3xHM,5502
75
+ src/cli/commands/create.py,sha256=l2Uo_cVekBNLJA-dnBy5Lue9yUwhUStkOUmIYSvyf-8,44810
76
+ src/cli/commands/enhance.py,sha256=rrELrS1BErjDiTmeyVek8bbiIoxrSUZY2eYOqiAvi2Y,15076
77
+ src/cli/commands/list.py,sha256=_Xi2f1myiqEuZnfv-OkY8nPC58YhKOzYDGqh8GW9nd8,5502
78
78
  src/cli/commands/setup_cicd.py,sha256=nSgMUD4_ncYGwLWU1Fl7Ypw3GTJc8qVfjPxwZMLn4xo,32113
79
79
  src/cli/utils/__init__.py,sha256=_cTmsXGPqOtK0q8UW5164QTltbJRJFR_Efxq_BRL1-o,1311
80
80
  src/cli/utils/cicd.py,sha256=9s_OcusQznT_pSjFP60BfDBoZ5V6bwPE0QWbWdMaVlY,26515
81
81
  src/cli/utils/datastores.py,sha256=gv1V6eDcOEKx4MRNG5C3Y-VfixYq1AzQuaYMLp8QRNo,1058
82
82
  src/cli/utils/gcp.py,sha256=cnuCyN144eiyYc9aJNEK9JnyWN66rdevugoMdDYC1UU,4032
83
83
  src/cli/utils/logging.py,sha256=MYPxQYXXaKCqBVOfrhEMe8lFKzpzZWjOVP2Km81X5Mk,3007
84
- src/cli/utils/remote_template.py,sha256=1o3MloLycoO3Mjm_SA6cXc4dFGtvF9c1CNnnThPu-3w,12165
85
- src/cli/utils/template.py,sha256=_rAaQxxETT7ucJAwbGoZVSF8mN7iDXCr1iNpMS08h8k,42649
84
+ src/cli/utils/remote_template.py,sha256=Uqqhz84p9zlhccUP8ucU1oRs0lCly4see5mfujP42eM,12165
85
+ src/cli/utils/template.py,sha256=2CnxXTvQVM_ZnY8NlBNXuyhmIsflDe1eTUrHPFR7Qqk,46175
86
86
  src/cli/utils/version.py,sha256=F4udQmzniPStqWZFIgnv3Qg3l9non4mfy2An-Oveqmc,2916
87
87
  src/data_ingestion/README.md,sha256=LNxSQoJW9JozK-TbyGQLj5L_MGWNwrfLk6V6RmQ2oBQ,4032
88
88
  src/data_ingestion/pyproject.toml,sha256=-1Mf2QB8K70ICQV5UPZDpf-fN3UwEQLVzQyxfakCSTY,445
@@ -92,45 +92,20 @@ src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py,sha256=tWGqL0zUB3V
92
92
  src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py,sha256=QbPmk6V7JPGo5Yc1BhL-1W_t9CXEN0iY5NKaGWlfSbM,10667
93
93
  src/data_ingestion/data_ingestion_pipeline/components/process_data.py,sha256=8vubxkykRpx-d89H1XYGO3yXz4hxhihhGDgDR3s-XZ4,22045
94
94
  src/deployment_targets/agent_engine/deployment_metadata.json,sha256=G_t_n-UNrFsBgH1Xrw5-ZqYzUGwZ4X6ipsIm_yiSq-w,72
95
- src/deployment_targets/agent_engine/app/agent_engine_app.py,sha256=NKwghQ2vMai3bx0XDjrNve6pNDMAPjZ7zPjksoPapKM,12507
96
95
  src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb,sha256=RE6Gp-bu4bHtNBngfkt_CF5emy5YcOWQ5rMYW_Cv8_w,48809
97
- src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=3mEHdnenqT1RrQpndnQWZSMnn8kSLH85rPDhbxH6_lk,5978
96
+ src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py,sha256=k6AbIMb6_6drv1HXhiVatpPzqspjLSahfRLkZmWqHlI,6065
98
97
  src/deployment_targets/agent_engine/tests/load_test/README.md,sha256=aQP7nDAqd2jKBET4noI39HC9PVHpgpned7cxucWpVJo,1302
99
98
  src/deployment_targets/agent_engine/tests/load_test/load_test.py,sha256=USzS89bQ4qHVoQynDRSRShKzeXf1MJ0MBV4FpV40vrI,4249
100
99
  src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
- src/deployment_targets/cloud_run/Dockerfile,sha256=CuhR3MuaRO2R7XrKPgNc5Oi7pv5JpJqgR8Nid0Tnsag,891
102
- src/deployment_targets/cloud_run/app/server.py,sha256=57S0SyDskDQnj6sMGx4ain-K2YVSCGplr4zp4mSlRPk,6656
100
+ src/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py,sha256=91idmH-p7B7Gk8iMZoUeutndUqBhXt3apxUrTE64VlM,12797
101
+ src/deployment_targets/cloud_run/Dockerfile,sha256=LdVMFTcYtO7b0L3jBXbVMUlHknL41ELp3RmzIGmxOH8,978
103
102
  src/deployment_targets/cloud_run/deployment/terraform/service.tf,sha256=w3iEnyScbO0sjLPQEYfs3GmPpHTUMGeG1ghi09wSY24,10322
104
103
  src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf,sha256=VegAzMcl2ohxMvtq6bcSXfCHYzQW68usyA839oULpgk,6581
105
- src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=6gtRbCxlrsnvHdOFq8c_B_xowo49CJxThUeVjtQdTew,9238
106
- src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=k-PBN6HE9wgSRFb81sSiXA8h5Li6KYyIUSwDj6yntHU,2740
107
- src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=eVhqX8GtiDsIuZxMJAF2ivXML0xHDWDbriYsHZjAQZE,4212
104
+ src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py,sha256=85tA1gtbu_Z2CJqzOHgvDS-lvQFbYUMW8_mfqEc1_8I,9325
105
+ src/deployment_targets/cloud_run/tests/load_test/README.md,sha256=clrCwgwUDr_AsivG0oLeNImTK4uke9EAWkrpS2nhIX0,2769
106
+ src/deployment_targets/cloud_run/tests/load_test/load_test.py,sha256=kK3KaCdBFHKlni3ZVY2u4h_ugNla4o6pbhGRZlQ-haI,4270
108
107
  src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder,sha256=ZbWpSgDo8bT33PstD_73aQSeN_0oo0F104NMUGuZ8lE,14903
109
- src/frontends/adk_gemini_fullstack/frontend/components.json,sha256=OUAALKbVpmIHQ16HcK1BgLBbVf_rV7s08PuGqgCFJ-o,423
110
- src/frontends/adk_gemini_fullstack/frontend/eslint.config.js,sha256=3ADH23ANA4NNBKFy6nCVk65e8bx1DrVd_FIaYNnhuqA,734
111
- src/frontends/adk_gemini_fullstack/frontend/index.html,sha256=cGmA25GOzciMX6ABt1SW_SqnrgPXGGf-1Pbkx2eMByQ,306
112
- src/frontends/adk_gemini_fullstack/frontend/package-lock.json,sha256=DMSGcDHDWvcxRVbgaPqI2O0Z7HJk5PAiZmLfAVifPns,218303
113
- src/frontends/adk_gemini_fullstack/frontend/package.json,sha256=bUzgvwGx8oVL2wHYbSNizO0EI1CjLd0jcWirJI-cxwA,1312
114
- src/frontends/adk_gemini_fullstack/frontend/tsconfig.json,sha256=LtqiCB6w68AjbIegDnbXa1YXKM_RQZZVVkAjfUNxyBo,753
115
- src/frontends/adk_gemini_fullstack/frontend/tsconfig.node.json,sha256=1BewvjsiZMJqSGXTqe94jo5yKdpi7yqI7UGoHgTv9mg,593
116
- src/frontends/adk_gemini_fullstack/frontend/vite.config.ts,sha256=nmeV8oQoQe7SxIVNalYeR8Dw9LOQrcxTWyBUYxLr_Ns,1359
117
- src/frontends/adk_gemini_fullstack/frontend/src/App.tsx,sha256=N50ox6esJyvNifWXxCQUXulXhfQD643qGSXdfiIh6zk,21411
118
- src/frontends/adk_gemini_fullstack/frontend/src/global.css,sha256=uNpkk45y9XVsmQs84D0KHN8B2i55ElSFZxHu6zml5E8,5037
119
- src/frontends/adk_gemini_fullstack/frontend/src/main.tsx,sha256=WYYxbfb0WHrY1BW7KB-pCxb3jslb1UeCDa26l9Ve0SQ,328
120
- src/frontends/adk_gemini_fullstack/frontend/src/utils.ts,sha256=Utm02hSGixxQ_T4hqlZqpdc8BuK1B2Mgk5X0vNK3V_4,170
121
- src/frontends/adk_gemini_fullstack/frontend/src/vite-env.d.ts,sha256=ZZlpNvuwQpFfe3SiAPzd5-QQ8ypmmxq5WXz6pLD63bU,38
122
- src/frontends/adk_gemini_fullstack/frontend/src/components/ActivityTimeline.tsx,sha256=FfDYEJyBc5vZYOBATcLyJRl1IYjb1B-0qv79dN8DqBI,9616
123
- src/frontends/adk_gemini_fullstack/frontend/src/components/ChatMessagesView.tsx,sha256=pRyJ9NJedSVL_58mYyy4ENKfjmcFs9IxdMzVmci5F4I,14517
124
- src/frontends/adk_gemini_fullstack/frontend/src/components/InputForm.tsx,sha256=8YjXJ2251qAunm5nEgVSto70pe3yoxGGqbU3hDSIB30,1875
125
- src/frontends/adk_gemini_fullstack/frontend/src/components/WelcomeScreen.tsx,sha256=cs3ogNX5U4_divL_3AA_75PPh5m7JqkfO8upemcPEQk,2064
126
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/badge.tsx,sha256=RK5qi9QBQLZRULdg46yX_sdQ05NTBq4EkuegeLa6I4A,1627
127
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/button.tsx,sha256=2lrQboqV8BfAa-k6Hauvlsklk1pTmYl1gWwE3UXJHWc,2119
128
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/card.tsx,sha256=_nt0cquRb8cZ2ibMRVNuUBqgdb3pHTPE_MmPytUwLck,1985
129
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/input.tsx,sha256=8hVWeIHS_a5rgrpRChHrLRnXptwUNn73FG7nB-O5t08,963
130
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/scroll-area.tsx,sha256=OweG6sEc5nhRLERWbD99uMmwUzfeT7HZmESAyrDd-XI,1623
131
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/select.tsx,sha256=l1CSyVqn6zCovoC-r4HmmUFMWEMAUTuOEZqBK5dQP0g,6231
132
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/tabs.tsx,sha256=Epvn4JDzNmP9tw9Zik5yzxTvALO4wfP8U2PjyvToglw,1951
133
- src/frontends/adk_gemini_fullstack/frontend/src/components/ui/textarea.tsx,sha256=GS4IJIjRF5CzN78SrQlJzapWlknrV673AghYBFvLx_Y,755
108
+ src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py,sha256=kKmjr8opUz2Z1nFw9-yKCu8T0tCBZQgWm3R9ab_l1fM,13752
134
109
  src/frontends/live_api_react/frontend/package-lock.json,sha256=_vWIfornMhB4lrRIwUmy4CqKGINCKjeUuYcTw2Sc_IY,734344
135
110
  src/frontends/live_api_react/frontend/package.json,sha256=OBOzzDiDiESPzmbLDlZ6KM1Trit71vXdP692dI-g9Uo,1381
136
111
  src/frontends/live_api_react/frontend/tsconfig.json,sha256=cyqEhf7-Yydz-PX8_cuF8JpsyC363NDTNkrmCk0sKAo,595
@@ -179,7 +154,7 @@ src/frontends/streamlit/frontend/utils/stream_handler.py,sha256=-XVRfLH6ck1KP6NS
179
154
  src/frontends/streamlit/frontend/utils/title_summary.py,sha256=B0cadS_KPW-tsbABauI4J681aqjEtuKFDa25e9R1WKc,3030
180
155
  src/resources/containers/data_processing/Dockerfile,sha256=VoB9d5yZiiWnqRfWrIq0gGNMzZg-eVy733OgP72ZgO0,950
181
156
  src/resources/containers/e2e-tests/Dockerfile,sha256=yA3HxeX0HNpl8B4oEQUICCVZDCXdRn2Igmii4jt-r7k,1895
182
- src/resources/docs/adk-cheatsheet.md,sha256=C3xb_dEWWp7iROLRVb0iTBGmJ9uAbreF1j6VgZoS-TA,58739
157
+ src/resources/docs/adk-cheatsheet.md,sha256=nEPBJKX315NzEF0NZonvqztqYZv7iIn7k7R9nPjULp0,58826
183
158
  src/resources/idx/idx-template.json,sha256=07OQZCPp45Iqor2O7Tm1e1Gmsdd-AmmUofSvA7y-oRs,793
184
159
  src/resources/idx/idx-template.nix,sha256=sesHGev_PYtVDg0J5tHkg0OO7IR1Bz2iAtl_if3Ar3M,892
185
160
  src/resources/idx/.idx/dev.nix,sha256=XQ4T1xt5I-8SVwnI37v56RFFlxa58Ko-a9G2-oelYAI,1602
@@ -197,8 +172,8 @@ src/resources/locks/uv-live_api-cloud_run.lock,sha256=xOPEAiyHooNT2nMP1wbnJ2ekOD
197
172
  src/utils/generate_locks.py,sha256=6V1B8V2BEuevWnXUsxZVTrLjXwFRII8UfsIGrQqZxVs,4320
198
173
  src/utils/lock_utils.py,sha256=IFOMUWtb-ypm2Y8w8J5y2oI_-MaPuwPF_JOAAlnNudA,2275
199
174
  src/utils/watch_and_rebuild.py,sha256=vP4yIiA7E_lj5sfQdJUl8TXas6V7msDg8XWUutAC05Q,6679
200
- agent_starter_pack-0.11.2.dist-info/METADATA,sha256=TKkrd80Yfxfp3hFQKQCwakKeLulHCfqEprBiVty9P38,11102
201
- agent_starter_pack-0.11.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
202
- agent_starter_pack-0.11.2.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
203
- agent_starter_pack-0.11.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
204
- agent_starter_pack-0.11.2.dist-info/RECORD,,
175
+ agent_starter_pack-0.12.0.dist-info/METADATA,sha256=_wYWKxzNhGHoEwGHpMYMz25PlhYkdl6Y1ua9mO_-IFE,11102
176
+ agent_starter_pack-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
177
+ agent_starter_pack-0.12.0.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
178
+ agent_starter_pack-0.12.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
179
+ agent_starter_pack-0.12.0.dist-info/RECORD,,
@@ -0,0 +1,17 @@
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
+ from .agent import root_agent
16
+
17
+ __all__ = ["root_agent"]
@@ -9,7 +9,10 @@
9
9
  "This notebook demonstrates how to test an ADK (Agent Development Kit) application.\n",
10
10
  "It covers both local and remote testing, both with Agent Engine and Cloud Run.\n",
11
11
  "\n",
12
- "<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n"
12
+ "> **Note**: This notebook assumes that the agent files are stored in the `app` folder. If your agent files are located in a different directory, please update all relevant file paths and references accordingly.\n",
13
+ "\n",
14
+ "<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n",
15
+ "\n"
13
16
  ]
14
17
  },
15
18
  {
@@ -18,7 +18,7 @@ from google.adk.runners import Runner
18
18
  from google.adk.sessions import InMemorySessionService
19
19
  from google.genai import types
20
20
 
21
- from app.agent import root_agent
21
+ from {{cookiecutter.agent_directory}}.agent import root_agent
22
22
 
23
23
 
24
24
  def test_agent_stream() -> None:
@@ -0,0 +1,17 @@
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
+ from .agent import root_agent
16
+
17
+ __all__ = ["root_agent"]
@@ -20,8 +20,8 @@ import vertexai
20
20
  from google.adk.agents import Agent
21
21
  from langchain_google_vertexai import VertexAIEmbeddings
22
22
 
23
- from app.retrievers import get_compressor, get_retriever
24
- from app.templates import format_docs
23
+ from {{cookiecutter.agent_directory}}.retrievers import get_compressor, get_retriever
24
+ from {{cookiecutter.agent_directory}}.templates import format_docs
25
25
 
26
26
  EMBEDDING_MODEL = "text-embedding-005"
27
27
  LLM_LOCATION = "global"
@@ -9,7 +9,10 @@
9
9
  "This notebook demonstrates how to test an ADK (Agent Development Kit) application.\n",
10
10
  "It covers both local and remote testing, both with Agent Engine and Cloud Run.\n",
11
11
  "\n",
12
- "<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n"
12
+ "> **Note**: This notebook assumes that the agent files are stored in the `app` folder. If your agent files are located in a different directory, please update all relevant file paths and references accordingly.\n",
13
+ "\n",
14
+ "<img src=\"https://github.com/GoogleCloudPlatform/agent-starter-pack/blob/main/docs/images/adk_logo.png?raw=true\" width=\"400\">\n",
15
+ "\n"
13
16
  ]
14
17
  },
15
18
  {
@@ -20,11 +20,11 @@ from google.adk.runners import Runner
20
20
  from google.adk.sessions import InMemorySessionService
21
21
  from google.genai import types
22
22
 
23
- from app.agent import root_agent
23
+ from {{cookiecutter.agent_directory}}.agent import root_agent
24
24
 
25
25
 
26
26
  @patch(
27
- "app.agent.retrieve_docs",
27
+ "{{cookiecutter.agent_directory}}.agent.retrieve_docs",
28
28
  return_value="dummy content",
29
29
  )
30
30
  def test_agent_stream(mock_retrieve: MagicMock) -> None:
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  # mypy: ignore-errors
16
- from app.agent import agent
16
+ from {{cookiecutter.agent_directory}}.agent import agent
17
17
 
18
18
 
19
19
  def test_agent_stream() -> None:
@@ -13,7 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  # mypy: ignore-errors
16
- from app.agent import agent
16
+ from {{cookiecutter.agent_directory}}.agent import agent
17
17
 
18
18
 
19
19
  def test_agent_stream() -> None:
@@ -57,8 +57,8 @@ def mock_dependencies() -> Generator[None, None, None]:
57
57
  Patches genai client and tool functions.
58
58
  """
59
59
  with (
60
- patch("app.server.genai_client") as mock_genai,
61
- patch("app.server.tool_functions") as mock_tools,
60
+ patch("{{cookiecutter.agent_directory}}.server.genai_client") as mock_genai,
61
+ patch("{{cookiecutter.agent_directory}}.server.tool_functions") as mock_tools,
62
62
  ):
63
63
  mock_genai.aio.live.connect = AsyncMock()
64
64
  mock_tools.return_value = {}
@@ -71,7 +71,7 @@ async def test_websocket_endpoint() -> None:
71
71
  Test the websocket endpoint to ensure it correctly handles
72
72
  websocket connections and messages.
73
73
  """
74
- from app.server import app
74
+ from {{cookiecutter.agent_directory}}.server import app
75
75
 
76
76
  mock_session = AsyncMock()
77
77
  mock_session._ws = AsyncMock()
@@ -90,7 +90,7 @@ async def test_websocket_endpoint() -> None:
90
90
  None, # Add None to trigger StopAsyncIteration after first message
91
91
  ]
92
92
 
93
- with patch("app.server.genai_client") as mock_genai:
93
+ with patch("{{cookiecutter.agent_directory}}.server.genai_client") as mock_genai:
94
94
  mock_genai.aio.live.connect.return_value.__aenter__.return_value = mock_session
95
95
  client = TestClient(app)
96
96
  with client.websocket_connect("/ws") as websocket:
@@ -132,9 +132,9 @@ async def test_websocket_endpoint() -> None:
132
132
  @pytest.mark.asyncio
133
133
  def test_websocket_error_handling() -> None:
134
134
  """Test websocket error handling."""
135
- from app.server import app
135
+ from {{cookiecutter.agent_directory}}.server import app
136
136
 
137
- with patch("app.server.genai_client") as mock_genai:
137
+ with patch("{{cookiecutter.agent_directory}}.server.genai_client") as mock_genai:
138
138
  mock_genai.aio.live.connect.side_effect = Exception("Connection failed")
139
139
 
140
140
  client = TestClient(app)
llm.txt CHANGED
@@ -74,6 +74,10 @@ agent-starter-pack create PROJECT_NAME [OPTIONS]
74
74
  * `--region`: GCP region (e.g., `us-central1`).
75
75
  * `--auto-approve`: **Skips all interactive prompts (crucial for automation).**
76
76
  * `--debug`: Enables debug logging during creation.
77
+ * `--agent-directory, -dir`: Name of the agent directory (overrides template default).
78
+ * `-o, --output-dir`: Output directory for the project (default: current directory).
79
+ * `--in-folder, -if`: Template files directly into the current directory instead of creating a new project directory.
80
+ * `--skip-checks`: Skip verification checks for GCP and Vertex AI.
77
81
 
78
82
  **Automated Creation Example:**
79
83
  ```bash
@@ -196,7 +200,7 @@ For stateful agents, the starter pack supports persistent sessions.
196
200
 
197
201
  ### Monitoring & Observability
198
202
  * **Technology:** Uses OpenTelemetry to emit events to Google Cloud Trace and Logging.
199
- * **Custom Tracer:** A custom tracer in `app/utils/tracing.py` handles large payloads by linking to GCS, overcoming default service limits.
203
+ * **Custom Tracer:** A custom tracer in `app/utils/tracing.py` (or a different agent directory instead of app) handles large payloads by linking to GCS, overcoming default service limits.
200
204
  * **Infrastructure:** A Log Router to sink data to BigQuery is provisioned by Terraform.
201
205
 
202
206
  ---
@@ -217,8 +221,16 @@ uvx agent-starter-pack setup-cicd [OPTIONS]
217
221
  * `--prod-project`: (REQUIRED) The Google Cloud Project ID for your production environment.
218
222
  * `--repository-name`: (REQUIRED) The name for the new GitHub repository that will be created.
219
223
  * `--repository-owner`: (REQUIRED) Your GitHub username or organization where the repo will be created.
220
- * `--git-provider`: (REQUIRED) The Git provider to use (github, gitlab, etc.). Only "github" is supported.
221
224
  * `--auto-approve`: Skips all interactive confirmation prompts.
225
+ * `--dev-project`: Development project ID (optional).
226
+ * `--cicd-project`: CICD project ID (defaults to prod project if not specified).
227
+ * `--region`: GCP region (auto-detects from Terraform vars if not specified).
228
+ * `--host-connection-name`: Host connection name (optional).
229
+ * `--github-pat`: GitHub Personal Access Token for programmatic auth.
230
+ * `--github-app-installation-id`: GitHub App Installation ID for programmatic auth.
231
+ * `--local-state`: Use local Terraform state instead of remote GCS backend.
232
+ * `--debug`: Enable debug logging.
233
+ * `--create-repository`: Flag indicating whether to create a new repository.
222
234
 
223
235
 
224
236
  **Automated Example:**
@@ -228,10 +240,9 @@ uvx agent-starter-pack setup-cicd \
228
240
  --prod-project the-user-prod-project \
229
241
  --repository-name the-user-repo-name \
230
242
  --repository-owner the-username \
231
- --git-provider github \
232
243
  --auto-approve
233
244
  ```
234
- * Note: As a coding agent, you must run this command non-interactively. Before executing, you must ask the user to provide the following required flags: `--staging-project`, `--prod-project`, `--repository-name`, `--repository-owner`, and `--git-provider`. Once you have these values, you can construct and run the command with the `--auto-approve` flag.
245
+ * Note: As a coding agent, you must run this command non-interactively. Before executing, you must ask the user to provide the following required flags: `--staging-project`, `--prod-project`, `--repository-name`, and `--repository-owner`. Once you have these values, you can construct and run the command with the `--auto-approve` flag.
235
246
  * Note: If the user tells that `setup-cicd` is not a viable option or it wants to use a different git provider, you must not use this command. Instead, you should look at the `deployment/README.md` to get instructions on how to manually deploy the agent.
236
247
  ---
237
248
  ### Section 6: Operational Guidelines for Coding Agents
@@ -34,14 +34,14 @@ playground:
34
34
  @echo "| 💡 Try asking: {{cookiecutter.example_question}}|"
35
35
  {%- if "adk" in cookiecutter.tags %}
36
36
  @echo "| |"
37
- @echo "| 🔍 IMPORTANT: Select the 'app' folder to interact with your agent. |"
37
+ @echo "| 🔍 IMPORTANT: Select the '{{cookiecutter.agent_directory}}' folder to interact with your agent. |"
38
38
  {%- endif %}
39
39
  @echo "==============================================================================="
40
40
  {%- if "adk" in cookiecutter.tags %}
41
- uv run adk web --port 8501
41
+ uv run adk web . --port 8501
42
42
  {%- else %}
43
43
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
44
- uv run uvicorn app.server:app --host 0.0.0.0 --port 8000 --reload &
44
+ uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload &
45
45
  {%- endif %}
46
46
  {%- if cookiecutter.agent_name == 'live_api' %}
47
47
  (cd frontend && PORT=8501 npm start)
@@ -73,13 +73,13 @@ backend:
73
73
  {%- elif cookiecutter.deployment_target == 'agent_engine' %}
74
74
  # Export dependencies to requirements file using uv export.
75
75
  uv export --no-hashes --no-header --no-dev --no-emit-project --no-annotate > .requirements.txt 2>/dev/null || \
76
- uv export --no-hashes --no-header --no-dev --no-emit-project > .requirements.txt && uv run app/agent_engine_app.py
76
+ uv export --no-hashes --no-header --no-dev --no-emit-project > .requirements.txt && uv run {{cookiecutter.agent_directory}}/agent_engine_app.py
77
77
  {%- endif %}
78
78
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
79
79
 
80
80
  # Launch local development server with hot-reload
81
81
  local-backend:
82
- uv run uvicorn app.server:app --host 0.0.0.0 --port 8000 --reload
82
+ uv run uvicorn {{cookiecutter.agent_directory}}.server:app --host 0.0.0.0 --port 8000 --reload
83
83
  {%- endif %}
84
84
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
85
85
  {%- if cookiecutter.agent_name == 'live_api' %}
@@ -9,7 +9,7 @@ This project is organized as follows:
9
9
 
10
10
  ```
11
11
  {{cookiecutter.project_name}}/
12
- ├── app/ # Core application code
12
+ ├── {{cookiecutter.agent_directory}}/ # Core application code
13
13
  │ ├── agent.py # Main agent logic
14
14
  {%- if cookiecutter.deployment_target == 'cloud_run' %}
15
15
  │ ├── server.py # FastAPI Backend server
@@ -83,7 +83,7 @@ For full command options and usage, refer to the [Makefile](Makefile).
83
83
  {% if cookiecutter.agent_name == 'live_api' %}
84
84
  ## Usage
85
85
 
86
- This template follows a "bring your own agent" approach - you focus on your business logic in `app/agent.py`, and the template handles the surrounding components (UI, infrastructure, deployment, monitoring).
86
+ This template follows a "bring your own agent" approach - you focus on your business logic in `{{cookiecutter.agent_directory}}/agent.py`, and the template handles the surrounding components (UI, infrastructure, deployment, monitoring).
87
87
 
88
88
  Here’s the recommended workflow for local development:
89
89
 
@@ -124,7 +124,7 @@ Here’s the recommended workflow for local development:
124
124
  * Open the Streamlit UI in your browser (usually `http://localhost:8501` or `http://localhost:3001`).
125
125
  * Click the play button in the UI to connect to the backend.
126
126
  * Interact with the agent! Try prompts like: *"Using the tool you have, define Governance in the context MLOPs"*
127
- * Modify the agent logic in `app/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.
127
+ * 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
128
 
129
129
  <details>
130
130
  <summary><b>Cloud Shell Usage</b></summary>
@@ -162,7 +162,7 @@ To run the agent using Google Cloud Shell:
162
162
  This template follows a "bring your own agent" approach - you focus on your business logic, and the template handles everything else (UI, infrastructure, deployment, monitoring).
163
163
 
164
164
  1. **Prototype:** Build your Generative AI Agent using the intro notebooks in `notebooks/` for guidance. Use Vertex AI Evaluation to assess performance.
165
- 2. **Integrate:** Import your agent into the app by editing `app/agent.py`.
165
+ 2. **Integrate:** Import your agent into the app by editing `{{cookiecutter.agent_directory}}/agent.py`.
166
166
  3. **Test:** Explore your agent functionality using the Streamlit playground with `make playground`. The playground offers features like chat history, user feedback, and various input types, and automatically reloads your agent on code changes.
167
167
  4. **Deploy:** Set up and initiate the CI/CD pipelines, customizing tests as necessary. Refer to the [deployment section](#deployment) for comprehensive instructions. For streamlined infrastructure deployment, simply run `uvx agent-starter-pack setup-cicd`. Check out the [`agent-starter-pack setup-cicd` CLI command](https://googlecloudplatform.github.io/agent-starter-pack/cli/setup_cicd.html). Currently supports GitHub with both Google Cloud Build and GitHub Actions as CI/CD runners.
168
168
  5. **Monitor:** Track performance and gather insights using Cloud Logging, Tracing, and the Looker Studio dashboard to iterate on your application.
@@ -29,7 +29,7 @@ resource "google_cloudbuild_trigger" "pr_checks" {
29
29
 
30
30
  filename = ".cloudbuild/pr_checks.yaml"
31
31
  included_files = [
32
- "app/**",
32
+ "{{cookiecutter.agent_directory}}/**",
33
33
  "data_ingestion/**",
34
34
  "tests/**",
35
35
  "deployment/**",
@@ -64,7 +64,7 @@ resource "google_cloudbuild_trigger" "cd_pipeline" {
64
64
 
65
65
  filename = ".cloudbuild/staging.yaml"
66
66
  included_files = [
67
- "app/**",
67
+ "{{cookiecutter.agent_directory}}/**",
68
68
  "data_ingestion/**",
69
69
  "tests/**",
70
70
  "deployment/**",
@@ -75,7 +75,7 @@ select = [
75
75
  ignore = ["E501", "C901"] # ignore line too long, too complex
76
76
 
77
77
  [tool.ruff.lint.isort]
78
- known-first-party = ["app", "frontend"]
78
+ known-first-party = ["{{cookiecutter.agent_directory}}", "frontend"]
79
79
 
80
80
  [tool.mypy]
81
81
  disallow_untyped_calls = true
@@ -113,4 +113,4 @@ pythonpath = "."
113
113
  asyncio_default_fixture_loop_scope = "function"
114
114
 
115
115
  [tool.hatch.build.targets.wheel]
116
- packages = ["app","frontend"]
116
+ packages = ["{{cookiecutter.agent_directory}}","frontend"]
@@ -108,7 +108,7 @@ jobs:
108
108
  - name: Deploy to Production (Agent Engine)
109
109
  run: |
110
110
  uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
111
- uv run app/agent_engine_app.py \
111
+ uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
112
112
  --project {% raw %}${{ vars.PROD_PROJECT_ID }}{% endraw %} \
113
113
  --location {% raw %}${{ vars.REGION }}{% endraw %} \
114
114
  --service-account {% raw %}${{ vars.APP_SA_EMAIL_PROD }}{% endraw %} \
@@ -19,7 +19,7 @@ on:
19
19
  branches:
20
20
  - main
21
21
  paths:
22
- - 'app/**'
22
+ - '{{cookiecutter.agent_directory}}/**'
23
23
  - 'data_ingestion/**'
24
24
  - 'tests/**'
25
25
  - 'deployment/**'
@@ -19,7 +19,7 @@ on:
19
19
  branches:
20
20
  - main
21
21
  paths:
22
- - 'app/**'
22
+ - '{{cookiecutter.agent_directory}}/**'
23
23
  - 'data_ingestion/**'
24
24
  - 'tests/**'
25
25
  - 'deployment/**'
@@ -119,7 +119,7 @@ jobs:
119
119
  - name: Deploy to Staging (Agent Engine)
120
120
  run: |
121
121
  uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
122
- uv run app/agent_engine_app.py \
122
+ uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
123
123
  --project {% raw %}${{ vars.STAGING_PROJECT_ID }}{% endraw %} \
124
124
  --location {% raw %}${{ vars.REGION }}{% endraw %} \
125
125
  --service-account {% raw %}${{ vars.APP_SA_EMAIL_STAGING }}{% endraw %} \
@@ -74,7 +74,7 @@ steps:
74
74
  - "-c"
75
75
  - |
76
76
  uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
77
- uv run app/agent_engine_app.py \
77
+ uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
78
78
  --project ${_PROD_PROJECT_ID} \
79
79
  --location ${_REGION} \
80
80
  --service-account ${_APP_SA_EMAIL_PROD} \
@@ -108,7 +108,7 @@ steps:
108
108
  - "-c"
109
109
  - |
110
110
  uv export --no-hashes --no-sources --no-header --no-dev --no-emit-project --no-annotate --locked > .requirements.txt
111
- uv run app/agent_engine_app.py \
111
+ uv run {{cookiecutter.agent_directory}}/agent_engine_app.py \
112
112
  --project ${_STAGING_PROJECT_ID} \
113
113
  --location ${_REGION} \
114
114
  --service-account ${_APP_SA_EMAIL_STAGING} \