Releases: 1jehuang/jcode
Releases Β· 1jehuang/jcode
Release list
v0.64.2
Idle animation off for everyone
Highlights
- The decorative idle animation is now turned off for all users, including existing configs, via a one-time migration; re-enable it anytime with display.idle_animation = true
Improvements
- Ctrl+R reverse history search now behaves readline-style
- H1/H2 markdown headings render visually larger via underline
Fixes
- Desktop: messages typed mid-turn are queued instead of being dropped with 'already processing'
Full changelog: v0.64.1...v0.64.2
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.64.1
View clear moves to Ctrl+L
Highlights
- The view-only clear now lives on Ctrl+L (terminal-style) instead of Cmd+K, which collided with Cmd+J/K prompt navigation on macOS
Improvements
- Ctrl+L and /cls keep queued messages as well as context; only the rendered transcript is wiped
- While a diagram or diff pane is available, Ctrl+L still focuses the pane as before
Full changelog: v0.64.0...v0.64.1
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.64.0
View-only clear and cross-session prompt history
Highlights
- Cmd+K (or /cls) clears the chat view while the model keeps its full context, unlike /clear which starts a fresh session
- Ctrl+R opens a reverse search over your prompt history across all sessions
Improvements
- /cls and /clear-view are listed in /help and command suggestions, and Cmd+Shift+K stays reserved for line scrolling
Full changelog: v0.63.0...v0.64.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.63.0
Features
- hot-reload keybindings when config.toml changes
- disable idle animation by default
- score visual variety and neighbour contrast from the renderer
- model palette harmony as a renderer-derived graph
- add [features] auto_poke to set the auto-poke default (fixes #664)
- add [features] auto_poke to set the auto-poke default (fixes #664)
- surface colors in the config template and /config summary
- generate a whole harmonious palette from one seed color
- make every color configurable and add palette harmony scoring
- render markdown and math as typography
Fixes
- commit refresh_pinned_todos_if_needed the tick handlers already call
- gate the test-only scroll_bench::run behind cfg(test)
- repair master after a merge orphaned the skill invocation module
- isolate auth state in the mixed-catalog model picker test
- repair a header auth test that could never pass
- stop burning 60fps full frames on an animation nobody can see
- serialize gateway env tests against the shared test-env lock
- apply the corrected palette/theme pass order on master too
- don't luminance-flip the colors a user chose on light terminals
- remove the last render-path panic in harmony scoring
- make palette repair converge, and keep semantic colors meaningful
- make generated palettes colorblind-safe and hue-coherent
- land the key-to-paint metric its call site already depends on
- drop a pinned-todos override committed without its implementation
- don't let an animation frame swallow a keystroke's redraw
- restore interleave_images, dropped by the typing-backoff commit
- correct iTerm2 inline-image sequence (cell height + tmux passthrough)
- base the typing backoff on keystrokes, not provider output
Performance
- take the terminal theme query off the spawn critical path
- record key-to-paint on every paint path and expose it
- let the decorative animation step aside while the user types
Documentation
- mark why the interleave path must take the staged images
- document color configuration and harmony scoring
Other changes
- chore: rebaseline size and swallowed-error ratchets after the pinned-todos tests landed
- chore(tui): allow pinned_todos_payload_ref to be unused outside tests until its renderer lands
- test(tui): commit the pinned-todos payload tests that exercise pinned_todos_payload_ref
- Skip source auto-update quietly when local commits diverge from upstream
- release: v0.63.0
- chore: rebaseline size/panic/swallowed-error ratchets after intentional growth
- chore(tui): allow the pinned-todos state fields to be unread until their renderer lands
- test(tui): guard that every interleave send carries the staged images
- test(tui): pin the perf tier in the redraw-policy tests so they cannot flake
- style(desktop2): rustfmt render.rs and tests/delivery.rs
- desktop2: commit the frame_meter and scroll_profile modules main.rs already references
- Reframe discovery listings as editor's picks in the TUI
- Resolve run_shell merge conflict and fix stale test constructors
- test(tui): make the animated-row copy test able to fail, and restore its diagnostic
- refactor(tui-style): move the measured criteria into their own module
- test(tui-style): freeze the hand-tuned default palette
- refactor(tui): extract the idle-animation repaint policy out of run_shell
- style(tui): rustfmt the import and condition reflow CI was failing on
- test(scripts): record host load so a polluted latency measurement is identifiable
- test(tui): serialize the /colors config tests against the shared env lock
- desktop2: clamp overview navigation at edges instead of wrapping
- chore: remove legacy jcode-desktop crate and its plumbing
- desktop2: show sent versus acknowledged for user messages
- desktop2: stop remapped super+hjkl from flickering the overview
- refactor(config): move color tests into their own file for the size ratchet
- desktop2: show edits as diff cards in the transcript
- desktop2: honor reasoning display modes, with 'current' showing only the live paragraph
- desktop2: show the client version in the footnote on an empty page
- desktop2: boot-up reveal, a donut growing out of black into the window
- test(config): verify configured colors survive a real config file round trip
- desktop2: draw the session strip as nested rectangles instead of labelled bars
- test(tui-style): verify 'every color is configurable' instead of asserting it
- desktop2: remove top-right path/RAM readout from chrome row
- chore: baseline the two intentional swallowed-error patterns in palette.rs
- refactor(tui-style): split generation out of harmony, and stop panicking on the render path
- test(tui): drive /colors through the real App and dispatch table
- test(tui): prove configured colors reach a real rendered frame
- test(tui-style): calibrate harmony scoring against real terminal palettes
- ios: polish UI chrome, banners, bubbles, and code blocks
- test(tui): harnesses that separate app response from screen update
- session: attribute and de-spam bulk session-load bursts
- desktop2: align keyboard shortcuts with web/browser conventions
- desktop2: let a flick actually coast, and gate it at browser range
- test(tui): report the run loop round-trip instead of a fake arrival time
- desktop2: measure scroll feel instead of guessing at it
- test(tui): add a screen-level repro for typed characters flickering
- todo: stop a late score climb from clearing the quality gate
- todo: state the closed-feedback-loop score in one clause
- todo: trim the closed-feedback-loop description
- desktop2: make Super+HJKL actually move in the overview
- build: fail closed when the Linux compat build produces nothing or lies about its commit
- todo: rename hill-climbability to closed feedback loop
- Disable iTerm2 inline images by default (opt in with JCODE_ITERM2_IMAGES=1)
- desktop2: space the hero against the donut's worst-case ink
- desktop2: fix scrolling feel β 3 lines per wheel notch, honour the gesture phase
Full changelog: v0.62.1...v0.63.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.62.1
Performance
- cut the decorative animation's cost on a real session
Other changes
- release: v0.62.1
- chore(scripts): watch a release run to completion instead of assuming a pushed tag shipped
Full changelog: v0.62.0...v0.62.1
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.62.0
Features
- render markdown and math as typography
Fixes
- stop burning 60fps full frames on an animation nobody can see
- land the key-to-paint metric its call site already depends on
- drop a pinned-todos override committed without its implementation
- don't let an animation frame swallow a keystroke's redraw
- restore interleave_images, dropped by the typing-backoff commit
- correct iTerm2 inline-image sequence (cell height + tmux passthrough)
- base the typing backoff on keystrokes, not provider output
- resolve multi-word skill names in slash invocations (fixes #619) (#628)
- carry image attachments through soft interrupts (fixes #623) (#627)
- bound time-to-first-byte so a blackholed request can't hang forever (fixes #620) (#626)
- don't touch shell rc files when install dir is already on PATH (#625)
Performance
- record key-to-paint on every paint path and expose it
- let the decorative animation step aside while the user types
- stop relative cache ages from faking model-catalog changes
- stop per-frame auth lookups from blocking on credential probes
- skip duplicate remote model-catalog snapshots in the client
Other changes
- release: v0.62.0
- test(tui): harnesses that separate app response from screen update
- session: attribute and de-spam bulk session-load bursts
- desktop2: align keyboard shortcuts with web/browser conventions
- desktop2: let a flick actually coast, and gate it at browser range
- test(tui): report the run loop round-trip instead of a fake arrival time
- desktop2: measure scroll feel instead of guessing at it
- test(tui): add a screen-level repro for typed characters flickering
- todo: stop a late score climb from clearing the quality gate
- todo: state the closed-feedback-loop score in one clause
- todo: trim the closed-feedback-loop description
- desktop2: make Super+HJKL actually move in the overview
- build: fail closed when the Linux compat build produces nothing or lies about its commit
- todo: rename hill-climbability to closed feedback loop
- Disable iTerm2 inline images by default (opt in with JCODE_ITERM2_IMAGES=1)
- desktop2: space the hero against the donut's worst-case ink
- desktop2: fix scrolling feel β 3 lines per wheel notch, honour the gesture phase
- tui: make Shift+Enter actually work instead of only offering a fallback
- iOS: UX polish (graph-modeled) + production readiness (#522)
- tui: add a keymap-independent multi-line input fallback
- style: rustfmt server_events.rs after catalog-snapshot change
- test(tui): guard that detailed routes still land after a names-only catalog
- release: v0.61.2
- refactor(server): extract the catalog dedup key into its own module
Full changelog: v0.61.1...v0.62.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.61.1
A responsive input line while turns stream
Highlights
- Typing in the input line stays smooth while a turn is streaming: buffered keystrokes are coalesced into one frame and user input now beats server events to the loop
Improvements
- Remote-mode clients drain bursts of buffered terminal input (fast typing, key repeat, scroll wheels) into a single render, matching the local loop
- Both interactive loops poll terminal input ahead of timers and server/bus chatter, so heavy streaming can no longer starve keystrokes
- Header rebuilds no longer probe credential files on the render thread, removing periodic 40ms+ input stalls
- The desktop2 preview keeps evolving: a niri-style session overview on Super, a live RAM readout, pinned live tool cards, display-paced animations, and lower per-window memory
Fixes
- Separator spacing is preserved after LaTeX symbol commands in rendered markdown
Full changelog: v0.61.0...v0.61.1
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.61.0
Remote sessions, a destructive-command gate, and a faster desktop preview
Highlights
- /remote is a new front door for reaching a running session from another machine over the WebSocket gateway
- Destructive shell commands like recursive deletes now pause for an explicit reflection step before running, closing several bypass routes found in review
- The desktop preview gained selectable transcript text, an Alt spatial session overview, live reasoning and tool-intent streaming, and much smoother scrolling
Improvements
- Quality-gate reminders about open todos now arrive once at the end of a turn instead of nagging after every write
- Interactive model switching works across providers instead of failing when the target model lives on a different provider
- Reasoning effort options are shown for OpenAI-compatible routes that support them, and token usage is reported for their chat streams
- Failing OpenAI-compatible model-catalog refreshes back off instead of retrying hot, and each named provider keeps its own model cache
- A stall watchdog logs long silent hangs during active work so they can be diagnosed
- The slash-command registry was cleaned up: /keys no longer collides, missing aliases were restored, and help gaps were filled
Fixes
- Streaming responses no longer lose data when server-sent events split across chunk boundaries
- A turn that stops expecting a tool call but delivers none now recovers instead of stranding the session
- Pressing Enter immediately after pasting no longer sends the message prematurely
- /clear also clears the side panel
- Copilot retries transient 5xx token-exchange failures and sends the Sonnet reasoning effort correctly
- Configured context windows are honored instead of being overridden by a GPT fallback
- MCP servers started for a session now run in that session's working directory
- agentgrep respects the file field when scoping grep and find
- Session restore no longer hard-pins the Claude/OpenAI OAuth route, and a failed OpenRouter switch preserves the previous profile
- Anthropic requests that would end on an assistant turn get a continuation turn instead of erroring
- A dead terminal no longer mislabels a live session as crashed, and terminal state is restored safely on exit
- Rendered LaTeX math recovers after its image cache is evicted
- Quoted shell arguments are preserved on Windows, and the desktop build no longer breaks on Windows over Unix-only IPC
Full changelog: v0.60.0...v0.61.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.60.0
Discovery repair and desktop preview polish
Highlights
- Tool discovery works again for users whose config was frozen while discovery shipped opt-in, so discover_tools is registered instead of staying silently unavailable
- The desktop preview shows which provider and model is answering, and greets an empty session with an animated halftone donut and rotating composer hints
Improvements
- Discovery gained a financial-data category for market, pricing, and company-data tools
- Keybinding hints show β₯ instead of Alt on macOS
- The desktop preview lays its text out on a consistent vertical rhythm that holds up at any window size
- A hand-written discovery opt-out is still respected, and saving your config no longer bakes today's defaults into it
Fixes
- Idle animations no longer drag the terminal UI into unnecessary full redraws
Full changelog: v0.59.0...v0.60.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available
v0.58.0
Max-effort reasoning streams, model context limits, and the /model picker
Highlights
- OpenAI max-effort reasoning turns no longer time out mid-thought: requests ask for reasoning summaries and the idle budget scales with reasoning effort
- The /model picker shows pretty model names and matches queries like "opus 4.8" against them
- New and unrecognized models no longer silently fall back to a 200K context window
Improvements
- Streaming idle and websocket completion budgets scale with reasoning effort (high 2x, xhigh 3x, max 4x) so long silent thinks are not mistaken for dead connections
- The client-side stall guard budgets against the largest effort-scaled server timeout, so the server's visible error always fires first
- Update failure messages collapse to one short line instead of a wall of text
- Update checks back off from GitHub API rate limits instead of retrying in a loop
- Spawned swarm workers fail loudly when they cannot use their requested model
Fixes
- Config-declared models survive a live catalog refresh
- Named profiles that point elsewhere are treated as user-declared rather than built-in
- Antigravity self-heals the missing thought_signature dead-end instead of getting stuck
- A home-directory subscribe no longer clobbers the working directory of a project session
- Kimi ids with an explicit -256k suffix resolve to 256K instead of the family default
- JCODE_TOOL_CALL_DETAILS now invalidates the cached config when it changes
- Fuzzy matching no longer rejects late matches because of the positional penalty
Full changelog: v0.57.0...v0.58.0
Platform availability
- Linux x86_64: available
- Linux aarch64: available
- macOS Apple Silicon: available
- macOS Intel: available
- Windows x86_64: available
- Windows ARM64: available
- FreeBSD x86_64: available