unstale

npm / @assistant-ui/core

@assistant-ui/core

What changed in @assistant-ui/core 0.3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-27.

1 breaking2 deprecations13 new APIs and options1 performance3 behavior and defaults34 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.8 on npm

@assistant-ui/core 0.354 changes

Breaking changes 1

  • Adapters may omit unarchive; archived threads then open without unarchiving, and explicit unarchive rejects.

    0.3.30release notes

Deprecations 2

  • Deprecated for removal in a future minor release; return the same adapters from unstable_useAdapters instead.

    0.3.31release notes

  • Direct use of this runtime core is deprecated.

    0.3.30release notes

New APIs and options 13

  • The store reports every composer text write with the text it left and its origin, distinguishing clearing a draft from sending, resetting, or recalling input history.

    0.3.31release notes

  • A completed turn whose thread history fails to store is reported as a persistence_error run.

    0.3.31release notes

  • setText accepts an origin option so composer text writes can be attributed to their source.

    0.3.31release notes

  • Exposes thread-list unarchive support and disables unarchive controls when the adapter cannot restore archived threads.

    0.3.31release notes

  • Accepts an optional name for its interactable, allowing the creating tool to have a different name.

    0.3.31release notes

  • Adapters can opt in to interrupted-run resumption when they keep an exact checkpoint; the flag is optional on thread state for compatibility.

    0.3.30release notes

  • Adds a Resume control for interrupted runs; it is disabled while the draft is not empty or the thread is busy.

    0.3.30release notes

  • ModelContext() accepts maxSystemLength to cap the merged system prompt, trimming the lowest-priority parts first.

    0.3.30release notes

  • ModelContext() accepts mergeSystem to let developers combine prioritized SystemParts themselves.

    0.3.30release notes

  • Resumes an interrupted run from its exact checkpoint; concurrent resumes share one attempt.

    0.3.30release notes

  • Adds a hook for resuming interrupted runs when the adapter reports canResume.

    0.3.30release notes

  • Tool-call parts carry responseDeliveryStatus: "queued" while replies are held and unsent, preventing the tool UI from showing them as sent.

    0.3.29release notes

  • Thread state reports failed switches, such as a URL-controlled threadId whose fetch rejects; controlled switches retry when the browser comes online or the tab becomes visible.

    0.3.29release notes

Performance 1

  • Skips unchanged remote thread resources when the thread list host re-renders.

    0.3.31release notes

Behavior and default changes 3

  • Failed and stopped turns now report outcomes including rate_limited, validation_failed, server_error, aborted, and incomplete; HTTP failures include their status as error_code.

    0.3.31release notes

  • Runs on the RemoteThreadList store client unless the mounting adapter sets unstable_Provider; later adapters are served through unstable_useAdapters, and a failed first load requires reload() to retry after a controlled threadId change.

    0.3.30release notes

  • assistant-cloud is now a dependency rather than an optional peer, so @assistant-ui/core/react loads in Node and Vitest without installing it separately.

    0.3.29release notes

Fixes and other changes 34

  • Marks useLocalRuntime, useRemoteThreadListRuntime, useCloudThreadListAdapter, and CloudFileAttachmentAdapter as client modules.

    0.3.31release notes

  • With a conversion cache, a streaming token no longer rejoins every finished message in the thread.

    0.3.31release notes

  • Keeps generated external message timestamps stable across conversion cache invalidations and in the external store runtime.

    0.3.31release notes

  • Forwards composer store events from ExternalThread.

    0.3.31release notes

  • Keeps replacement speech stoppable after stale utterance callbacks, supersedes a speak started during cancellation, and clears speech state when adapter cancellation throws.

    0.3.31release notes

  • Reads LangGraph and LangChain interactable update results returned as JSON text so id-less updates remain attributed to the resolved instance.

    0.3.31release notes

  • Preserves earlier answers' streaming timing when a later run ends without new output.

    0.3.31release notes

  • History messages listed before their parents are preserved using parent-first ordering; the selected head and sibling branches remain while malformed messages and orphaned descendants are skipped.

    0.3.30release notes

  • Composer text is visible as soon as setText returns, preventing inputs with their own state from moving the caret to the end.

    0.3.30release notes

  • Title generation is retried after a thread's first run ends if it still has no title, including for threads created outside the runtime.

    0.3.30release notes

  • A controlled new-thread request stays selected when the previous draft initializes during the switch.

    0.3.30release notes

  • Custom metadata from draft threads is passed to remote thread initialization.

    0.3.30release notes

  • Selectors that read through a forwarding client are tracked when its target changes.

    0.3.30release notes

  • Labels and IDs containing directive delimiters are preserved without changing existing bracket-form directives.

    0.3.30release notes

  • Mutations for each remote thread are sent to its adapter in call order.

    0.3.30release notes

  • After a failed title write-back, the server title is re-read instead of leaving the list with a title the server never received.

    0.3.30release notes

  • A switch waits for the replacement runtime to attach; it rejects with ThreadListDestroyedError if the list is destroyed or with the mount error if mounting fails.

    0.3.30release notes

  • Restoring unsent drafts uses the latest attachment cleanup state.

    0.3.30release notes

  • Composer text is visible as soon as setText returns, preventing inputs with their own state from moving the caret to the end.

    0.3.30release notes

  • Automatic title generation waits for explicit title generation and runs only if that produces no title, keeping the thread list and server aligned.

    0.3.29release notes

  • The server-saved automatic title is shown when explicit title generation fails or returns no title, and overlapping automatic titles settle on the newest one.

    0.3.29release notes

  • Percent-encoded payloads are decoded before being forwarded to model adapters or providers, including when the media type already matches.

    0.3.29release notes

  • Copy feedback is preserved when unrelated assistant scopes change.

    0.3.29release notes

  • Dictation no longer starts on a disabled thread.

    0.3.29release notes

  • History copies stay up to date when attachments on an existing user message are added, removed, or changed.

    0.3.29release notes

  • Late client tool calls from cancelled runs are discarded using host-provided run ids.

    0.3.29release notes

  • Frame tools and pending calls are cleared when the iframe document changes or reloads.

    0.3.29release notes

  • When an external-store host drops a message from the middle of its messages array, that message and its feedback are removed from the thread instead of remaining as a sibling branch.

    0.3.29release notes

  • A still-initializing thread is reported through onThreadIdChange once its remote id settles, rather than being reported as undefined.

    0.3.29release notes

  • Pending deletes settle after reloads, branch switches, and edits.

    0.3.29release notes

  • Legacy audio parts are projected as file parts with an audio/<format> media type instead of being dropped when building a queued message's item.

    0.3.29release notes

  • Selecting the already displayed thread no longer cancels an in-flight controlled switch in the client.

    0.3.29release notes

  • Text sending remains available when voice setup ends synchronously.

    0.3.29release notes

  • Selecting the already displayed thread no longer cancels a pending thread switch.

    0.3.29release notes