Download Latest Version plugins-v0.11.1 source code.zip (154.4 MB) Google Add to Preferred Sources
Home / plugins-v0.11.0
Name Modified Size InfoDownloads / Week
Parent folder
plugins-v0.11.0 source code.tar.gz 2026-08-05 147.2 MB
plugins-v0.11.0 source code.zip 2026-08-05 154.3 MB
README.md 2026-08-05 55.1 kB
Totals: 3 Items   301.6 MB 1

Plugins + CLI 0.11.0 (2026-08-05)

Minor Changes

  • Agents become identity/presets (breaking, no data migration — 0.1.0 agents must be recreated): Agent 0.2.0 keeps only name, DID, enabled, and a typed Instructions ref; a chat and the agent it runs as are linked by the CompanionTo relation (resolved with AgentChat.loadAgent / AgentChat.loadChat), neither type referencing the other by field; durable artifacts belong to a Project collection; subscriptions and cron schedules compile to Routines whose relay qualifies events with a cheap model and forwards them onto the durable agent session. (f9ba47a)

  • Chats carry a typed instructions ref rendered into the system prompt at request time (replacing typename-based inlining of bound Instructions objects, which now bind as ordinary context objects), and the new Project skill lets the assistant file created objects into a project's artifacts collection and list them. (b5ecf54)

  • Add a Minimap component (@dxos/react-ui-components): a vertical rail of ticks representing anchor markers in a scrollable document, with a wave hover animation, per-marker popover, and brighter ticks for the currently-visible range.

MarkdownStreamController gains scrollTo, getVisibleRange, and onVisibleRangeChange. In plugin-assistant the chat thread now renders a Chat.Minimap rail (one tick per prompt turn, scrolls to the turn on click), and prompt prev/next navigation steps through the prompt range table rather than the xml-tag widget bookmarks. (801b77f)

  • Plumb ephemeral trace events through the swarm (DX-1125).

Adds tag-based broadcast pub/sub over the existing swarm messaging layer (spec 1): a message may carry tags instead of a single recipient, and a subscriber registers a tag set and receives any broadcast whose tags intersect (logical OR). New wire fields (signal.Message.tags, signal.SubscribeMessagesRequest, messenger.Message.tags, SwarmRequest.SUBSCRIBE/subscribe_tags) and a dedicated onBroadcast channel keep broadcasts off the point-to-point path.

On top of that (spec 2), remote runtimes broadcast their ephemeral trace messages so clients can watch live progress: Trace.messageToTags/Filter/matchesFilter/encodeTraceMessage, a SwarmTraceSink producer, Process.Monitor.subscribeToTraceMessages(filter), a RemoteTraceMonitor swarm source merged into the aggregate monitor, and a plugin-client consumer that projects remote status.update events into the progress registry. (08a3eea)

  • Drive connector-auth ("Connect X") toolbar actions from a ConnectorAuthAnnotation schema annotation, resolved by a single app-graph extension in plugin-connector — replacing the per-plugin connectorAuthExtension helper (removed). Owning plugins inline their own sync/generate toolbar actions. Adds actionGroups to GraphBuilder.createExtension/createTypeExtension and a primary menu-action variant. (68e61ca)

  • Introduce @dxos/link, a low-level infrastructure package holding a unified Cursor ECHO type (org.dxos.type.cursor 0.2.0), the relocated AccessToken type, and the durable-progress sync machinery. Cursor replaces @dxos/plugin-connector's SyncBinding relation with a flat object whose discriminated spec covers both external-source sync (Gmail, Trello, GitHub, Linear, Slack, Discord, Bluesky) and internal feed-to-feed processing (e.g. mailbox fact extraction), so progress now persists across reloads for both. Connection/Connector stay in @dxos/plugin-connector and correlate to a Cursor via their shared AccessToken rather than a direct relation. This is a breaking change: existing SyncBinding relations and Cursor 0.1.0 objects are not migrated and are abandoned on upgrade — external syncs re-bind and feed-to-feed analysis restarts from the beginning. (a49131a)

  • Add an in-app @dxos/log viewer (new @dxos/react-ui-debug LogPanel) so logs can be filtered, level-configured, and copied without opening DevTools; plugin-debug surfaces it as an R0 companion tab and a status-bar popover, and the devtools performance panel reuses the same component. Make the devtools subscribeToFeeds/subscribeToSpaces feedKeys/spaceKeys payload fields optional, fixing a Storage-panel schema decode error on empty subscriptions. Reimplement the devtools performance Panel and PanelContainer on the shared @dxos/react-ui Panel primitive. (b591791)

  • The deck companion now opens beside the attended plank instead of at the end of the deck: it shares that plank's container, split by a draggable seam whose geometry is the same for every plank/companion pair and in every presentation, and follows attention as the user moves between planks. Attending a plank also brings it to the front of the deck, collapsing the planks after it into the trailing spine pile. The "open companion" control is offered on every plank that has one, and a URL restoring a companion attends the plank it was anchored to. The sliding deck also runs flush to both ends of the viewport (--main-spacing is a gap only), and the plank at the front is capped to exactly the space the two spine piles leave it, so the plank after it folds to a spine instead of wedging a part-drawn header against the current plank. (e7f0d9e)

  • Redesign Composer URLs as pair chains (/w/<workspace>/<key>/<id>/…) resolved by the graph builder via per-extension url: { key, kind, path } declarations (replacing the NavigationPathResolver capability), and collapse the deck's layout modes into a single mode: presentation derives from plank count (fullbleed / tiling / sliding) and fullscreen is transient. Navigation is now gesture-based (no navigationDefault setting): nav-tree plain click navigates solo (shift adds a plank), and in-plank/card navigation follows the deck — adding beside the origin when sliding and replacing when solo. LayoutOperation.Open's disposition values are solo | add | auto. Breaking: LayoutOperation.SetLayoutMode is removed, ?plank= URLs are replaced by the pair-chain grammar, AppCapabilities.NavigationTargetResolver now declares its real requirement (Effect<NavigationTarget[], never, Database.Service>) so implementations no longer need a cast, and the unused companionFrameSizing field is dropped from the deck's persisted state (stripped by the existing migration). (5585ec8)

  • Gmail and JMAP sync are now always bidirectional and durably resumable: the sync cursor tracks a max/min watermark pair (replacing value), each run syncs new mail forward and continues backfilling backward in the same pass, and a per-run message cap requests a durable re-run via Operation.runAgain() instead of looping in-process. The sync operations now take only the binding — the direction/after/before inputs are removed. Breaking: the Cursor schema field value becomes the max/min pair, Cursor.resolveWindow is replaced by Cursor.resolveHorizon/Cursor.resolveWindows, Cursor.dedupStage drops its direction option, and Cursor.advance/Cursor.parseKey/Cursor.formatKey operate on max instead of value. (48d168e)

  • Add Html, a sandboxed renderer for untrusted HTML: sanitized content in a Shadow DOM host, so the document's CSS cannot reach the app while it still flows in the app layout, with remote images blocked by default. Content-specific behaviour is supplied as an HtmlDialect — a plain value carrying CSS, transforms and a src resolver — rather than baked into the component; emailDialect() is the first of these. plugin-inbox's HtmlViewer is replaced by that pair, moving cid: attachment resolution into the plugin (useCidResolver) so the shared UI package no longer depends on ECHO.

