agent-starter-pack 0.15.0__tar.gz → 0.15.1__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.

Potentially problematic release.


This version of agent-starter-pack might be problematic. Click here for more details.

Files changed (261) hide show
  1. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/PKG-INFO +1 -1
  2. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/README.md +1 -1
  3. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/pyproject.toml +1 -1
  4. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/commands/enhance.py +170 -78
  5. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/template.py +35 -2
  6. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/test_pipeline_parity.py +1 -1
  7. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/uv.lock +1 -1
  8. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.claude/settings.local.json +0 -0
  9. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/cd/test_e2e.yaml +0 -0
  10. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/build_use_wheel.yaml +0 -0
  11. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/lint.yaml +0 -0
  12. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/lint_templated_agents.yaml +0 -0
  13. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/test.yaml +0 -0
  14. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/test_makefile.yaml +0 -0
  15. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/test_pipeline_parity.yaml +0 -0
  16. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/test_remote_template.yaml +0 -0
  17. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/ci/test_templated_agents.yaml +0 -0
  18. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/terraform/apis.tf +0 -0
  19. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/terraform/build_triggers.tf +0 -0
  20. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/terraform/service_account.tf +0 -0
  21. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/terraform/storage.tf +0 -0
  22. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.cloudbuild/terraform/variables.tf +0 -0
  23. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.github/workflows/docs.yml +0 -0
  24. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/.gitignore +0 -0
  25. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/CLAUDE.md +0 -0
  26. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/CODE_OF_CONDUCT.md +0 -0
  27. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/CONTRIBUTING.md +0 -0
  28. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/GEMINI.md +0 -0
  29. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/LICENSE +0 -0
  30. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/Makefile +0 -0
  31. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/README.md +0 -0
  32. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/README.md +0 -0
  33. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/.template/templateconfig.yaml +0 -0
  34. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/app/__init__.py +0 -0
  35. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/app/agent.py +0 -0
  36. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/notebooks/adk_app_testing.ipynb +0 -0
  37. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +0 -0
  38. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/adk_base/tests/integration/test_agent.py +0 -0
  39. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/.template/templateconfig.yaml +0 -0
  40. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/README.md +0 -0
  41. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/app/__init__.py +0 -0
  42. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/app/agent.py +0 -0
  43. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/app/retrievers.py +0 -0
  44. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/app/templates.py +0 -0
  45. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/notebooks/adk_app_testing.ipynb +0 -0
  46. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +0 -0
  47. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/agentic_rag/tests/integration/test_agent.py +0 -0
  48. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/.template/templateconfig.yaml +0 -0
  49. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/README.md +0 -0
  50. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/app/agent.py +0 -0
  51. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -0
  52. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -0
  53. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/app/crew/crew.py +0 -0
  54. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb +0 -0
  55. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  56. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/crewai_coding_crew/tests/integration/test_agent.py +0 -0
  57. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/langgraph_base_react/.template/templateconfig.yaml +0 -0
  58. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/langgraph_base_react/README.md +0 -0
  59. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/langgraph_base_react/app/agent.py +0 -0
  60. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb +0 -0
  61. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/langgraph_base_react/tests/integration/test_agent.py +0 -0
  62. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/live_api/.template/templateconfig.yaml +0 -0
  63. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/live_api/README.md +0 -0
  64. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/live_api/app/agent.py +0 -0
  65. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/live_api/tests/integration/test_server_e2e.py +0 -0
  66. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/live_api/tests/load_test/load_test.py +0 -0
  67. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/agents/live_api/tests/unit/test_server.py +0 -0
  68. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/.vitepress/config.js +0 -0
  69. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/agents/overview.md +0 -0
  70. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/cli/create.md +0 -0
  71. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/cli/enhance.md +0 -0
  72. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/cli/index.md +0 -0
  73. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/cli/list.md +0 -0
  74. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/cli/setup_cicd.md +0 -0
  75. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/community-showcase.md +0 -0
  76. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/data-ingestion.md +0 -0
  77. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/deploy-ui.md +0 -0
  78. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/deployment.md +0 -0
  79. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/development-guide.md +0 -0
  80. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/getting-started.md +0 -0
  81. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/installation.md +0 -0
  82. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/observability.md +0 -0
  83. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/template-config-reference.md +0 -0
  84. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/troubleshooting.md +0 -0
  85. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/video-tutorials.md +0 -0
  86. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/guide/why_starter_pack.md +0 -0
  87. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/adk_gemini_fullstack.gif +0 -0
  88. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/adk_gemini_fullstack_architecture.png +0 -0
  89. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/adk_logo.png +0 -0
  90. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/agent_starter_pack_screenshot.png +0 -0
  91. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/ags_high_level_architecture.png +0 -0
  92. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/icon.png +0 -0
  93. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/logo.png +0 -0
  94. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/prototype_to_prod.png +0 -0
  95. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/why_sp_edited.png +0 -0
  96. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/images/why_starter_pack.png +0 -0
  97. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/index.md +0 -0
  98. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/package-lock.json +0 -0
  99. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/package.json +0 -0
  100. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/remote-templates/creating-remote-templates.md +0 -0
  101. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/remote-templates/index.md +0 -0
  102. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/docs/remote-templates/using-remote-templates.md +0 -0
  103. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/llm.txt +0 -0
  104. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/.gitignore +0 -0
  105. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/GEMINI.md +0 -0
  106. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/Makefile +0 -0
  107. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/README.md +0 -0
  108. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/README.md +0 -0
  109. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/apis.tf +0 -0
  110. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/apis.tf +0 -0
  111. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/iam.tf +0 -0
  112. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/log_sinks.tf +0 -0
  113. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/providers.tf +0 -0
  114. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/storage.tf +0 -0
  115. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/variables.tf +0 -0
  116. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  117. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/github.tf +0 -0
  118. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/iam.tf +0 -0
  119. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/locals.tf +0 -0
  120. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/log_sinks.tf +0 -0
  121. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/providers.tf +0 -0
  122. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/service_accounts.tf +0 -0
  123. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/storage.tf +0 -0
  124. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/variables.tf +0 -0
  125. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/vars/env.tfvars +0 -0
  126. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +0 -0
  127. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +0 -0
  128. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/pyproject.toml +0 -0
  129. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/tests/unit/test_dummy.py +0 -0
  130. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +0 -0
  131. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +0 -0
  132. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +0 -0
  133. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +0 -0
  134. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +0 -0
  135. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +0 -0
  136. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{{cookiecutter.agent_directory}}/utils/gcs.py +0 -0
  137. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{{cookiecutter.agent_directory}}/utils/tracing.py +0 -0
  138. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/base_template/{{cookiecutter.agent_directory}}/utils/typing.py +0 -0
  139. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/commands/create.py +0 -0
  140. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/commands/list.py +0 -0
  141. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/commands/setup_cicd.py +0 -0
  142. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/main.py +0 -0
  143. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/__init__.py +0 -0
  144. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/cicd.py +0 -0
  145. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/datastores.py +0 -0
  146. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/gcp.py +0 -0
  147. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/logging.py +0 -0
  148. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/remote_template.py +0 -0
  149. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/cli/utils/version.py +0 -0
  150. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/README.md +0 -0
  151. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  152. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/data_ingestion_pipeline/components/process_data.py +0 -0
  153. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  154. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +0 -0
  155. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/pyproject.toml +0 -0
  156. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/data_ingestion/uv.lock +0 -0
  157. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  158. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -0
  159. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -0
  160. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  161. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/tests/load_test/README.md +0 -0
  162. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -0
  163. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +0 -0
  164. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/Dockerfile +0 -0
  165. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +0 -0
  166. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/deployment/terraform/service.tf +0 -0
  167. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -0
  168. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  169. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/tests/load_test/README.md +0 -0
  170. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -0
  171. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/server.py +0 -0
  172. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/package-lock.json +0 -0
  173. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/package.json +0 -0
  174. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/public/favicon.ico +0 -0
  175. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/public/index.html +0 -0
  176. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/public/robots.txt +0 -0
  177. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/App.scss +0 -0
  178. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/App.test.tsx +0 -0
  179. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/App.tsx +0 -0
  180. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  181. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  182. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/logger/Logger.tsx +0 -0
  183. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/logger/logger.scss +0 -0
  184. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/logger/mock-logs.ts +0 -0
  185. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -0
  186. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +0 -0
  187. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  188. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/hooks/use-live-api.ts +0 -0
  189. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  190. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/hooks/use-screen-capture.ts +0 -0
  191. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/hooks/use-webcam.ts +0 -0
  192. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/index.css +0 -0
  193. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/index.tsx +0 -0
  194. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/multimodal-live-types.ts +0 -0
  195. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/react-app-env.d.ts +0 -0
  196. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/reportWebVitals.ts +0 -0
  197. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/setupTests.ts +0 -0
  198. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/audio-recorder.ts +0 -0
  199. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/audio-streamer.ts +0 -0
  200. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/audioworklet-registry.ts +0 -0
  201. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/multimodal-live-client.ts +0 -0
  202. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/store-logger.ts +0 -0
  203. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/utils.ts +0 -0
  204. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/worklets/audio-processing.ts +0 -0
  205. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/src/utils/worklets/vol-meter.ts +0 -0
  206. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/live_api_react/frontend/tsconfig.json +0 -0
  207. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/side_bar.py +0 -0
  208. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/streamlit_app.py +0 -0
  209. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/style/app_markdown.py +0 -0
  210. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/utils/chat_utils.py +0 -0
  211. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -0
  212. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/utils/message_editing.py +0 -0
  213. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -0
  214. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/utils/stream_handler.py +0 -0
  215. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/frontends/streamlit/frontend/utils/title_summary.py +0 -0
  216. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/containers/data_processing/Dockerfile +0 -0
  217. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/containers/e2e-tests/Dockerfile +0 -0
  218. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/docs/adk-cheatsheet.md +0 -0
  219. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/idx/.idx/dev.nix +0 -0
  220. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/idx/idx-template.json +0 -0
  221. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/idx/idx-template.nix +0 -0
  222. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-adk_base-agent_engine.lock +0 -0
  223. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-adk_base-cloud_run.lock +0 -0
  224. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -0
  225. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -0
  226. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -0
  227. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -0
  228. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -0
  229. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -0
  230. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/resources/locks/uv-live_api-cloud_run.lock +0 -0
  231. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/utils/generate_locks.py +0 -0
  232. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/utils/lock_utils.py +0 -0
  233. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/src/utils/watch_and_rebuild.py +0 -0
  234. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/__init__.py +0 -0
  235. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cicd/example.env +0 -0
  236. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cicd/scripts/delete_agent_engines.py +0 -0
  237. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cicd/scripts/delete_alloydb_clusters.py +0 -0
  238. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cicd/scripts/delete_vector_search.py +0 -0
  239. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cicd/test_e2e_deployment.py +0 -0
  240. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/commands/test_create.py +0 -0
  241. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/commands/test_create_local.py +0 -0
  242. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/commands/test_enhance.py +0 -0
  243. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/commands/test_list.py +0 -0
  244. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/commands/test_setup_cicd.py +0 -0
  245. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/utils/test_cicd.py +0 -0
  246. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/cli/utils/test_remote_template.py +0 -0
  247. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/test_agent_directory_functionality.py +0 -0
  248. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/test_makefile_usability.py +0 -0
  249. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/test_remote_templating.py +0 -0
  250. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/test_template_linting.py +0 -0
  251. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/test_templated_patterns.py +0 -0
  252. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/integration/utils.py +0 -0
  253. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_side_bar.py +0 -0
  254. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_streamlit_app.py +0 -0
  255. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_utils/test_chat_utils.py +0 -0
  256. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_utils/test_local_chat_history.py +0 -0
  257. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_utils/test_message_editing.py +0 -0
  258. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_utils/test_multimodal_utils.py +0 -0
  259. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/test_frontend/test_utils/test_stream_handler.py +0 -0
  260. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/utils/__init__.py +0 -0
  261. {agent_starter_pack-0.15.0 → agent_starter_pack-0.15.1}/tests/utils/get_agents.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-starter-pack
