Repository navigation
Beta v0.8.4
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 asCRYSTAL_TOOL_DATAandCRYSTAL_PROJECT_DATA, dotnet host tools readToolHostContext.GlobalDataDirectoryandToolHostContext.ProjectDataDirectory, and plugins receive them throughIPluginDataDirectory.
🐛 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 liveConsole.Outwriter, 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_controlbreakpoint, 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