Skip to content

Beta v0.8.4

Choose a tag to compare

@YELANDAOKONG YELANDAOKONG released this 10 Oct 11:00
· 110 commits to release since this release
2387fd4

What's Changed

🚀 New Features

  • Runtime data directories for operator plugins and external tool sets (57251b0) — Every plugin and tool set now receives a global data directory ({home}/data/plugins/<directory> or {home}/data/tools/<directory>, shared across workspaces) and a project data directory (<workspace>/.crystal/data/plugins/<directory> or <workspace>/.crystal/data/tools/<directory>), created when the extension first receives them. Exec tools read them as CRYSTAL_TOOL_DATA and CRYSTAL_PROJECT_DATA, dotnet host tools read ToolHostContext.GlobalDataDirectory and ToolHostContext.ProjectDataDirectory, and plugins receive them through IPluginDataDirectory.

🐛 Fixes

  • Repeated usage snapshots in OpenAI-compatible chat streams (476794b) — Some vendors, such as SiliconFlow, attach usage to several chunks of one stream, which the parser treated as an error and failed the turn. The last snapshot is now kept and reported once after every candidate completes, so token usage is reported once, with the stream's final totals.

  • UTF-8 console output on Windows (4274f6f) — Switching the console code page to UTF-8 replaces Console.Out, but Spectre's profile kept the previous writer, so the braille progress spinner and CJK text were encoded with the old OEM code page. The profile is now rebound to the live Console.Out writer, so the spinner and CJK text render correctly.

  • Extension data directory name validation (9cae9c5) — Data directory names must now be 1-64 characters, start with an ASCII letter, and contain only letters, digits, ., _, or -, matching the rule that plugin and tool-set discovery already enforces. Names that start with a digit or contain spaces are rejected instead of being resolved into the home or workspace data tree.

⚡ Performance

  • Anthropic prompt caching (2387fd4) — Anthropic Messages requests now mark the last system block and the last message content block with an ephemeral cache_control breakpoint, so tool definitions, the system prompt, and the previous round's conversation prefix are served from the provider prompt cache instead of being reprocessed. Cached reads lower per-turn latency and token cost, including multimodal turns, where image expansion keeps the message breakpoint on the split block.

Full Changelog: B0.8.3...B0.8.4