Email bodies now honour the sender's color-scheme declaration, read from the raw markup before sanitization strips it: a body declaring light is left as authored on a light sheet in dark mode, and anything undeclared is recolored to the app theme regardless of layout (the previous table-layout exemption preserved too little to justify leaving marketing mail glaring white in dark mode). (ba7aabf)

  • The conversation view (MessageArticle) now renders threads as a Mosaic stack: each message is a tile with its own toolbar, so Reply/Reply All/Forward/AI reply/Delete act on that specific message rather than always targeting the newest one. Body view controls (view mode, load remote images) and collapse-all/expand-all move to a single thread toolbar that applies to the whole conversation, and each message can be individually collapsed to a compact summary. The per-message Message.Toolbar no longer includes the view-mode switcher or load-images toggle.

By default only the most recent message is expanded and the rest are collapsed. Replying to a message now records the specific message it answers (parentMessage), so the draft renders directly after that message in the thread rather than always at the bottom, and it is smoothly scrolled fully into view.

Listbox.Item rows with an onClick (not just selectable ones) are now keyboard-focusable and respond to Enter/Space, matching native <button> activation. (2a68c3b)

  • Add stable data-testids across the inbox and connector UI (mailbox sync/reply/message actions, message and conversation tiles, connect dropdown) and an optional testId param on AppNode.makeToolbarActionGroup / react-ui-menu's menu builder, enabling reliable browser-e2e targeting. (30ae5eb)

  • Mail sync is now incremental and provider system state maps onto shared canonical tags.

Incremental delta-resume: the sync cursor carries an opaque provider delta token (Gmail historyId, JMAP Email/get state). After the initial window backfill, each run fetches only the delta since the token (Gmail history.list — paginated so multi-page deltas are not dropped; JMAP Email/changes), applying additions plus label/flag reconciliation to already-committed feed messages via objectless commit units. A stale token falls back to the window scan and recaptures; the token advances only after the run's merged stream fully drains, so a crash re-fetches the delta idempotently.

Unified system tags: Gmail system labels, JMAP mailbox roles, and the JMAP $flagged keyword now resolve to a shared, provider-agnostic tag registry (org.dxos.tag: starred / inbox / important / sent / and the Gmail categories) instead of provider-scoped tags — so a Gmail star, a JMAP flag, and a locally-toggled star are the same tag. Read-state, drafts, trash, spam, and archive are intentionally not tagged (archive is derived as "not in inbox"). The starred tag's foreign key moves from org.dxos.org to org.dxos.tag; existing locally-starred items under the old key are not migrated. (2543b63)

  • Bring JMAP mail sync to feature parity with Gmail — live progress monitor with cancellation, stats-panel telemetry, and failure reporting — and drive both providers through one shared, provider-agnostic sync effect (runMailSync) that takes its provider as an Effect service, so each handler is the same run with its own provider layer (API + resolver) provided. (33e1a3d)

  • Restructure the mailbox nav tree around an inbox-filtered default view, with All Mail, Sent, and Drafts as sibling views rendered through the same list and message companion; drafts now appear inline on their thread wherever it's already shown. Inbox and Sent resolve by the canonical system tag's identity, matching feed messages by the ids resolved from the mailbox's tag index rather than a query-level tag filter (which can't see tags on immutable feed messages) or label text, so both actually populate and stay correct across providers/locales. The sync and analyze-topics actions now appear on every one of a mailbox's views (previously only the primary node).