3
- Version: 0.15.0
3
+ Version: 0.15.1
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
@@ -4,7 +4,7 @@
4
4
 
5
5
  A basic agent built using the **[Google Agent Development Kit (ADK)](https://google.github.io/adk-docs/)**. This example demonstrates core ADK concepts like agent creation and tool integration in a minimal setup.
6
6
 
7
- This agent uses the `gemini-2.0-flash` model and is equipped with two simple tools:
7
+ This agent uses the `gemini-2.5-flash` model and is equipped with two simple tools:
8
8
  * `get_weather`: Simulates fetching weather (hardcoded for SF).
9
9
  * `get_current_time`: Simulates fetching the time (hardcoded for SF).
10
10
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agent-starter-pack"
3
- version = "0.15.0"
3
+ version = "0.15.1"
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" },
@@ -13,6 +13,7 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import pathlib
16
+ import re
16
17
  import sys
17
18
  from typing import Any
18
19
 
@@ -26,7 +27,7 @@ else:
26
27
  import tomli as tomllib
27
28
 
28
29
  from ..utils.logging import display_welcome_banner, handle_cli_error
29
- from ..utils.template import get_available_agents
30
+ from ..utils.template import get_available_agents, validate_agent_directory_name
30
31
  from .create import (
31
32
  create,
32
33
  get_available_base_templates,
@@ -96,82 +97,110 @@ def display_agent_directory_selection(
96
97
  current_dir: pathlib.Path, detected_directory: str
97
98
  ) -> str:
98
99
  """Display available directories and prompt for agent directory selection."""
99
- console.print()
100
- console.print("📁 [bold]Agent Directory Selection[/bold]")
101
- console.print()
102
- console.print("Choose where your agent code is located:")
103
-
104
- # Get all directories in the current path (excluding hidden and common non-agent dirs)
105
- available_dirs = [
106
- item.name
107
- for item in current_dir.iterdir()
108
- if (
109
- item.is_dir()
110
- and not item.name.startswith(".")
111
- and item.name not in _EXCLUDED_DIRS
112
- )
113
- ]
100
+ while True:
101
+ console.print()
102
+ console.print("📁 [bold]Agent Directory Selection[/bold]")
103
+ console.print()
104
+ console.print("Your project needs an agent directory containing:")
105
+ console.print(" • [cyan]agent.py[/cyan] file with your agent logic")
106
+ console.print(" • [cyan]root_agent[/cyan] variable defined in agent.py")
107
+ console.print()
108
+ console.print("Choose where your agent code is located:")
109
+
110
+ # Get all directories in the current path (excluding hidden and common non-agent dirs)
111
+ available_dirs = [
112
+ item.name
113
+ for item in current_dir.iterdir()
114
+ if (
115
+ item.is_dir()
116
+ and not item.name.startswith(".")
117
+ and item.name not in _EXCLUDED_DIRS
118
+ )
119
+ ]
114
120
 
115
- # Sort directories and create choices
116
- available_dirs.sort()
121
+ # Sort directories and create choices
122
+ available_dirs.sort()
117
123
 
118
- directory_choices = {}
119
- choice_num = 1
120
- default_choice = None
124
+ directory_choices = {}
125
+ choice_num = 1
126
+ default_choice = None
121
127
 
122
- # Only include the detected directory if it actually exists
123
- if detected_directory in available_dirs:
124
- directory_choices[choice_num] = detected_directory
125
- current_indicator = (
126
- " (detected)" if detected_directory != "app" else " (default)"
127
- )
128
- console.print(
129
- f" {choice_num}. [bold]{detected_directory}[/]{current_indicator}"
130
- )
131
- default_choice = choice_num
132
- choice_num += 1
133
- # Remove from available_dirs to avoid duplication
134
- available_dirs.remove(detected_directory)
135
-
136
- # Add other available directories
137
- for dir_name in available_dirs:
138
- directory_choices[choice_num] = dir_name
139
- # Check if this directory might contain agent code
140
- agent_files_exist = any((current_dir / dir_name).glob("*agent*.py"))
141
- hint = " (contains agent*.py)" if agent_files_exist else ""
142
- console.print(f" {choice_num}. [bold]{dir_name}[/]{hint}")
143
- if (
144
- default_choice is None
145
- ): # If no detected directory exists, use first available as default
128
+ # Only include the detected directory if it actually exists
129
+ if detected_directory in available_dirs:
130
+ directory_choices[choice_num] = detected_directory
131
+ current_indicator = (
132
+ " (detected)" if detected_directory != "app" else " (default)"
133
+ )
134
+ console.print(
135
+ f" {choice_num}. [bold]{detected_directory}[/]{current_indicator}"
136
+ )
146
137
  default_choice = choice_num
147
- choice_num += 1
148
-
149
- # Add option for custom directory
150
- custom_choice = choice_num
151
- directory_choices[custom_choice] = "__custom__"
152
- console.print(f" {custom_choice}. [bold]Enter custom directory name[/]")
153
-
154
- # If no directories found and no default set, default to custom option
155
- if default_choice is None:
156
- default_choice = custom_choice
138
+ choice_num += 1
139
+ # Remove from available_dirs to avoid duplication
140
+ available_dirs.remove(detected_directory)
141
+
142
+ # Add other available directories
143
+ for dir_name in available_dirs:
144
+ directory_choices[choice_num] = dir_name
145
+ # Check if this directory might contain agent code
146
+ agent_py_exists = (current_dir / dir_name / "agent.py").exists()
147
+ hint = " (has agent.py)" if agent_py_exists else ""
148
+ console.print(f" {choice_num}. [bold]{dir_name}[/]{hint}")
149
+ if (
150
+ default_choice is None
151
+ ): # If no detected directory exists, use first available as default
152
+ default_choice = choice_num
153
+ choice_num += 1
154
+
155
+ # Add option for custom directory
156
+ custom_choice = choice_num
157
+ directory_choices[custom_choice] = "__custom__"
158
+ console.print(f" {custom_choice}. [bold]Enter custom directory name[/]")
159
+
160
+ # If no directories found and no default set, default to custom option
161
+ if default_choice is None:
162
+ default_choice = custom_choice
157
163
 
158
- console.print()
159
- choice = IntPrompt.ask(
160
- "Select agent directory", default=default_choice, show_default=True
161
- )
164
+ console.print()
165
+ choice = IntPrompt.ask(
166
+ "Select agent directory", default=default_choice, show_default=True
167
+ )
162
168
 
163
- if choice in directory_choices:
164
- selected = directory_choices[choice]
165
- if selected == "__custom__":
166
- console.print()
167
- custom_dir = Prompt.ask(
168
- "Enter custom agent directory name", default=detected_directory
169
- )
170
- return custom_dir
169
+ if choice in directory_choices:
170
+ selected = directory_choices[choice]
171
+ if selected == "__custom__":
172
+ console.print()
173
+ while True:
174
+ custom_dir = Prompt.ask(
175
+ "Enter custom agent directory name", default=detected_directory
176
+ )
177
+ try:
178
+ validate_agent_directory_name(custom_dir)
179
+ return custom_dir
180
+ except ValueError as e:
181
+ console.print(f"[bold red]Error:[/] {e}", style="bold red")
182
+ console.print("Please try again with a valid directory name.")
183
+ else:
184
+ # Validate existing directory selection as well
185
+ try:
186
+ validate_agent_directory_name(selected)
187
+ return selected
188
+ except ValueError as e:
189
+ console.print(f"[bold red]Error:[/] {e}", style="bold red")
190
+ console.print(
191
+ "This directory cannot be used as an agent directory. Please select another option."
192
+ )
193
+ console.print()
194
+ # Continue the loop to re-prompt without recursion
195
+ continue
171
196
  else:
172
- return selected
173
- else:
174
- raise ValueError(f"Invalid agent directory selection: {choice}")
197
+ console.print(
198
+ f"[bold red]Error:[/] Invalid selection: {choice}", style="bold red"
199
+ )
200
+ console.print("Please choose a valid option from the list.")
201
+ console.print()
202
+ # Continue the loop to re-prompt without recursion
203
+ continue
175
204
 
176
205
 
177
206
  @click.command()
@@ -389,11 +418,8 @@ def enhance(
389
418
  )
390
419
  pass # Fall back to default
391
420
 
392
- # Check if detected/default app folder exists before showing interactive selection
393
- app_folder_exists = (current_dir / detected_agent_directory).exists()
394
-
395
- # Interactive agent directory selection if not provided via CLI, no app folder exists, and not auto-approved
396
- if not agent_directory and not app_folder_exists and not auto_approve:
421
+ # Interactive agent directory selection if not provided via CLI and not auto-approved
422
+ if not agent_directory and not auto_approve:
397
423
  selected_agent_directory = display_agent_directory_selection(
398
424
  current_dir, detected_agent_directory
399
425
  )
@@ -464,16 +490,82 @@ def enhance(
464
490
  console.print("✋ [yellow]Enhancement cancelled.[/yellow]")
465
491
  return
466
492
  else:
467
- # Check for common agent files
493
+ # Check for agent.py and validate required object
468
494
  agent_py = agent_folder / "agent.py"
495
+
496
+ # Determine required object outside of if/else blocks to avoid NameError
497
+ is_adk = base_template and "adk" in base_template.lower()
498
+ required_object = "root_agent" if is_adk else "agent"
499
+
469
500
  if agent_py.exists():
470
501
  console.print(
471
- f"Detected existing agent structure with [cyan]/{final_agent_directory}/agent.py[/cyan]"
502
+ f" Found [cyan]/{final_agent_directory}/agent.py[/cyan]"
472
503
  )
504
+
505
+ try:
506
+ content = agent_py.read_text(encoding="utf-8")
507
+
508
+ # Look for the required object definition using static analysis
509
+ patterns = [
510
+ rf"^\s*{required_object}\s*=", # assignment: root_agent = ...
511
+ rf"^\s*def\s+{required_object}", # function: def root_agent(...)
512
+ rf"from\s+.*\s+import\s+.*{required_object}", # import: from ... import root_agent
513
+ ]
514
+
515
+ found = any(
516
+ re.search(pattern, content, re.MULTILINE)
517
+ for pattern in patterns
518
+ )
519
+
520
+ if found:
521
+ console.print(
522
+ f"✅ Found '{required_object}' definition in {final_agent_directory}/agent.py"
523
+ )
524
+ else:
525
+ console.print(
526
+ f"⚠️ [yellow]Missing '{required_object}' variable in {final_agent_directory}/agent.py[/yellow]"
527
+ )
528
+ console.print(
529
+ " This variable should contain your main agent instance for deployment."
530
+ )
531
+ console.print(
532
+ f" Example: [cyan]{required_object} = YourAgentClass()[/cyan]"
533
+ )
534
+ # Show ADK docs link for ADK templates
535
+ if is_adk:
536
+ console.print(
537
+ " 📖 Learn more: [cyan][link=https://google.github.io/adk-docs/get-started/quickstart/#agentpy]ADK agent.py guide[/link][/cyan]"
538
+ )
539
+ console.print()
540
+ if not auto_approve:
541
+ if not click.confirm(
542
+ f"Continue enhancement? (You can add '{required_object}' later)",
543
+ default=True,
544
+ ):
545
+ console.print(
546
+ "✋ [yellow]Enhancement cancelled.[/yellow]"
547
+ )
548
+ return
549
+
550
+ except Exception as e:
551
+ console.print(
552
+ f"⚠️ [yellow]Warning: Could not read {final_agent_directory}/agent.py: {e}[/yellow]"
553
+ )
473
554
  else:
474
555
  console.print(
475
- f"ℹ️ [blue]Found /{final_agent_directory} folder[/blue] - ensure your agent code is properly organized within it, including an agent.py file"
556
+ f"⚠️ [yellow]Warning: {final_agent_directory}/agent.py not found[/yellow]"
476
557
  )
558
+ console.print(
559
+ f" Create {final_agent_directory}/agent.py with your agent logic and define: [cyan]{required_object} = your_agent_instance[/cyan]"
560
+ )
561
+ console.print()
562
+ if not auto_approve:
563
+ if not click.confirm(
564
+ f"Continue enhancement? (An example {final_agent_directory}/agent.py will be created for you)",
565
+ default=True,
566
+ ):
567
+ console.print("✋ [yellow]Enhancement cancelled.[/yellow]")
568
+ return
477
569
 
478
570
  # Prepare CLI overrides to pass to create command
479
571
  final_cli_overrides: dict[str, Any] = {}
@@ -35,6 +35,30 @@ from .remote_template import (
35
35
  )
36
36
 
37
37
 
38
+ def validate_agent_directory_name(agent_dir: str) -> None:
39
+ """Validate that an agent directory name is a valid Python identifier.
40
+
41
+ Args:
42
+ agent_dir: The agent directory name to validate
43
+
44
+ Raises:
45
+ ValueError: If the agent directory name is not a valid Python identifier
46
+ """
47
+ if "-" in agent_dir:
48
+ raise ValueError(
49
+ f"Agent directory '{agent_dir}' contains hyphens (-) which are not allowed. "
50
+ "Agent directories must be valid Python identifiers since they're used as module names. "
51
+ "Please use underscores (_) or lowercase letters instead."
52
+ )
53
+
54
+ if not agent_dir.replace("_", "a").isidentifier():
55
+ raise ValueError(
56
+ f"Agent directory '{agent_dir}' is not a valid Python identifier. "
57
+ "Agent directories must be valid Python identifiers since they're used as module names. "
58
+ "Please use only lowercase letters, numbers, and underscores, and don't start with a number."
59
+ )
60
+
61
+
38
62
  @dataclass
39
63
  class TemplateConfig:
40
64
  name: str
@@ -478,13 +502,22 @@ def process_template(
478
502
  template_config: dict[str, Any], cli_overrides: dict[str, Any] | None = None
479
503
  ) -> str:
480
504
  """Get agent directory with CLI override support."""
505
+ agent_dir = None
481
506
  if (
482
507
  cli_overrides
483
508
  and "settings" in cli_overrides
484
509
  and "agent_directory" in cli_overrides["settings"]
485
510
  ):
486
- return cli_overrides["settings"]["agent_directory"]
487
- return template_config.get("settings", {}).get("agent_directory", "app")
511
+ agent_dir = cli_overrides["settings"]["agent_directory"]
512
+ else:
513
+ agent_dir = template_config.get("settings", {}).get(
514
+ "agent_directory", "app"
515
+ )
516
+
517
+ # Validate agent directory is a valid Python identifier
518
+ validate_agent_directory_name(agent_dir)
519
+
520
+ return agent_dir
488
521
 
489
522
  # Handle remote vs local templates
490
523
  is_remote = remote_template_path is not None
@@ -99,7 +99,7 @@ Compare these two pipeline configurations and determine if they are functionally
99
99
  3. **Jinja2 templating**: Both files use the same cookiecutter conditionals like:
100
100
  - `{{% if cookiecutter.deployment_target == 'cloud_run' %}}`
101
101
  - `{{% if cookiecutter.data_ingestion %}}`
102
-
102
+
103
103
  **CRITICAL**: When analyzing conditional logic, compare the SAME conditional branches:
104
104
  - For `cloud_run` deployment: Compare cloud_run sections in both files
105
105
  - For `agent_engine` deployment: Compare agent_engine sections in both files
@@ -11,7 +11,7 @@ resolution-markers = [
11
11
 
12
12
  [[package]]
13
13
  name = "agent-starter-pack"
14
- version = "0.15.0"
14
+ version = "0.15.1"
15
15
  source = { editable = "." }
16
16
  dependencies = [
17
17
  { name = "backoff" },