| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| plugins-v0.14.0 source code.tar.gz | 2026-10-10 | 197.4 MB | |
| plugins-v0.14.0 source code.zip | 2026-10-10 | 208.0 MB | |
| README.md | 2026-10-10 | 24.0 kB | |
| Totals: 3 Items | 405.4 MB | 0 | |
Plugins + CLI 0.14.0 (2026-10-10)
Minor Changes
-
dx evalruns a program against a space in the code-mode dialect a Composer agent writes for itsevaltool (--dialect effect, the default, orplain), and prints the same text the tool would return; a failing program exits non-zero. The program is an argument,--file, or stdin;--skillbinds the operations it may invoke (every skill by default), and--instructionsprints the dialect's API reference.@dxos/agent-code-modeexportsevaluate,projectOperationsanddescribeTypesfor hosts that run code mode outside a turn. (253b32b) -
An agent gains a "Brain store" companion: a read-only debug view of its brain as held, showing the raw facts with full attribution, each watch's rules, the facts encoded as the Datalog relations those rules match, and each watch's pending events with when the clock next matters. It reads the brain through the new
TriggerOperation.InspectBrain, and@dxos/brainaddsEncoding.formatandEncoding.formatEntryto print encoded facts in the rules dialect. (62abfd7) -
An agent's chats now run on EDGE (
Agent.chatLocation) unless a chat setsremote: false, so every chat shares the agent's one brain. Facts the agent records are attributed to space members by identity DID, with the display name as an optional label (attribution.agentLabel), and watches resolve the person they name to that member's DID and match on it (someone who is no member is matched by name, as their words are attributed); a chat with a member no longer invents a placeholder "Me" person. (f0fc12a) -
An agent's extracted facts now live only in its brain (
BrainService): reading a chat or a document no longer writesFactEntry/ExtractionPassitems to an annotation feed in the space, and documents read withReadSourcenow wake watches as chat turns do. Breaking: the@dxos/plugin-agent/FactEntryexport is removed,ReadSourcereturnsfired/undeliveredinstead of apassref,BrainServicegainsreadThroughand areadpush option (the chat read cursor, kept with the facts), and annotation feeds already in a space are no longer read. (469e811) -
@dxos/braingainsEvaluator, which evaluates every subscription of one brain withGoalRulesover a shared fact stream (push,tick,hydrate,nextDueAt), andOracle, the replay gate a compiled goal must pass.GoalRules.nextDueAtreports when the clock next matters,everyfires once per period even when every evaluation falls on a boundary, andaboutalso matches an entity's label. plugin-agent's in-memory brain now evaluates subscriptions with theEvaluator: aTriggercarriesrules, compiled from the goal's text byWatchFacts(gated by the oracle, naming the space's members by DID) or translated from itsFactPatternbyTrigger.toRules, replacingTrigger.matchesPatternandBrainService.matchEvent.BrainServiceevents carry the wake's label and facts, and the service gainstickandnextDueAt;TriggerOperation.RunDueruns due watches. (37b0196) -
Add an Agent tab to the chat options, so a new chat can run on any registered agent (such as Claude Code on this computer or in the cloud) without delegating a task, and show which agent a chat runs on beside the options. (0e28f43)
-
A chat hosted on EDGE now shows its working indicators, phases and streamed reply for the whole turn, instead of reading idle while the agent works.
AgentProcesstakes aresidentoption that keeps the process for the next prompt rather than spawning a new one per turn, andsubscribeEphemeraltakes{ replay }. Breaking: plugin-assistant'sAiChatProcessoris nowChatModel(useChatProcessor→useChatModel,getProcessorState→getChatModelState, and theprocessorprop ofChat.Root/ChatPrompt→chatModel). (a1e64db) -
SceneViewdocks its properties and layers panels by default: a column beside the canvas (which narrows rather than sitting under them) holding an accordion with one section per panel, any number open, the column scrolling them together.SceneView.Roottakespanels(PanelMode:'docked'|'floating') to float them back over the canvas instead;PropertiesandLayersPaneltakedocked. The layers toolbar's delete and merge actions move into a menu at its end. A newSceneView.Aboutadds a dock-only section below the layers with the scene's object counts (Aboutis the panel itself). In Composer, a canvas drawing's menu offers "Dock panels" / "Float panels", stored as the canvas settingdockPanels.
In @dxos/react-ui, Toolbar adds no gap or inline padding of its own (its items carry their own spacing, and a ToggleGroup in a toolbar drops its gap to match), and an Accordion item's icon and caret sit in Blocks rather than custom padding, and list rows in a container with no gutter lose their rounded corners. In @dxos/react-ui-form, a Form.Viewport without scroll pads its block axis as the scrolling one does, so a form in a host that scrolls it still ends a gutter in. (fd09131)
- The scene shape is now a frame. Breaking: the built-in node type
sceneis renamedframe(palette name "Frame", shortcut F), withPortalNode→FrameNode,isPortalNode→isFrameNodeandPortalNodeView→FrameNodeView; the node'sscenefield (its child scene id) is unchanged, and drawings saved withtype: 'scene'are not migrated. A node type may definehostOpen, the host's own way to open a node of it: opening (double-click, Enter, the open control) calls it instead of drilling in, and auto-drill passes such a node by. A node type may also definetoolbar, controls drawn above the node, flush with its right edge and at screen size, shown while the node is hovered or selected. The canvas clips rather than hides its overflow, so focusing an editor in a node no longer scrolls the canvas out from under the camera. A frame always draws its border, and one the host opens itself is never faded as the scene being zoomed into. A node's embedded content (markeddata-scene-overlay) is live only while the node is active (SceneViewAtoms.active,NodeViewProps.active): a click on the node activates it, and selecting anything else or Escape deactivates it. Inactive, a press anywhere moves the node; active, a press on the content starts no move (so its controls receive their clicks), a double-click there does not open the node, and the wheel is the content's where it has something to scroll. Presses inside a portal the content opens (a menu) no longer reach the node.
In @dxos/plugin-canvas, a frame holds either its own nested scene or a referenced ECHO object: CanvasSceneNode.drawing is replaced by CanvasFrameNode.object (any object, picked in the properties panel) and role (card, section or article; unset is a card). A canvas drawing is embedded as a scene, as linked drawings were; any other object renders as its surface of that role, with a floating toolbar whose button opens the object in the app. Selecting the frame, or focusing within it, gives the object's surface attention, so its own toolbar acts. The object picker lists only user objects (those the navtree shows), not system objects such as space properties or canvases.
In @dxos/react-ui-form, the object picker's popup is as wide as its field rather than growing to its longest option.
In @dxos/react-ui, a Card.Root with border={false} also drops its corner radius, as its prop always described, so a card framed by its host shows no rounding of its own. (508be04)
- A chat can run on Claude Code on this computer or on EDGE.
A chat names the durable process that runs it in session.process. Plugins contribute agent processes through AssistantCapabilities.AgentProcess, and AgentService spawns the one a chat names, falling back to the assistant's own. The Claude plugin's Claude Code process starts the agent through the new ShellService (@dxos/compute/ShellService), which runs operating-system processes and bash scripts for a compute process. Each process gets its own instance, and every child it started ends when that process ends. The Node.js implementation is @dxos/compute-runtime/node-shell.
"Claude Code (cloud)", built on plugin-code's new EdgeAgent.make, runs a chat's turns on EDGE's coding-agent process in a sandbox container. The session keeps working with no client connected, and EDGE restarts the container and resumes the turn when the agent dies or stalls. Each turn lends the process the user's credential, so the credential never enters the container. The cloud session runs unattended by default: a permission request is denied on the spot, and the agent skips that step and carries on.
A new Claude Code connector stores a Claude subscription token: open a terminal, run claude setup-token, and paste the token it prints. The token is kept apart from the Anthropic API key. Claude Code on this computer receives it as CLAUDE_CODE_OAUTH_TOKEN, and the cloud harness lends it in preference to the API key.
A project lists the GitHub repositories its cloud sessions work on (Project.repositories), set in the project's header next to its name. The sandbox checks out the project's repo and each listed repository before the agent starts. Each turn lends the space's GitHub token to EDGE, resolving it through EDGE when EDGE holds it, and EDGE proxies the sandbox's git calls with it, so the token never enters the container either. The project folder setting applies only to Claude Code on this computer.
The Code plugin's coding-agent permission setting gains bypassPermissions, which never asks and runs everything. (ec6da5a)
-
Claude Code (cloud) lends each turn's credentials as the environment the agent runs with, through one
provideCredentialscall: the Claude subscription token asCLAUDE_CODE_OAUTH_TOKEN(or the Anthropic key asANTHROPIC_API_KEY) and the space's GitHub token asGITHUB_TOKEN/GH_TOKEN, so the agent can clone private repositories, push and open pull requests withgh.EdgeAgent's definition takes a singlecredentialseffect in place ofcredentialandgitCredential, andEdgeAgent.githubCredentialsreplacesgithubCredential. (ebe3879) -
Spaces holding pull requests now get one hourly EDGE trigger that refreshes their open and draft pull requests from GitHub in bounded batches, so their state no longer goes stale until someone opens them. (8c016fc)
-
Nodes and links share one
style: a link'sLineStyle(colour andlineStyle) is the common base a node'sNodeStyleextends with fill, tone, frame, font size and text alignment (alignHorizontal,alignVertical);styleFieldslets a shape extend it further. The properties panel edits the fields a mixed selection shares with one style picker. Drawings gain style classes (StyleClass,SceneStore.styles, kept in a new optionalCanvas.stylesmap besidecontent): an element naming a class derives its style from it, and editing a classed element's look edits the class. Shapes and links of an unregistered type render as the core base (BaseNode): a box showing itslabel, or a straight line. A scene shape can open any scene of its drawing, and "New scene from selection" (groupIntoScene) moves the selected nodes into a new scene behind one scene shape. Breaking: a link'sline({ hue, dash },LinkLine) is nowstyle({ hue, lineStyle }), which plugin-canvas reads from drawings saved the old way; a node style'sclassNameis removed; the UML class shape keeps its name inlabelinstead ofname. (3c4d73d)
Patch Changes
-
An agent watch no longer notifies its recipient about something they said themselves, refuses a watch that would only ever do so, and sends nothing for a watch cancelled while its update was being written. (f20db7f)
-
The in-memory brain wakes a chat where the chat runs (
Agent.chatLocation), so an agent chat on EDGE no longer gets a second, local session when a watch fires. (2d0a302) -
The space Home assistant prompt no longer adds a feed to the space on every visit: its chat is an in-memory draft until the user sends, when the chat, its feed and its bindings are written together.
AiContext.Bindernow opens over a feed that is not stored yet, holding bindings in memory untilflush()writes them once the feed is stored, andunbindremoves an object from the bound set immediately whichever URI form the ref uses. (3e98467) -
In
@dxos/react-ui-canvas, a link may carrytext, drawn at the middle of its route on an opaque rounded backdrop. Guides and borderless shapes are off the lattice: they occupy no cells, move and resize freely, and do not block gutter routes. A nested scene routes on its parent's lattice, so its links no longer jump when it settles. On a lattice a smart link takes the side-centre ports whose gutter route bends least (a pinned port stays pinned), and the gutter search runs on a binary heap. A label's or note's lines are a whole number of minor grid units tall, padded a grid unit either side, and a guide's text takes the default colour.SceneView.Root'sreadonlynow also prevents selection and hides the selection frame, ports, the actions bar, the Properties and Layers panels, the grid and the lattice guides.
In @dxos/plugin-canvas, a laid-out illustrator diagram draws on the canvas lattice as it renders: each connector binds to its boxes as a smart link carrying its caption as text, and a group is a guide titled at its top-left corner on a Backdrop layer below the shapes. A linked drawing's own frames open the drawings they show, so drawings nest to any depth. A frame's object resolves through the canvas's database, and its role field appears as soon as an object is picked. Read-only is the viewer's own, kept in the canvas's view state and toggled from the drawing's menu (Read only / Edit drawing). The plugin offers a "DXOS Architecture" space template: multi-level Composer and EDGE architecture diagrams (from docs/diagrams/*.dx) seeded as nested canvas drawings, which the Architecture stories also load, read-only by default. Composer enables the plugin by default.
In @dxos/diagram, a group frame's margin is the same on every side, with its title inside the top margin, and a diagram with an explicit grid keeps every box on it: extra space between groups is whole cells.
In @dxos/react-ui-form, picking a reference in RefField commits it, so an auto-saving form saves the pick at once rather than on the next field's edit. (b0e4b60)
-
Switching a routine's action between Instructions and an operation no longer carries one kind's trigger inputs into the other: a stray
input: {}(or an operation'sconnection) failed every run until EDGE switched the trigger off. Switching a broken trigger back on now repairs it. Pressing Sync on an account whose sync routine is switched off now shows a toast that links to the routines panel, instead of retrying EDGE's 409 refusal for about 30 seconds. The trigger manager refuses a disabled trigger with a typedTriggerDisabledError, and EDGE force-runs no longer retry a 409 that is not about the trigger being switched off. (5324de6) -
The pull request checks list shows how long each running check has been going, counting up live. (626e774)
-
@dxos/brandships Poiret One (assets/fonts/poiret-one), the face of the Composer wordmark. The Markdown, Sheet, Tables and Projects plugins' details now include a narrated demo video, opening on the Composer ident. (085dcb1) -
Composer plugins lay out their panels with react-ui's
Layout.Flex/Layout.Gridand theme colour tokens instead of hand-written flex/grid classes and raw palette colours, so status colours now follow the theme in light and dark mode. (27b542c) -
The inbox materializer converges notification containers only when the container set changes, so passes triggered by inbox, contacts or space-list updates no longer query the space when there is nothing to do.
materializetakes an optionalconvergeflag (defaulttrue). (b03a6aa) -
The Composer help menu can check for updates and, once one is downloaded, offers "Restart to update"; the desktop update toast and settings button now use the same "Restart to update" wording. (2e6b92a)
-
The onboarding welcome document, the Bramble sample, the Help menu's Documentation item and the support plugin's docs search results now link into
https://dxos.org/docs/. The olddocs.dxos.orghost no longer resolves. (fd5bf3e) -
Plugin details in the registry open as a detail panel beside the list, and Cmd/Ctrl-click opens one in its own plank. In a flattened deck, a plank with no object above it (such as a registry plugin) shows the planks opened before it as breadcrumbs again. (1d3eea3)
-
An app now has one process manager: the stack's
Process.ManagerService, which the app's operation invoker,Capabilities.ProcessManagerandAgentServiceall use. Operations the app invokes withon: 'edge'therefore run on EDGE instead of dying with "Remote process requested, but RemoteProcessManager offers no process control", which an agent's watches and Brain store views logged every three seconds.@dxos/app-frameworknow owns the unified-manager spec that@dxos/plugin-routineused to contribute, with a no-op remote manager as a fallback, and aLayerStackspec now outranks an ambient service of the same tag. (0715304) -
Switching a routine's action between Operation and Instructions and back in the routine editor restores the previous action for the rest of the editing session, instead of clearing the operation and leaving the routine's triggers with nothing to run. (e0cd29c)
-
The routine editor warns when a routine is enabled but has no operation to run, instead of saving a trigger that EDGE skips on every tick. (5e1acd0)
-
The space Home page no longer holds its sections back or shifts while documents load: Recent reserves placeholder tiles sized from an index-only count, Activity waits for its stats instead of showing zeros, starter prompts show from the cache at once and skip the recent-objects query within the refresh interval, the assistant prompt renders before its chat model opens, and the recent-objects filter no longer repeats types.
Masonrynow lays out at its measured size in its first painted frame instead of starting at zero height, and reveals at once when an earlier mount cached every tile's height. (385f3ce) -
The navtree's Types section decides which types to show from the space's index-only per-type counts (the same query the space dashboard runs) instead of one live query per type that loaded every object. (2112757)