v0.8.13 — Queued-message clarity, DeepSeek tool-call recovery, automation reasoning overrides
Features
- Automation prompt actions can set a per-action thinking level —
automations.jsonprompt actions now acceptthinkingLevel, matching the existing per-actionllmConnectionandmodeloverrides. The value is validated in the shared schema, propagated through pending prompts and the "Run test" RPC path, and passed to spawned automation sessions with the same workspace-default fallback semantics as manual sessions. Persisted legacy"think"values are migrated instead of breaking config parsing. (3f8a7d13) - Automation action rows now show model-selection badges — The Automation Info page surfaces configured connection, model, and thinking-level overrides as compact badges under each prompt action, so users can audit which automation will run on which model without opening
automations.json. (78d08edd)
Improvements
- Queued mid-stream messages are visibly acknowledged without glowing bubbles — When a user sends while an agent is already responding, the optimistic user bubble now keeps an inline pulsing
Queuedindicator for at least 2.5 seconds, including Pi/DeepSeek/OpenAI-compatible sessions whose backend acknowledgement arrives almost immediately. Pending user bubbles no longer use the global shimmer overlay; the queued chip is the only transient visual state. The final implementation keeps the optimistic React key stable so the timer is not reset by the server's canonical message id. Fixes #616. (eb81086e, 0d9ca6b5, 083e6f90, 67353f42, fee4c2d1) - OpenAI-compatible tool-call failures now produce actionable diagnostics — The unified network interceptor validates outgoing Chat Completions and Responses API bodies before they hit the provider, enriches opaque empty-body
400responses with sanitized request summaries, and reports malformed histories with structured error details instead of leaving sessions stuck on provider-specific messages. Partially addresses #612. (ab3c8eac) - Interceptor development now uses live source in monorepo runs — Non-packaged Pi subprocesses preload
packages/shared/src/unified-network-interceptor.tsdirectly instead of a stale built bundle, so interceptor changes take effect after a subprocess restart during development. A newCRAFT_DEBUG_SSE_RAW=1toggle can dump raw OpenAI-compatible SSE lines tointerceptor.logwhen diagnosing relay behavior. (13d13635)
Bug Fixes
- DeepSeek and OpenAI-compatible tool calls no longer corrupt replay history with duplicate or missing ids — Streaming reassembly now deduplicates relays that repeat
tool_call.id, handles providers that omittc.indexon argument deltas, and consolidates DeepSeek's two-phaseid/name+ shifted-args stream into one logical tool-call event per call. Responses API replay now synthesizes deterministic missingcall_idvalues and drops orphan outputs. Already-poisoned histories are sanitized on replay by removing empty-id tool calls and orphan tool results, so affected sessions can recover without manual JSONL edits. Fixes #613, #621, and #602. (ab3c8eac, 13d13635) - Queued messages stay in chat during silent redirects — The renderer now distinguishes explicit user stops from silent backend redirects: queued bubbles are only restored to the input on an intentional stop, while background redirects leave the bubble in chat for backend replay.
sendMessagenow acknowledges persistence with{ accepted, messageId }, queued replay failures emit a typed retryable error, and queue boundary logs make support triage easier. Fixes #616. (eb81086e) - Pi/Codex mini-completions avoid unsupported
codex-minivariants under ChatGPT-account auth — Title generation, summarization, and mini completions now filter the wholecodex-minifamily at selection time foropenai-codexChatGPT-account connections, preventing the "not supported when using Codex with a ChatGPT account" failure before a query is attempted. (95618531) - Pi built-in tools accept Craft UI metadata safely — Strict Pi tool schemas now allow Craft's root-level
_displayNameand_intentfields at the adapter boundary, then strip them before invoking the upstream tool implementation. This preserves the richer tool-call UI metadata without tripping schema validation on built-in tools. (16d103d2) - Attachments clear after sending — The composer now clears staged attachments after a message is sent instead of leaving previously attached files ready to resend accidentally. (70f9a80a)
Breaking Changes
- None.