2477 Commits

Author SHA1 Message Date
Jacksunwei 008ca58099 chore: update last-release-sha for next release v1.30.0 2026-04-13 23:04:50 +00:00
Wei (Jack) Sun 6b4ac43c7b chore(release/candidate): release 1.30.0 (#5312) 2026-04-13 16:04:37 -07:00
Shangjie Chen 80a7ecf4b3 chore(session): refine raw_event storage with safety fixes and fallback test
- Remove outdated TODOs regarding requested_tool_confirmations and native compaction support
- Add a warning log when falling back to legacy storage
- Avoid overwriting valid timestamps from `raw_event` with `None` if the API returns `None`
- Provide a fallback timestamp (current time) to prevent Pydantic validation errors when the API returns no timestamp

Co-authored-by: Shangjie Chen <deanchen@google.com>
PiperOrigin-RevId: 899195056
2026-04-13 14:51:22 -07:00
Google Team Member a64a8e4648 feat: Live avatar support in ADK
Testing plan: Added new unit tests
- `test_avatar_config_initialization`
- `test_avatar_config_with_name`
- `test_receive_video_content`
- `test_streaming_with_avatar_config`

PiperOrigin-RevId: 899193911
2026-04-13 14:48:55 -07:00
George Weale cbcb5e6002 fix: validate user_id and session_id against path traversal
Closes #5110

Co-authored-by: George Weale <gweale@google.com>
PiperOrigin-RevId: 899108631
2026-04-13 11:46:27 -07:00
Kathy Wu f2c68eb153 feat: Add Auth Provider support to agent registry
Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 899104727
2026-04-13 11:39:10 -07:00
Kathy Wu 547766a477 fix: Include a link to the deployed agent
After an agent gets deployed to agent engine, include a link to try out the agent.

Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 899093067
2026-04-13 11:16:15 -07:00
Google Team Member 0acee3175a chore: Update dependencies and release configuration for the Agent Identity feature
PiperOrigin-RevId: 898786239
2026-04-12 22:51:19 -07:00
Google Team Member abcf14c166 feat: Promote BigQuery tools to Stable
In preparation to launching GA of the BigQuery agentic tools in ADK, this change marks BIG_QUERY_TOOLSET and BIG_QUERY_TOOL_CONFIG as stable features. The experimental decorators and warnings associated with these features have been removed.

PiperOrigin-RevId: 897865928
2026-04-10 13:41:19 -07:00
Kathy Wu e7d8160412 fix: Add "gcloud config unset project" command to express mode flow
If the user created an express mode project but has a different gcloud project set, we should help them unset it so that they doesn't run into permissions errors / the express mode one gets used.

Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 897783336
2026-04-10 11:03:44 -07:00
George Weale 9d4ecbe9fd feat: Add support for Gemma 4 models in ADK
This change updates the Gemma LLM integration to support Gemma 4 models by broadening the model regex from `gemma-3.*` to `gemma-.*`

Close #5156

Co-authored-by: George Weale <gweale@google.com>
PiperOrigin-RevId: 897385272
2026-04-09 17:27:06 -07:00
George Weale 9a1930407a fix: preserve interaction ids for interactions SSE tool calls
Close #5169

Co-authored-by: George Weale <gweale@google.com>
PiperOrigin-RevId: 897334695
2026-04-09 15:33:17 -07:00
Wei (Jack) Sun 5fab983c08 chore: merge release v1.29.0 to main
Merge https://github.com/google/adk-python/pull/5232

Syncs version bump and CHANGELOG from release v1.29.0 to main.

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5232 from google:release/v1.29.0 32e319930a46ec2aa8a27d769e027a14779301ff
PiperOrigin-RevId: 897324259
2026-04-09 15:12:16 -07:00
Liang Wu 2626ad7c69 feat(live): expose live_session_resumption_update as Event in BaseLlmFlow
This enables cross-connection session resumption for Gemini Live API sessions, allowing applications to capture the resumption handle and reuse it upon reconnection.
- Add `live_session_resumption_update` to the skip check condition to ensure it's not discarded when content is empty.
- Yield the event after the skip check, similar to transcription events.
- Add unit test in `test_base_llm_flow.py` to verify the behavior.

Closes #4357

Co-authored-by: Liang Wu <wuliang@google.com>
PiperOrigin-RevId: 897318123
2026-04-09 14:59:44 -07:00
Kathy Wu e3567a6519 fix: Fix credential leakage vulnerability in Agent Registry
Passing in ADC auth headers to non-google MCP toolsets is a vulnerability. To fix, only pass in the headers to Google MCP toolsets.

Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 897230159
2026-04-09 11:59:24 -07:00
Wei (Jack) Sun 2cbb523069 feat(samples): add sample for skill activation via environment tools
Merge https://github.com/google/adk-python/pull/5218

### Link to Issue or Description of Change

**1. Link to an existing issue (if applicable):**
(None, this is a new sample)

**2. Or, if no issue exists, describe the change:**

**Problem:**
There was no sample demonstrating how to use `LocalEnvironment` with `EnvironmentToolset` for manual skill activation (discovering and loading skills by reading files) instead of using the pre-configured `SkillToolset`.

**Solution:**
Created a new sample `local_environment_skill` that demonstrates this pattern:
- Agent is instructed to find skills in `skills/` folder using the `find` command.
- Agent loads skills by reading `SKILL.md` using the `ReadFile` tool.
- Added a weather skill sample and reference data to demonstrate usage.

### Testing Plan

**Unit Tests:**
*(This is a sample/demonstration, so no new unit tests were added for the framework itself.)*

**Manual End-to-End (E2E) Tests:**
1. Ran `adk web contributing/samples`.
2. Interacted with the agent in the Web UI.
3. Prompt: "Can you check the weather in Sunnyvale?"
4. Verified that the agent successfully used `find` to locate the skill, read `SKILL.md`, read `weather_info.md`, and answered correctly.

### Checklist

- [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document.
- [x] I have performed a self-review of my own code.
- [x] I have commented my code, particularly in hard-to-understand areas.
- [x] I have manually tested my changes end-to-end.

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5218 from google:samples/local_env_skill 39404309e8b9237a279ecd6ed14bb87eb84098f0
PiperOrigin-RevId: 897229752
2026-04-09 11:58:35 -07:00
Google Team Member cb4dd42eff fix: avoid load all agents in adk web server
PiperOrigin-RevId: 897179529
2026-04-09 10:22:46 -07:00
Google Team Member e63d991be8 feat: allow users to include artifacts from artifact_service in A2A events using provided interceptor
PiperOrigin-RevId: 897143688
2026-04-09 09:05:44 -07:00
Google Team Member dcc485b23e feat: emit a TaskStatusUpdateEvent for ADK events with no output parts but with event.actions
PiperOrigin-RevId: 896929519
2026-04-09 00:31:52 -07:00
Google Team Member b0715d77a2 feat: Add Parameter Manager integration to ADK
Parameter Manager is a feature of Secret Manager that provides centralized storage and management for workload parameters. It supports various formats (plain text, YAML, JSON) and can reference Secret Manager secrets.

The ADK integration will provide a simplified interface for agents to retrieve rendered parameter values, supporting both global and regional endpoints.

PiperOrigin-RevId: 896823376
2026-04-08 19:31:12 -07:00
Kathy Wu 0fedb3b5eb fix: Change express mode user flow so it's more clear that an express mode project is being created
Also adds link to express mode so the user knows that it is

Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 896778982
2026-04-08 17:08:44 -07:00
Kathy Wu d62558cc2d fix: Custom pickling in McpToolset to exclude unpicklable objects like errlog
Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 896761013
2026-04-08 16:25:54 -07:00
Liang Wu 6b1600fbf5 fix(live): Handle live session resumption and GoAway signal
* Skip sending conversation history when a live session is being resumed using a handle.
* Catch ConnectionClosed and APIError exceptions during live sessions and attempt to reconnect if a session resumption handle is available.
* Handle the server's "go_away" signal by proactively closing the connection to trigger a reconnection with the latest session handle.
* Propagate the "go_away" signal from the Gemini connection to the LlmResponse.
* Add unit tests for reconnection on ConnectionClosed, APIError, skipping history on resumption, and handling the go_away signal.

Closes #4996

Co-authored-by: Liang Wu <wuliang@google.com>
PiperOrigin-RevId: 896687925
2026-04-08 14:04:13 -07:00
Google Team Member 6fd0f85191 fix: move BigQueryAgentAnalyticsPlugin import inside get_runner_async
PiperOrigin-RevId: 896665913
2026-04-08 13:20:04 -07:00
Google Team Member 20748894cd feat: Support loading agents from Visual Builder with BigQuery-powered logging
PiperOrigin-RevId: 896612027
2026-04-08 11:33:55 -07:00
Yixiao Song 9e73ab8466 feat(skill): Standardize skill tools and make script arguments flexible
Standardize Parameter Names:
- Use `skill_name` instead of `name`.
- Use `file_path` instead of `script_path`.
- Updated `_DEFAULT_SKILL_SYSTEM_INSTRUCTION` system prompt to use `skill_name="<SKILL_NAME>"`.

Flexible Arguments for RunSkillScriptTool:
- Updated schema to allow args to be either a JSON object or a list of strings (`anyOf`).
- Updated `RunSkillScriptTool.run_async` and `_SkillScriptCodeExecutor.execute_script_async` to accept both dict and list types for arguments.
- Modified `_SkillScriptCodeExecutor._build_wrapper_code` to pass list arguments directly as command-line arguments for python and bash scripts.

Improved Error Messages:
- Updated error messages across skills tools to specify the parameter name (e.g., "Argument 'skill_name' is required.").
- Collected all validation error messages.

Type Safety:
- Fixed a TypeError in run_skill_script().

PiperOrigin-RevId: 896602439
2026-04-08 11:18:40 -07:00
Divyansh Shukla 23bd95bcf2 feat: Add blacklist for shell metacharacters in BashTool
PiperOrigin-RevId: 896191354
2026-04-07 18:37:01 -07:00
Google Team Member ccac461b2a docs(adk): clean up remote triggers README to remove internal references
PiperOrigin-RevId: 896153946
2026-04-07 16:48:37 -07:00
Google Team Member e2d970ff94 feat: add ADK trigger endpoints to ADK Web Server
PiperOrigin-RevId: 896133436
2026-04-07 16:06:37 -07:00
Google Team Member a60baca3dd docs: Update the MCP Toolbox docsite with the new URL
We recently overhauled our MCP Toolbox documentation and moved it to a new domain. This PR propagates that URL change here.

PiperOrigin-RevId: 896118946
2026-04-07 15:37:11 -07:00
George Weale 62daf4f61b fix: truncate error_message in v0 schema to prevent VARCHAR overflow
Close #4993

Co-authored-by: George Weale <gweale@google.com>
PiperOrigin-RevId: 896076625
2026-04-07 14:03:59 -07:00
Kathy Wu 0f3850f56c fix: Fixes for initializing RemoteA2aAgent - passing in preferred transport, protocol version, and auth headers
Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 896068855
2026-04-07 13:46:34 -07:00
Kathy Wu 3a374ce0aa fix: Small fixes for express mode
Remove extra "would you like to proceed" from ToS message since it is asked later. For checking express eligibility, if the API response is "ELIGIBLE" then it is also considered eligible.

Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 896066249
2026-04-07 13:40:42 -07:00
Google Team Member 83393ab839 feat: Propagate context to thread pools
PiperOrigin-RevId: 896063584
2026-04-07 13:34:52 -07:00
llalitkumarrr 6a1c90bd9d docs: Auto-Assignment GitHub Action for Issues
Merge https://github.com/google/adk-python/pull/4966

Co-authored-by: Xuan Yang <xygoogle@google.com>
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/4966 from llalitkumarrr:main ff7a8465ae923b3990de2483c16f374f8193302b
PiperOrigin-RevId: 896062781
2026-04-07 13:33:19 -07:00
Liang Wu 114deefdfd test: prevent test_resource_limits_set from hanging in GitHub Actions
Set mock_process.pid to None in the resource limits test. Without this, the `finally` block in `run_async` attempts to call `os.killpg` with a fallback `Mock` object (which evaluates to True). In some environments like GitHub Actions, this can inadvertently kill the test runner's process group rather than raising a TypeException, causing the CI job to hang indefinitely.

Co-authored-by: Liang Wu <wuliang@google.com>
PiperOrigin-RevId: 895992429
2026-04-07 11:05:31 -07:00
Google Team Member 9199189e57 feat(eval): Add ADK CLI for eval_set generation
PiperOrigin-RevId: 895946363
2026-04-07 09:43:35 -07:00
Google Team Member a22091058d feat(auth): Add public api to register custom auth provider with credential manager
PiperOrigin-RevId: 895904372
2026-04-07 08:04:50 -07:00
rei-arifi bbad9ec64c fix(cli): fail Agent Engine deploy when config file path is invalid
Merge https://github.com/google/adk-python/pull/5128

### Link to Issue or Description of Change

**1. Link to an existing issue (if applicable):**

- Closes: #5127

**Problem:**
When `--agent_engine_config_file` is set to a path that does not exist, `to_agent_engine` previously behaved like no config file was provided.

**Solution:**
This change raises `click.ClickException` with a message that includes the resolved path.

### Testing plan

- [x] `uv run python -m pytest tests/unittests/cli/utils/test_cli_deploy.py -v`
- [x] Manual test `adk deploy agent_engine ... --agent_engine_config_file /nonexistent.json` and confirm a clear error before remote deploy. The same command with correct filename relative to parent directory of the agent does not fail.

**Unit Tests:**

- [x] I have added or updated unit tests for my change.
- [x] All unit tests pass locally.

```
uv run python -m pytest tests/unittests/cli/utils/test_cli_deploy.py -v
=========================================================================================================================== test session starts ===========================================================================================================================
platform darwin -- Python 3.11.13, pytest-9.0.2, pluggy-1.6.0 -- /Users/rei/Repos/adk-python/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /Users/rei/Repos/adk-python
configfile: pyproject.toml
plugins: mock-3.15.1, xdist-3.8.0, asyncio-1.3.0, langsmith-0.7.25, anyio-4.13.0
asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function
collected 31 items

tests/unittests/cli/utils/test_cli_deploy.py::test_resolve_project_with_option PASSED                                                                                                                                                                               [  3%]
tests/unittests/cli/utils/test_cli_deploy.py::test_resolve_project_from_gcloud PASSED                                                                                                                                                                               [  6%]
tests/unittests/cli/utils/test_cli_deploy.py::test_resolve_project_from_gcloud_fails PASSED                                                                                                                                                                         [  9%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.3.0-sqlite://s-gs://a-rag://m-None---session_service_uri=sqlite://s --artifact_service_uri=gs://a --memory_service_uri=rag://m] PASSED                                       [ 12%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.2.5-sqlite://s-gs://a-rag://m-None---session_db_url=sqlite://s --artifact_storage_uri=gs://a] PASSED                                                                         [ 16%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[0.5.0-sqlite://s-gs://a-rag://m-None---session_db_url=sqlite://s] PASSED                                                                                                       [ 19%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.3.0-sqlite://s-None-None-None---session_service_uri=sqlite://s] PASSED                                                                                                       [ 22%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.3.0-None-gs://a-rag://m-None---artifact_service_uri=gs://a --memory_service_uri=rag://m] PASSED                                                                              [ 25%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.2.0-None-gs://a-None-None---artifact_storage_uri=gs://a] PASSED                                                                                                              [ 29%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.21.0-None-None-None-False---no_use_local_storage] PASSED                                                                                                                     [ 32%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.21.0-None-None-None-True---use_local_storage] PASSED                                                                                                                         [ 35%]
tests/unittests/cli/utils/test_cli_deploy.py::test_get_service_option_by_adk_version[1.21.0-sqlite://s-gs://a-None-False---session_service_uri=sqlite://s --artifact_service_uri=gs://a] PASSED                                                                     [ 38%]
tests/unittests/cli/utils/test_cli_deploy.py::test_agent_engine_app_template_compiles_with_windows_paths PASSED                                                                                                                                                     [ 41%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_happy_path[True] PASSED                                                                                                                                                                          [ 45%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_happy_path[False] PASSED                                                                                                                                                                         [ 48%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_raises_when_explicit_config_file_missing PASSED                                                                                                                                                  [ 51%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_skips_agent_import_validation_by_default PASSED                                                                                                                                                  [ 54%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_agent_engine_validates_agent_import_when_enabled PASSED                                                                                                                                                       [ 58%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_gke_happy_path[True] PASSED                                                                                                                                                                                   [ 61%]
tests/unittests/cli/utils/test_cli_deploy.py::test_to_gke_happy_path[False] PASSED                                                                                                                                                                                  [ 64%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_skips_config_agents PASSED                                                                                                                                                              [ 67%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_missing_agent_module PASSED                                                                                                                                                   [ 70%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_missing_export PASSED                                                                                                                                                         [ 74%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_success_with_root_agent_export PASSED                                                                                                                                                   [ 77%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_success_with_app_export PASSED                                                                                                                                                          [ 80%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_success_with_relative_imports PASSED                                                                                                                                                    [ 83%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_import_error PASSED                                                                                                                                                           [ 87%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_basellm_import_error PASSED                                                                                                                                                   [ 90%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_raises_on_syntax_error PASSED                                                                                                                                                           [ 93%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_cleans_up_sys_modules PASSED                                                                                                                                                            [ 96%]
tests/unittests/cli/utils/test_cli_deploy.py::TestValidateAgentImport::test_restores_sys_path PASSED                                                                                                                                                                [100%]

=========================================================================================================================== 31 passed in 2.48s ============================================================================================================================
```

**Manual End-to-End (E2E) Tests:**

1. Install adk cli from this PR
2. Run `adk deploy agent_engine ... --agent_engine_config_file /nonexistent.json # Failure expected`
3. Run `adk deploy agent_engine ... --agent_engine_config_file agent/config.json # Deployment proceeds if file path is correct`
### Checklist

- [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document.
- [x] I have performed a self-review of my own code.
- [n/a] I have commented my code, particularly in hard-to-understand areas.
- [x] I have added tests that prove my fix is effective or that my feature works.
- [x] New and existing unit tests pass locally with my changes.
- [x] I have manually tested my changes end-to-end.
- [n/a] Any dependent changes have been merged and published in downstream modules.

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/5128 from rei-arifi:fix/agent-engine-config-file-missing 0c2f9f7b2f7f2e681f7d814637204a113047d95a
PiperOrigin-RevId: 895550691
2026-04-06 16:14:55 -07:00
Google Team Member 2b49163b39 feat: Support short options and positional arguments in RunSkillScriptTool
- Updates `parameters_json_schema` to accept `short_options` (object) and `positional_args` (array).
  - Updates `_SkillScriptCodeExecutor._build_wrapper_code` to materialize these options for both Python and Shell scripts.
  - Appends `--` before positional arguments to remove ambiguity in CLI parsing.
  - Adds comprehensive unit tests.

PiperOrigin-RevId: 895536577
2026-04-06 15:43:01 -07:00
Liang Wu e51b649b76 chore: Improve event content handling and minor prompt adjustments
Co-authored-by: Liang Wu <wuliang@google.com>
PiperOrigin-RevId: 895518689
2026-04-06 15:05:49 -07:00
Kathy Wu 5cf2ca3fc0 chore: Update ADK CLI Express mode ToS to align with the Express mode ToS
Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 895514895
2026-04-06 14:57:45 -07:00
Liang Wu da438fafd8 feat: Add /apps/{app_name}/app-info endpoint to ADK CLI web server
This endpoint provides detailed **static** information about an application's agents, including their description, instructions, tools, and sub-agents, specifically for LlmAgent instances.

Co-authored-by: Liang Wu <wuliang@google.com>
PiperOrigin-RevId: 895470828
2026-04-06 13:23:48 -07:00
Kathy Wu 7dd9359fa1 fix: Add A2ATransport.http_json to the default supported transports list
remote_a2a_agent is only including A2ATransport.jsonrpc on the default supported list, but it should also include http_json since it is a common transport (default used by agent engine)

Co-authored-by: Kathy Wu <wukathy@google.com>
PiperOrigin-RevId: 895444831
2026-04-06 12:23:40 -07:00
Google Team Member 9da9dee140 feat: Use raw_event to store event data in vertex ai session service
PiperOrigin-RevId: 895379069
2026-04-06 10:04:12 -07:00
Google Team Member 1445ad5069 feat: refresh credentials if token is missing in the common code and samples
PiperOrigin-RevId: 894473156
2026-04-04 02:02:43 -07:00
Google Team Member 19ac679aea feat: Add regional endpoint support to SecretManagerClient
The `SecretManagerClient` now accepts a `location` parameter to connect to a regional Secret Manager endpoint.

PiperOrigin-RevId: 894356924
2026-04-03 19:34:02 -07:00
Divyansh Shukla 1b0584241f feat: add configurable resource limits for subprocesses in BashTool
PiperOrigin-RevId: 894338571
2026-04-03 18:20:54 -07:00
Haiyuan Cao 37973daff4 feat: Add configurable view_prefix to BigQueryLoggerConfig
Adds a configurable `view_prefix` field to `BigQueryLoggerConfig` (default `"v"`) so that multiple plugin instances sharing a dataset can use distinct prefixes to avoid overwriting each other's auto-created analytics views
- Validates that `view_prefix` is non-empty at init time
- Wires `view_prefix` into `_create_analytics_views` in place of the hardcoded `"v_"` prefix

Co-authored-by: Haiyuan Cao <haiyuan@google.com>
PiperOrigin-RevId: 894331973
2026-04-03 17:58:57 -07:00
Haiyuan Cao 435f7c7a9f feat: Add Description column to SKILL.md and update terminology
Adds a **Description** column to the function routing table in `SKILL.md` so the LLM can select the correct reference file without extra `load_skill_resource` calls
- Replaces internal "1P" terminology with "BigQuery tools" for clarity

Co-authored-by: Haiyuan Cao <haiyuan@google.com>
PiperOrigin-RevId: 894329869
2026-04-03 17:51:03 -07:00