agent-starter-pack 0.10.0__py3-none-any.whl → 0.10.1__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-starter-pack
3
- Version: 0.10.0
3
+ Version: 0.10.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
@@ -6,7 +6,7 @@ agents/adk_base/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1
6
6
  agents/adk_base/notebooks/evaluating_adk_agent.ipynb,sha256=OMTiT3gAFWPvE9pPL8z7tsDwOU-l8wem5wH-OXPPlvk,56805
7
7
  agents/adk_base/tests/integration/test_agent.py,sha256=VypgpEWrQegJBgc58V-BlIsbqh-Hii-hwmkwcz5feFw,1969
8
8
  agents/adk_gemini_fullstack/README.md,sha256=yQFFcESALj5Q6eweyIyPx__U74obUM88aCBJYNV2UWs,1674
9
- agents/adk_gemini_fullstack/.template/templateconfig.yaml,sha256=2YeSRfcuTHNdYU9smEMn4LPtorBaDUII3qIWRj8nX70,1716
9
+ agents/adk_gemini_fullstack/.template/templateconfig.yaml,sha256=BFlIFsm1g0xmIg4g0jkQ8MpW_EJPRXi4gPYjgIIsAEg,1745
10
10
  agents/adk_gemini_fullstack/app/agent.py,sha256=NXOkYFxDccJaSq55CTS-UYY8z5-WgBZqexII0Ybzk9c,22662
11
11
  agents/adk_gemini_fullstack/app/config.py,sha256=x--axECPKWW3oLANKz2_4zzHEBIU7if8iYNZRjlTNV0,1563
12
12
  agents/adk_gemini_fullstack/notebooks/adk_app_testing.ipynb,sha256=wgFzBo7hX393NVzy3ZfZHncs1ptiQbM_8he3XxJu4yM,9763
@@ -40,7 +40,7 @@ agents/live_api/app/agent.py,sha256=dYE2qd64OhL-fOgwzrjqN50LYXAgJ1TWbx6ohqtV5Rc,
40
40
  agents/live_api/app/server.py,sha256=ZXriNDl_zo7WDRBke85lyzMsy66qGzPaRXY1FMy4Fdw,7793
41
41
  agents/live_api/tests/integration/test_server_e2e.py,sha256=SBowHiVj-_Okbk1dqyITFVIG6yvr5BGNrfxHVpO4TFs,8635
42
42
  agents/live_api/tests/load_test/load_test.py,sha256=HHZyfC4gqiQtZVF_CbbxENGgWQccMLpwMv0IdoQ6cbQ,1275
43
- agents/live_api/tests/unit/test_server.py,sha256=_TjlgQgNkjerIaBGnu8P8_KB8ZlSolDcivALpUOn_Rw,4786
43
+ agents/live_api/tests/unit/test_server.py,sha256=zvNlbz_qOq28IFegq5X2tcwF1gCRnx7Si3d4az-nKT0,4829
44
44
  llm.txt,sha256=wvqbxa1A8kVRdQyOX-ZcN2rOp2314Kw1y4TTe9n9usI,13714
45
45
  src/base_template/.gitignore,sha256=Fq0w34x4sfbwP4RqDqh6hdHNYRUEsFNI-9XONzLWBIs,2580
46
46
  src/base_template/GEMINI.md,sha256=WzscHWlQeYkKORZ-453P8KM9IHuj1kAxW-69c7Ytuwk,133
@@ -79,9 +79,9 @@ src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.clou
79
79
  src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml,sha256=VFdF6q_-zETCMlJkJ0znW8T7gCYE59BZNliNPz2Bh18,1517
80
80
  src/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml,sha256=o7EuMwJJkXI3xNtBubvqyVDTVFRFjNYyv5v6aixVoVU,7312
81
81
  src/cli/main.py,sha256=fyJKjU1gvRQmuqS-J6sExvqXo0-z7n6Bce8PSbDPa6E,1769
82
- src/cli/commands/create.py,sha256=EFFDEHBZ_O_g24gwTknpq_92c1OPKG2ECmnOiAS4aoU,39201
82
+ src/cli/commands/create.py,sha256=ncmCZK-7TXVarLvEVghXL04NyV5rdtJRW1G_Njm_T-E,40636
83
83
  src/cli/commands/list.py,sha256=xlH7w_c_CO2XiFrYyDeBCE_JkUY3f3g4o0HbBIl5fqE,5056
84
- src/cli/commands/setup_cicd.py,sha256=rNJN8HFWYf8Q6Wr9bLy1KHodiJJCG3T2JGVYIQskJaE,32232
84
+ src/cli/commands/setup_cicd.py,sha256=ZgpMrYHXg3B_u5h5PxvVuC4T7Q2uQTYMNMwBBOlcKmg,32250
85
85
  src/cli/utils/__init__.py,sha256=_cTmsXGPqOtK0q8UW5164QTltbJRJFR_Efxq_BRL1-o,1311
86
86
  src/cli/utils/cicd.py,sha256=9s_OcusQznT_pSjFP60BfDBoZ5V6bwPE0QWbWdMaVlY,26515
