mirror of
https://github.com/openai/codex.git
synced 2026-06-04 12:22:15 +00:00
Compare commits
1 Commits
won-fix-ap
...
owen/perfo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0303b871be |
@@ -1478,6 +1478,24 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ListMcpServerStatusParams": {
|
||||
"properties": {
|
||||
"cursor": {
|
||||
@@ -3516,6 +3534,17 @@
|
||||
"ephemeral": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the forked thread, if any.",
|
||||
"type": [
|
||||
@@ -3591,6 +3620,84 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemContentReadParams": {
|
||||
"properties": {
|
||||
"contentId": {
|
||||
"description": "Opaque content identifier returned from a deferred item content placeholder.",
|
||||
"type": "string"
|
||||
},
|
||||
"itemId": {
|
||||
"type": "string"
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"itemId",
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemsListParams": {
|
||||
"properties": {
|
||||
"cursor": {
|
||||
"description": "Opaque cursor to pass to the next call to continue after the last item.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients should prefer `deferred`."
|
||||
},
|
||||
"limit": {
|
||||
"description": "Optional item page size.",
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"sortDirection": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/SortDirection"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Optional item pagination direction; defaults to ascending."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"description": "Turn to hydrate after receiving a summary Turn from `thread/turns/list`.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadListCwdFilter": {
|
||||
"anyOf": [
|
||||
{
|
||||
@@ -3776,9 +3883,20 @@
|
||||
"properties": {
|
||||
"includeTurns": {
|
||||
"default": false,
|
||||
"description": "When true, include turns and their items from rollout history.",
|
||||
"description": "When true, include the traditional fully hydrated thread history: `thread.turns` is populated and each returned Turn has `itemsView: \"full\"`.\n\nWhen false, `thread/read` returns metadata only. Clients can page history separately with `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
}
|
||||
@@ -3917,6 +4035,17 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the resumed thread, if any.",
|
||||
"type": [
|
||||
@@ -4906,6 +5035,54 @@
|
||||
"title": "Thread/readRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "#/definitions/RequestId"
|
||||
},
|
||||
"method": {
|
||||
"enum": [
|
||||
"thread/items/list"
|
||||
],
|
||||
"title": "Thread/items/listRequestMethod",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"$ref": "#/definitions/ThreadItemsListParams"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"method",
|
||||
"params"
|
||||
],
|
||||
"title": "Thread/items/listRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "#/definitions/RequestId"
|
||||
},
|
||||
"method": {
|
||||
"enum": [
|
||||
"thread/item/content/read"
|
||||
],
|
||||
"title": "Thread/item/content/readRequestMethod",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"$ref": "#/definitions/ThreadItemContentReadParams"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"method",
|
||||
"params"
|
||||
],
|
||||
"title": "Thread/item/content/readRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Append raw Responses API items to the thread history without starting a user turn.",
|
||||
"properties": {
|
||||
|
||||
@@ -1930,6 +1930,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ItemCompletedNotification": {
|
||||
"properties": {
|
||||
"completedAtMs": {
|
||||
@@ -3783,10 +3892,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -3817,6 +3935,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -4312,7 +4431,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -4325,7 +4444,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -4412,21 +4531,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
@@ -6074,4 +6193,4 @@
|
||||
}
|
||||
],
|
||||
"title": "ServerNotification"
|
||||
}
|
||||
}
|
||||
@@ -569,6 +569,54 @@
|
||||
"title": "Thread/readRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "#/definitions/v2/RequestId"
|
||||
},
|
||||
"method": {
|
||||
"enum": [
|
||||
"thread/items/list"
|
||||
],
|
||||
"title": "Thread/items/listRequestMethod",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"$ref": "#/definitions/v2/ThreadItemsListParams"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"method",
|
||||
"params"
|
||||
],
|
||||
"title": "Thread/items/listRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "#/definitions/v2/RequestId"
|
||||
},
|
||||
"method": {
|
||||
"enum": [
|
||||
"thread/item/content/read"
|
||||
],
|
||||
"title": "Thread/item/content/readRequestMethod",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"$ref": "#/definitions/v2/ThreadItemContentReadParams"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"method",
|
||||
"params"
|
||||
],
|
||||
"title": "Thread/item/content/readRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Append raw Responses API items to the thread history without starting a user turn.",
|
||||
"properties": {
|
||||
@@ -10169,6 +10217,115 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"InputModality": {
|
||||
"description": "Canonical user-input modality tags advertised by a model.",
|
||||
"oneOf": [
|
||||
@@ -10322,6 +10479,24 @@
|
||||
"title": "ItemStartedNotification",
|
||||
"type": "object"
|
||||
},
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ListMcpServerStatusParams": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
@@ -15397,6 +15572,17 @@
|
||||
"ephemeral": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/v2/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the forked thread, if any.",
|
||||
"type": [
|
||||
@@ -16188,10 +16374,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/v2/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -16222,6 +16417,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -16300,6 +16496,148 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"ThreadItemContentReadParams": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"contentId": {
|
||||
"description": "Opaque content identifier returned from a deferred item content placeholder.",
|
||||
"type": "string"
|
||||
},
|
||||
"itemId": {
|
||||
"type": "string"
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"itemId",
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"title": "ThreadItemContentReadParams",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemContentReadResponse": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"description": "Decoded byte length when known.",
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"description": "Base64-encoded content bytes.",
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"description": "Media type of the returned content when known.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64"
|
||||
],
|
||||
"title": "ThreadItemContentReadResponse",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemsListParams": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"cursor": {
|
||||
"description": "Opaque cursor to pass to the next call to continue after the last item.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/v2/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients should prefer `deferred`."
|
||||
},
|
||||
"limit": {
|
||||
"description": "Optional item page size.",
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"sortDirection": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/v2/SortDirection"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Optional item pagination direction; defaults to ascending."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"description": "Turn to hydrate after receiving a summary Turn from `thread/turns/list`.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"title": "ThreadItemsListParams",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemsListResponse": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"backwardsCursor": {
|
||||
"description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item. Use it with the opposite `sortDirection` to include the anchor item again and catch updates to that item.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"data": {
|
||||
"description": "Full ThreadItems for the requested turn page. Accumulate pages until `nextCursor` is null to hydrate the client-side Turn representation.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/v2/ThreadItem"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"nextCursor": {
|
||||
"description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"data"
|
||||
],
|
||||
"title": "ThreadItemsListResponse",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadListCwdFilter": {
|
||||
"anyOf": [
|
||||
{
|
||||
@@ -16578,9 +16916,20 @@
|
||||
"properties": {
|
||||
"includeTurns": {
|
||||
"default": false,
|
||||
"description": "When true, include turns and their items from rollout history.",
|
||||
"description": "When true, include the traditional fully hydrated thread history: `thread.turns` is populated and each returned Turn has `itemsView: \"full\"`.\n\nWhen false, `thread/read` returns metadata only. Clients can page history separately with `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/v2/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
}
|
||||
@@ -16894,6 +17243,17 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/v2/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the resumed thread, if any.",
|
||||
"type": [
|
||||
@@ -17683,7 +18043,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/v2/ThreadItem"
|
||||
},
|
||||
@@ -17696,7 +18056,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -17824,21 +18184,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
@@ -18553,4 +18913,4 @@
|
||||
},
|
||||
"title": "CodexAppServerProtocol",
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
@@ -1328,6 +1328,54 @@
|
||||
"title": "Thread/readRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "#/definitions/RequestId"
|
||||
},
|
||||
"method": {
|
||||
"enum": [
|
||||
"thread/items/list"
|
||||
],
|
||||
"title": "Thread/items/listRequestMethod",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"$ref": "#/definitions/ThreadItemsListParams"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"method",
|
||||
"params"
|
||||
],
|
||||
"title": "Thread/items/listRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"id": {
|
||||
"$ref": "#/definitions/RequestId"
|
||||
},
|
||||
"method": {
|
||||
"enum": [
|
||||
"thread/item/content/read"
|
||||
],
|
||||
"title": "Thread/item/content/readRequestMethod",
|
||||
"type": "string"
|
||||
},
|
||||
"params": {
|
||||
"$ref": "#/definitions/ThreadItemContentReadParams"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"method",
|
||||
"params"
|
||||
],
|
||||
"title": "Thread/item/content/readRequest",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Append raw Responses API items to the thread history without starting a user turn.",
|
||||
"properties": {
|
||||
@@ -6736,6 +6784,115 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"InitializeCapabilities": {
|
||||
"description": "Client-declared capabilities negotiated during initialize.",
|
||||
"properties": {
|
||||
@@ -6933,6 +7090,24 @@
|
||||
"title": "ItemStartedNotification",
|
||||
"type": "object"
|
||||
},
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ListMcpServerStatusParams": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
@@ -13283,6 +13458,17 @@
|
||||
"ephemeral": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the forked thread, if any.",
|
||||
"type": [
|
||||
@@ -14074,10 +14260,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -14108,6 +14303,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -14186,6 +14382,148 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"ThreadItemContentReadParams": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"contentId": {
|
||||
"description": "Opaque content identifier returned from a deferred item content placeholder.",
|
||||
"type": "string"
|
||||
},
|
||||
"itemId": {
|
||||
"type": "string"
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"itemId",
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"title": "ThreadItemContentReadParams",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemContentReadResponse": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"description": "Decoded byte length when known.",
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"description": "Base64-encoded content bytes.",
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"description": "Media type of the returned content when known.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64"
|
||||
],
|
||||
"title": "ThreadItemContentReadResponse",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemsListParams": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"cursor": {
|
||||
"description": "Opaque cursor to pass to the next call to continue after the last item.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients should prefer `deferred`."
|
||||
},
|
||||
"limit": {
|
||||
"description": "Optional item page size.",
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"sortDirection": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/SortDirection"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Optional item pagination direction; defaults to ascending."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"description": "Turn to hydrate after receiving a summary Turn from `thread/turns/list`.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"title": "ThreadItemsListParams",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadItemsListResponse": {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"backwardsCursor": {
|
||||
"description": "Opaque cursor to pass as `cursor` when reversing `sortDirection`. This is only populated when the page contains at least one item. Use it with the opposite `sortDirection` to include the anchor item again and catch updates to that item.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"data": {
|
||||
"description": "Full ThreadItems for the requested turn page. Accumulate pages until `nextCursor` is null to hydrate the client-side Turn representation.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"nextCursor": {
|
||||
"description": "Opaque cursor to pass to the next call to continue after the last item. if None, there are no more items to return.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"data"
|
||||
],
|
||||
"title": "ThreadItemsListResponse",
|
||||
"type": "object"
|
||||
},
|
||||
"ThreadListCwdFilter": {
|
||||
"anyOf": [
|
||||
{
|
||||
@@ -14464,9 +14802,20 @@
|
||||
"properties": {
|
||||
"includeTurns": {
|
||||
"default": false,
|
||||
"description": "When true, include turns and their items from rollout history.",
|
||||
"description": "When true, include the traditional fully hydrated thread history: `thread.turns` is populated and each returned Turn has `itemsView: \"full\"`.\n\nWhen false, `thread/read` returns metadata only. Clients can page history separately with `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
}
|
||||
@@ -14780,6 +15129,17 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the resumed thread, if any.",
|
||||
"type": [
|
||||
@@ -15569,7 +15929,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -15582,7 +15942,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -15710,21 +16070,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
@@ -16438,4 +16798,4 @@
|
||||
},
|
||||
"title": "CodexAppServerProtocolV2",
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
@@ -285,6 +285,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1035,10 +1144,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1069,6 +1187,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1393,4 +1512,4 @@
|
||||
],
|
||||
"title": "ItemCompletedNotification",
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
@@ -285,6 +285,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1035,10 +1144,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1069,6 +1187,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1393,4 +1512,4 @@
|
||||
],
|
||||
"title": "ItemStartedNotification",
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
@@ -422,6 +422,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1179,10 +1288,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1213,6 +1331,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1324,7 +1443,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1337,7 +1456,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1389,21 +1508,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -64,6 +64,24 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"PermissionProfileModificationParams": {
|
||||
"oneOf": [
|
||||
{
|
||||
@@ -190,6 +208,17 @@
|
||||
"ephemeral": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the forked thread, if any.",
|
||||
"type": [
|
||||
|
||||
@@ -756,6 +756,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -2005,10 +2114,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -2039,6 +2157,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -2225,7 +2344,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -2238,7 +2357,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -2290,21 +2409,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
26
codex-rs/app-server-protocol/schema/json/v2/ThreadItemContentReadParams.json
generated
Normal file
26
codex-rs/app-server-protocol/schema/json/v2/ThreadItemContentReadParams.json
generated
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"contentId": {
|
||||
"description": "Opaque content identifier returned from a deferred item content placeholder.",
|
||||
"type": "string"
|
||||
},
|
||||
"itemId": {
|
||||
"type": "string"
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"itemId",
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"title": "ThreadItemContentReadParams",
|
||||
"type": "object"
|
||||
}
|
||||
29
codex-rs/app-server-protocol/schema/json/v2/ThreadItemContentReadResponse.json
generated
Normal file
29
codex-rs/app-server-protocol/schema/json/v2/ThreadItemContentReadResponse.json
generated
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"description": "Decoded byte length when known.",
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"description": "Base64-encoded content bytes.",
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"description": "Media type of the returned content when known.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64"
|
||||
],
|
||||
"title": "ThreadItemContentReadResponse",
|
||||
"type": "object"
|
||||
}
|
||||
83
codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListParams.json
generated
Normal file
83
codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListParams.json
generated
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"definitions": {
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"SortDirection": {
|
||||
"enum": [
|
||||
"asc",
|
||||
"desc"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"cursor": {
|
||||
"description": "Opaque cursor to pass to the next call to continue after the last item.",
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients should prefer `deferred`."
|
||||
},
|
||||
"limit": {
|
||||
"description": "Optional item page size.",
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"sortDirection": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/SortDirection"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Optional item pagination direction; defaults to ascending."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
},
|
||||
"turnId": {
|
||||
"description": "Turn to hydrate after receiving a summary Turn from `thread/turns/list`.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"threadId",
|
||||
"turnId"
|
||||
],
|
||||
"title": "ThreadItemsListParams",
|
||||
"type": "object"
|
||||
}
|
||||
1519
codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json
generated
Normal file
1519
codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -448,6 +448,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1455,10 +1564,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1489,6 +1607,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1675,7 +1794,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1688,7 +1807,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1740,21 +1859,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -448,6 +448,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1455,10 +1564,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1489,6 +1607,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1675,7 +1794,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1688,7 +1807,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1740,21 +1859,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -1,11 +1,42 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"definitions": {
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"properties": {
|
||||
"includeTurns": {
|
||||
"default": false,
|
||||
"description": "When true, include turns and their items from rollout history.",
|
||||
"description": "When true, include the traditional fully hydrated thread history: `thread.turns` is populated and each returned Turn has `itemsView: \"full\"`.\n\nWhen false, `thread/read` returns metadata only. Clients can page history separately with `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"threadId": {
|
||||
"type": "string"
|
||||
}
|
||||
|
||||
@@ -448,6 +448,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1455,10 +1564,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1489,6 +1607,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1675,7 +1794,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1688,7 +1807,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1740,21 +1859,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -215,6 +215,24 @@
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"LargeContentMode": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Preserve legacy behavior and embed large payloads directly in returned ThreadItems.",
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "Return metadata placeholders for large payloads and fetch bytes through `thread/item/content/read`.",
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
},
|
||||
"LocalShellAction": {
|
||||
"oneOf": [
|
||||
{
|
||||
@@ -1067,6 +1085,17 @@
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"largeContent": {
|
||||
"anyOf": [
|
||||
{
|
||||
"$ref": "#/definitions/LargeContentMode"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"description": "Controls whether large item payloads, such as generated image bytes, are embedded in returned ThreadItems or replaced with deferred content references.\n\nDefaults to `inline` for compatibility. New clients that may load large histories should prefer `deferred` and fetch bytes on demand with `thread/item/content/read`."
|
||||
},
|
||||
"model": {
|
||||
"description": "Configuration overrides for the resumed thread, if any.",
|
||||
"type": [
|
||||
|
||||
@@ -756,6 +756,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -2005,10 +2114,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -2039,6 +2157,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -2225,7 +2344,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -2238,7 +2357,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -2290,21 +2409,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -448,6 +448,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1455,10 +1564,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1489,6 +1607,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1675,7 +1794,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1688,7 +1807,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1740,21 +1859,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -756,6 +756,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -2005,10 +2114,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -2039,6 +2157,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -2225,7 +2344,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -2238,7 +2357,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -2290,21 +2409,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -448,6 +448,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1455,10 +1564,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1489,6 +1607,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1675,7 +1794,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1688,7 +1807,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1740,21 +1859,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -448,6 +448,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1455,10 +1564,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1489,6 +1607,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1675,7 +1794,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1688,7 +1807,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1740,21 +1859,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -422,6 +422,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1179,10 +1288,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1213,6 +1331,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1324,7 +1443,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1337,7 +1456,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1389,21 +1508,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -422,6 +422,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1179,10 +1288,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1213,6 +1331,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1324,7 +1443,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1337,7 +1456,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1389,21 +1508,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
@@ -422,6 +422,115 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ImageGenerationContent": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "Image bytes are embedded directly in the item.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"dataBase64": {
|
||||
"type": "string"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"inline"
|
||||
],
|
||||
"title": "InlineImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"type"
|
||||
],
|
||||
"title": "InlineImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image bytes are available through `thread/item/content/read`.",
|
||||
"properties": {
|
||||
"byteLength": {
|
||||
"format": "int64",
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"contentId": {
|
||||
"type": "string"
|
||||
},
|
||||
"height": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"mimeType": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"deferred"
|
||||
],
|
||||
"title": "DeferredImageGenerationContentType",
|
||||
"type": "string"
|
||||
},
|
||||
"width": {
|
||||
"format": "uint32",
|
||||
"minimum": 0.0,
|
||||
"type": [
|
||||
"integer",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"contentId",
|
||||
"type"
|
||||
],
|
||||
"title": "DeferredImageGenerationContent",
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"description": "Image content is not available yet, or is no longer available.",
|
||||
"properties": {
|
||||
"reason": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"unavailable"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContentType",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"reason",
|
||||
"type"
|
||||
],
|
||||
"title": "UnavailableImageGenerationContent",
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"McpToolCallError": {
|
||||
"properties": {
|
||||
"message": {
|
||||
@@ -1179,10 +1288,19 @@
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"content": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/definitions/ImageGenerationContent"
|
||||
}
|
||||
],
|
||||
"description": "Structured image content metadata. New clients should render from this field instead of reading the legacy `result` field directly."
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"result": {
|
||||
"description": "Legacy base64-encoded image result.\n\nThis is populated in `largeContent: \"inline\"` mode for compatibility. In `largeContent: \"deferred\"` mode, clients should expect this to be empty and use `content` plus `thread/item/content/read` instead.",
|
||||
"type": "string"
|
||||
},
|
||||
"revisedPrompt": {
|
||||
@@ -1213,6 +1331,7 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"content",
|
||||
"id",
|
||||
"result",
|
||||
"status",
|
||||
@@ -1324,7 +1443,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Thread items currently included in this turn payload.",
|
||||
"description": "Turn items at the level of detail described by `itemsView`.",
|
||||
"items": {
|
||||
"$ref": "#/definitions/ThreadItem"
|
||||
},
|
||||
@@ -1337,7 +1456,7 @@
|
||||
}
|
||||
],
|
||||
"default": "full",
|
||||
"description": "Describes how much of `items` has been loaded for this turn."
|
||||
"description": "Indicates how much of this Turn's item history is present in `items`."
|
||||
},
|
||||
"startedAt": {
|
||||
"description": "Unix timestamp (in seconds) when the turn started.",
|
||||
@@ -1389,21 +1508,21 @@
|
||||
"TurnItemsView": {
|
||||
"oneOf": [
|
||||
{
|
||||
"description": "`items` was not loaded for this turn. The field is intentionally empty.",
|
||||
"description": "`items` was not loaded for this Turn. The field is intentionally empty.",
|
||||
"enum": [
|
||||
"notLoaded"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains only a display summary for this turn.",
|
||||
"description": "`items` contains only a display summary for this Turn.\n\nFor `thread/turns/list`, this currently means the first user message and the final assistant message when those items are available.",
|
||||
"enum": [
|
||||
"summary"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this turn.",
|
||||
"description": "`items` contains every ThreadItem available from persisted app-server history for this Turn.",
|
||||
"enum": [
|
||||
"full"
|
||||
],
|
||||
|
||||
File diff suppressed because one or more lines are too long
5
codex-rs/app-server-protocol/schema/typescript/v2/ImageGenerationContent.ts
generated
Normal file
5
codex-rs/app-server-protocol/schema/typescript/v2/ImageGenerationContent.ts
generated
Normal file
@@ -0,0 +1,5 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
|
||||
export type ImageGenerationContent = { "type": "inline", dataBase64: string, mimeType: string | null, byteLength: number | null, } | { "type": "deferred", contentId: string, mimeType: string | null, byteLength: number | null, width: number | null, height: number | null, } | { "type": "unavailable", reason: string, };
|
||||
5
codex-rs/app-server-protocol/schema/typescript/v2/LargeContentMode.ts
generated
Normal file
5
codex-rs/app-server-protocol/schema/typescript/v2/LargeContentMode.ts
generated
Normal file
@@ -0,0 +1,5 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
|
||||
export type LargeContentMode = "inline" | "deferred";
|
||||
@@ -5,6 +5,7 @@ import type { ServiceTier } from "../ServiceTier";
|
||||
import type { JsonValue } from "../serde_json/JsonValue";
|
||||
import type { ApprovalsReviewer } from "./ApprovalsReviewer";
|
||||
import type { AskForApproval } from "./AskForApproval";
|
||||
import type { LargeContentMode } from "./LargeContentMode";
|
||||
import type { SandboxMode } from "./SandboxMode";
|
||||
|
||||
/**
|
||||
@@ -23,4 +24,11 @@ model?: string | null, modelProvider?: string | null, serviceTier?: ServiceTier
|
||||
* Override where approval requests are routed for review on this thread
|
||||
* and subsequent turns.
|
||||
*/
|
||||
approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean};
|
||||
approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, /**
|
||||
* Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
* returned ThreadItems or replaced with deferred content references.
|
||||
*
|
||||
* Defaults to `inline` for compatibility. New clients that may load large histories should
|
||||
* prefer `deferred` and fetch bytes on demand with `thread/item/content/read`.
|
||||
*/
|
||||
largeContent?: LargeContentMode | null, ephemeral?: boolean};
|
||||
|
||||
@@ -15,6 +15,7 @@ import type { DynamicToolCallOutputContentItem } from "./DynamicToolCallOutputCo
|
||||
import type { DynamicToolCallStatus } from "./DynamicToolCallStatus";
|
||||
import type { FileUpdateChange } from "./FileUpdateChange";
|
||||
import type { HookPromptFragment } from "./HookPromptFragment";
|
||||
import type { ImageGenerationContent } from "./ImageGenerationContent";
|
||||
import type { McpToolCallError } from "./McpToolCallError";
|
||||
import type { McpToolCallResult } from "./McpToolCallResult";
|
||||
import type { McpToolCallStatus } from "./McpToolCallStatus";
|
||||
@@ -98,4 +99,17 @@ reasoningEffort: ReasoningEffort | null,
|
||||
/**
|
||||
* Last known status of the target agents, when available.
|
||||
*/
|
||||
agentsStates: { [key in string]?: CollabAgentState }, } | { "type": "webSearch", id: string, query: string, action: WebSearchAction | null, } | { "type": "imageView", id: string, path: AbsolutePathBuf, } | { "type": "imageGeneration", id: string, status: string, revisedPrompt: string | null, result: string, savedPath?: AbsolutePathBuf, } | { "type": "enteredReviewMode", id: string, review: string, } | { "type": "exitedReviewMode", id: string, review: string, } | { "type": "contextCompaction", id: string, };
|
||||
agentsStates: { [key in string]?: CollabAgentState }, } | { "type": "webSearch", id: string, query: string, action: WebSearchAction | null, } | { "type": "imageView", id: string, path: AbsolutePathBuf, } | { "type": "imageGeneration", id: string, status: string, revisedPrompt: string | null,
|
||||
/**
|
||||
* Structured image content metadata. New clients should render from this field instead
|
||||
* of reading the legacy `result` field directly.
|
||||
*/
|
||||
content: ImageGenerationContent,
|
||||
/**
|
||||
* Legacy base64-encoded image result.
|
||||
*
|
||||
* This is populated in `largeContent: "inline"` mode for compatibility. In
|
||||
* `largeContent: "deferred"` mode, clients should expect this to be empty and use
|
||||
* `content` plus `thread/item/content/read` instead.
|
||||
*/
|
||||
result: string, savedPath?: AbsolutePathBuf, } | { "type": "enteredReviewMode", id: string, review: string, } | { "type": "exitedReviewMode", id: string, review: string, } | { "type": "contextCompaction", id: string, };
|
||||
|
||||
9
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemContentReadParams.ts
generated
Normal file
9
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemContentReadParams.ts
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
|
||||
export type ThreadItemContentReadParams = { threadId: string, turnId: string, itemId: string,
|
||||
/**
|
||||
* Opaque content identifier returned from a deferred item content placeholder.
|
||||
*/
|
||||
contentId: string, };
|
||||
17
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemContentReadResponse.ts
generated
Normal file
17
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemContentReadResponse.ts
generated
Normal file
@@ -0,0 +1,17 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
|
||||
export type ThreadItemContentReadResponse = {
|
||||
/**
|
||||
* Media type of the returned content when known.
|
||||
*/
|
||||
mimeType: string | null,
|
||||
/**
|
||||
* Base64-encoded content bytes.
|
||||
*/
|
||||
dataBase64: string,
|
||||
/**
|
||||
* Decoded byte length when known.
|
||||
*/
|
||||
byteLength: number | null, };
|
||||
30
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListParams.ts
generated
Normal file
30
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListParams.ts
generated
Normal file
@@ -0,0 +1,30 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
import type { LargeContentMode } from "./LargeContentMode";
|
||||
import type { SortDirection } from "./SortDirection";
|
||||
|
||||
export type ThreadItemsListParams = { threadId: string,
|
||||
/**
|
||||
* Turn to hydrate after receiving a summary Turn from `thread/turns/list`.
|
||||
*/
|
||||
turnId: string,
|
||||
/**
|
||||
* Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
* returned ThreadItems or replaced with deferred content references.
|
||||
*
|
||||
* Defaults to `inline` for compatibility. New clients should prefer `deferred`.
|
||||
*/
|
||||
largeContent?: LargeContentMode | null,
|
||||
/**
|
||||
* Opaque cursor to pass to the next call to continue after the last item.
|
||||
*/
|
||||
cursor?: string | null,
|
||||
/**
|
||||
* Optional item page size.
|
||||
*/
|
||||
limit?: number | null,
|
||||
/**
|
||||
* Optional item pagination direction; defaults to ascending.
|
||||
*/
|
||||
sortDirection?: SortDirection | null, };
|
||||
23
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListResponse.ts
generated
Normal file
23
codex-rs/app-server-protocol/schema/typescript/v2/ThreadItemsListResponse.ts
generated
Normal file
@@ -0,0 +1,23 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
import type { ThreadItem } from "./ThreadItem";
|
||||
|
||||
export type ThreadItemsListResponse = {
|
||||
/**
|
||||
* Full ThreadItems for the requested turn page. Accumulate pages until `nextCursor` is null
|
||||
* to hydrate the client-side Turn representation.
|
||||
*/
|
||||
data: Array<ThreadItem>,
|
||||
/**
|
||||
* Opaque cursor to pass to the next call to continue after the last item.
|
||||
* if None, there are no more items to return.
|
||||
*/
|
||||
nextCursor: string | null,
|
||||
/**
|
||||
* Opaque cursor to pass as `cursor` when reversing `sortDirection`.
|
||||
* This is only populated when the page contains at least one item.
|
||||
* Use it with the opposite `sortDirection` to include the anchor item again
|
||||
* and catch updates to that item.
|
||||
*/
|
||||
backwardsCursor: string | null, };
|
||||
@@ -1,9 +1,22 @@
|
||||
// GENERATED CODE! DO NOT MODIFY BY HAND!
|
||||
|
||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||
import type { LargeContentMode } from "./LargeContentMode";
|
||||
|
||||
export type ThreadReadParams = { threadId: string,
|
||||
/**
|
||||
* When true, include turns and their items from rollout history.
|
||||
* Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
* returned ThreadItems or replaced with deferred content references.
|
||||
*
|
||||
* Defaults to `inline` for compatibility. New clients that may load large histories should
|
||||
* prefer `deferred` and fetch bytes on demand with `thread/item/content/read`.
|
||||
*/
|
||||
largeContent?: LargeContentMode | null,
|
||||
/**
|
||||
* When true, include the traditional fully hydrated thread history:
|
||||
* `thread.turns` is populated and each returned Turn has `itemsView: "full"`.
|
||||
*
|
||||
* When false, `thread/read` returns metadata only. Clients can page history separately
|
||||
* with `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.
|
||||
*/
|
||||
includeTurns: boolean, };
|
||||
|
||||
@@ -6,6 +6,7 @@ import type { ServiceTier } from "../ServiceTier";
|
||||
import type { JsonValue } from "../serde_json/JsonValue";
|
||||
import type { ApprovalsReviewer } from "./ApprovalsReviewer";
|
||||
import type { AskForApproval } from "./AskForApproval";
|
||||
import type { LargeContentMode } from "./LargeContentMode";
|
||||
import type { SandboxMode } from "./SandboxMode";
|
||||
|
||||
/**
|
||||
@@ -26,4 +27,11 @@ model?: string | null, modelProvider?: string | null, serviceTier?: ServiceTier
|
||||
* Override where approval requests are routed for review on this thread
|
||||
* and subsequent turns.
|
||||
*/
|
||||
approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null};
|
||||
approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, /**
|
||||
* Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
* returned ThreadItems or replaced with deferred content references.
|
||||
*
|
||||
* Defaults to `inline` for compatibility. New clients that may load large histories should
|
||||
* prefer `deferred` and fetch bytes on demand with `thread/item/content/read`.
|
||||
*/
|
||||
largeContent?: LargeContentMode | null};
|
||||
|
||||
@@ -8,11 +8,11 @@ import type { TurnStatus } from "./TurnStatus";
|
||||
|
||||
export type Turn = { id: string,
|
||||
/**
|
||||
* Thread items currently included in this turn payload.
|
||||
* Turn items at the level of detail described by `itemsView`.
|
||||
*/
|
||||
items: Array<ThreadItem>,
|
||||
/**
|
||||
* Describes how much of `items` has been loaded for this turn.
|
||||
* Indicates how much of this Turn's item history is present in `items`.
|
||||
*/
|
||||
itemsView: TurnItemsView, status: TurnStatus,
|
||||
/**
|
||||
|
||||
@@ -172,10 +172,12 @@ export type { HookTrustStatus } from "./HookTrustStatus";
|
||||
export type { HooksListEntry } from "./HooksListEntry";
|
||||
export type { HooksListParams } from "./HooksListParams";
|
||||
export type { HooksListResponse } from "./HooksListResponse";
|
||||
export type { ImageGenerationContent } from "./ImageGenerationContent";
|
||||
export type { ItemCompletedNotification } from "./ItemCompletedNotification";
|
||||
export type { ItemGuardianApprovalReviewCompletedNotification } from "./ItemGuardianApprovalReviewCompletedNotification";
|
||||
export type { ItemGuardianApprovalReviewStartedNotification } from "./ItemGuardianApprovalReviewStartedNotification";
|
||||
export type { ItemStartedNotification } from "./ItemStartedNotification";
|
||||
export type { LargeContentMode } from "./LargeContentMode";
|
||||
export type { ListMcpServerStatusParams } from "./ListMcpServerStatusParams";
|
||||
export type { ListMcpServerStatusResponse } from "./ListMcpServerStatusResponse";
|
||||
export type { LoginAccountParams } from "./LoginAccountParams";
|
||||
@@ -367,6 +369,10 @@ export type { ThreadGoalUpdatedNotification } from "./ThreadGoalUpdatedNotificat
|
||||
export type { ThreadInjectItemsParams } from "./ThreadInjectItemsParams";
|
||||
export type { ThreadInjectItemsResponse } from "./ThreadInjectItemsResponse";
|
||||
export type { ThreadItem } from "./ThreadItem";
|
||||
export type { ThreadItemContentReadParams } from "./ThreadItemContentReadParams";
|
||||
export type { ThreadItemContentReadResponse } from "./ThreadItemContentReadResponse";
|
||||
export type { ThreadItemsListParams } from "./ThreadItemsListParams";
|
||||
export type { ThreadItemsListResponse } from "./ThreadItemsListResponse";
|
||||
export type { ThreadListParams } from "./ThreadListParams";
|
||||
export type { ThreadListResponse } from "./ThreadListResponse";
|
||||
export type { ThreadLoadedListParams } from "./ThreadLoadedListParams";
|
||||
|
||||
@@ -577,6 +577,18 @@ client_request_definitions! {
|
||||
serialization: None,
|
||||
response: v2::ThreadTurnsListResponse,
|
||||
},
|
||||
ThreadItemsList => "thread/items/list" {
|
||||
params: v2::ThreadItemsListParams,
|
||||
// Explicitly concurrent: this primarily reads append-only rollout storage.
|
||||
serialization: None,
|
||||
response: v2::ThreadItemsListResponse,
|
||||
},
|
||||
ThreadItemContentRead => "thread/item/content/read" {
|
||||
params: v2::ThreadItemContentReadParams,
|
||||
// Explicitly concurrent: this reads deferred item content without mutating the thread.
|
||||
serialization: None,
|
||||
response: v2::ThreadItemContentReadResponse,
|
||||
},
|
||||
/// Append raw Responses API items to the thread history without starting a user turn.
|
||||
ThreadInjectItems => "thread/inject_items" {
|
||||
params: v2::ThreadInjectItemsParams,
|
||||
@@ -1834,6 +1846,7 @@ mod tests {
|
||||
request_id: request_id(),
|
||||
params: v2::ThreadTurnsListParams {
|
||||
thread_id: "thread-1".to_string(),
|
||||
large_content: None,
|
||||
cursor: None,
|
||||
limit: None,
|
||||
sort_direction: None,
|
||||
|
||||
@@ -10,6 +10,7 @@ use crate::protocol::v2::CollabAgentToolCallStatus;
|
||||
use crate::protocol::v2::CommandExecutionStatus;
|
||||
use crate::protocol::v2::DynamicToolCallOutputContentItem;
|
||||
use crate::protocol::v2::DynamicToolCallStatus;
|
||||
use crate::protocol::v2::ImageGenerationContent;
|
||||
use crate::protocol::v2::McpToolCallError;
|
||||
use crate::protocol::v2::McpToolCallResult;
|
||||
use crate::protocol::v2::McpToolCallStatus;
|
||||
@@ -586,6 +587,9 @@ impl ThreadHistoryBuilder {
|
||||
id: payload.call_id.clone(),
|
||||
status: String::new(),
|
||||
revised_prompt: None,
|
||||
content: ImageGenerationContent::Unavailable {
|
||||
reason: "image generation has not completed".to_string(),
|
||||
},
|
||||
result: String::new(),
|
||||
saved_path: None,
|
||||
};
|
||||
@@ -597,6 +601,11 @@ impl ThreadHistoryBuilder {
|
||||
id: payload.call_id.clone(),
|
||||
status: payload.status.clone(),
|
||||
revised_prompt: payload.revised_prompt.clone(),
|
||||
content: ImageGenerationContent::Inline {
|
||||
data_base64: payload.result.clone(),
|
||||
mime_type: None,
|
||||
byte_length: None,
|
||||
},
|
||||
result: payload.result.clone(),
|
||||
saved_path: payload.saved_path.clone(),
|
||||
};
|
||||
@@ -1469,6 +1478,11 @@ mod tests {
|
||||
id: "ig_123".into(),
|
||||
status: "completed".into(),
|
||||
revised_prompt: Some("final prompt".into()),
|
||||
content: ImageGenerationContent::Inline {
|
||||
data_base64: "Zm9v".into(),
|
||||
mime_type: None,
|
||||
byte_length: None,
|
||||
},
|
||||
result: "Zm9v".into(),
|
||||
saved_path: Some(test_path_buf("/tmp/ig_123.png").abs()),
|
||||
},
|
||||
|
||||
@@ -3974,9 +3974,19 @@ pub struct ThreadResumeParams {
|
||||
pub developer_instructions: Option<String>,
|
||||
#[ts(optional = nullable)]
|
||||
pub personality: Option<Personality>,
|
||||
/// When true, return only thread metadata and live-resume state without
|
||||
/// populating `thread.turns`. This is useful when the client plans to call
|
||||
/// `thread/turns/list` immediately after resuming.
|
||||
/// Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
/// returned ThreadItems or replaced with deferred content references.
|
||||
///
|
||||
/// Defaults to `inline` for compatibility. New clients that may load large histories should
|
||||
/// prefer `deferred` and fetch bytes on demand with `thread/item/content/read`.
|
||||
#[ts(optional = nullable)]
|
||||
pub large_content: Option<LargeContentMode>,
|
||||
/// When false, `thread/resume` returns the traditional fully hydrated thread history:
|
||||
/// `thread.turns` is populated and each returned Turn has `itemsView: "full"`.
|
||||
///
|
||||
/// When true, return only thread metadata and live-resume state without populating
|
||||
/// `thread.turns`. Clients that choose this scalable mode should page history with
|
||||
/// `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.
|
||||
#[experimental("thread/resume.excludeTurns")]
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
pub exclude_turns: bool,
|
||||
@@ -4078,6 +4088,13 @@ pub struct ThreadForkParams {
|
||||
pub base_instructions: Option<String>,
|
||||
#[ts(optional = nullable)]
|
||||
pub developer_instructions: Option<String>,
|
||||
/// Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
/// returned ThreadItems or replaced with deferred content references.
|
||||
///
|
||||
/// Defaults to `inline` for compatibility. New clients that may load large histories should
|
||||
/// prefer `deferred` and fetch bytes on demand with `thread/item/content/read`.
|
||||
#[ts(optional = nullable)]
|
||||
pub large_content: Option<LargeContentMode>,
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
pub ephemeral: bool,
|
||||
/// When true, return only thread metadata and live fork state without
|
||||
@@ -4651,7 +4668,18 @@ pub enum ThreadActiveFlag {
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadReadParams {
|
||||
pub thread_id: String,
|
||||
/// When true, include turns and their items from rollout history.
|
||||
/// Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
/// returned ThreadItems or replaced with deferred content references.
|
||||
///
|
||||
/// Defaults to `inline` for compatibility. New clients that may load large histories should
|
||||
/// prefer `deferred` and fetch bytes on demand with `thread/item/content/read`.
|
||||
#[ts(optional = nullable)]
|
||||
pub large_content: Option<LargeContentMode>,
|
||||
/// When true, include the traditional fully hydrated thread history:
|
||||
/// `thread.turns` is populated and each returned Turn has `itemsView: "full"`.
|
||||
///
|
||||
/// When false, `thread/read` returns metadata only. Clients can page history separately
|
||||
/// with `thread/turns/list`, then hydrate individual summary turns with `thread/items/list`.
|
||||
#[serde(default)]
|
||||
pub include_turns: bool,
|
||||
}
|
||||
@@ -4668,6 +4696,12 @@ pub struct ThreadReadResponse {
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadTurnsListParams {
|
||||
pub thread_id: String,
|
||||
/// Controls whether large item payloads in summary Turn items are embedded inline or returned
|
||||
/// as deferred content references.
|
||||
///
|
||||
/// Defaults to `inline` for compatibility. New clients should prefer `deferred`.
|
||||
#[ts(optional = nullable)]
|
||||
pub large_content: Option<LargeContentMode>,
|
||||
/// Opaque cursor to pass to the next call to continue after the last turn.
|
||||
#[ts(optional = nullable)]
|
||||
pub cursor: Option<String>,
|
||||
@@ -4683,6 +4717,11 @@ pub struct ThreadTurnsListParams {
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadTurnsListResponse {
|
||||
/// Summary turns for paged history UIs.
|
||||
///
|
||||
/// Each Turn returned by `thread/turns/list` has `itemsView: "summary"` and includes only
|
||||
/// the first user message and final assistant message in `items` when those items are
|
||||
/// available. Use `thread/items/list` to hydrate the complete item list for a turn.
|
||||
pub data: Vec<Turn>,
|
||||
/// Opaque cursor to pass to the next call to continue after the last turn.
|
||||
/// if None, there are no more turns to return.
|
||||
@@ -4694,6 +4733,82 @@ pub struct ThreadTurnsListResponse {
|
||||
pub backwards_cursor: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadItemsListParams {
|
||||
pub thread_id: String,
|
||||
/// Turn to hydrate after receiving a summary Turn from `thread/turns/list`.
|
||||
pub turn_id: String,
|
||||
/// Controls whether large item payloads, such as generated image bytes, are embedded in
|
||||
/// returned ThreadItems or replaced with deferred content references.
|
||||
///
|
||||
/// Defaults to `inline` for compatibility. New clients should prefer `deferred`.
|
||||
#[ts(optional = nullable)]
|
||||
pub large_content: Option<LargeContentMode>,
|
||||
/// Opaque cursor to pass to the next call to continue after the last item.
|
||||
#[ts(optional = nullable)]
|
||||
pub cursor: Option<String>,
|
||||
/// Optional item page size.
|
||||
#[ts(optional = nullable)]
|
||||
pub limit: Option<u32>,
|
||||
/// Optional item pagination direction; defaults to ascending.
|
||||
#[ts(optional = nullable)]
|
||||
pub sort_direction: Option<SortDirection>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadItemsListResponse {
|
||||
/// Full ThreadItems for the requested turn page. Accumulate pages until `nextCursor` is null
|
||||
/// to hydrate the client-side Turn representation.
|
||||
pub data: Vec<ThreadItem>,
|
||||
/// Opaque cursor to pass to the next call to continue after the last item.
|
||||
/// if None, there are no more items to return.
|
||||
pub next_cursor: Option<String>,
|
||||
/// Opaque cursor to pass as `cursor` when reversing `sortDirection`.
|
||||
/// This is only populated when the page contains at least one item.
|
||||
/// Use it with the opposite `sortDirection` to include the anchor item again
|
||||
/// and catch updates to that item.
|
||||
pub backwards_cursor: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadItemContentReadParams {
|
||||
pub thread_id: String,
|
||||
pub turn_id: String,
|
||||
pub item_id: String,
|
||||
/// Opaque content identifier returned from a deferred item content placeholder.
|
||||
pub content_id: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct ThreadItemContentReadResponse {
|
||||
/// Media type of the returned content when known.
|
||||
pub mime_type: Option<String>,
|
||||
/// Base64-encoded content bytes.
|
||||
pub data_base64: String,
|
||||
/// Decoded byte length when known.
|
||||
#[ts(type = "number | null")]
|
||||
pub byte_length: Option<i64>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(rename_all = "camelCase", export_to = "v2/")]
|
||||
pub enum LargeContentMode {
|
||||
/// Preserve legacy behavior and embed large payloads directly in returned ThreadItems.
|
||||
Inline,
|
||||
/// Return metadata placeholders for large payloads and fetch bytes through
|
||||
/// `thread/item/content/read`.
|
||||
Deferred,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
@@ -5434,9 +5549,9 @@ impl From<CoreTokenUsage> for TokenUsageBreakdown {
|
||||
#[ts(export_to = "v2/")]
|
||||
pub struct Turn {
|
||||
pub id: String,
|
||||
/// Thread items currently included in this turn payload.
|
||||
/// Turn items at the level of detail described by `itemsView`.
|
||||
pub items: Vec<ThreadItem>,
|
||||
/// Describes how much of `items` has been loaded for this turn.
|
||||
/// Indicates how much of this Turn's item history is present in `items`.
|
||||
#[serde(default)]
|
||||
pub items_view: TurnItemsView,
|
||||
pub status: TurnStatus,
|
||||
@@ -5455,13 +5570,17 @@ pub struct Turn {
|
||||
|
||||
#[derive(Default, Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(export_to = "v2/")]
|
||||
#[ts(rename_all = "camelCase", export_to = "v2/")]
|
||||
pub enum TurnItemsView {
|
||||
/// `items` was not loaded for this turn. The field is intentionally empty.
|
||||
/// `items` was not loaded for this Turn. The field is intentionally empty.
|
||||
NotLoaded,
|
||||
/// `items` contains only a display summary for this turn.
|
||||
/// `items` contains only a display summary for this Turn.
|
||||
///
|
||||
/// For `thread/turns/list`, this currently means the first user message and the final
|
||||
/// assistant message when those items are available.
|
||||
Summary,
|
||||
/// `items` contains every ThreadItem available from persisted app-server history for this turn.
|
||||
/// `items` contains every ThreadItem available from persisted app-server history for this
|
||||
/// Turn.
|
||||
#[default]
|
||||
Full,
|
||||
}
|
||||
@@ -6250,6 +6369,14 @@ pub enum ThreadItem {
|
||||
id: String,
|
||||
status: String,
|
||||
revised_prompt: Option<String>,
|
||||
/// Structured image content metadata. New clients should render from this field instead
|
||||
/// of reading the legacy `result` field directly.
|
||||
content: ImageGenerationContent,
|
||||
/// Legacy base64-encoded image result.
|
||||
///
|
||||
/// This is populated in `largeContent: "inline"` mode for compatibility. In
|
||||
/// `largeContent: "deferred"` mode, clients should expect this to be empty and use
|
||||
/// `content` plus `thread/item/content/read` instead.
|
||||
result: String,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
#[ts(optional)]
|
||||
@@ -6266,6 +6393,36 @@ pub enum ThreadItem {
|
||||
ContextCompaction { id: String },
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)]
|
||||
#[serde(tag = "type", rename_all = "camelCase")]
|
||||
#[ts(tag = "type", export_to = "v2/")]
|
||||
pub enum ImageGenerationContent {
|
||||
/// Image bytes are embedded directly in the item.
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(rename_all = "camelCase")]
|
||||
Inline {
|
||||
data_base64: String,
|
||||
mime_type: Option<String>,
|
||||
#[ts(type = "number | null")]
|
||||
byte_length: Option<i64>,
|
||||
},
|
||||
/// Image bytes are available through `thread/item/content/read`.
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(rename_all = "camelCase")]
|
||||
Deferred {
|
||||
content_id: String,
|
||||
mime_type: Option<String>,
|
||||
#[ts(type = "number | null")]
|
||||
byte_length: Option<i64>,
|
||||
width: Option<u32>,
|
||||
height: Option<u32>,
|
||||
},
|
||||
/// Image content is not available yet, or is no longer available.
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(rename_all = "camelCase")]
|
||||
Unavailable { reason: String },
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
#[ts(rename_all = "camelCase", export_to = "v2/")]
|
||||
@@ -6727,6 +6884,11 @@ impl From<CoreTurnItem> for ThreadItem {
|
||||
id: image.id,
|
||||
status: image.status,
|
||||
revised_prompt: image.revised_prompt,
|
||||
content: ImageGenerationContent::Inline {
|
||||
data_base64: image.result.clone(),
|
||||
mime_type: None,
|
||||
byte_length: None,
|
||||
},
|
||||
result: image.result,
|
||||
saved_path: image.saved_path,
|
||||
},
|
||||
|
||||
@@ -149,7 +149,9 @@ Example with notification opt-out:
|
||||
- `thread/list` — page through stored rollouts; supports cursor-based pagination and optional `modelProviders`, `sourceKinds`, `archived`, `cwd`, and `searchTerm` filters. Each returned `thread` includes `status` (`ThreadStatus`), defaulting to `notLoaded` when the thread is not currently loaded.
|
||||
- `thread/loaded/list` — list the thread ids currently loaded in memory.
|
||||
- `thread/read` — read a stored thread by id without resuming it; optionally include turns via `includeTurns`. The returned `thread` includes `status` (`ThreadStatus`), defaulting to `notLoaded` when the thread is not currently loaded.
|
||||
- `thread/turns/list` — experimental; page through a stored thread’s turn history without resuming it; supports cursor-based pagination with `sortDirection`, `nextCursor`, and `backwardsCursor`.
|
||||
- `thread/turns/list` — page through a stored thread’s turn history without resuming it; supports cursor-based pagination with `sortDirection`, `nextCursor`, and `backwardsCursor`. Returned turns use `itemsView: "summary"` and include only the first user message and final assistant message in `items` when available.
|
||||
- `thread/items/list` — page through the full item history for a single turn without resuming the thread; supports cursor-based pagination with `sortDirection`, `nextCursor`, and `backwardsCursor`.
|
||||
- `thread/item/content/read` — fetch large deferred item content, such as generated image bytes, after a history-loading API returns a placeholder.
|
||||
- `thread/metadata/update` — patch stored thread metadata in sqlite; currently supports updating persisted `gitInfo` fields and returns the refreshed `thread`.
|
||||
- `thread/memoryMode/set` — experimental; set a thread’s persisted memory eligibility to `"enabled"` or `"disabled"` for either a loaded thread or a stored rollout; returns `{}` on success.
|
||||
- `memory/reset` — experimental; clear the current `CODEX_HOME/memories` directory and reset persisted memory stage data in sqlite while preserving existing thread memory modes; returns `{}` on success.
|
||||
@@ -283,7 +285,14 @@ Valid `personality` values are `"friendly"`, `"pragmatic"`, and `"none"`. When `
|
||||
|
||||
To continue a stored session, call `thread/resume` with the `thread.id` you previously recorded. The response shape matches `thread/start`. When the stored session includes persisted token usage, the server emits `thread/tokenUsage/updated` immediately after the response so clients can render restored usage before the next turn starts. You can also pass the same configuration overrides supported by `thread/start`, including `approvalsReviewer`.
|
||||
|
||||
By default, `thread/resume` includes the reconstructed turn history in `thread.turns`. Experimental clients can pass `excludeTurns: true` to return only thread metadata and live resume state, then call `thread/turns/list` separately if they want to page the turn history over the network. In that mode the server also skips replaying restored `thread/tokenUsage/updated`, which avoids rebuilding turns just to attribute historical usage.
|
||||
App-server supports two history loading modes:
|
||||
|
||||
- Fully hydrated history: the default for `thread/resume`, and the behavior for `thread/read` when `includeTurns: true`. The response includes `thread.turns`; each returned turn has `itemsView: "full"` and `items` contains every `ThreadItem` available from persisted app-server history.
|
||||
- Paged history: pass `excludeTurns: true` to `thread/resume`, or omit `includeTurns` on `thread/read`, to receive only thread metadata. Then call `thread/turns/list` for summary turns and `thread/items/list` to hydrate the full item list for an individual turn.
|
||||
|
||||
Both modes can defer large item payloads. Pass `largeContent: "deferred"` when loading history to receive metadata placeholders for large content, such as generated images, and fetch bytes later with `thread/item/content/read`. Omit `largeContent`, or pass `"inline"`, to preserve the legacy behavior of embedding large payloads directly in returned `ThreadItem`s.
|
||||
|
||||
In paged history mode, `thread/resume` skips replaying restored `thread/tokenUsage/updated`, which avoids rebuilding turns just to attribute historical usage.
|
||||
|
||||
By default, resume uses the latest persisted `model` and `reasoningEffort` values associated with the thread. Supplying any of `model`, `modelProvider`, `config.model`, or `config.model_reasoning_effort` disables that persisted fallback and uses the explicit overrides plus normal config resolution instead.
|
||||
|
||||
@@ -407,7 +416,7 @@ Later, after the idle unload timeout:
|
||||
|
||||
### Example: Read a thread
|
||||
|
||||
Use `thread/read` to fetch a stored thread by id without resuming it. Pass `includeTurns` when you want thread history loaded into `thread.turns`. The returned thread includes `agentNickname` and `agentRole` for AgentControl-spawned thread sub-agents when available.
|
||||
Use `thread/read` to fetch a stored thread by id without resuming it. By default, this returns metadata only so clients can page history with `thread/turns/list` and `thread/items/list`. Pass `includeTurns` when you want the fully hydrated rollout history loaded into `thread.turns`; returned turns use `itemsView: "full"`. The returned thread includes `agentNickname` and `agentRole` for AgentControl-spawned thread sub-agents when available.
|
||||
|
||||
```json
|
||||
{ "method": "thread/read", "id": 22, "params": { "threadId": "thr_123" } }
|
||||
@@ -423,11 +432,9 @@ Use `thread/read` to fetch a stored thread by id without resuming it. Pass `incl
|
||||
} }
|
||||
```
|
||||
|
||||
### Example: List thread turns (experimental)
|
||||
### Example: List thread turns
|
||||
|
||||
Use `thread/turns/list` with `capabilities.experimentalApi = true` to page a stored thread’s turn history without resuming it. By default, results are sorted descending so clients can start at the present and fetch older turns with `nextCursor`. The response also includes `backwardsCursor`; pass it as `cursor` on a later request with `sortDirection: "asc"` to fetch turns newer than the first item from the earlier page.
|
||||
|
||||
Every returned `Turn` includes `itemsView`, which tells clients whether the `items` array was omitted intentionally (`notLoaded`), contains only summary items (`summary`), or contains every item available from persisted app-server history (`full`). Current `thread/turns/list` responses return `full` turns.
|
||||
Use `thread/turns/list` to page a stored thread’s turn history without resuming it. This endpoint is the scalable alternative to loading fully hydrated `thread.turns` in `thread/resume` or `thread/read`. By default, results are sorted descending so clients can start at the present and fetch older turns with `nextCursor`. The response also includes `backwardsCursor`; pass it as `cursor` on a later request with `sortDirection: "asc"` to fetch turns newer than the first item from the earlier page. Returned turns use `itemsView: "summary"`; their `items` field contains only the first user message and final assistant message when those items are available.
|
||||
|
||||
```json
|
||||
{ "method": "thread/turns/list", "id": 24, "params": {
|
||||
@@ -442,6 +449,42 @@ Every returned `Turn` includes `itemsView`, which tells clients whether the `ite
|
||||
} }
|
||||
```
|
||||
|
||||
### Example: List turn items
|
||||
|
||||
Use `thread/items/list` to hydrate a summarized turn returned from `thread/turns/list`. By default, results are sorted ascending so clients can append items in natural turn order. Accumulate pages until `nextCursor` is null, then replace the client-side turn’s `items` with the collected item list and treat that local turn representation as fully hydrated. Pass `largeContent: "deferred"` to keep large item payloads as placeholders even while hydrating the item list. The response also includes `backwardsCursor`; pass it as `cursor` on a later request with `sortDirection: "desc"` to fetch items before the first item from the earlier page.
|
||||
|
||||
```json
|
||||
{ "method": "thread/items/list", "id": 25, "params": {
|
||||
"threadId": "thr_123",
|
||||
"turnId": "turn_456",
|
||||
"limit": 50,
|
||||
"sortDirection": "asc"
|
||||
} }
|
||||
{ "id": 25, "result": {
|
||||
"data": [ ... ],
|
||||
"nextCursor": "newer-items-cursor-or-null",
|
||||
"backwardsCursor": "older-items-cursor-or-null"
|
||||
} }
|
||||
```
|
||||
|
||||
### Example: Read deferred item content
|
||||
|
||||
Some `ThreadItem`s can contain large payloads. For example, `imageGeneration` items expose structured `content`; when `content.type` is `"deferred"`, render a placeholder from the available metadata and call `thread/item/content/read` when the bytes are needed:
|
||||
|
||||
```json
|
||||
{ "method": "thread/item/content/read", "id": 26, "params": {
|
||||
"threadId": "thr_123",
|
||||
"turnId": "turn_456",
|
||||
"itemId": "ig_789",
|
||||
"contentId": "img_abc"
|
||||
} }
|
||||
{ "id": 26, "result": {
|
||||
"mimeType": "image/png",
|
||||
"dataBase64": "...",
|
||||
"byteLength": 1234567
|
||||
} }
|
||||
```
|
||||
|
||||
### Example: Update stored thread metadata
|
||||
|
||||
Use `thread/metadata/update` to patch sqlite-backed metadata for a thread without resuming it. Today this supports persisted `gitInfo`; omitted fields are left unchanged, while explicit `null` clears a stored value.
|
||||
|
||||
@@ -1044,6 +1044,12 @@ impl MessageProcessor {
|
||||
ClientRequest::ThreadTurnsList { params, .. } => {
|
||||
self.thread_processor.thread_turns_list(params).await
|
||||
}
|
||||
ClientRequest::ThreadItemsList { .. } => Err(invalid_request(
|
||||
"thread/items/list is not implemented".to_string(),
|
||||
)),
|
||||
ClientRequest::ThreadItemContentRead { .. } => Err(invalid_request(
|
||||
"thread/item/content/read is not implemented".to_string(),
|
||||
)),
|
||||
ClientRequest::ThreadShellCommand { params, .. } => {
|
||||
self.thread_processor
|
||||
.thread_shell_command(&request_id, params)
|
||||
|
||||
@@ -1839,6 +1839,7 @@ impl ThreadRequestProcessor {
|
||||
) -> Result<ThreadReadResponse, JSONRPCErrorError> {
|
||||
let ThreadReadParams {
|
||||
thread_id,
|
||||
large_content: _,
|
||||
include_turns,
|
||||
} = params;
|
||||
|
||||
@@ -2022,6 +2023,7 @@ impl ThreadRequestProcessor {
|
||||
) -> Result<ThreadTurnsListResponse, JSONRPCErrorError> {
|
||||
let ThreadTurnsListParams {
|
||||
thread_id,
|
||||
large_content: _,
|
||||
cursor,
|
||||
limit,
|
||||
sort_direction,
|
||||
@@ -2268,6 +2270,7 @@ impl ThreadRequestProcessor {
|
||||
base_instructions,
|
||||
developer_instructions,
|
||||
personality,
|
||||
large_content: _,
|
||||
exclude_turns,
|
||||
persist_extended_history: _persist_extended_history,
|
||||
} = params;
|
||||
@@ -2879,6 +2882,7 @@ impl ThreadRequestProcessor {
|
||||
config: cli_overrides,
|
||||
base_instructions,
|
||||
developer_instructions,
|
||||
large_content: _,
|
||||
ephemeral,
|
||||
exclude_turns,
|
||||
persist_extended_history,
|
||||
|
||||
@@ -524,6 +524,7 @@ mod thread_processor_behavior_tests {
|
||||
base_instructions: None,
|
||||
developer_instructions: None,
|
||||
personality: None,
|
||||
large_content: None,
|
||||
exclude_turns: false,
|
||||
persist_extended_history: false,
|
||||
};
|
||||
|
||||
@@ -350,6 +350,7 @@ async fn external_agent_config_import_creates_session_rollouts() -> Result<()> {
|
||||
let request_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id.clone(),
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
@@ -409,6 +410,7 @@ async fn external_agent_config_import_creates_session_rollouts() -> Result<()> {
|
||||
let request_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id,
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
|
||||
@@ -102,6 +102,7 @@ async fn thread_metadata_update_patches_git_branch_and_returns_updated_thread()
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id,
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -465,6 +466,7 @@ async fn thread_metadata_update_can_clear_stored_git_fields() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id,
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
|
||||
@@ -107,6 +107,7 @@ async fn thread_read_returns_summary_without_turns() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -162,6 +163,7 @@ async fn thread_read_can_include_turns() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
@@ -220,6 +222,7 @@ async fn thread_turns_list_can_page_backward_and_forward() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
cursor: None,
|
||||
limit: Some(2),
|
||||
sort_direction: Some(SortDirection::Desc),
|
||||
@@ -246,6 +249,7 @@ async fn thread_turns_list_can_page_backward_and_forward() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
cursor: Some(next_cursor),
|
||||
limit: Some(10),
|
||||
sort_direction: Some(SortDirection::Desc),
|
||||
@@ -264,6 +268,7 @@ async fn thread_turns_list_can_page_backward_and_forward() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: conversation_id,
|
||||
large_content: None,
|
||||
cursor: Some(backwards_cursor),
|
||||
limit: Some(10),
|
||||
sort_direction: Some(SortDirection::Asc),
|
||||
@@ -331,6 +336,7 @@ async fn thread_turns_list_reads_store_history_without_rollout_path() -> Result<
|
||||
request_id: RequestId::Integer(1),
|
||||
params: ThreadTurnsListParams {
|
||||
thread_id: thread_id.to_string(),
|
||||
large_content: None,
|
||||
cursor: None,
|
||||
limit: Some(10),
|
||||
sort_direction: Some(SortDirection::Asc),
|
||||
@@ -416,6 +422,7 @@ async fn thread_read_loaded_include_turns_reads_store_history_without_rollout_pa
|
||||
request_id: RequestId::Integer(2),
|
||||
params: ThreadReadParams {
|
||||
thread_id: thread.id,
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
},
|
||||
})
|
||||
@@ -536,6 +543,7 @@ async fn thread_read_can_return_archived_threads_by_id() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -580,6 +588,7 @@ async fn thread_turns_list_rejects_cursor_when_anchor_turn_is_rolled_back() -> R
|
||||
let read_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
cursor: None,
|
||||
limit: Some(2),
|
||||
sort_direction: Some(SortDirection::Desc),
|
||||
@@ -604,6 +613,7 @@ async fn thread_turns_list_rejects_cursor_when_anchor_turn_is_rolled_back() -> R
|
||||
let read_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: conversation_id,
|
||||
large_content: None,
|
||||
cursor: Some(backwards_cursor),
|
||||
limit: Some(10),
|
||||
sort_direction: Some(SortDirection::Asc),
|
||||
@@ -658,6 +668,7 @@ async fn thread_read_returns_forked_from_id_for_forked_threads() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: forked.id,
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -703,6 +714,7 @@ async fn thread_read_loaded_thread_returns_precomputed_path_before_materializati
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -770,6 +782,7 @@ async fn thread_name_set_is_reflected_in_read_list_and_resume() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: conversation_id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -909,6 +922,7 @@ async fn thread_read_include_turns_rejects_unmaterialized_loaded_thread() -> Res
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id.clone(),
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
@@ -960,6 +974,7 @@ async fn thread_turns_list_rejects_unmaterialized_loaded_thread() -> Result<()>
|
||||
let read_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: thread.id,
|
||||
large_content: None,
|
||||
cursor: None,
|
||||
limit: None,
|
||||
sort_direction: None,
|
||||
@@ -1035,6 +1050,7 @@ async fn thread_read_reports_system_error_idle_flag_after_failed_turn() -> Resul
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id,
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
|
||||
@@ -1368,6 +1368,7 @@ async fn thread_resume_and_read_interrupt_incomplete_rollout_turn_when_thread_is
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: resumed_again.id,
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
@@ -1402,6 +1403,7 @@ async fn thread_resume_without_overrides_does_not_change_updated_at_or_mtime() -
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread_id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
@@ -2722,6 +2724,7 @@ async fn start_materialized_thread_and_restart(
|
||||
let read_id = first_mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
|
||||
@@ -133,6 +133,7 @@ async fn thread_shell_command_history_responses_exclude_persisted_command_execut
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id.clone(),
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
@@ -148,6 +149,7 @@ async fn thread_shell_command_history_responses_exclude_persisted_command_execut
|
||||
let turns_list_id = mcp
|
||||
.send_thread_turns_list_request(ThreadTurnsListParams {
|
||||
thread_id: thread.id.clone(),
|
||||
large_content: None,
|
||||
cursor: None,
|
||||
limit: None,
|
||||
sort_direction: Some(SortDirection::Asc),
|
||||
@@ -321,6 +323,7 @@ async fn thread_shell_command_uses_existing_active_turn() -> Result<()> {
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread.id,
|
||||
large_content: None,
|
||||
include_turns: true,
|
||||
})
|
||||
.await?;
|
||||
|
||||
@@ -282,6 +282,7 @@ async fn thread_unsubscribe_preserves_cached_status_before_idle_unload() -> Resu
|
||||
let read_id = mcp
|
||||
.send_thread_read_request(ThreadReadParams {
|
||||
thread_id: thread_id.clone(),
|
||||
large_content: None,
|
||||
include_turns: false,
|
||||
})
|
||||
.await?;
|
||||
|
||||
Reference in New Issue
Block a user