Skip to content

Beta v0.8.0

Choose a tag to compare

@YELANDAOKONG YELANDAOKONG released this 06 Oct 13:42
· 154 commits to release since this release
426a5b0

What's Changed

⚠️ Heads up: This release contains a large number of changes. Please back up your data, including ~/.crystal and 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 space opens the terminal there, /space switches a running session to it, and crystal run --space runs one headless task there. The directory is trusted without a prompt or a trusted.json entry and is created when missing, and --space cannot be combined with --workspace.
  • Session resume by id, directory, or all workspaces (a586451) — crystal --resume [id] and /resume choose a saved session: omit the value to list the current workspace, pass a directory to list it and enter it, pass all to 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 workspaceTrust is on, remembering a yes in ~/.crystal/trusted.json; /trust on|off|forget manages the current root and /cd into an untrusted root asks again. crystal run refuses an untrusted directory unless --workspace-trust off is 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, and crystal plugins and crystal tools do the same outside a session with --source home|project and --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 off and show Think Default for a stored Off.
  • Side-question reasoning and Ctrl+C (8e27eda) — The /btw panel shows Thinking once reasoning starts, and Ctrl+C closes the panel or cancels an in-flight side question while the main turn keeps running.
  • crystal version command (072f13c) — crystal version and crystal --version print 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/Down stay with the composer, and text selection needs Shift.
  • Local development install scripts (a121b38) — sh scripts/install-local.sh and scripts/install-local.ps1 publish 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 verboseThinking setting and /verbose thinking show or hide Thinking cards, including cards restored with a saved session, and are surfaced in /status and the status widget.
  • Verbose approval card toggle (fd2f577) — The verboseApprovals setting and /verbose approvals show 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-thinking prints 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) — /cd and /space are 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) — /stats tool 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) — /btw uses 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 Backspace or Delete, 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.sh and scripts/install-local.ps1 accept 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.sh maintenance helper documented (7525498) — The README documents the commit.sh maintenance helper.
  • Test portability requirements noted (a13a470) — STANDARDS.md now notes the portability requirements for tests.

Full Changelog: B0.7.0...B0.8.0