Skip to content

feat: Add merged skill source proxy.#747

Merged
foxfrikses merged 3 commits into
google:mainfrom
foxfrikses:skills-merge-sources-proxy
Apr 22, 2026
Merged

feat: Add merged skill source proxy.#747
foxfrikses merged 3 commits into
google:mainfrom
foxfrikses:skills-merge-sources-proxy

Conversation

@foxfrikses
Copy link
Copy Markdown
Contributor

This proxy allows combining multiple skill sources into a single source.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the mergedSource type, which aggregates multiple Source implementations, along with comprehensive unit tests. The implementation includes logic for deduplicating skills and searching across sources in a defined order. Feedback was provided to enhance the robustness of the constructor by cloning the input slice and to simplify error messages for duplicate skills to avoid potential confusion.

Comment thread tool/skilltoolset/skill/merged_source.go
Comment thread tool/skilltoolset/skill/merged_source.go Outdated
dpasiukevich
dpasiukevich previously approved these changes Apr 22, 2026
Comment thread tool/skilltoolset/skill/merged_source.go Outdated
@foxfrikses foxfrikses force-pushed the skills-merge-sources-proxy branch from bb06081 to 9a6c593 Compare April 22, 2026 08:23
@foxfrikses foxfrikses merged commit 4093a8a into google:main Apr 22, 2026
4 checks passed
kirankn8 added a commit to kirankn8/adk-go that referenced this pull request Apr 24, 2026
Rebuilt on upstream's Source-backed skilltoolset (PRs google#744-google#747). Adds
features upstream lacks:

- code_executors/ package (BaseCodeExecutor interface, UnsafeLocalCodeExecutor)
- run_skill_script tool for executing scripts from a skill's scripts/ dir,
  wired via Config.Executor + Config.SkillsRoot (only exposed when both set)
- NewFileSystem helper for constructing a toolset from a directory on disk
- name/skill/skill_name aliases on load_skill
- path/resource_path aliases on load_skill_resource
- did_you_mean enrichment with Levenshtein ranking for mistyped skill names,
  resource paths, and script paths
- path normalization: collapse double prefixes (references/references/foo),
  wrong-prefix redirect (asset/ -> assets/), cross-bucket detection
- redirect codes: USE_LOAD_SKILL for SKILL.md, USE_LOAD_SKILL_RESOURCE for
  doc-like files passed to run_skill_script

