Files
codex/codex-rs/app-server-protocol/schema/json/v2/ThreadAttachmentAddResponse.json
joeytrasatti-openai 3319d9b296 Add app-server APIs for stored thread attachments (#44564)
## What changed

- Add `thread/attachment/add`, `thread/attachment/list`, and `thread/attachment/remove` to manage durable resource references without loading the owning thread or changing conversation history.
- Identify attachments by thread, `attachmentType`, and `identityKey`. Repeated adds return the existing attachment; repeated removals succeed without emitting another update. Listing supports cursor pagination.
- Broadcast `thread/attachment/updated` after creation or deletion, after responding to the requester. Serialize attachment mutations with thread lifecycle operations and reject stores that do not support attachments.
- Update protocol schemas, TypeScript and Python bindings, documentation, and TUI notification handling so attachment updates do not add untracked threads to the agent picker.

## Testing

Add coverage for unloaded threads, pagination, idempotent addition and removal, reattachment, invalid inputs, unsupported stores, response-before-notification ordering across clients, and TUI notification routing.

GitOrigin-RevId: 0d29cf903afd4e931a70a9cf96300475213b34aa
2026-09-10 15:52:09 +00:00

55 lines
1.2 KiB
JSON
Generated

{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"ThreadAttachment": {
"description": "An independently persisted attachment associated with a thread.",
"properties": {
"attachmentType": {
"type": "string"
},
"createdAt": {
"format": "int64",
"type": "integer"
},
"id": {
"type": "string"
},
"identityKey": {
"type": "string"
},
"payload": true
},
"required": [
"attachmentType",
"createdAt",
"id",
"identityKey",
"payload"
],
"type": "object"
},
"ThreadAttachmentAddOutcome": {
"description": "Result of attempting to associate an attachment with a thread.",
"enum": [
"created",
"existing"
],
"type": "string"
}
},
"description": "The created or existing attachment.",
"properties": {
"attachment": {
"$ref": "#/definitions/ThreadAttachment"
},
"outcome": {
"$ref": "#/definitions/ThreadAttachmentAddOutcome"
}
},
"required": [
"attachment",
"outcome"
],
"title": "ThreadAttachmentAddResponse",
"type": "object"
}