Add appearance metadata to thread sections (#37898)

## What changed

- Add optional `icon` and `color` appearance fields to custom thread sections and expose them through the app-server protocol.
- Persist appearance metadata in SQLite and include it when listing sections or returning threads.
- Let `threadSection/update` preserve an omitted appearance, clear it with `null`, or replace it with a new value.
- Reject appearance fields larger than 64 bytes.

## Testing

- Cover protocol compatibility, persistence across restart, update and clear behavior, and field-length validation.

GitOrigin-RevId: 8f55ce4f42f8bd17aa5416848a85845f681953df
This commit is contained in:
joeytrasatti-openai authored and copyberry committed 2026-08-10 23:32:42 +00:00
1 parent 92912d6d84
commit 1549756b78
54 files changed
+939 -47

No files matched your search

@@ -20922,6 +20922,18 @@
"ThreadSection": {
"description": "An independently persisted, user-visible thread section.",
"properties": {
"appearance": {
"anyOf": [
{
"$ref": "#/definitions/v2/ThreadSectionAppearance"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional appearance synchronized across clients."
},
"id": {
"description": "Opaque UUIDv7 identity that remains stable when the section is renamed.",
"type": "string"
@@ -20937,10 +20949,39 @@
],
"type": "object"
},
"ThreadSectionAppearance": {
"description": "Extensible visual presentation for a custom thread section.",
"properties": {
"color": {
"type": [
"string",
"null"
]
},
"icon": {
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"ThreadSectionCreateParams": {
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Parameters for creating an independently persisted thread section.",
"properties": {
"appearance": {
"anyOf": [
{
"$ref": "#/definitions/v2/ThreadSectionAppearance"
},
{
"type": "null"
}
],
"default": null
},
"name": {
"description": "The user-visible name of the section.",
"type": "string"
@@ -21074,6 +21115,17 @@
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Parameters for updating an independently persisted thread section.",
"properties": {
"appearance": {
"anyOf": [
{
"$ref": "#/definitions/v2/ThreadSectionAppearance"
},
{
"type": "null"
}
],
"description": "Omit to preserve appearance, use `null` to clear it, or provide a replacement."
},
"name": {
"description": "The updated user-visible name of the section.",
"type": "string"