Co-Authored-By: Claude Opus 4.7 <[email protected]>
Fuabioo pushed a commit to hulilabs/adk-go that referenced this pull request Apr 30, 2026
* Conformance fixes for change to yaml format and progressive sse (google#672)

Co-authored-by: Mikalai Senkevich <[email protected]>

* fix: preserve error details and finish reason in streaming response aggregator and update test expectations (google#678)

* feat: Implement and test recursive agent lookup by name. (google#626)

* feat: Implement and test recursive agent lookup by name.

* refactor: convert `TestFindAgent` to a table-driven test and enable parallel execution.

* feat: Introduce a `FindAgent` method on `llmAgent` to locate sub-agents by name, replacing the `runner` package's internal `findAgent` helper.

* feat: add GetArtifactVersion method to artifact service (google#575)

* feat: add GetArtifactVersion method to artifact service

* chore: remove adk-go main executable.

* Update artifact/service.go

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Extract resolveVersion helper in gcsartifact.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* feat: custom runner provider for adka2a executor (google#680)

* custom runner provider for adka2a executor

* remove the mandatory dependency on runnerConfig

* Add session service test suite (google#675)

* Add session service test suite

* lint fix

* lint fix

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* fix: fix data part conversions (google#689)

* fix data part conversions

* fix: correct json envelope for datapart (google#695)

* chore: update a2a-go and fix double cleanup (google#698)

* update a2a-go and fix double cleanup

* tidy

* feat: Introduce skill package, define frontmatter and helper functions. (google#693)

Define frontmatter per https://agentskills.io/specification#frontmatter.

Implement helper functions for:
- parsing frontmatter and instructions out from SKILL.md file content,
- validating frontmatter struct,
- building SKILL.md file content from frontmatter and instructions.

* feat: setup subrouter for pub/sub trigger (google#704)

Create a new subrouter that will handle the pubsub trigger endpoint and add the implementation for this trigger.

* feat: update cloudrun deployment script to include pubsub (google#712)

update cloudrun deployment script to include pubsub trigger

* feat: add telemetry attributes for cache read input tokens and reason… (google#714)

* feat: add telemetry attributes for cache read input tokens and reasoning tokens

* fix: align indentation in telemetry test usage metadata struct fields

* refactor: align attribute key variable definitions for better readability

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* feat: Define skill.Source interface and implement file system skill source. (google#711)

Source interface defines a contract via which skills framework is going to access skills.

* feat(telemetry): add configurable LRU cache in debug telemetry to avoid memory leaks (google#687)

* feat(telemetry): add configurable LRU cache in debug telemetry to avoid memory leaks

* improve error handling and mention cache size default in the docs

* refactor the logic touching the trace ids for event spans

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* feat: add the implementation of Eventarc subrouter (google#713)

Implementation of Cloud Events trigger processing

* feat: Add agent engine deployment to ADK GO CLI (google#715)

Co-authored-by: Karol Droste <[email protected]>

* Update content processor to exclude toolconfirmation.FunctionCallName (google#717)

* Update content processor exclude

* remove mds

---------

Co-authored-by: Dmitry Pasiukevich <[email protected]>

* feat: update cloudrun deployment script to include eventarc subrouter (google#716)

Adds the eventarc trigger configuration to the cloudrun deployment docker container

* feat: Allow toolsets implement toolinternal.RequestProcessor. (google#730)

While for tools it's a requirement, for toolsets it's optional.
The ability of toolsets to implement RequestProcessor is required
to implement Agent Skills feature as a toolset.

* feat: Implement SkillToolset. (google#733)

SkillToolset encapsulates the Agent Skills feature.
This toolset ensures agent is equipped with all the tools needed to use
skills and is provided with proper instructions.

What skill toolset enable agent to do:
- List available skills.
- Read instructions of the skills (by skill name).
- Read specific resources of the skills (by resource path).

Current implementation is very basic, e.g.:
- There is no script execution support yet.
- Skill activation is history-based: skill instructions and resources
  are provided to the llm as function call results in conversation history.
- Every resource should be specifically mentioned in the SKILL.md
  file: the agent is unable to list resources available for the skills.

* fix: adk-web sse error format (google#734)

fix adk-web sse error format so it corresponds with SSE specifications

* fix: add traceCapacity to the api config (google#731)

* feat: Add skill Source proxy for preloading skills. (google#745)

WithCompletePreloadSource proxy allows to load the skills to memory on
initialization.
It offers the fastest possible data access speed upon initialization,
at the expense of higher memory usage and longer initialization.

* feat: Add preload frontmatters skill source proxy. (google#748)

Given instructions and resource files can be large, it might turn out to
be expensive to load them all to RAM.

Fortunately, at this stage of skill toolset implementation, instructions
and resources are most likely going to be read just once - and then
they'll stay in the conversation history.

Frontmatters, on the other hand, are going to be listed frequently, and
frontmatters are relatively lightweight, thus a proxy caching only the
frontmatters (as opposed to the full preload) can help reach maximum
benefit.

* feat: Add merged skill source proxy. (google#747)

This proxy allows combining multiple skill sources into a single source.

* Agent Engine support (google#749)

* Agent Engine support

* Test fix

* Fixes

* Fixes

* Error handling fix

* Fixes

* Fixes in encode

* Fixed encode

* sseTimeout fix

* reflection fix

* sseWriteTime fix

* fix

* encode fixes

* linter fixes

* various fixes

* encode tests

* linter fixes

* fix

* linter fixes

* Fixes in encode

---------

Co-authored-by: João Westerberg <[email protected]>
Co-authored-by: Mikalai Senkevich <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Yaroslav <[email protected]>
Co-authored-by: Dmitry Pasiukevich <[email protected]>
Co-authored-by: Serob Nahapetyan <[email protected]>
Co-authored-by: Artsiom Shut <[email protected]>
Co-authored-by: Anastasia <[email protected]>
Co-authored-by: Piotr Górski <[email protected]>
Co-authored-by: Paweł Maciejczek <[email protected]>
Co-authored-by: Karol Droste <[email protected]>
Co-authored-by: David Mora <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants