Skip to content

v2.2.2-preview.1

@nikita-ashihmin nikita-ashihmin tagged this 10 Oct 03:12
## Summary

The title of a `session/list` row and of a `_session/list/changes` row
now follows AIR's native Codex chain
(`CodexAppServerProtocol.resolveThreadTitle`): the first non-blank of
`Thread.name`, `title`, `summary` and `preview`, collapsed to one line.

- Before: `name ?? preview`, cut to 256 characters. A blank (not null)
`name` hid the preview.
- Current Codex threads carry only `name` and `preview`; `title` and
`summary` are read when Codex sends them, as AIR reads them.
- Both list paths (with and without `sessionIndex`) and subscription
rows share `listedSessionTitle`.

## Decisions

- **No cut for listed titles.** The native list does not cut, ACP
`SessionInfo.title` has no length limit, and the stdio transport has
none either. Codex already sends the whole `preview` to the adapter, so
the adapter adds no payload of its own.
- **Rename limit unchanged.** `_session/rename` still cuts to 256, so
the write queue and validation are unchanged. `session_info_update`
titles of loaded sessions keep their 256 cut as well (out of scope).
- **`null` fallback, not `Thread <id>`.** ACP `SessionInfo.title` is
optional and nullable ("Human-readable title for the session"), and
AIR's ACP list (`SessionListRow`) shows the session id for a `null`
title. A synthetic `Thread <id8>` would replace that and would count as
a real title.

## Test plan

- `SessionTitle.test.ts`: chain order, blank fields fall through, `null`
when all blank, no cut.
- `session-index.test.ts`: `session/list` rows through the chain without
a cut; a subscription change carries the uncut name.
- `npm run typecheck`, `npm test`, `npm run bundle:all`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Assets 2
Loading