Drafts is now a canonical system-tag view like Inbox/Sent, not a separate data path: a draft is tagged when composed and untagged the instant it sends, so the Drafts view is a plain tag-filtered query over the same aggregate/pagination pipeline as every other view, and a mailbox's in-flight drafts drop out of the "attach to thread" list the moment they're sent rather than waiting on the next sync. Every draft-creation path (new compose, inline reply/reply-all/forward, and the AI assistant's draft tool) applies the tag consistently. Composing a brand-new message now navigates to the Drafts view and selects the new draft, so its message companion opens immediately. (a2447cd)

  • Mailbox sync progress can now be cancelled from the sync meter: for an edge-executed sync trigger the cancel control stops the current run and its continuation chain, while the trigger's schedule stays enabled and re-syncs on its next tick. @dxos/compute now exports the Cancellation service the runtimes provide (Cancellation.Service) and operations observe (Cancellation.signal).

Breaking:

  • @dxos/app-toolkit: ProgressTraceSinkOptions.terminateProcess is renamed to cancelProcess and takes a CancelTarget (pid, space, runtime, trigger) instead of a pid, so a cancel can be routed to the runtime that owns the run.
  • @dxos/compute-runtime: SwarmRemoteTraceMonitorOptions.subscribe yields SwarmTraceBroadcast ({ payload, tags }) instead of a bare payload — the envelope tags carry the ref-typed trace meta dropped by the wire codec. (5e7839e)

  • Auto-create a recurring sync Routine when a mailbox or calendar is bound to a connection (new connection, multi-target selection, or reusing an existing connection); the toolbar "Sync" action force-runs it and disables while a sync is already in progress. Fixes a legacy-DXN compatibility gap in refToEffectSchema and a bug where cancelling a Gmail sync left its progress monitor stuck at "running". (923d5be)

  • One identity rule per type, shared by the extractor's create-vs-merge decision and by a new duplicate scan, plus a Duplicates tab on the database type article for reviewing and merging what has already accumulated.

Contact extraction is now an allow-list: a sender earns a Person only when we sent or replied to it, or its domain matches a known Organization, and never when the address or message is automated. Mail sync and Google Contacts sync resolve against one index per space rather than a snapshot each, so concurrent syncs no longer both create the same person. (0a4bbde)

  • Promote Topic to a first-class domain type. Topic moves from @dxos/pipeline-email to @dxos/types as a Project-style class (inline title/label/icon annotations + make factory), keeping a shared Topic.Props struct and its org.dxos.type.topic DXN. The Topic detail view (TopicArticle) moves to @dxos/plugin-brain and renders via a regular object/article surface.

Breaking: Topic / TopicProps are no longer exported from @dxos/pipeline-email — import from @dxos/types and use the namespace form (Topic.Topic, Topic.Props). No compatibility re-export is left behind. (f0ec728)

  • Clean up inbox operations: remove unused DeleteEmail, DeleteEvent, SyncDraftEvents, SyncContacts operations and the dead tool-ids.ts file. Deprecate ExtractContact and ExtractMailbox. Add a defensive double-click guard to toolbar action buttons — they now disable while the handler is in-flight. (bb63d91)

  • Add an order option to Aggregate.items({ limit, order }): an explicit, per-group member ordering independent of any orderBy elsewhere in the query. Previously a preceding orderBy did double duty — establishing group order and silently determining which members (and in what order) landed in a following Aggregate.items({ limit }) — so moving that orderBy relative to aggregate could silently change which items appeared. The mailbox list now uses order to keep each thread's preview newest-first, independent of the query's own group ordering. (4e64123)

  • Ambient (Google-Docs-style) document review. The default document view now overlays every author's suggestions plus comments on main, with a per-user Editing/Viewing mode governed by a product-level ReviewRenderPolicy; the explicit branch switcher / diff selector remains as the advanced path. Also fixes a crash when adding a comment while viewing a branch (comment anchors now resolve against the editor-bound document) and prohibits inline comments on suggestion branches. @dxos/ui-editor gains suggestionsOverlay and a readonly option on comments(). (c035062)

  • Add an opt-in branch review workflow: comment threads are tagged with the branch under review and scoped to it, and a reviewer can accept an individual change from a branch (per-hunk cherry-pick via the AcceptChange collaboration operation) without merging the whole branch. Instant CRDT merge remains the default. (31fe0b8)

  • Make the published @dxos/cli runnable, and keep React out of node and bun builds.

@dxos/cli@0.10.0 could not execute at all once installed from npm. Nothing marked external in the compiled binary can resolve at runtime (Bun's embedded filesystem has no node_modules), so the externals are gone and esbuild-wasm's WASM is inlined; the @dxos/node-std shims resolve to node builtins, since Bun miscompiles export * from 'node:<mod>'; @automerge/automerge-subduction uses its self-contained web entry rather than the node one that reads a sibling file; the platform binary keeps its executable bit through publishing; and the pinned bun no longer leaks --smol into process.argv. Persistent SQLite on bun also now creates its parent directory, which any dx command needed on a machine with a stored profile but no data root.

The binary also contained React, react-dom and the whole react-ui graph. Capability.lazy, OperationHandlerSet.lazy and React.lazy defer evaluation but not bundling, so plugin barrels that merely listed a React surface pulled it into every non-browser consumer: the plugins with a node variant now have node-conditioned #capabilities, and plugin-sheet a node-conditioned #operations. Headless code no longer reaches for React packages — @effect-atom/atom instead of @effect-atom/atom-react wherever only Atom/Registry/Result are used, and @dxos/client/* instead of @dxos/react-client/*. @dxos/ui-editor/headless is a new UI-free entrypoint for the editor helpers operation handlers need.

Breaking:

  • formatForDisplay and formatForEditing move from @dxos/react-ui-form to @dxos/schema.
  • renderByline and BylineIdentity move from @dxos/react-ui-transcription to @dxos/plugin-transcription.
  • The icon list moves from @dxos/react-ui-pickers/icons to @dxos/ui-types, and that subpath is removed; hues moves from @dxos/ui-theme to @dxos/ui-types beside ChromaticPalette.
  • @dxos/plugin-graph no longer exports its React hooks from the package root — import them from @dxos/plugin-graph/hooks.
  • @dxos/plugin-deck and @dxos/plugin-navtree are browser-only: #plugin no longer resolves a node or workerd condition. (3f6ac61)

  • The dx binary no longer depends on the machine that built it: @dxos/kv-store's createLevel moves to @dxos/kv-store/level so importing the package for its types no longer binds LevelDB's native addon, and Automerge's WASM is inlined rather than read from disk. LevelDB, SublevelDB and BatchLevel are unchanged on the main entry. Each @dxos/cli-<platform>-<arch> package also exposes dx directly, so one platform can be installed without pulling the rest. (091ebe4)

  • Add @dxos/versioning (checkpoints, draft branches, and 3-way merge for automerge-backed ECHO objects) and document revisions and branches in Markdown: named checkpoints with read-only time travel and restore, draft branches (separate Text objects anchored to a parent revision) with 3-way merge-back, a History companion panel, a Versions section in object properties, an editor banner with a branch switcher, agent operations (create-checkpoint, create-branch, merge-branch, get-history), and a diffView setting selecting inline, side-by-side, or gutter diff rendering. (dd190a0)

  • The editor's object picker is now a combobox: the query is typed into a search input in the popover instead of into the document, opted into per trigger via searchTriggers. In markdown, the picker sorts objects by name and leads with a generic "Add object" that opens the create-object dialog and inserts a link to whatever it creates. Links to internal objects no longer show a raw-URI hover tooltip. (2e10525)

  • Consolidate document review into @dxos/plugin-review. The comment threads (previously @dxos/plugin-comments) and the generic version/review layer (previously in @dxos/plugin-space) now live in one plugin under the ReviewCapabilities namespace: the history companion (checkpoint/branch/merge timeline), the in-memory version-selection and review-mode state, the default review-render policy, the HistoryProvider opt-in, and the timeline model. plugin-space no longer depends on @dxos/versioning, and plugin-markdown carries no review vocabulary — it exposes a neutral EditorBindingHook capability that plugin-review contributes to. (77fff35)

  • plugin-comments and plugin-versioning merge into plugin-review (one review domain: threads, suggestions, branches, history), and plugin-markdown becomes review-agnostic: versioning/review behavior reaches the editor through the new MarkdownCapabilities.EditorBindingHook socket, and the SuggestionSourcesProvider slot is removed. Consumers referencing the old plugin packages or keys (org.dxos.plugin.comments, org.dxos.plugin.versioning) migrate to @dxos/plugin-review (org.dxos.plugin.review). (cec59a4)

  • Fold the review "Suggesting" mode into the editor view-mode dropdown. addViewMode now accepts an optional ViewModeItem[] (default the three built-in modes), threaded through EditorToolbarFeatureFlags.viewModes; plugin-markdown establishes a ViewModeExtension capability that plugin-comments implements to contribute the "Suggesting" entry, and the separate toolbar branch-selector / review-mode dropdowns are removed (the History companion covers branch switching). Single-select dropdowns now render a check on the current value (with radio semantics). Also: an author-coloured change-bar gutter on lines containing suggestions, a fix for comments flashing out of the companion on submit, and a suggestion-overlay perf improvement (compute the base/document character diff once across all authors). (6e624bd)

  • Move the WithProperties test helper from @dxos/plugin-markdown/testing to a new @dxos/app-toolkit/testing subpath export. (499dde4)

  • Introduce three plugin quality tiers (beta, alpha, labs) and tag every non-system plugin with exactly one. The registry's recommended category is now an allowlist of beta and alpha rather than everything not tagged labs, so an untagged plugin is no longer surfaced as recommended by default. The integration tag is renamed to connector. (863e2e0)

  • Add Project (@dxos/compute), the successor to Topic, holding owned instructions, routine references, and an artifacts collection; the Routine schema moves into @dxos/compute alongside it. Instructions gains a structured commands field, surfaced as sentinel-command autocomplete in the assistant chat prompt. The existing @dxos/types GH/Linear-style Project (name, description, image) is renamed to ExternalProject to free the typename for the new concept. dx-input now owns its full input chrome (padding, focus shift, a single-band ring/border treatment) so markdown-backed fields match plain inputs. (f7d7735)

  • Add project templates: plugins can contribute pre-wired Project scaffolds (instructions, skills, standing context, starter routines) via a new template capability, and the routine instructions editor can now scope which fields it renders and writes back. The mailbox gains a "Set up project" action (Inbox Research with a sender-ledger starter routine), CRM contributes a sender-research project, and the brain plugin contributes a scheduled mailbox fact-analysis project. Routines created in a project's scope run with the project bound into their session so outputs can be filed into the project's artifacts. (cd3ed11)

  • Routines render a card summarizing when they run ("Runs every day at 9:00 AM", with a green check when the trigger is enabled) instead of a generic form preview of their internals, and the instructions editor no longer exposes the context objects field — the owning project or chat supplies session context. (a83d98a)

  • Full-text search across a space in the search plugin — ranked, highlighted results backed by the ECHO FTS index, plus a new SearchResultList. The mailbox filter now searches messages by subject, sender/recipients, and plain/markdown body (never raw HTML) and shows a best-match highlighted snippet; the query is debounced to avoid re-rendering the list on each keystroke. Shared match/snippet utilities (computeMatchSpans, buildSnippet, Highlighted) moved to @dxos/react-ui-search. (e510f3b)

  • Add dx space export and dx space import commands. Export writes a space archive to disk in either the binary storage-dump format (includes document history) or a JSON snapshot of current object state; import reads an archive of either format back as a new space. (179afc6)

  • Convert outline items into Task objects: a "Convert to task" action replaces the item with a link to a new Task parented to a project created lazily on first use, and the link navigates to the task in place. Adds the getItemText, replaceItemWithLink, and syncLinkLabels editor commands. Fixes the outliner content column not being centered, which pushed the drag grip outside the document and the line menu inside it. (59a65a8)

  • Add an appearance setting (Light / Dark / System, default System) that overrides the OS colour-scheme preference. Persisted per-device and applied live across all tabs in the same browser. (3400dc1)

  • Extract the headless diagramming layer into the new @dxos/plugin-illustrator: it owns the base Sketch type (name + canvas variant ref, mirroring Game/Chess), the scene DSL, dialect registry, sketch skill, and renderer-agnostic create/read/edit operations resolved through a new SketchVariant capability. @dxos/plugin-sketch is renamed to @dxos/plugin-tldraw and, together with @dxos/plugin-excalidraw, now contributes a variant (canvas type + scene-DSL builder + surfaces) instead of owning its own root object type. (3502b3d)

  • Add a backend-neutral scene DSL to the tldraw plugin: agents can create, edit, and delete diagrams as world objects composed of elements (rect, ellipse, circle, diamond, triangle, line, curve, arc, text, arrow) addressed by id, via the DrawingOperation.Create/Read/Edit operations and the org.dxos.skill.drawing agent skill. Renderers implement the shared DrawingBuilder contributed by @dxos/plugin-illustrator. (b752581)

Patch Changes

  • Use the WebRTC transport for bun as well as node: bump node-datachannel to 0.32.3 (the 0.30.0 darwin-arm64 binary crashed under both runtimes) and remove the obsolete bun memory-transport guard. CLI halo share prints the joinable URL and validates --host as an absolute URL. (d547045)

  • Reorganize CodeMirror extensions into themed folders (core, state, behavior, decoration, language, collab, completion, streaming, structure, demo, debug) with per-folder barrels; the package's public export set is preserved. Fixes the misspelled exported type CompoetionContextCompletionContext, de-duplicates escapeRegExpSource into util (closing a latent tag-escaping bug in extendedMarkdown's mixed parser), and adds an xmlTags characterization test suite. xmlTags block widgets now keep their portal alive across viewport culls (removing the blank/flicker on scroll-back for known-height embeds). @dxos/ui: adds a string overload to Domino.of for custom-element tags (e.g. dx-icon); @dxos/plugin-assistant drops the now-unneeded Domino.of(... as any) casts. (a256a87)

  • Move the useFlush hook from @dxos/plugin-assistant/hooks to @dxos/react-client/echo. It operates on a Space, so it belongs with the other space hooks; import it from @dxos/react-client/echo instead of @dxos/plugin-assistant/hooks. (c9da903)

  • Add routed scripts to the scripted test language model (per-session cursors for supervisor/sub-agent scenarios) and restore per-message span publishing from the chat thread (minimap markers and prompt navigation). (bdf9f68)

  • Resolve an object's canonical navigation path through NavigationOperation.ResolveNavigationTargets, so opening an object from a generic surface (a card, a search result, an agent following a reference) lands where the nav tree shows it — its collection, or its type's sidebar section — instead of the hidden database path every object falls back to. This also fixes the nav tree showing no selection for objects opened from cards. (5b05d75)

  • Force a full reload when the client reconnects to a newly-elected leader worker, as an interim fix for guest tabs breaking after the leader tab closes. (a77e1a2)

  • Fix comment author attribution and reset-device reload. useIdentity now seeds its atom with the service's synchronous snapshot so the current identity is available on the first render instead of a transient undefined — a comment sent in that window was stamped with an empty sender and never matched its author, hiding the edit affordance. During client.reset() the worker-reconnect handler now reloads to the origin (fresh boot) rather than the stale current route, and Client.resetting exposes that state. SQLite hypercore storage drains in-flight writes on close() so a save racing reset teardown can't stall or reject against a torn-down connection. (eec72c5)

  • Fix device-invitation links hanging in apps with onboarding: invitation URL params are now consumed by a single owner (invitationUrlHandler: false disables the plugin-client/plugin-space navigation handlers so plugin-onboarding owns the flow), an invitation arriving with an existing identity opens the reset-and-join dialog instead of being dropped, navigation-handler failures surface as a toast instead of dying silently, and dx halo share --open always prints the invitation code and reports browser-launch failures with the invitation URL. (fe63f19)

  • Document versioning: Google-Docs-style suggestion review.

  • @dxos/ui-editor: suggestChanges (inline per-change accept/reject over a proposal) plus word-level diffHunks; a multi-author suggestions({ sources }) overlay and groupHunks grouping; the comments / diff / suggest review extensions are grouped under a new review/ folder (package barrel exports unchanged).
  • @dxos/app-framework: NamePopover moved to @dxos/app-framework/ui, decoupled from translations via a submitLabel prop.
  • @dxos/plugin-markdown: branch/merge/checkpoint exposed as agent skill tools; a suggest diff-view mode; the compare/diff overlay is reconfigured through a CodeMirror Compartment so switching views no longer remounts the editor (rebinding automerge / losing selection). The branch banner's Compare toggle becomes a three-way [Base | Diff | Branch] view selector — Base shows the parent content at the anchor read-only.
  • @dxos/plugin-space: NamePopover removed from @dxos/plugin-space/components (relocated to @dxos/app-framework/ui); VersioningState.compare (boolean) becomes view (base | diff | branch).
  • @dxos/types: new ContentBlock.Change (a suggested edit — before/after) so a suggestion renders through the message tile.
  • @dxos/react-ui-thread: Message.Tile renders the change block (struck original → proposed text) with Accept/Reject via new onAcceptChange/onRejectChange thread callbacks; CommentThread is decoupled from @dxos/react-client (metadata/activity/identity injected as props).
  • @dxos/plugin-review: a unified review companion — comment threads and suggestion cards in one surface. Suggestions reactively tracks the document's active kind:'suggestion' branches (one bound probe per branch) and renders each grouped change as a change-block tile, routing Accept/Reject to the durable AcceptChange/RejectChange ops.
  • @dxos/plugin-markdown: a SuggestEdit operation + "Suggest edits" authoring action that find-or-creates the caller's per-author suggestion branch and edits it. (3f1fc67)

  • Fix dx account login --method email to handle the hub's needsIdentity response, creating a local identity and retrying so the login completes instead of waiting for a token that never arrives. (382d00d)

  • Publish the HALO Effect service packages (@dxos/halo, @dxos/halo-adapter-client, @dxos/halo-react) and begin migrating Composer/plugins off direct @dxos/client HALO access onto them: plugin-client now provides Identity.Service / Space.Service layer specs and wraps the app in HaloProvider. (6439417)

  • Add an optional attach flag to the database.objectCreate operation that files the created object in the space root collection (visible in the navigation tree). CLI: dx profile create templates now enable edge features (fixes device invitations hanging at "Connecting…" for CLI-created profiles), and dx halo share prints the joinable URL. (bda1a02)

  • Report passkey login failures on the welcome screen instead of silently doing nothing. RedeemPasskey now fails with PasskeyDismissedError, PasskeyRejectedError, or PasskeyLoginError, which classifyPasskeyFailure maps to a message. (832d150)

  • Fix an uncaught Space is not initialized error thrown from the space replication-progress capability. The client.spaces subscription fires while a space is still initializing (on app load and during space creation), and the space name was read eagerly from space.properties, whose getter throws until the space is ready. The name is now read lazily per sync-state update and only once the space reaches SPACE_READY. (aea1e6e)

  • New package @dxos/echo-panproto: declarative, JSON-serializable lenses (Panproto.Lens) between ECHO objects and foreign wire records, executed by a runner (Panproto.encode/decode) rather than expressed as closures.

Annotation-driven publishing of ECHO objects to the AT Protocol. @dxos/schema gains AtprotoRecordAnnotation (type-level: target collection, record-key strategy, and a declarative serializable lens) and AtprotoVisibilityAnnotation (field-level, private by default — a field is published only when explicitly marked), so a generic companion can discover and publish any annotated type without knowing the type itself.

MasterDetail moves from plugin-routine into @dxos/react-ui-list as a reusable primitive: a selectable master list above a detail slot, nestable by placing another MasterDetail in detail. Per-row overflow menus are driven by useMenuBuilder from @dxos/react-ui-menu.

ComboboxField now shows the selected option's label rather than the stored value, which is often an opaque id the user never chose to see. (9da013f)

  • Group a connector's sync surface into a nested sync field (operation, getTargets, materializeTarget, optionsSchema) with an optional trigger spec and an auto flag. A connector that declares a trigger spec is synced by force-running its binding's Routine trigger — on demand as well as on schedule, so both share the dispatcher's durable execution — and one that declares auto syncs as soon as a binding is created. (c3625d3)

  • Supporting changes for the new plugin-blogger / plugin-typefully feature:

  • @dxos/plugin-connector: expose Connection types via a new ./types export subpath so provider plugins can consume the connection contract without pulling the full package barrel.
  • @dxos/react-ui: Card.Root now accepts and forwards onKeyDown, enabling keyboard-interactive cards (Enter/Space activation) without a cast. (e0e1a9f)

  • Move DraftMessage out of @dxos/plugin-inbox into @dxos/types, and move the generic email-sync pipeline stages (excluding the SyncBinding-coupled toCommitUnit) out of @dxos/plugin-inbox into @dxos/pipeline-email, so these can be reused without depending on a full app-framework plugin. Connection and SyncBinding remain in @dxos/plugin-connector; toCommitUnit and factsCommit (both coupled to SyncBinding) live in @dxos/plugin-inbox. (6d2afe0)

  • Fix rebinding a target (e.g. a Mailbox) to an existing connection not renaming it after the connection's account, and fix the newly-created cursor for a target materialized alongside a brand-new connection not being immediately visible to the sync trigger UI. (0d1f866)

  • Fix the companion panel failing to open when a caller names only the variant (~comments, ~transcript, ~settings) rather than a fully qualified companion id. (bce1dbc)

  • Clicking a folded plank's spine now attends that plank instead of handing attention straight back to whichever plank was already on screen; the plank toolbar's fullscreen and close controls are offered regardless of how many planks are open; and the navtree marks the open item as current immediately rather than up to half a second later. (ebb6383)

  • Fix the navigation sidebar disappearing permanently at desktop widths after a dismissal persisted from below the lg breakpoint. (1dad41e)

  • Plugin-declared decks and deck scroll stability. A type can now declare how the deck behaves when one of its objects is the root: AppAnnotation.DeckAnnotation carries a DeckSpec (initial planks and a chain of levels), LayoutOperation.Open accepts root + level so opening at a level reuses that level's plank and closes the levels below it, Collections are navigation targets that open their contents as planks, and the mailbox declares mailbox / message / attachment (meta-click opens a message in its own plank; a message swap carries the open companion along). Deck scrolling is now strictly intent-driven: an in-deck click yields to the navigation it triggers, navigations re-issue if a reflow kills the glide, browser scroll anchoring is disabled on the deck viewport, a companion opening past the trailing edge is revealed by exactly the overflow, and stale companionPlanks entries are pruned. (f10b1ce)

  • HeyGen avatar/voice pickers now list only the account's own assets (/v3/avatars?ownership=private, /v3/voices?type=private) instead of HeyGen's public catalog, with names trimmed (HeyGen returns user-named assets with leading newlines / non-breaking spaces) and sorted alphabetically; list requests are bounded by a timeout so a slow response can't hang the picker. Listbox.ItemContent no longer reserves the leading icon column when no icon is set, so icon-less rows are flush to the edge instead of indented. (277e365)

  • Register the Canvas type on the plugin that owns it, so creating a drawing no longer fails with "Schema not registered" when the Excalidraw plugin is disabled. (cc51de3)

  • Fix Mailbox.recordExtraction dropping the first extraction recorded on a fresh mailbox (detached-record write). (724d468)

  • Open a new mail draft as a plank beside the mailbox view it was composed from, and leave reply/forward drafts inline in their conversation instead of navigating to Drafts. (2fb1993)

  • Fix Gmail sync wedging permanently when a message is deleted before it is fetched: the 404 now drops that message instead of failing the run and stranding the history token. (98d79ec)

  • Hide markdown images with an empty target (![alt]()) when image loading is disabled. The match required a non-empty url, so these fell through and rendered as a broken image with their source left visible, alongside the cid: and protocol-relative targets already handled. (1872bc0)

  • Inbox draft composer rebuilt as a compose-style form, plus the shared UI it needs. @dxos/react-ui Input.TextInput gains MUI-style start/end adornments rendered inside the input container; @dxos/ui-theme adds a shared .dx-input box treatment (surface + hairline border + focus-within shift) now used by Input, MarkdownField, RefEditor, and the inbox editor. @dxos/react-ui-form RefEditor email mode renders committed mailboxes as atomic tag widgets (trailing delete affordance, no @ marker) — a raw address stays plain text until committed with comma/Space/Enter, typing before a tag starts a fresh token, and the single line is centered so text and tags align. @dxos/ui-editor's defaultThemeSlots is now fullWidth (no longer forces h-full). @dxos/plugin-inbox EditMessage gains To/Cc/Bcc recipient pickers with Person autocomplete, arrow-key field navigation, and a layout fix so Send no longer overlaps the editor. (d958118)

  • The inbox message view selector (HTML / Markdown / Plain) now persists across messages and sessions. The choice is stored alongside the other inbox settings (the loadRemoteImages toggle) in the plugin's settings store, so it survives reloads instead of resetting to HTML on every open. Also reorganizes useArticleKeyboardNavigation under AttentionProvider (no change to the @dxos/react-ui-attention public exports). (3b4a7c8)

  • Mailbox UX fixes: the Gmail sync progress meter now shows a determinate bar (the retrieval total is known once message ids are enumerated); the Topics and Subscriptions articles use the standard Panel.Toolbar menu idiom and render their lists (and topic suggestions) via react-ui-mosaic Stack; selecting a topic opens TopicArticle in the companion; the Topic type now has a navtree name; and the one-click unsubscribe POST no longer triggers a CORS console error. (6dd1aa8)

  • usePagination's isLoading now reflects genuine query settlement instead of clearing on the next microtask regardless of delivery, so consumers can reliably distinguish "still loading" from "loaded and empty" even for async, feed-backed queries. The mailbox article uses this to fix a bug where it could briefly flash the wrong empty-state message (e.g. "No connections configured") while a large mailbox's messages were still loading. (9cde1c6)

  • Fix mailbox paging and the list blanking during sync. usePagination now keeps the previously-shown page across a query-identity change instead of resetting to empty + loading, and the virtualizer pagination hook re-arms getNext after a page lands and no longer misreads a reordered item as an eviction. The mailbox renders a loading spinner in-flow at the end of the list rather than replacing the whole panel. (0afbf15)

  • Graph actions can now declare disposition as an array and a presentation chrome override per surface, letting one action multi-target the object toolbar and nav-tree context menu with appropriate chrome in each. Mailbox and calendar "Sync" now surface from a single graph action instead of a duplicated toolbar button. (1a989ed)

  • Fix auto-created mailbox/calendar sync triggers so their input carries only binding, matching the sync operation's input schema. The trigger no longer smuggles an extra mailbox/calendar ref into the operation input; the routine is instead discovered through its binding cursor's spec.target. (cb14d6e)

  • Import ECHO data-access hooks (useQuery, useObject, useType, usePagination, …) directly from @dxos/echo-react in Composer plugins and UI packages instead of through the @dxos/react-client/echo re-export, decoupling pure ECHO data access from @dxos/react-client. (b8c0825)

  • Fix "Cannot assign to read only property" when playing a game — game variants now receive the live state object instead of a frozen snapshot, so chess moves and New Game work again. Tic-Tac-Toe now ships from the community plugins repo and is no longer built here. (c58ebb7)

  • Resolve an object's database via Obj.getDatabase(obj) (and its space id via db.spaceId) instead of getSpace(obj).db/.id in plugin data-access sites, dropping the @dxos/client/@dxos/react-client dependency where the full space handle was not needed. (b602d44)

  • Fix the mailbox silently dropping a compose draft, which has no thread. A draft with no threadId is now created as a thread of one — keyed on a fresh id — so the mailbox list's whole-thread semi-join and conversation grouping keep it. Also align the JMAP Email schema with RFC 8621, where threadId is a required, server-set property. (85893fe)

  • Move contexts, hooks, constants and helpers out of React component modules into sibling modules so each component module is a react-refresh boundary. Public package APIs are unchanged; the previously exported names are re-exported from each directory barrel. (37874ce)

  • Chats no longer spend a query-skills call before every enable-skills — the available-skills list is already rendered into the system prompt — and project chats pre-bind the artifact-type skills, so creating the artifact you asked for costs fewer tool calls. Deleting an object now also closes planks for the objects it cascade-deletes (e.g. a project's chats), which previously stayed open pointing at removed objects. (4bb7e3b)

  • Documents created from the editor's slash/link menu are now filed in the same collection as the document they were created from, instead of the space root. (ac51564)

  • Show a message in the sidebar when the active workspace is not available instead of rendering an empty nav tree, and stop serializing the unresolved-workspace sentinel into the URL. (a97a5ca)

  • Publish @dxos/plugin-projects: the package is no longer private and declares public publish access. (89fdccc)

  • Routines created from a project are now owned by it, so deleting the project deletes its routines (and their triggers) instead of leaving them behind. (34f774a)

  • Poll the service worker registration hourly so a deployed update is detected while the app stays open, instead of only on reload, and report the update download as a progress monitor. Re-dispatching a toast with an existing id now replaces it instead of stacking a duplicate. (707caae)

  • Fix running a routine manually. The runnable's input now comes from the routine's first trigger, so a sync routine's binding reaches the operation instead of throwing, and a routine whose trigger is remote force-runs on the edge dispatcher rather than silently running on the client. Also export createInvocationPayload for building a trigger's invocation payload. (bf055c8)

  • Rename Message.Content to Message.Body and add a new optional Message.Content wrapper that carries the message's default padding. Card.Root accepts a gutter prop so a card whose body is a form insets its fields like a standalone form. (51aaffe)

  • Keep the sync status indicator a single colour in every state; the icon and label continue to convey status. (25272e3)

  • Distinguish a stalled replication from a lost EDGE connection in the sync status indicator, and stop reporting a stall while replication is still making progress. (0e3a1a9)

  • Fixed outline link chips not updating when the linked task is renamed; the label sync now observes task changes directly instead of relying on query re-emission. (0d7d4bf)

97 packages in this release @dxos/cli@0.11.0 @dxos/plugin-assistant@0.11.0 @dxos/plugin-atproto@0.11.0 @dxos/plugin-attention@0.11.0 @dxos/plugin-blogger@0.11.0 @dxos/plugin-bluesky@0.11.0 @dxos/plugin-board@0.11.0 @dxos/plugin-bookmarks@0.11.0 @dxos/plugin-brain@0.11.0 @dxos/plugin-calls@0.11.0 @dxos/plugin-chess@0.11.0 @dxos/plugin-chess-com@0.11.0 @dxos/plugin-client@0.11.0 @dxos/plugin-code@0.11.0 @dxos/plugin-commerce@0.11.0 @dxos/plugin-conductor@0.11.0 @dxos/plugin-connector@0.11.0 @dxos/plugin-crm@0.11.0 @dxos/plugin-crx@0.11.0 @dxos/plugin-debug@0.11.0 @dxos/plugin-deck@0.11.0 @dxos/plugin-devtools@0.11.0 @dxos/plugin-discord@0.11.0 @dxos/plugin-doctor@0.11.0 @dxos/plugin-duffel@0.11.0 @dxos/plugin-excalidraw@0.11.0 @dxos/plugin-explorer@0.11.0 @dxos/plugin-file@0.11.0 @dxos/plugin-freeq@0.11.0 @dxos/plugin-game@0.11.0 @dxos/plugin-github@0.11.0 @dxos/plugin-graph@0.11.0 @dxos/plugin-heygen@0.11.0 @dxos/plugin-ibkr@0.11.0 @dxos/plugin-ideogram@0.11.0 @dxos/plugin-illustrator@0.11.0 @dxos/plugin-inbox@0.11.0 @dxos/plugin-iroh-beacon@0.11.0 @dxos/plugin-kanban@0.11.0 @dxos/plugin-library@0.11.0 @dxos/plugin-linear@0.11.0 @dxos/plugin-magazine@0.11.0 @dxos/plugin-map@0.11.0 @dxos/plugin-map-solid@0.11.0 @dxos/plugin-markdown@0.11.0 @dxos/plugin-meeting@0.11.0 @dxos/plugin-mermaid@0.11.0 @dxos/plugin-native@0.11.0 @dxos/plugin-native-filesystem@0.11.0 @dxos/plugin-navtree@0.11.0 @dxos/plugin-observability@0.11.0 @dxos/plugin-onboarding@0.11.0 @dxos/plugin-osrm@0.11.0 @dxos/plugin-payments@0.11.0 @dxos/plugin-pipeline@0.11.0 @dxos/plugin-presenter@0.11.0 @dxos/plugin-preview@0.11.0 @dxos/plugin-progress@0.11.0 @dxos/plugin-projects@0.11.0 @dxos/plugin-pwa@0.11.0 @dxos/plugin-registry@0.11.0 @dxos/plugin-review@0.11.0 @dxos/plugin-routine@0.11.0 @dxos/plugin-sample@0.11.0 @dxos/plugin-sandbox@0.11.0 @dxos/plugin-script@0.11.0 @dxos/plugin-search@0.11.0 @dxos/plugin-sequencer@0.11.0 @dxos/plugin-settings@0.11.0 @dxos/plugin-sheet@0.11.0 @dxos/plugin-sidekick@0.11.0 @dxos/plugin-simple-layout@0.11.0 @dxos/plugin-slack@0.11.0 @dxos/plugin-space@0.11.0 @dxos/plugin-spacetime@0.11.0 @dxos/plugin-spotlight@0.11.0 @dxos/plugin-stack@0.11.0 @dxos/plugin-status-bar@0.11.0 @dxos/plugin-studio@0.11.0 @dxos/plugin-support@0.11.0 @dxos/plugin-table@0.11.0 @dxos/plugin-tasks@0.11.0 @dxos/plugin-template@0.11.0 @dxos/plugin-terra@0.11.0 @dxos/plugin-testing@0.11.0 @dxos/plugin-theme@0.11.0 @dxos/plugin-thread@0.11.0 @dxos/plugin-tldraw@0.11.0 @dxos/plugin-transcription@0.11.0 @dxos/plugin-transformer@0.11.0 @dxos/plugin-trello@0.11.0 @dxos/plugin-trip@0.11.0 @dxos/plugin-typefully@0.11.0 @dxos/plugin-video@0.11.0 @dxos/plugin-voxel@0.11.0 @dxos/plugin-wnfs@0.11.0 @dxos/plugin-zen@0.11.0
Source: README.md, updated 2026-08-05