Repository navigation
Beta v0.8.0
What's Changed
⚠️ Heads up: This release contains a large number of changes. Please back up your data, including~/.crystaland your saved sessions, before upgrading.🐞 Found a problem? Please report it on GitHub Issues: https://github.com/YELANDAOKONG/CrystalCode/issues
🚀 New Features
- Operator space at
{home}/space(68ab0ee, 8349152, 371b4a7) —crystal spaceopens the terminal there,/spaceswitches a running session to it, andcrystal run --spaceruns one headless task there. The directory is trusted without a prompt or atrusted.jsonentry and is created when missing, and--spacecannot be combined with--workspace. - Session resume by id, directory, or all workspaces (a586451) —
crystal --resume [id]and/resumechoose a saved session: omit the value to list the current workspace, pass a directory to list it and enter it, passallto list every workspace and enter the chosen session's directory, and pass an id to load that file in place. - Workspace trust for directories (776201e, ca3aaeb) — The first interactive launch in a directory asks whether to trust it when
workspaceTrustis on, remembering a yes in~/.crystal/trusted.json;/trust on|off|forgetmanages the current root and/cdinto an untrusted root asks again.crystal runrefuses an untrusted directory unless--workspace-trust offis passed, and the prompt is framed in a bordered panel. - Per-directory plugin and tool-set switches (4c9f34f) —
/plugins enable|disable|show <directory>and/tools enable|disable|show <directory>change or show one manifest, andcrystal pluginsandcrystal toolsdo the same outside a session with--source home|projectand--format text. - Expanded plugin hooks (51a8a5c, 4c3b2dd, 229c9bc, 117ead8) — Hooks now cover user messages, outbound model requests, and completed model responses, and raw hooks can rebuild one model request or replace the composed prompt, compaction, and approval text.
- Full conversation archive (659f405) — A session keeps the full conversation for resume, fork replay, and export while compaction rewrites only the model context, so earlier turns are no longer lost from the screen or saved history.
- Turn stops on unusual finish reasons (37b751d) — A turn stops before tools when the model does not finish normally; truncated output and a content filter keep the text and end the turn, and unsupported requests are rejected instead of fabricated. Gemini 3 models disable
/thinking offand showThink Defaultfor a stored Off. - Side-question reasoning and Ctrl+C (8e27eda) — The
/btwpanel showsThinkingonce reasoning starts, and Ctrl+C closes the panel or cancels an in-flight side question while the main turn keeps running. crystal versioncommand (072f13c) —crystal versionandcrystal --versionprint the product commit, the Crystal library commit, the SDK, and the runtime, then exit without opening the terminal.- Terminal-safe rendering and transcript scrolling (e746d54, 76a3d29, 45c73cf) — Displayed text is stripped of terminal control sequences and every frame row stays within the terminal width while the transcript scroll stays anchored. The mouse wheel scrolls the transcript,
Up/Downstay with the composer, and text selection needsShift. - Local development install scripts (a121b38) —
sh scripts/install-local.shandscripts/install-local.ps1publish the current checkout as a self-contained single-file Release and replace~/.crystal/binaries/code/while leaving configuration, credentials, and prompts in place. - Verbose thinking panel toggle (6303a32) — The
verboseThinkingsetting and/verbose thinkingshow or hide Thinking cards, including cards restored with a saved session, and are surfaced in/statusand the status widget. - Verbose approval card toggle (fd2f577) — The
verboseApprovalssetting and/verbose approvalsshow or hide auto-pass approval cards, including cards already in the transcript, while the ask overlay always appears. [Assistant]label for replies when thinking is shown (fb04a8b) —crystal run --show-thinkingprints each assistant reply under an[Assistant]heading so a blank line in the thinking block cannot make it ambiguous.
🐛 Fixes
- Refuse workspace changes while a turn is running (4a7ee18) —
/cdand/spaceare refused while a turn is running instead of switching the workspace mid-turn. - Base tool calls on the finish reason and the tool budget (0f974fd) — Streaming turns keep the assistant text and reasoning and drop tool calls when a batch exceeds the tool-call budget, and Gemini emits function calls only for a tool-request finish reason.
- Count stats tools from the archive when context is compacted (2004557) —
/statstool counts and the tool share now read the conversation archive, so a compacted session still reports its tools. - Base side questions on the live turn with reconciled tool calls (1723d7c) —
/btwuses the in-progress transcript during a turn and appends synthetic failure results for tool calls that have no result. - Keep the terminal usable when Ctrl+C cancels a prompt (aee5a78) — Cancelling a prompt with Ctrl+C restores the terminal instead of leaving the alternate screen in a broken state.
- Keep markdown inline styles intact across wrapped rows (231b0f3) — Bold, italic, and code spans survive a row break, and underscores inside identifiers such as
__init__stay literal. - Ignore empty Enter while a turn is running (6a3b44b) — Submitting an empty composer during a turn is a no-op instead of cancelling the turn and firing the queue; Ctrl+C still interrupts.
- Keep trailing-enter and edit-key bursts as composer keys (37f8264) — A printable burst ending in one newline, or containing
BackspaceorDelete, stays in the composer instead of submitting as paste. - Honor verbose switches in inline output (8b123a6) — The verbose thinking, tool, command, and approval switches now also hide their categories in the inline fallback used when the alternate screen is unavailable.
- Flatten displayed line breaks and anchor the scroll on one row (9c92eaa) — Carriage returns, line breaks, and tabs are flattened to spaces so no chrome row keeps a bare control character, and the scroll anchor resolves to the row the operator is reading.
- Keep a split carriage return as a single line break (a6a7253) — A carriage return at the end of a stream chunk waits for the next chunk so a following line feed folds into one break instead of leaving a blank row.
- Undo every enabled mode when alternate screen setup fails (20759cb) — A failed alternate-screen setup restores the title, alternate scroll, and bracketed paste, then leaves the alternate buffer.
- Leave the alternate screen when setup fails (d29df31) — The main screen is restored when enabling the alternate screen throws after the escape was written.
- Label the first running tool call and drop overflow keys (27864e1) — The running-tool activity label uses the first call name, and drained keys are discarded instead of attaching an unfinished escape to the next key.
- Replace the install directory atomically with rollback (b5e250d) — The install scripts move the live tree aside and restore it on failure or interrupt, so a failed replace no longer leaves the install missing.
- Accept the .NET 11 SDK in local install tooling (f9b23c9) —
scripts/install-local.shandscripts/install-local.ps1accept the .NET 10.x and 11.x SDKs.
⚡ Performance
- Snapshot the session archive once when writing state (2477c05) — Session writes take a single archive snapshot and compute referenced image markers in one pass, retrying once if the archive changes underneath.
📝 Documentation
- Deferred TUI provider editing documented (5323b89) — The guide now states that editing providers from the TUI is deferred.
- Hook projection and dependency scope clarified (9e71696) — The plugin docs explain future hook methods and the plugin dependency scope.
- Model hook projection and one-hook registration documented (e092f19) — The plugin docs describe model hook projection and how a plugin registers one hook.
- C# Code Organization skill points to the sibling Clean Code skill (6f46cf7) — The skill now references the sibling C# Clean Code skill.
commit.shmaintenance helper documented (7525498) — The README documents thecommit.shmaintenance helper.- Test portability requirements noted (a13a470) —
STANDARDS.mdnow notes the portability requirements for tests.
Full Changelog: B0.7.0...B0.8.0