v0.10.2 — Link labels, Anthropic account visibility, and prompt-cache fixes
Features
-
Link label value type — Labels can now carry a
linkvalue alongside the existing string/number/date types. A link value renders as a clickable chip (the URL scheme is stripped for display) that opens in your external browser, with a keyboard-accessible "Open link" action in the value popover. The type is threaded through the zod schema, CLI, and agent-prompt layers, and the clickable value appears consistently in the session list, chat display, and chat-input badges. Documented inlabels.mdwith validate/format/resolve tests. (8aae50ad) -
Resolved Anthropic account & org shown per OAuth connection — Settings → LLM Connections now displays the real Anthropic identity ("email · org") each Claude OAuth grant resolves to, captured from the token-exchange response and persisted on the connection. When two connections in the same workspace resolve to the same Anthropic account (shared quota — a previously invisible mis-route), an amber warning is surfaced. This also fixes a load-bearing bug where
updateLlmConnectionrebuilt connections from a hardcoded field allowlist and silently dropped any unlisted field on every save; the identity fields are now preserved with a round-trip test. Fixes #838. (a4b8868e) -
Last sent message restored to the input on Stop — Clicking Stop (an explicit cancel, not a redirect or new send) now copies your last sent message back into the chat input so you can tweak and resend it. It is append-safe: a draft typed while the agent was running is preserved, and the restored text is appended below it. Queued, never-sent messages continue to be handled by the existing restore path. (
cfbe802b)
Improvements
- None.
Bug Fixes
-
Pi prompt-cache no longer busts every turn — The Pi adapter folded volatile context (minute-precision date/time,
session_state, source state) into the system prompt, which pi-ai caches as the prefix ahead of all history — so re-stamping it each turn droppedcacheReadto 0 every turn (notably with non-Claude models such as DeepSeek V4).PromptBuilder.buildContextPartsis now split intobuildVolatileContextParts+buildStableContextParts; the Pi path keeps only stable blocks (workspace capabilities, working directory) in the cached prefix and routes volatile blocks to the user-message tail, mirroring what the Claude path already did. The Claude path stays byte-identical. Fixes #862. (80b478e3) -
Accept-Plan chevron rotates when the dropdown opens — Both Accept-Plan triggers render via Radix
asChild, sodata-state="open"landed on the host<button>, never on the nested chevron<svg>— the self-scopeddata-[state=open]:rotate-180never fired. The rotation is now scoped to a named group on the button (group/accept+group-data-[state=open]/accept:rotate-180). Fixes #840. (f97f483b)
Breaking Changes
- None.