Skip to content

All versions since 1.1.0

On this page

1.1.0

Every @aparte/* package ships at this version (they are released in lockstep).

Minor Changes

  • c980d67: Add composer.setAttachmentState(file, { status, progress }): a bar on the tile while a file uploads, for an app that uploads as soon as a file is picked.

    While a file is uploading the composer holds the send and wears data-uploading. { status: 'error' } marks the tile. @aparte/core

  • c7ee63f: Add tokens to the composer: insertToken(), getTokens(), getCaret(), getRangeRect() and replaceRange() on <aparte-composer-input>.

    A token is a pill in the draft that sends a text of its own ({ label: 'Paul', text: '@paul', kind: 'mention', data: { id: 7 } }). It reaches aparte-send as detail.tokens with its place in the message, AparteMessage.tokens keeps it, the request carries it as _meta.tokens, and the user’s bubble draws it as it looked. A message with no token changes nothing.

    aparte-send also accepts detail.meta, kept as the message’s metadata and merged into the request’s _meta.

    placeFloating() is exported: it writes top and left on a fixed box beside an anchor and turns it when the window ends first.

    The .aparte-menu recipe gains the row a keyboard is on (aria-selected), the row whose submenu is open (aria-expanded), and .aparte-menu__chevron. @aparte/core

  • c980d67: Add aparteGlobalConfig.setDateSeparators(true): the date above the first message of each day.

    Today and Yesterday in words, then the full date in the page’s language. It follows the branch on screen. @aparte/core

  • c980d67: Add setBubbleActions({ feedbackReasons: ['Not accurate', 'Too long'] }): a thumbs-down then asks why.

    One press sends the new aparte-feedback-reason event with the message id and the reason. aparte-feedback still goes out on the thumb itself, as before. New locale keys: feedbackReasonTitle, feedbackReasonDismiss. @aparte/core, @aparte/locales

  • c980d67: Add new AparteConversationController(binding, { keepDrafts: true }): what was typed in a conversation comes back on return.

    Kept in memory. A storage adapter with the optional loadDraft and saveDraft keeps it across reloads, and updatedAt does not move. @aparte/core

  • a5c3f82: Retry no longer sends temperature: 0.4, which recent models refuse, unless the provider asks for it.

    A provider that decodes greedily without a temperature, so a retry would repeat the same answer, now sets the new optional retryTemperature. @aparte/provider-transformers does. No other provider sends one on a retry, and models that sample by default still vary their answer. @aparte/core, @aparte/provider-ai-sdk, @aparte/provider-transformers

  • c980d67: Add aparteGlobalConfig.setStreamingCaret(true): a blinking caret where the words of a reply are arriving.

    It sits at the end of the last paragraph or list item, and is still under prefers-reduced-motion. @aparte/core

  • 2753047: Add aparteGlobalConfig.setTurnSummary(): reasoning and consecutive tool calls fold behind one line. Off by default, and with it off the DOM does not change.

    While the steps run the line says Working… and names the current tool; afterwards it says Worked 9 s · 7 tools, or Used 7 tools on a stored turn that carries no timing. setTurnSummary({ openWhileRunning: true }) keeps the fold open while it works, and never closes one somebody opened.

    A call waiting for approval, a call that failed and a tool with its own registerToolRenderer stay outside the fold, since those are what somebody has to read. A hidden tool is neither counted nor breaks the run, and a single step is never folded.

    New locale keys, added in all nine bundles: turnWorking, turnWorked, turnUsed, turnTools. turnTools is a plural form string by Intl.PluralRules category (one:{n} tool|other:{n} tools). @aparte/core, @aparte/locales

  • 650610b: The AG-UI runner now asks for an approval on the interrupt reason approval_required, and sends the words of a refusal to the agent.

    approval_required is what the Laravel AI SDK sends. A refusal goes back as { approved: false, instruction } when the person wrote what to do instead; the agent reads approved as before. @aparte/runner-ag-ui

  • 855778c: These plugins now add /compact, /model and /approval to @aparte/plugin-triggers’ menu when it is on the page.

    They answer an event, so neither side depends on the other, and nothing changes without the menu. Turn one off with setupCompaction({ commands: false }), setupApproval({ commands: false }) or <aparte-model-selector commands="false">. @aparte/plugin-approval, @aparte/plugin-compaction, @aparte/plugin-model-selector

  • 855778c: New package: / commands, @ mentions and any other trigger character in the composer.

    Write <aparte-triggers> inside <aparte-composer> and give it the triggers you want: static lists or a search function with AbortSignal, groups, submenus of any depth, your own row rendering. A row runs something, inserts text, or inserts a pill that sends a text of its own. The focus stays in the field; arrows, Enter, Tab and Escape act on the menu, in right to left too, and a phone gets one panel at a time.

    @aparte/plugin-triggers/commands adds /new, /stop, /retry and /copy when you ask for them. @aparte/plugin-triggers

Patch Changes

  • Pasting several lines keeps its line breaks. They were sent run together.

    In Chromium each pasted line became a block, and the draft read blocks as one line. There is nothing to change in your code. @aparte/core

  • setSelection() sends aparte-model-change once, with the model it changed from. It used to send it twice, neither time with that model. @aparte/plugin-model-selector

  • The composer’s toolbar is hidden while an approval or a question is open: the panel is all the composer shows.

    It comes back with the answer, and there is nothing to change in your code. A toolbar holding <aparte-composer-send> stays, since a written answer is sent with it. The approval switch sits in that row: turned to Plan under an open card, it said no writes while the card’s Approve still ran one. @aparte/core

  • 51adc92: @aparte/docs-mcp declares its name for the official MCP registry. @aparte/docs-mcp

Version-only bumps (no changes of their own): @aparte/engine, @aparte/runner-n8n, @aparte/provider-openai-compat, @aparte/provider-scenario, @aparte/plugin-artifacts, @aparte/plugin-ask-user, @aparte/plugin-cards, @aparte/plugin-chartjs, @aparte/plugin-echarts, @aparte/plugin-katex, @aparte/plugin-marked, @aparte/plugin-mermaid, @aparte/plugin-shiki, @aparte/plugin-storage-idb, @aparte/plugin-streaming-markdown, @aparte/plugin-titler, @aparte/angular, @aparte/react, @aparte/svelte, @aparte/vue.

1.1.1

Every @aparte/* package ships at this version (they are released in lockstep).

Patch Changes

  • 3bc8977: A Markdown artifact is no longer cut off after its first code block, on screen or in Copy, Download and Open. There is nothing to change in your code.

    The card looked for a closing code fence whether or not the document had opened one, so the first code block of a report ended the report. It now removes a fence only when one wraps the whole document, and it still drops what a model repeats after that fence.

    A wrapped document keeps the code blocks inside it, and a Markdown document that opens on a code block of its own is left as it is. stripCodeFences is internal to the plugin, so its new kind argument changes no public name. @aparte/plugin-artifacts

Version-only bumps (no changes of their own): @aparte/core, @aparte/engine, @aparte/runner-ag-ui, @aparte/runner-n8n, @aparte/provider-ai-sdk, @aparte/provider-openai-compat, @aparte/provider-scenario, @aparte/provider-transformers, @aparte/plugin-approval, @aparte/plugin-ask-user, @aparte/plugin-cards, @aparte/plugin-chartjs, @aparte/plugin-compaction, @aparte/plugin-echarts, @aparte/plugin-katex, @aparte/plugin-marked, @aparte/plugin-mermaid, @aparte/plugin-model-selector, @aparte/plugin-shiki, @aparte/plugin-storage-idb, @aparte/plugin-streaming-markdown, @aparte/plugin-titler, @aparte/plugin-triggers, @aparte/angular, @aparte/react, @aparte/svelte, @aparte/vue, @aparte/locales, @aparte/docs-mcp.

1.1.2 Latest

Every @aparte/* package ships at this version (they are released in lockstep).

Patch Changes

  • ef10c91: <aparte-launcher> brought back from saved HTML now shows one working button, not two.

    Livewire’s wire:navigate keeps a page’s HTML for the Back button and parses it back in, and so does any page cache that restores markup. The launcher it brings back is a new element whose markup already holds the button the old one drew. It drew a second one beside it, and the first never opened anything. It now takes up the button in its markup, and drops any other copy. Nothing to change in your code. @aparte/core

Version-only bumps (no changes of their own): @aparte/engine, @aparte/runner-ag-ui, @aparte/runner-n8n, @aparte/provider-ai-sdk, @aparte/provider-openai-compat, @aparte/provider-scenario, @aparte/provider-transformers, @aparte/plugin-approval, @aparte/plugin-artifacts, @aparte/plugin-ask-user, @aparte/plugin-cards, @aparte/plugin-chartjs, @aparte/plugin-compaction, @aparte/plugin-echarts, @aparte/plugin-katex, @aparte/plugin-marked, @aparte/plugin-mermaid, @aparte/plugin-model-selector, @aparte/plugin-shiki, @aparte/plugin-storage-idb, @aparte/plugin-streaming-markdown, @aparte/plugin-titler, @aparte/plugin-triggers, @aparte/angular, @aparte/react, @aparte/svelte, @aparte/vue, @aparte/locales, @aparte/docs-mcp.