87
87
  src/cli/utils/datastores.py,sha256=gv1V6eDcOEKx4MRNG5C3Y-VfixYq1AzQuaYMLp8QRNo,1058
@@ -203,8 +203,8 @@ src/resources/locks/uv-live_api-cloud_run.lock,sha256=w6Zd77jiEPsWLYZcNscE_jFA_e
203
203
  src/utils/generate_locks.py,sha256=6V1B8V2BEuevWnXUsxZVTrLjXwFRII8UfsIGrQqZxVs,4320
204
204
  src/utils/lock_utils.py,sha256=IFOMUWtb-ypm2Y8w8J5y2oI_-MaPuwPF_JOAAlnNudA,2275
205
205
  src/utils/watch_and_rebuild.py,sha256=vP4yIiA7E_lj5sfQdJUl8TXas6V7msDg8XWUutAC05Q,6679
206
- agent_starter_pack-0.10.0.dist-info/METADATA,sha256=EV90lF4GnBQ0AsEv4iU0KbexfsVzF58rxOd52y7ASa4,11178
207
- agent_starter_pack-0.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
208
- agent_starter_pack-0.10.0.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
209
- agent_starter_pack-0.10.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
210
- agent_starter_pack-0.10.0.dist-info/RECORD,,
206
+ agent_starter_pack-0.10.1.dist-info/METADATA,sha256=QbvavFC32O7Dp8I7cpoSyxqZinagz4a8FJ7g3wFaVlw,11178
207
+ agent_starter_pack-0.10.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
208
+ agent_starter_pack-0.10.1.dist-info/entry_points.txt,sha256=U7uCxR7YulIhZ0L8R8Hui0Bsy6J7oyESBeDYJYMrQjA,56
209
+ agent_starter_pack-0.10.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
210
+ agent_starter_pack-0.10.1.dist-info/RECORD,,
@@ -21,6 +21,7 @@ settings:
21
21
  extra_dependencies: ["google-adk~=1.8.0"]
22
22
  tags: ["adk"]
23
23
  frontend_type: "adk_gemini_fullstack"
24
+ interactive_command: "dev"
24
25
  commands:
25
26
  override:
26
27
  install: "uv sync --dev --extra jupyter && npm --prefix frontend install"
@@ -126,10 +126,11 @@ async def test_websocket_endpoint() -> None:
126
126
  # Verify mock interactions
127
127
  mock_genai.aio.live.connect.assert_called_once()
128
128
  assert mock_session._ws.recv.called
129
+ await mock_session._ws.recv.aclose()
129
130
 
130
131
 
131
132
  @pytest.mark.asyncio
132
- async def test_websocket_error_handling() -> None:
133
+ def test_websocket_error_handling() -> None:
133
134
  """Test websocket error handling."""
134
135
  from app.server import app
135
136
 
@@ -277,6 +277,27 @@ def create(
277
277
  )
278
278
  final_agent = display_agent_selection(deployment_target)
279
279
 
280
+ # If browse functionality returned a remote agent spec, process it like CLI input
281
+ if final_agent and final_agent.startswith("adk@"):
282
+ # Set agent to the returned spec for remote processing
283
+ agent = final_agent
284
+
285
+ # Process the remote template spec just like CLI input
286
+ remote_spec = parse_agent_spec(agent)
287
+ if remote_spec:
288
+ if remote_spec.is_adk_samples:
289
+ console.print(
290
+ f"> Fetching template: {remote_spec.template_path}",
291
+ style="bold blue",
292
+ )
293
+ else:
294
+ console.print(f"Fetching remote template: {agent}")
295
+ template_source_path, temp_dir_path = fetch_remote_template(
296
+ remote_spec
297
+ )
298
+ temp_dir_to_clean = str(temp_dir_path)
299
+ final_agent = f"remote_{hash(agent)}" # Generate unique name for remote template
300
+
280
301
  if debug:
281
302
  logging.debug(f"Selected agent: {final_agent}")
282
303
 
@@ -658,11 +679,19 @@ def display_adk_samples_selection() -> str:
658
679
  # Get the relative path from repo root
659
680
  relative_path = config_path.parent.parent.relative_to(repo_path)
660
681
 
682
+ # For adk-samples, use just the agent name for the spec
683
+ # This handles cases like python/agents/gemini-fullstack -> gemini-fullstack
684
+ agent_spec_name = (
685
+ relative_path.name
686
+ if relative_path != relative_path.parent
687
+ else str(relative_path)
688
+ )
689
+
661
690
  adk_agents[agent_count] = {
662
691
  "name": agent_name,
663
692
  "description": description,
664
693
  "path": str(relative_path),
665
- "spec": f"adk@{relative_path}",
694
+ "spec": f"adk@{agent_spec_name}",
666
695
  }
667
696
  agent_count += 1
668
697
 
@@ -373,7 +373,7 @@ def create_or_update_secret(secret_id: str, secret_value: str, project_id: str)
373
373
  Raises:
374
374
  subprocess.CalledProcessError: If secret creation/update fails
375
375
  """
376
- with tempfile.NamedTemporaryFile(mode="w") as temp_file:
376
+ with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as temp_file:
377
377
  temp_file.write(secret_value)
378
378
  temp_file.flush()
379
379