mirror of
https://github.com/openai/codex.git
synced 2026-04-27 08:05:51 +00:00
Add thread/compact v2 (#10445)
- add `thread/compact` as a trigger-only v2 RPC that submits
`Op::Compact` and returns `{}` immediately.
- add v2 compaction e2e coverage for success and invalid/unknown thread
ids, and update protocol schemas/docs.
This commit is contained in:
@@ -85,6 +85,7 @@ Example (from OpenAI's official VSCode extension):
|
||||
- `thread/archive` — move a thread’s rollout file into the archived directory; returns `{}` on success.
|
||||
- `thread/name/set` — set or update a thread’s user-facing name; returns `{}` on success. Thread names are not required to be unique; name lookups resolve to the most recently updated thread.
|
||||
- `thread/unarchive` — move an archived rollout file back into the sessions directory; returns the restored `thread` on success.
|
||||
- `thread/compact/start` — trigger conversation history compaction for a thread; returns `{}` immediately while progress streams through standard turn/item notifications.
|
||||
- `thread/rollback` — drop the last N turns from the agent’s in-memory context and persist a rollback marker in the rollout so future resumes see the pruned history; returns the updated `thread` (with `turns` populated) on success.
|
||||
- `turn/start` — add user input to a thread and begin Codex generation; responds with the initial `turn` object and streams `turn/started`, `item/*`, and `turn/completed` notifications.
|
||||
- `turn/interrupt` — request cancellation of an in-flight turn by `(thread_id, turn_id)`; success is an empty `{}` response and the turn finishes with `status: "interrupted"`.
|
||||
@@ -239,6 +240,22 @@ Use `thread/unarchive` to move an archived rollout back into the sessions direct
|
||||
{ "id": 24, "result": { "thread": { "id": "thr_b" } } }
|
||||
```
|
||||
|
||||
### Example: Trigger thread compaction
|
||||
|
||||
Use `thread/compact/start` to trigger manual history compaction for a thread. The request returns immediately with `{}`.
|
||||
|
||||
Progress is emitted as standard `turn/*` and `item/*` notifications on the same `threadId`. Clients should expect a single compaction item:
|
||||
|
||||
- `item/started` with `item: { "type": "contextCompaction", ... }`
|
||||
- `item/completed` with the same `contextCompaction` item id
|
||||
|
||||
While compaction is running, the thread is effectively in a turn so clients should surface progress UI based on the notifications.
|
||||
|
||||
```json
|
||||
{ "method": "thread/compact/start", "id": 25, "params": { "threadId": "thr_b" } }
|
||||
{ "id": 25, "result": {} }
|
||||
```
|
||||
|
||||
### Example: Start a turn (send user input)
|
||||
|
||||
Turns attach user input (text or images) to a thread and trigger Codex generation. The `input` field is a list of discriminated unions:
|
||||
|
||||
Reference in New Issue
Block a user