Skip to content

sdk: upgrade to 0.10.0 - #112

Merged
hbrooks merged 7 commits into
mainfrom
sdk/0.10.0
Aug 19, 2026
Merged

hbrooks merged 7 commits into
mainfrom
sdk/0.10.0

Conversation

@hbrooks

@hbrooks hbrooks commented Aug 19, 2026

Copy link
Copy Markdown
Member

Upgrades @ellipsis-dev/sdk 0.8.1 to 0.10.0 and migrates to its breaking changes:

  • Flat tokens_* / cost_* session fields are now nested tokens and cost objects; all displays use the server's cost.total instead of summing four columns.
  • attribution_id moved to attribution.id.
  • AgentSessionSource/AgentSessionStatus schemas renamed to SessionSource/SessionStatus (aliased in types.ts, no call-site churn).
  • sessions.log() renamed to sessions.export(); the CLI command is now agent session export, with log/logs kept as hidden aliases.

Note: tokens.total in 0.10.0 includes prompt-cache reads/writes, so displayed token counts are larger than before by design.

Important

Upgrades @ellipsis-dev/sdk to 0.10.0 and migrates to its breaking changes.

Data model changes:

  • Flat tokens_total and four cost_* columns are now nested tokens and cost objects; all displays use cost.total (the server's millicent total) instead of summing cost_tokens + cost_sandbox_cpu + cost_sandbox_memory + cost_fee.
  • attribution_id moved to attribution.id.
  • Schema types AgentSessionSource and AgentSessionStatus are aliased to SessionSource and SessionStatus in types.ts with no call-site churn.

API and CLI changes:

  • sessions.log() renamed to sessions.export(); the CLI command is now agent session export, with log/logs kept as hidden aliases.

UI refactoring:

  • Session list moved from a fixed band at the bottom to a full-screen picker on the alternate buffer, opened with ctrl+j or by stepping down out of the chat.
  • Chat transcript is now printed into the terminal's scrollback once (via <Static>) rather than being repainted, enabling native scrolling, selection, and clickable links.
  • sessionBar.rows config removed — the picker now uses the full terminal height.
  • New transcript browser feature (ctrl+r) for windowed transcript navigation with folding support.

Note: tokens.total in 0.10.0 includes prompt-cache reads/writes, so displayed token counts are larger than before by design.

This description was created by Ellipsis for 8e7bf0b. It will automatically update as commits are pushed.

…ad scrolls it

The chat owned its own viewport, so the terminal's scrollback was empty and
wheel/trackpad scrolling did nothing unless you armed mouse capture with ctrl+s,
which then cost you text selection and clickable links. Settled rows now go
through ink's Static: printed once into the real scrollback and never repainted,
so scrolling, select/copy and links are the terminal's own.

That trades away what a repaintable window could do, so those move rather than
disappear. ctrl+r opens the transcript on the alternate screen with folding and
arrow-key nav, and the session list becomes a full-screen picker on ctrl+j; it
could not stay pinned under a region that prints into scrollback. Both hop
buffers through ink's suspendTerminal, which erases the old frame and forces a
clean redraw, and withholding the flush while they are up keeps rows out of the
buffer that is about to be destroyed.

Nothing hosts the chat in a rectangle any more, so the pane props, the ctrl+s
capture toggle and the sessionBar row cap go with it.
Painted surfaces and scrollback printing are incompatible. Ink erases only its
current frame's height, so a tall painted frame replaced by the short
content-sized chat leaves its fill on screen, and a flushed row carries its own
fill into scrollback where nothing will ever repaint it. The result was stale
bands striping the terminal.

Structure moves onto glyphs and foreground colour: the canvas, the header band
tint, the composer panel, the message-block tint and the session-row highlight
bars all go, and selection is the cyan marker it already was. That takes the
surface tokens with it, along with the quantization that existed to keep three
near-black fills apart on a 256-colour terminal, and the panel/pad plumbing in
the row builder.
The opening "Connected to ellipsis.dev" baked its glyph into the text span while
every other row puts its mark in the gutter, so the app's first line sat one
gutter-width right of everything under it. It takes the gutter now.

Replaces the "ctrl+r transcript / ctrl+j sessions" hint with a command menu:
typing / lists the commands with descriptions, each character narrows by prefix,
up/down walk them, tab completes, and esc dismisses. /stop, /transcript,
/sessions and /exit (aliased /quit) cover what the keys did. Enter completes a
partial name and submits a complete one, so it never refuses the command the
menu is pointing at. An unknown command is refused rather than sent on as prose,
since the agent cannot tell a typo'd command from a message you meant.

Also brings back the one background the new layout can support: the composer's.
It lives in the live frame for the whole session, so it is repainted every frame
and never flushed to scrollback, which is what made the other fills unworkable.
The input is the last child of a pane that clips its overflow, so a terminal too
short for the heading and fact above it took the difference out of the input's
bottom padding: the tint stopped flush against the prompt, leaving a box with a
lid and no floor. The heading and fact now sit in their own shrinkable box and
yield first, and the input refuses to shrink at all.

Where the rows genuinely are not there, the padding goes from both edges rather
than just the bottom one: a box padded on top and open underneath looks broken,
where a box with no padding just looks tight.
…ns off

Ink treats CI as non-interactive (is-in-ci), and a non-interactive render buffers
everything into one final frame: no erase sequences, no repaints, no <Static>
flush as it happens. Both harnesses exist to measure exactly that difference — a
row written once and owned by the terminal versus one rewritten every frame — so
under CI they were asserting against a single frame and failing.

They now pass interactive: true, the same flag runConnect pins for the same
reason. Verified with CI=true under both vitest and bun.

@ellipsis-dev ellipsis-dev Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 8e7bf0b in 9 minutes, 6 seconds.
  • Reviewed 6 commits with 2284 lines of code in 22 files
  • Ran 1 review agent producing 0 comments where 0 were posted
  • This pipeline runs no gatekeeper, so findings are posted as written.
  • View full details on ellipsis.dev

This review was created by Ellipsis. You can tag @ellipsis in this pull request.

# Conflicts:
#	test/connect-render.test.ts
@hbrooks
hbrooks merged commit 9442bb7 into main Aug 19, 2026
1 check passed

@ellipsis-dev ellipsis-dev Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Incrementally reviewed 2afad79 in 1 minute, 53 seconds.
  • Reviewed 1 commit with 0 lines of code in 0 files
  • Ran 1 review agent producing 0 comments where 0 were posted
  • This pipeline runs no gatekeeper, so findings are posted as written.
  • View full details on ellipsis.dev

This review was created by Ellipsis. You can tag @ellipsis in this pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant