Skip to content

Tracking: createSurface.theme policy — watch upstream a2ui-project/a2ui#1118 #64

Description

@joestump-agent

Part of #54. No code change now — this is the standing record of a policy decision and the pointer to revisit it.

Current policy (keep)

Apply treats createSurface as a deliberate no-op (render/composite.go:21-26, :38-42): the wire theme (primaryColor, iconUrl, agentDisplayName) is superseded by host theming via WithStyles, and catalogId is ignored because a2tea's catalog is compiled in. This matches the spec today — the theme property is z.any().optional() and even the reference web basic catalog is not wired to consume it. The design is explicitly open upstream: a2ui-project/a2ui#1118.

When to revisit

If #1118 resolves toward a typed, agent-influenced theme contract, add an opt-in mapping rather than changing the default:

// Host decides if/how agent theme data influences styles. Never applied
// unless the host opts in.
render.WithThemeMapper(func(t a2ui.Theme, base Styles) Styles)
  • Default behavior stays: no mapper → theme ignored, host wins.
  • Theme.AdditionalProperties map[string]any (v09/common.go:41-46) is the escape hatch to watch — upstream experiments will likely land there first.
  • Whatever happens, DefaultStyles() stays monochrome and the no-color test stays.

Acceptance

Close when either (a) #1118 resolves and we've decided to implement or explicitly declined with a doc note in wire-format.md, or (b) the theme property is removed/stabilized upstream in a way that makes this moot.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions