Repository navigation
Releases: wnzzer/tendly
Releases · wnzzer/tendly
Release list
v0.1.99
✨ Changes
- Usage: a change of plan restarts what a window counts (bfee2a8)
- Tests: a browser suite over the whole app (397a1ae)
🐛 Fixes
- Fix 33 bugs found by an exploratory browser run (66e5558)
- An empty Pi session continued in Claude Code showed "Invalid
conversation response": the handoff's boundary had no profile_name,
so the whole snapshot was refused. The boundary now names its source,
and one stored without a name is still read. - Ctrl+B → made the right pane blink: its locate pulse replaced the
pane's entrance animation, which replayed from transparent when the
pulse ended. The pulse runs on an overlay, and a pane enters once. - Steer, its menu and stop read as three unrelated buttons, and turned
green on hover. Steer and its menu are one split button.
- An empty Pi session continued in Claude Code showed "Invalid
Full changelog: v0.1.98...v0.1.99
v0.1.98
✨ Changes
- Mobile: one card per composer control, and a composer that stays on the keyboard (d29421c)
Full changelog: v0.1.97...v0.1.98
v0.1.97
🐛 Fixes
- Fix imported session history and mobile endpoint and permission menus (6077c71)
Full changelog: v0.1.96...v0.1.97
v0.1.96
✨ Changes
- Settings: save as you edit, in the rows Preferences uses (d8e72d0)
Full changelog: v0.1.95...v0.1.96
v0.1.95
✨ Changes
- Unify chat on Rust and persist cross-client handoffs (27144d9)
- Tests: the real-client smoke check no longer loops over one layer (3b8f9ab)
- Accounts: each Codex reset credit shows when it expires (ddb422d)
Full changelog: v0.1.94...v0.1.95
v0.1.94
✨ Changes
- Models: each model in an endpoint's list shows its context window (39ae9d8)
Full changelog: v0.1.93...v0.1.94
v0.1.93
✨ Changes
- Update model prices (d268fc6)
- Git: the branch menu groups branches by what can be done with them, and cleans up merged ones (d7f5504)
- Checkouts: a session's views follow it into its worktree (dca4ca6)
Full changelog: v0.1.92...v0.1.93
v0.1.92
✨ Changes
- Profiles: each part of the endpoint form is a card, and it fits narrow panes (20266a5)
- Canvas: "+" no longer offers an empty file editor or preview (3a30d36)
- Keys: Ctrl+B reaches everything on the canvas, and every move ends in an input (7e82e67)
- Keys: one grammar and one table for every key in the app (bb9bf65)
- Keys: lists answer the same keys everywhere, and Esc steps back one level (7606196)
- Accounts: a Codex account refreshes its allowance where Claude's does (5b9fb23)
Full changelog: v0.1.91...v0.1.92
v0.1.91
✨ Changes
- Models: check which ones actually run, name the protocol each check spoke, and prune the rest (ed2c353)
- POST /api/endpoint-profiles/probe-models takes a draft profile and up to 24
models and answers per model: ok, unauthorized, not_found, rate_limited,
timeout or failed. Four at a time, 20s each, 64 KiB of body, no redirects,
and no upstream text in the detail — a body can echo the credential. - The request shape stays in the client's adapter (probe_call): Claude Code
asks /v1/messages, Codex asks /v1/responses, Pi asks whichever API the
profile names. Probing is a separate, labelled action, so listing still
never infers. - Each answer carries the protocol it used, and POST probe-plan reports what a
check would send without sending it. The same model can answer on one API
and fail on another, so an answer without its protocol is ambiguous; on Pi
the API is guessed from the URL when the profile is silent, and a guess is
named as one before the run rather than after a batch of failures. - A 404 means "no such model" or "no such route", and the repairs differ. When
every model comes back not_found the panel says the endpoint probably does
not serve that protocol, instead of inviting a prune of the whole catalogue. - The panel marks rows, filters them, and offers the two prunes people
actually want: keep only the working ones, or remove the failed ones.
Rate limits, timeouts and a refused key prove nothing about a model, so they
are never pruned, and pruning everything is refused with a reason.
- POST /api/endpoint-profiles/probe-models takes a draft profile and up to 24
- Prices: other makers' models at their own prices, and a gateway's spelling still finds one (7dd2ba4)
- The generator keeps each maker's own API as well: gemini, deepseek, zai,
moonshot, dashscope (Qwen only), xai and minimax. LiteLLM files some under
the maker's prefix (zai/glm-5.3); clients log the bare name, so that is
what is stored, and a bare entry wins over a prefixed one. A reseller's copy
of a model is left out: its price is the reseller's. 91 models become 212. - A thinking depth spelled into the name (
-thinking,-high,-xhigh, ...)
is the same model at the same rate;-max,-pro,-ministay other
models. - A gateway's vendor prefix (
openrouter/openai/gpt-5.5) and a display name
(GPT 5.5) normalize to the id the list uses.
- The generator keeps each maker's own API as well: gemini, deepseek, zai,
- Usage: output speed and failure rate per model, where the client logs them (e2382d1)
- Speed is output tokens over the time from the request leaving to the last
token arriving, the wait for the first included. Claude Code (recent
versions) logs each request on anapi-requestline its reply refers back
to byrequestRef; Pi stamps a message when its request leaves and the entry
when the reply is complete. Codex logs neither end, so it has no speed. - Failure rate is failed over answered plus failed, only for clients that log
failures. Claude Code's final errors (isApiErrorMessage) count as failed
and itsapi_errorretries are counted apart; neither names a model, so
each is put down to the one last asked for. Pi'serrorstops count, a stop
the person asked for does not. Codex logs no failed request: it shows no
rate rather than 0%. - A Claude reply logged block by block is merged into one call as it is read,
taking its duration from the last block, instead of being dropped as a
duplicate later. - The models table gains Speed and Failure rate after Cost, so a narrow
screen still shows the cost.
- Speed is output tokens over the time from the request leaving to the last
- Terminal: tell the process every grid change, not only the ones a fit makes (9e98e5b)
- Endpoints: one check that finds the client's protocol, then checks the models over it (3126af4)
- Terminal: leaving a conversation's terminal goes back to the conversation (562db07)
- Launch: a client started from inside Claude Code no longer takes itself for part of it (e5b94c5)
- Claude: a failed turn says what the endpoint said, and a /v1 base still reaches it (ba99d72)
- Show per-reply token usage for Codex and Pi (72261ad)
- Add tmux-style pane shortcuts and bulk-close icons (5f2b9a0)
- Make command palette background opaque (fe2b976)
- Chat: the Rust clients report each reply's cost the way the bridge does (b3325d3)
- Profiles: a grouped endpoint form, one check, and a key header per profile (1b06633)
📚 Documentation
- Docs: say what the screenshot harness is for and how to reach it (6d4c5c9)
- Readme: the GitCode star badge, next to the GitHub one (98aa9a4)
Full changelog: v0.1.90...v0.1.91
v0.1.90
✨ Changes
- Branch menu: fetch --prune in the background on open so deleted remote branches drop off (2c66088)
- Codex: throttle streamed command output so a noisy command no longer floods the turn (5e799e9)
- Chat: a queued message refused after the turn goes back to the queue, not nowhere (391a830)
Full changelog: v0.1.89...v0.1.90