Skip to content

Beta v0.8.5

Choose a tag to compare

@YELANDAOKONG YELANDAOKONG released this 15 Oct 18:07
· 57 commits to release since this release
809e138

What's Changed

πŸš€ New Features

  • Session-local background shell tasks (bf23b10) β€” bash_start starts a command in the workspace root and returns a task ID without waiting, and bash_status, bash_logs, and bash_stop observe, read, and stop it. Tasks are Work only, capped at 32 active at once, keep bounded logs with stdin closed, are not persisted, and are stopped when the session closes.
  • Selectable per-model context windows with /context (6196fc1) β€” /context cycles the budgets declared for the active model or sets one by value, such as /context 272k, with Tab completion from that model's choices. The choice is saved per provider and model in config.json.contextSelections and drives compaction, /status, and CTX percentages.
  • Ranked search tool for file discovery (910fe71, 16e51e0) β€” search matches a .NET regular expression against workspace-relative paths and file contents and returns one ranked line per file with matching-line previews and optional path, glob, caseSensitive, offset, and limit arguments. The Work and Plan prompts now direct the model to start with search when it does not know which files matter.
  • Configurable retry policies (a8a3012) β€” retry and approvalRetry in config.json set enabled, maximumRetries, initialDelaySeconds, backoffFactor, jitterFactor, and maximumDelaySeconds for work turns, compaction, and the approval reviewer. A transient reviewer request failure is now retried instead of falling straight through to your approval prompt.
  • Host approval classifier for external tools (13e6e05, fa47d7b) β€” external dotnet tools can implement IHostToolApprovalClassifier.ClassifyApprovalAsync to classify their own calls before invocation, and the host bounds the call with a two-second budget, merges the result so it can only raise risk or authority, and fails closed on timeout, cancellation, or invalid values, disabling that classifier until the catalog reloads. /tools lists a Pre-classifier column, and calls marked RequirePrompt offer only Once or Deny and cannot pass through a policy, a grant, or a reviewer Allow.
  • Reasoning replay across model switches (7ad11d6) β€” reasoning that a newly selected endpoint cannot consume as native state is replayed as assistant text, so switching models keeps the conversation instead of failing the turn.
  • Endpoint-defined thinking effort tokens (f9b302c) β€” a model entry's thinkingEfforts now accepts a custom token that starts with a letter and then uses only letters, digits, and hyphens, and the host forwards it to the endpoint without interpreting it; /thinking and --thinking accept the same tokens.
  • Unavailable thinking effort reporting (c8e7540) β€” crystal run prints a note on its error stream when the requested thinking effort is unavailable for the model and continues with the provider default, and Gemini maps the portable maximum effort to high because neither Gemini generation has a maximum level.
  • Anthropic thinkingDisplay endpoint option (fb8ba48) β€” an Anthropic provider entry in providers.json can set thinkingDisplay in its options object to omitted to leave the display field off a turned-on thinking block, while summarized (the default) asks for summarized thinking text; unknown or protocol-inapplicable options fail loading.
  • Declared audio and video input on model entries (2b23896) β€” audioInput and videoInput are accepted on a model entry and published to plugins, but they are declarations only: the host stores them without sending or accepting audio or video, and imageInput remains the only flag that allows media input.
  • Split bash timeouts with a 3-hour background default (8582c48, 87337fd) β€” the foreground bash timer now defaults to 600 seconds, background bash_start tasks use their own backgroundBashTimeoutSeconds setting independent of the foreground timer, and that setting defaults to 10,800 seconds (3 hours).
  • Nested contextSelections storage (90b59a5) β€” saved context budgets in config.json are written as a nested {"provider": {"model": tokens}} map, and the older flat {"provider/model": tokens} form is still read and is rewritten nested on the next save.
  • Effective retry policies in /status full (809e138) β€” /status full and the full status overlay now report the retry and approval-retry policies in effect, including the retry count, base delay, factor, jitter, and cap.
  • Question tool answers as review authorization evidence (fd56a55) β€” answers you give to the question tool are marked as user evidence in the review transcript and count as user authorization, and the reviewer's transcript budgets grow to 8,000 message tokens and 4,000 tool tokens.
  • Approval review prompt hardening (3357034) β€” the reviewer now judges authorization by what your words materially permit rather than by exact phrasing, and an explicit approval of a concrete action after you were told its risk scores high even after an earlier refusal. It ignores untrusted text that tries to redefine the rules or demand approval and no longer claims to have inspected anything itself.
  • Tighter compaction summaries (9739203) β€” compaction summaries now keep your authorized scope exact, record errors and dead ends with how they were resolved, keep unresolved failures under Blocked, and base Next Move on your most recent request.

πŸ› Fixes

  • Tool calls lost on Responses streams (d985841) β€” GPT streams that send complete arguments in response.function_call_arguments.done or response.output_item.done without argument deltas now produce the tool call payload, and object or array argument values are accepted as raw JSON.
  • Null and blank tool arguments (7625f0e) β€” a JSON null optional string is now read as absent, blank strings pass through so each tool applies its own default, path tools fall back to the workspace root, and approval classifiers agree on the same value.
  • Reasoning and message items on Responses streams (8dcfddf) β€” each provider output_index and item kind pair now maps to a distinct Crystal item index, so reasoning and the following message no longer collide or share an index, and a stale reasoning state event attaches to the item that was streamed.
  • Background shell task limits, logs, and display (81a61a8) β€” background tasks now close stdin, count only active tasks toward the 32-task limit, keep the newest output when the log buffer overflows, and await the process stop in bash_stop; Plan rejects background bash side effects, and the bash tools show progress and summary text.
  • Context window in the header and chrome (027f0fd) β€” the renderer's context window now follows the selected local budget from the session status, so the header and context-window field stay in sync with /context.
  • Multiple reasoning blocks in one assistant turn (d24c670) β€” reasoning blocks now merge in order instead of failing the request: readable text joins the assistant content in arrival order, and Ollama concatenates thinking text.
  • Cancellation while stopping a background task (651e33b) β€” cancelling a turn while bash_stop waits for the process to stop now cancels that wait instead of ignoring the cancellation.
  • Non-finite retry settings and backoff overflow (d05dbb4) β€” retry and approvalRetry values that are NaN or infinite are rejected when settings load, and the exponential delay is clamped to the configured cap before it can overflow.
  • Spurious thinking-off note for models without thinking (6fedd08) β€” a model that does not think already omits reasoning hints, so an explicit off selection no longer prints a fallback note from crystal run; named efforts on such models still report the provider default.

πŸ“ Documentation

  • Plugin-extensible status bar in planned capabilities (7af5eef) β€” README.md, docs/user-guide.md, and BUSINESS.md now list a plugin-extensible status bar among the planned capabilities that are not yet implemented.
  • Open question on configurable built-in tool limits (158b018) β€” BUSINESS.md records that whether built-in tool limits become operator configuration is under consideration and not decided, with the current host-owned constants standing.

πŸ’¬ If you run into any issues, please report them via GitHub Issues: https://github.com/YELANDAOKONG/CrystalCode/issues

Full Changelog: B0.8.4...B0.8.5