AI Agents

  • Added

    • Two components, off by default: components.model-manager (model-manager, model inventory / pull / load / unload / delete and kagent ModelConfig wiring on an Ollama or KServe backend) and components.agent-manager (agent-manager, the agent write surface: kagent agents as Flux HelmReleases of the agent chart), each as REST and MCP through muster’s own MCPServer CR and each acting as the user (OAuth 2.1 resource server, forwarded id_tokens, downstream OAuth to the Kubernetes API, no ServiceAccount RBAC). The model-manager: / agent-manager: blocks are forwarded to the component releases; the modelManager: / agentManager: blocks drive the wiring the connectivity chart renders for them — the agentgateway route and JWT policy (route.*, the kagent controller route’s shape), the network policies in both flavors (ingress from the data plane, muster and the kubelet’s probes; egress to DNS, the Kubernetes API, the identity provider, the Ollama endpoint or the Hugging Face Hub, the agent chart’s registry and GitHub) and render-time guards (backend, endpoint, KServe and Flux APIs, kagent on and same namespace, muster for the MCPServer CR, the OAuth inputs, route mode / hostname / parentRef / JWKS egress). make verify-managers covers them; examples/customer-bom.yaml pins both. No installation needs to act: both components are off and the default render is unchanged.
    • agent-platform.dnsEgressWithProxy, agent-platform.urlHost and agent-platform.idpEgress.cilium helpers in the connectivity chart: a DNS egress rule with Cilium’s proxy clause for policies that select destinations by name, and the egress a platform service needs to reach the login identity provider (by name on 443, plus the cluster entity on 443/10443 for an issuer behind an in-cluster Gateway).
  • Fixed

    • An MCPServer configured for session-level auth (spec.auth.forwardToken, or tokenExchange.enabled) is no longer registered globally with a token-less client when its backend answers muster’s connection probe anonymously — for example the old, anonymous pod during a rollover to an OAuth-protected release. The decision to handle a server per session now comes from the server’s own definition rather than from the aggregator registry entry that only exists after a registration (and is gone while the reconciler restarts a changed server): the service treats the accepted anonymous probe like a 401 — the probe client is closed, the server reports Auth Required, and every session connects with the caller’s own token — and the aggregator refuses to attach a shared client to such a server on any path. Previously the shared client 401-looped once the protected pod took over and every session’s tool call failed with authorization required until muster was restarted. A behavioral scenario (oauth-sso-forwarding-anonymous-backend) covers both a server created with forwardToken and one that gains it through core_mcpserver_update. (#1135)
    • A pending-auth registration is no longer dropped by the aggregator’s handling of a stale service state-change event. The auth-required hook registers the entry synchronously on the server’s 401, while the starting event from the same start is still queued for the aggregator’s event handler; the handler declines to deregister a server whose entry says auth_required, but that check and the removal were two steps and the registration could land in between (the RegisteredAt guard did not catch it when the entry was created before the deregistration was timestamped). core_auth_login then answered “Server not found” until the periodic pending-auth heal ran, up to 5 s later. State-change-driven deregistration now decides under the registry lock and keeps entries that require per-session authentication; the paths for a deleted service are unchanged.
  • Fixed

    • (deps) Bump OTLP exporter modules to v1.46.0 in #1137 by @teemow

    Full Changelog: https://github.com/giantswarm/muster/compare/v5.7.16...v5.7.17

  • Changed

    Full Changelog: https://github.com/giantswarm/muster/compare/v5.7.15...v5.7.16

  • Fixed

    Full Changelog: https://github.com/giantswarm/muster/compare/v5.7.14...v5.7.15

  • Fixed

    Full Changelog: https://github.com/giantswarm/klaus/compare/v0.0.318...v0.0.319

  • Changed

    Full Changelog: https://github.com/giantswarm/klaus/compare/v0.0.317...v0.0.318

  • Fixed

    • (deps) Update module github.com/giantswarm/apptest-framework/v5 to v5.2.6 in #1130 by @renovate[bot]

    Full Changelog: https://github.com/giantswarm/muster/compare/v5.7.13...v5.7.14

  • Fixed

    • The workflow executor’s debug logging no longer prints workflow arguments, resolved step arguments, step results, template results or the final result. Those are user data – a token passed as a workflow input, a credential returned by a step – and were dumped verbatim with %+v at debug level. The lines now carry the workflow name, step id, argument and result key names, value shapes and sizes only. A behavioral scenario (workflow-args-never-logged) runs a secret through a workflow and asserts it never reaches muster serve’s output.
  • Fixed

    • (testing) Guard reserved instance ports through the exec window in #1131 by @teemow

    Full Changelog: https://github.com/giantswarm/muster/compare/v5.7.11...v5.7.12