Changes and Releases

Updates on Giant Swarm workload cluster releases, apps, UI improvements and documentation changes.

  • Added

    • (tenants) Credential refs name only tenant credentials in #1068 by @teemow
    • The Google access-token credential provider runs beside Substrate in #1046 by @QuentinBisson

    Changed

    • (deps) Update gsoci.azurecr.io/giantswarm/agent-manager docker tag to v2.3.1 in #1001 by @renovate[bot]
    • (connectivity) Drop the portal’s dead rootRedirect and nav-item:agent-platform in #1070 by @marians

    Fixed

    • (tests) Retry a throttled registry with backoff honouring Retry-After in #1073 by @teemow

    Full Changelog: https://github.com/giantswarm/agent-platform/compare/v4.140.0...v4.141.0

    Release-candidate proof (v4.141.0-rc.5)

    agentlab v0.110.2, a local kind test installation with tenants.organizations.enabled. agent-platform 4.140.0 upgraded in place to 4.141.0-rc.5. It moves no Substrate or kagent range (Substrate 1.12.0, kagent 1.13.0 before and after).

    • All releases: 15 of 15 HelmReleases Ready on 4.141.0-rc.5.
    • #1046: google-access-token-credential-provider 0.1.0 Ready in ate-system, after substrate; Deployment 1/1, Service :50051 and its CiliumNetworkPolicy in place. It loads its namespace policy and admits only spiffe://cluster.local/ns/ate-system/sa/atenet-egress. Nothing is routed to it in this release.
    • #1001: the agent-manager migration Job ran on agent-manager:2.3.1; agent-manager is Ready.
    • #1070: the portal’s app-config carries no rootRedirect and no nav-item:agent-platform; / answers 200 with the Agent Platform shell.
    • #1068: proven on rc.1 (in #1068); agentlab tenants-test passes again here.
    • #1073: test code only.
    • agentlab platform-test: 13 PASS, 0 FAIL. agentlab tenants-test: 6 PASS, 0 FAIL.
  • Added

    • (agent-platform) Classify failed sessions and add the notification row rule by @marians — Groundwork for the notification bell below: the portal now tells why a failed session failed (model unavailable, a tool failed, runtime lost or other) without passing on the failure’s text, and decides which sessions get a notification.
    • (agent-platform) Set a session’s notification level from its menu by @marians — A session’s ⋯ menu, on its page and in the Sessions list, has a Notifications submenu with Default, All activity and Muted. The notification bell follows it: All activity adds finished turns, Muted leaves the session out.
    • (agent-platform, muster) Name the installation on every connector, tool and workflow link by @marians — The command palette lists a connector once per environment it is registered on, each opening the connector in that environment, instead of one row for all of them.
    • (agent-platform, muster) Move the Agent Platform to URLs that follow the rail by @marians — Agent Platform pages move to shorter addresses: /sessions, /usage, /profile, and every agent, skill, connector, model and workflow page under its Customize tab. Old links and bookmarks land on the same page. For operators: app.extensions entries naming page:agent-platform/skills, sub-page:agent-platform/sessions, sub-page:agent-platform/usage or page:muster/mcp-servers-redirect no longer apply.
    • (app, agent-platform, ui-react) Add the Notification inbox to the Agent Platform shell by @marians — A bell on the rail’s Profile row counts and lists the sessions waiting for you, failed, or finished a turn (at All activity), with Mark all read and a Desktop notifications switch. The tab title shows the unread count; on a phone the list is in the Profile menu.
    • (muster) Keep the typed connector name as its display name by @marians — A connector added under Customize’s Connectors keeps the name you typed, e.g. Stack Overflow, as the name shown everywhere, and Edit can rename it; its technical name stays. Needs muster 5.43.0 or later; an older muster registers connectors as before.

    Fixed

    Full Changelog: https://github.com/giantswarm/backstage/compare/v3.7.1...v3.8.0

  • Fixed

    • (cli) Store the client_id a token was obtained with and refresh with it in #1525 by @teemow

    Full Changelog: https://github.com/giantswarm/muster/compare/v5.43.1...v5.43.2

  • Development and CI/CD

    Full Changelog: https://github.com/giantswarm/backstage/compare/v3.7.0...v3.7.1

  • Fixed

    • Helm: MusterMCPServerFailed stays silent for a sibling installation that is down. A hub reaches a sibling’s servers as <mc>-mcp-<type>; when every one of them, two at least, is Failed, the sibling counts as down, its own heartbeat is the alert, and its servers no longer fire one alert each on every hub. A sibling server failing while another of the sibling’s servers is not Failed still fires, and so do a single-server sibling, the installation’s own <installation>-mcp-<type> servers and every server outside the naming. The promtool suite covers the three cases. (giantswarm/agent-platform#1066)
  • Changed

    • The installation’s skills credential follows the tenant credential naming convention. The agent-manager component’s range starts at 2.3.0 (>=2.3.0 <3.0.0) and the migrate run’s BOM pin is 2.3.0: with agent-manager.skills.mintGitAuthSecret agent-manager mints tenant-credential-agent-manager-skills-token, composes it onto every git-skill agent and keeps its earlier name agent-manager-skills-token filled. The connectivity chart’s agent-manager migrate run gets the current name and the earlier ones (AGENT_MANAGER_SKILLS_GIT_AUTH_SECRET_NAME, AGENT_MANAGER_SKILLS_GIT_AUTH_PREVIOUS_SECRET_NAMES, derived as agent-manager’s chart derives them, agent-manager.skills.previousGitAuthSecretNames included) and moves every agent naming an earlier name to the current one once that Secret exists; a GitOps-owned agent gets the diff in the run’s report. Nothing is done by hand; the earlier Secret keeps working until no agent names it. make verify-migration asserts the run’s inputs.
  • Added

    • (agent-platform) Keep a compact session header at the top while reading by @marians — Scrolling down a long session turns its header into a compact bar at the top of the page with the name, state, agent, Show tool activity, pin and actions menu; scrolling back up restores it. At phone width the bar leaves out Show tool activity.

    Changed

    Fixed

    Development and CI/CD

    Full Changelog: https://github.com/giantswarm/backstage/compare/v3.6.0...v3.7.0

  • Fixed

    • muster auth login signs in again when the server rejects a stored token that has not expired. A token file whose access token was unexpired by its stored expiry but rejected by the server (the server dropped the session) made the login print Establishing SSO connections... and exit 0 without a browser, a sign-in URL or a token, --force included, and muster auth status stayed Not authenticated until the stored expiry passed. The login now checks the session with the server after reusing the stored one and runs the browser (or --no-browser) flow when the server still answers 401; --force always runs the flow. The command exits 0 only once the server accepts the session, and with exit code 3 when a completed flow leaves none; --server and --all sign in to the aggregator the same way. (#1484)
  • Added

    • A ModelConfig in an Organization namespace names only a tenant credential; the platform’s copied Secrets are written only by agent-manager. With kagent on, the ValidatingAdmissionPolicy agent-platform-tenant-model-credentials (Fail, bound with Deny) refuses, in every namespace labelled giantswarm.io/organization but the kagent namespace and for every requester, a ModelConfig (any served version) whose spec.apiKeySecret is not a tenant-credential-* Secret, the prefix an EgressPolicy’s secretKeyRef already keeps there. The exception is agent-manager’s tenant reconciler (agent-manager on and tenants.organizations.enabled), which writes the copy of the platform’s default ModelConfig. A ModelConfig without apiKeySecret is admitted. With agent-manager on and tenants.organizations.enabled, agent-platform-tenant-platform-secrets (Fail, Deny) lets only the reconciler’s ServiceAccount create, update or delete a Secret in those namespaces that carries its label agent-manager.giantswarm.io/tenant-object (before or after the write) or is named as the default ModelConfig’s key Secret (kagent.providers.<default>.apiKeySecretRef); the namespace and garbage collectors may delete one, so a namespace can still go. Every other Secret there, the tenant’s tenant-credential-* ones included, stays with RBAC. agent-platform-tenant-platform-secret-refs (Fail, Deny, same switches) refuses there, for every requester, an Agent or AgentTemplate whose skill or plugin git source names the copied model key Secret as credentialRef, and a RemoteMCPServer whose headersFrom names it as a Secret; other Secrets stay referable (agent-manager names the installation’s skills credential). A key Secret named with the tenant-credential- prefix fails the render. An installation with an Organization’s own ModelConfig on a Secret without the prefix renames that Secret to tenant-credential-<name> before the step; the existing ModelConfig keeps working until its next update. make verify-tenant-rbac asserts both policies’ shape. Needs Kubernetes 1.30 or later.

    Fixed

    • The kagent namespace’s EgressPolicies are no longer readable by every signed-in person. agent-platform:user read egresspolicies.api.kagent.dev in every namespace that binds it, and the kagent namespace binds it to tenants.platform.users (default system:authenticated), so the platform tenant’s egress origins and the names of the Secrets they use were listed to everyone. The kagent namespace now binds tenants.platform.users to the new ClusterRole agent-platform:platform-user, agent-platform:user without EgressPolicies, through the RoleBinding agent-platform:platform-user; the RoleBinding agent-platform:user there is removed by the step (a binding’s role cannot change in place). A tenant’s agent-platform:user, :editor and :admin keep the read in their namespace; the kagent namespace’s editors keep it there. make verify-tenant-rbac asserts it.
  • Added

    Full Changelog: https://github.com/giantswarm/backstage/compare/v3.5.0...v3.6.0