sdk: upgrade to 0.10.0 - #112
Merged
Merged
Conversation
…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.
Contributor
There was a problem hiding this comment.
Important
Looks good to me! 👍
Reviewed 8e7bf0b in 9 minutes, 6 seconds.
- Reviewed
6commits with2284lines of code in22files - Ran
1review agent producing0comments where0were posted - This pipeline runs no gatekeeper, so findings are posted as written.
- View full details on ellipsis.dev
This review was created by . You can tag
@ellipsis in this pull request.
# Conflicts: # test/connect-render.test.ts
Contributor
There was a problem hiding this comment.
Important
Looks good to me! 👍
Incrementally reviewed 2afad79 in 1 minute, 53 seconds.
- Reviewed
1commit with0lines of code in0files - Ran
1review agent producing0comments where0were posted - This pipeline runs no gatekeeper, so findings are posted as written.
- View full details on ellipsis.dev
This review was created by . You can tag
@ellipsis in this pull request.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upgrades @ellipsis-dev/sdk 0.8.1 to 0.10.0 and migrates to its breaking changes:
tokens_*/cost_*session fields are now nestedtokensandcostobjects; all displays use the server'scost.totalinstead of summing four columns.attribution_idmoved toattribution.id.AgentSessionSource/AgentSessionStatusschemas renamed toSessionSource/SessionStatus(aliased in types.ts, no call-site churn).sessions.log()renamed tosessions.export(); the CLI command is nowagent session export, withlog/logskept as hidden aliases.Note:
tokens.totalin 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:
tokens_totaland fourcost_*columns are now nestedtokensandcostobjects; all displays usecost.total(the server's millicent total) instead of summingcost_tokens + cost_sandbox_cpu + cost_sandbox_memory + cost_fee.attribution_idmoved toattribution.id.AgentSessionSourceandAgentSessionStatusare aliased toSessionSourceandSessionStatusintypes.tswith no call-site churn.API and CLI changes:
sessions.log()renamed tosessions.export(); the CLI command is nowagent session export, withlog/logskept as hidden aliases.UI refactoring:
ctrl+jor by stepping down out of the chat.<Static>) rather than being repainted, enabling native scrolling, selection, and clickable links.sessionBar.rowsconfig removed — the picker now uses the full terminal height.Note:
tokens.totalin 0.10.0 includes prompt-cache reads/writes, so displayed token counts are larger than before by design.This description was created by
for 8e7bf0b. It will automatically update as commits are pushed.