feat: Add merged skill source proxy.#747
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
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.
dpasiukevich
previously approved these changes
Apr 22, 2026
dpasiukevich
approved these changes
Apr 22, 2026
This proxy allows combining multiple skill sources into a single source.
bb06081 to
9a6c593
Compare
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]>
4 tasks
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]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This proxy allows combining multiple skill sources into a single source.