Backport(0.9.x): reference declarative agents by tag; digests only for sandbox agents (#2242)#2266
Open
iplay88keys wants to merge 2 commits into
Open
Backport(0.9.x): reference declarative agents by tag; digests only for sandbox agents (#2242)#2266iplay88keys wants to merge 2 commits into
iplay88keys wants to merge 2 commits into
Conversation
…r sandbox agents (#2242) Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
Contributor
There was a problem hiding this comment.
Pull request overview
Backports the image-reference behavior from #2242 onto release/v0.9.x so declarative agents use tag-based image references (honoring --image-tag) while keeping digest pinning only where required, with new controller flags to override baked-in digests for mirrored registries.
Changes:
- Add controller flags to override link-time sandbox runtime image digests (
--app-image-digest,--golang-adk-image-digest,--golang-adk-full-image-digest). - Update declarative runtime image resolution to emit
registry/repo:tagfor regular agents andregistry/repo@sha256:...only when digest pinning is required. - Update unit tests and regenerate golden outputs to reflect tag-based references for regular agents.
Reviewed changes
Copilot reviewed 40 out of 40 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| go/core/pkg/app/app.go | Adds new CLI flags to override sandbox runtime image digests at runtime. |
| go/core/internal/controller/translator/agent/deployments.go | Switches regular agents to tag-based image refs; keeps digest pinning behind a pinDigest decision path. |
| go/core/internal/controller/translator/agent/adk_api_translator.go | Updates documentation for link-time digests and the new runtime override flags. |
| go/core/internal/controller/translator/agent/runtime_test.go | Updates assertions to expect tag references for regular agents and no @sha256:. |
| go/core/internal/controller/translator/agent/imageconfig_test.go | Updates digest-pinning tests and adds coverage for tag-based resolution and sandbox vs regular pinning. |
| go/core/internal/controller/translator/agent/testdata/outputs/tls-with-system-cas-disabled.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/tls-with-disabled-verify.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/tls-with-custom-ca.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/ollama_agent.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/bedrock_agent.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/basic_agent.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/anthropic_agent.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_system_message_from_secret.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_system_message_from_configmap.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_streaming.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_skills.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_security_context.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_scheduling_attributes.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_require_approval.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_proxy.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_proxy_service.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_proxy_mcpserver.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_proxy_mcpserver_custom_timeout.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_proxy_external_remotemcp.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_prompt_template.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_passthrough.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_nested_agent.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_memory.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_mcp_service.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_http_toolserver.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_git_skills.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_extra_containers.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_embedding_provider.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_default_sa.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_custom_sa.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_cross_namespace_tools.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_context_config.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_code.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_allowed_headers.json | Golden output updated from digest-pinned app image to tag-based app image. |
| go/core/internal/controller/translator/agent/testdata/outputs/agent_with_a2a_config.json | Golden output updated from digest-pinned app image to tag-based app image. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: Jeremy Alvis <jeremy.alvis@solo.io>
This was referenced Jul 15, 2026
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.
Description
Backport of #2242 (
807c5689) torelease/v0.9.x.Fixes #2055 on 0.9.x (mirrored registries that re-assign manifest digests could not resolve the link-time digest refs).
Differences from #2242
release/v0.9.xpredates the Python-fullruntime variant (PythonADKFullImageDigest/APP_FULL_IMAGE_TAGdo not exist on this branch), so:resolvePythonRuntimeImagegains only thepinDigestparameter — nofullparameter. Thefull := runtime == Go && needsSRTSettings(...)computation stays Go-only, as on this branch.--app-image-digest,--golang-adk-image-digest,--golang-adk-full-image-digest(env:APP_IMAGE_DIGEST, etc.).--app-full-image-digestis dropped with the variant it targets.cr.kagent.dev; main's tests useghcr.io).UPDATE_GOLDEN=truerather than hand-merged: each changesapp@sha256:test-app→app:dev, matching the shape of the change on main.Additionally, digest pinning is gated on the substrate platform rather than on sandbox workload mode. On main every
SandboxAgentis a substrate agent (nospec.platformfield), so the workload-mode gate is equivalent there; this branch also has the agent-sandbox platform, which accepts tag refs. Pinning those by digest would have kept the mirrored-registry breakage for them. Sandbox agents on the agent-sandbox platform now get tag refs like regular agents; only substrate sandbox agents pin by digest.