| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| plugins-v0.13.0 source code.tar.gz | 2026-10-07 | 196.6 MB | |
| plugins-v0.13.0 source code.zip | 2026-10-07 | 207.0 MB | |
| README.md | 2026-10-07 | 33.4 kB | |
| Totals: 3 Items | 403.6 MB | 0 | |
Plugins + CLI 0.13.0 (2026-10-07)
Minor Changes
-
Agents gain a brain: each member talks to an agent in their own private chat, the agent records facts from every turn in an RDF fact store and watches them against the goals people set, and a matching fact wakes the requester's chat with an update, relayed as a synthetic system note. The brain runs in memory locally and as a SQLite Durable Object on EDGE. Fact extraction now works with Anthropic structured output, and
@dxos/computeaddsProcess.EnvironmentService, andProcess.currentEnvironment. (bbe9f18) -
BrainServicesplits into a knowledge base and an event base:pushstores facts and queues an event in the outbox of every subscription they match,queryreads facts back, and consumers drain each subscription withtakeandack(subscribe,subscriptionsandunsubscribemanage them). This replacesaddFacts,queryFacts,putTrigger,listTriggersandremoveTrigger. Fact matching moves toTrigger.matchesPattern, andBrainService.matchEventlets a remote brain match the same way. Opening an agent's page directly no longer fails to open the private chat the first time. (388bcc1) -
Add
@dxos/plugin-agent, an agent that talks to people through any channel, remembers them as ECHO objects, reads every conversation turn into facts, relays messages, and keeps one-time and ongoing ("keep me posted") watches whose updates it writes from the conversation's context. Every subpath of the package is a namespace:AgentStateandAgentKnowledge(each with aRootcontainer), one per skill (ConversationSkill,GoalsSkill,InterviewSkill,ModesSkill,NoteTakerSkill,RelaySkill), and one per type and operation set.
@dxos/plugin-thread channel backends can now open direct conversations (openDirect), post into threads (threads.send), run a connection (connection.start/stop/status), and return a send receipt. New operations sendToChannel, openDirect, connectChannel, disconnectChannel and getChannelStatus dispatch to them, and the handlers are published as the ThreadOperationHandlerSet subpath. The Discord and Slack plugins implement these backends.
An agent prompt can name its sender: AgentProcess accepts { prompt, sender?, properties? } as well as a bare prompt (AgentInput, makeInputMessage), AgentService.Session.submitPrompt and the assistant's request and session take a sender, and the model sees a named sender as [From: <name>]. useChatProcessor and AiChatProcessor take a sender, and ChatThread takes a userHue.
Agent.loadChat no longer picks a chat bridged from an external conversation as the agent's primary chat, and finds chats with a child-of filter so it also works on EDGE. Agent.makeInitialized accepts a skill ref, and Skill.makeRef binds a database skill as-is and any other by registry URI.
The ProfileOf relation moves from @dxos/plugin-crm to @dxos/types with its typename unchanged, so existing profiles still resolve. EdgeHttpClient.request makes an authenticated call to any EDGE route. pipeline-rdf exports DEFAULT_MODEL. FormInlineAnnotation now survives the JSON-schema round trip. A plugin that declares two modules with the same id now fails when it is constructed instead of silently dropping one. (246ee3c)
-
A submitted chat prompt shows in the thread at once, before it is persisted, and carries messenger-style delivery ticks (sent, delivered, read) until the agent takes it up; a prompt that fails to send is marked so in place and can be removed. Queued prompts now render in the thread itself, so
Chat.QueueandChatQueueListare removed.AiChatProcessorgainssend,removePrompt, anoutboxatom and athreadatom that projects the feed, the streaming turn and the outbox into one list of rows;AiChatProcessorStateexposesthreadin place ofmessages. (cef0fed) -
Chats can run on a coding agent other than Composer's own.
SessionConfiggainsharness(which agent runs the chat) andhost(the device that runs it). Plugins register agents throughAssistantCapabilities.Agent, and the agent service picks the turn engine per chat from it.MakeTurnProducerOptionsnow includes thechat.
plugin-code adds the desktop app's agent helper and an ACP turn engine. It streams the agent's transcript into the chat, keeps the agent's session warm between turns and resumes it after a restart. plugin-claude uses it to offer Claude Code on the user's machine.
An agent's permission requests arrive as a request content block (ContentBlock.Request). The chat renders it as a card, and the answer goes back through AssistantOperation.RespondToRequest.
ProjectOperation.DelegateTaskToChat takes an optional harness. Without one, it uses the new defaultAgent assistant setting while that agent is available, and Composer otherwise. A task's menu lists an "Assign to" entry per registered agent and disables those that cannot run on this device. To support this, ObjectAction gains group and unavailable.
A project overview has a settings slot, ProjectView.Settings, where other plugins add settings. plugin-code uses it for the project's repository folder on this device, and a delegated chat works in its own git worktree of that folder.
A coding agent gets Composer's operations as the composer MCP server, scoped to its chat's space. The page serves the same surface as dx mcp serve, and the agent helper relays the agent's requests to it.
CodeAgent.make takes sessionMeta, agent-specific ACP session options built from the Composer tools on offer. Claude Code uses it to call Composer's read-only tools without asking each time. The Claude plugin now depends on the Code plugin, which runs the agent helper. (3e73e53)
Process.Manager(Process.ManagerService) replacesProcess.Monitor: it keeps the process-tree reads and trace stream that span local and remote runtimes, and addsspawnandhandlesverbs that take aProcess.Location, so a caller no longer holds the local and remote managers separately.Process.isTerminalandProcess.isExitedreplace hand-written checks of terminal process states.
Breaking: Process.Monitor, Process.MonitorFilter and Process.ProcessMonitorService are removed (use Process.Manager, Process.Filter, Process.ManagerService); ProcessManager.Handle, Status, SpawnOptions and ListOptions move to Process; ProcessMonitor.layer is now UnifiedProcessManager.layer; the local manager exposes processTreeAtom and subscribeToTraceMessages directly instead of monitor; the Capabilities.ProcessMonitor capability is now Capabilities.ProcessManager; and AgentService.layer requires Process.ManagerService instead of both process managers. (596728d)
-
client.halo.inboxrelays signed messages of any type between identities (messages,sendMessage,ack, and astatusthat readsaccount-requiredwhen EDGE refuses an identity with no account), and space invitations now travel as inboxMessages rendered by theorg.dxos.role.spaceInvitationsurface.SpaceOperation.AddMembersreports members it admitted but could not notify innotNotified, deck companions can show a rail-tab count viaAppNode.makeDeckCompanion({ badge }), andCardTile/Card.Rowplace leading cells in the start rail. Breaking:inbox.notices,inbox.sendanduseInboxNoticesare removed (useinbox.messages,inbox.sendMessageanduseInboxMessages), as are plugin-client's invitation toast, invitations list and account badge. (8980a93) -
The pull request type opens as a triage list of every pull request in the space, showing each one's repository, title, CI checks, tracking tasks and state, ordered by relevance or time; its filter, sort and grouping persist per device.
@dxos/react-ui-menugains genericSortMenu/GroupMenu,@dxos/react-ui-querygainsusePersistentQuery, andPullRequestnow records GitHub'screatedAt/updatedAt. (64f1a7a) -
Edge labels sit beside their own route and off group frame borders. The semantic DSL gains soft sides (
A:~left), group shape (compact,max-width=N,diagram aspect=W:H) and fan-in buses (edge A, B -> C bus), and warns about a bus it cannot honour or a group frame an outside relation stretches. Diagnostics measure bound arrows as drawn, count a bus as one connector, and no longer count T-junctions or self-loops as crossings. Node labels wrap, shrink or ellipsize to stay inside their box, and re-rendering a source gives a byte-identical.dx.svg. (014996b) -
SceneSvg, the SVG renderer for laid-out scenes, is exported as@dxos/plugin-illustrator/SceneSvg, so a host can draw an@dxos/diagramlayout without loading the plugin. (2d5050d) -
The diagram DSL gains a semantic layer:
diagram,group,nodeandedgestatements describe what is related and roughly where, andDsl.compileplaces and routes the rest. Constraints range from loose to exact —right-of,above,same-row(soft with~), grid cells, absolute positions, port sides,viawaypoints and sharedbuschannels — so a model can write a good-looking diagram directly, without a helper script.
Edges name UML and ER relationships — extends, implements, composes, owns, depends-on, one-to-many, many-to-many — and the renderer draws their line endings (hollow triangle, filled and hollow diamond, crow's foot, dashed lines). Children that extend or implement the same parent sit on one row and meet it through a single trunk and triangle. Mermaid class and ER diagrams carry the same relations through. The illustrator's Constraints story shows each diagram beside its DSL and scores.
The illustrator's render-diagrams task renders .dx sources as well as mermaid, writes a PNG beside each file it is given, and runs from source again. (2550779)
-
The project timeline (Gantt) draws its chart again beside the lane names, and its panel scrolls vertically with a thin scrollbar when the lanes outgrow it. An object card's title is one truncated line by default (pass
linestoObjectCard.Headerto clamp to more), and the card popover is only as tall as its content rather than at least--spacing-card-min-height. (3672aff) -
The project timeline is two columns: lane names and the chart. A lane's token and tool counts move into a hover card over its name, and a new
Gantt.LegendTogglebeside the axis switch shows the counts in that column instead (legend/onLegendChangeonGantt.Root, persisted with the project view). The chart scrolls both ways in one area with the horizontal scrollbar at the panel's foot, and is keyboard-navigable: clicking a node focuses the chart, the arrow keys move between lanes and along the timeline, and Space toggles the node's card (Enter selects it). A parent task's bar no longer starts after its sub-tasks'. In a flat deck, a plank's breadcrumbs show its place in the tree (e.g. a session's project and Sessions branch) rather than the navigation history.
Breaking: Gantt.Meta is removed (its content is the legend's hover card and stats mode), and Gantt.Chart's ref is now the svg element. (2f95d25)
- UI layout primitives get simpler, typed APIs; heavy components move into their own packages; and the chat bounds what an agent can queue or spend on its own.
Breaking:
Grid'scolsandrowstake typed track tokens instead of raw CSS:'fill'(a flexible track that may shrink below its content), a number (a share of the free space, also shrinkable),'min'/'max'/'auto'(sized to the content), or a length such as'18rem'orvar(--…). A count is that many equalfilltracks, andgrownow defaults tofalse.Spinneris now an interface (SpinnerProps, with anActivityStateof'ready' | 'thinking' | 'alert' | 'error') with two implementations:ShapeSpinner, the morphing square (its states werepulse/spin/flash), andPulseSpinner, a dot matrix. Import spinners from the root of@dxos/react-ui-components, whose./Spinnersubpath is removed.QueryEditor,QueryFormanduseQueryBuildermove to the new@dxos/react-ui-query(translations at@dxos/react-ui-query/translations), andHtmlwith its colour-scheme and email transforms moves to the new@dxos/react-ui-html, so@dxos/react-ui-componentsno longer carries CodeMirror,@dxos/echo-queryor DOMPurify.Matrixmoves to@dxos/react-ui-experimental.- The
dx-fullscreenutility is renameddx-cover(absolute inset-0): it covers the nearest positioned ancestor, not the screen. ScrollArea.Roothides its overlay thumbs until the pointer is over the frame (autoHidedefaults totrue).
Fixes and behaviour:
- A popover whose content mounts after it opens (the chat thread outline's card) is positioned beside its anchor instead of the viewport's top-left corner.
- The chat prompt takes at most three prompts queued behind a running turn (
maxQueue), on every submit path; queued prompts are small, right-aligned rows flush with the status chip. -
An agent may wake itself with alarms at most
Alarm.MAX_SELF_WAKES(10) times in a row without a user prompt; each wake-up prompt states how many remain, a later alarm is dropped without a turn, and the chat status shows the count beside the next wake time. (7715216) -
@dxos/react-uiis rebuilt on Ark UI primitives styled by plaindx-*component CSS, and every UI package and plugin renders on it; the former component APIs are removed. -
Components are exported flat by name (
Button,Toolbar,Card,Panel,Container,Field,Input,Combobox,Menu,Tabs,Main,Splitter,Toast,Tour,Banner,Empty, …) and sized bydata-sizescopes (xs–xl;Sizeis that scale).Containerlays out rails and subgrids,ControlFrameframes a control with adornments (Input copyable,variant='mono'), anduseMainLandmarkdeclares the app's focus areas (Tab and Arrow Left/Right move between them).Comboboxadds a trigger mode, option descriptions, a create row and async results.Labelis no longer public (useField.Label), and the flow helper isMatch(Match.Root/Match.Case). @dxos/react-ui-listprovidesListbox,OrderedListandTree(virtual rows, drag and drop, disclosure animation);@dxos/react-ui-formprovidesForm(Root,Viewport,Content,Fields,Actions, …),ObjectProperties,ObjectPicker,ViewEditorandRefEditor;@dxos/react-ui-menurendersActionToolbarandActionMenuon the new Toolbar and Menu;@dxos/app-toolkitadds theObjectCardcomposite.@dxos/ui-themerenames the text tokens to--color-fg/fg-muted/fg-subtle(text-fg,text-fg-muted,text-fg-subtle; Typography and Icontone='muted' | 'subtle') and--color-subdued-separatorto--color-separator-subtle, adds--color-focusfor the keyboard focus ring, and derives the control fill from one offset off its host surface in both themes.@dxos/echoaddsAnnotation.ArrayPresentationAnnotation(ordered,display: 'tag' | 'title') for reference arrays;@dxos/effectSchemaEx.getPropertieskeeps an annotated optional field's annotations;@dxos/ui-editormarkdown tables keep empty cells;@dxos/plugin-markdownmarksDocument.descriptionas markdown, and the rename popover shows an object's properties.
Breaking: the former @dxos/react-ui component APIs and the transitional Next namespace are gone; import components
from @dxos/react-ui by name and use the renamed theme tokens. (1737cad)
- The selection companion stacks the selected objects as plain cards in one scroll area with a small gutter, and its "No objects selected" banner sits in the same column, where the first card would. A form's nested object shows its label and disclosure above the bordered group of its fields rather than inside it.
Banner.Roottakesinsetto override its own gutter, for a host that already pads it.
Breaking: Instructions no longer has a description field (nothing read it), and Instructions.make no longer accepts one. (3022878)
-
Task lists, trees and the chat prompt are reworked on the react-ui components.
-
Task list rows and the task editor place their cells by column name on one shared template, so the editor's fields, pickers and cancel sit in the rows' columns. The editor creates with an estimate and a priority, saves from an end adornment on its title field, and always takes the list's grid.
TaskList.Rootaddsflush,showAssigneesandshowMnemonics; the leading column holds one reference button that shows the ordinal and copies the task's URI.TaskPropertiesandTaskHistoryare top-level components, and the task's reference headsTaskProperties. - Breaking:
Gridno longer grows by default (passgrowto fill and clip its parent), matchingFlex.TaskEditorandTaskOrdinalare removed (the task article renders a form over theTaskschema, whose description is Markdown),TaskMnemonicis no longer exported, andTaskList.EditordropsgridandshowControls. Tree.Contenthas no gutter by default and pads row ends (rowInset), so row highlights run edge to edge under an overlay thumb. A deferredActionMenukeeps the focus an outside click moved;ActionToolbartakes astartslot.Form.RoottakesmarkdownExtensions. Popup options sit in an equal inset, an emptySelectopens no popup,Select.Triggertakesfixed, a splitter drag no longer dims its panes, and clickable tags keep their hue's text colour.-
Surface modules in plugin-client, plugin-preview and plugin-file declare every role they bind. (a449958)
-
The roots of
@dxos/app-framework,@dxos/app-graph,@dxos/app-toolkit,@dxos/assistant-toolkit,@dxos/compute,@dxos/effect,@dxos/graph,@dxos/observabilityand every plugin now export namespaces only, and every namespace has its own subpath: import it withimport * as Hooks from '@dxos/app-framework/Hooks'and callHooks.useOperationInvoker(). A compound component exports its parts (<ObjectCard.Root>,<ObjectCard.Header>), a single component keeps its own name (<TracePanel.TracePanel>), and errors live in the namespace that owns them (Operation.NoHandlerError,Capability.NotFoundError,ConnectorSync.DatabaseMissingError) or in a<Domain>Errormodule (FunctionsAiError,ConnectorError).
Breaking: names that were exported flat from a root moved into namespaces, e.g. ProcessManagerPlugin.make(), PluginManager.Context, PluginManifest.DEV_SERVER_PORT, Progress.makeTraceSink, SpaceSurface.RENAME_POPOVER, Calendar.getRangeSelectionId, AgentSkill.Handlers, SlashCommand.resolveSlashCommand, SelectionModel.SelectionModel, HaloServices.layer, PluginStorage.loadPlugins, CorePlugins.make(), KvsStore.make (formerly createKvsStore), CardSlot.IconSlot and CardSlot.MenuSlot (formerly CardIconSlot and CardMenuSlot), Hooks.useUpdateRow in @dxos/app-toolkit and OtelTracer.make/OtelTracer.layer in @dxos/effect; a plugin's meta is <Name>Plugin.meta. Flat names nothing imported outside their package are no longer exported. @dxos/compute/Errors is removed, @dxos/app-solid no longer re-exports @dxos/app-framework, and @dxos/util/Position is a subpath.
HomeSection and NamePopover move from @dxos/app-framework to @dxos/app-toolkit (@dxos/app-toolkit/HomeSection, @dxos/app-toolkit/NamePopover), so app-framework no longer depends on @dxos/react-ui. A check-module-structure guard fails if any app-framework export reaches react-ui again. (9ab98cd)
Patch Changes
-
Cut the wait between submitting a chat prompt and the model request by 22–39% and between agent turns by 40–48%, and add
markWork,dxos:-prefixed User Timing marks that a perf harness joins across realms over CDP and DevTools shows on its Timings track, withai.request/ai.responsemarked around every@dxos/aimodel call. (cb1e218) -
Plugin state no longer shares a localStorage key with plugin settings, so changing a setting no longer wipes state on the next reload, and saving state no longer wipes settings. Assistant keeps each object's current chat, Maps keeps the globe/map choice and API keys, and the telemetry toggle stays off after an opt-out. State moves to
<plugin id>.state; the old values are not migrated. (0347f09) -
Fix the PDS browser rendering an empty body. The collection and record lists had a content-sized width inside Panel and ScrollArea, which are inline-size containers, so the lists collapsed to 0px and nothing could be selected. The list pane now has a fixed width. (b4c9775)
-
@dxos/plugin-code/AcpAgentand@dxos/plugin-code/ComposerMcpexport the ACP turn engine and Composer's MCP surface, so a host other than the desktop app can run Claude Code with Composer's tools. Operations run underAssistantTestLayercan now useHypergraph.Service, as they can in the app. (94b63cd) -
Fixes found driving a Composer basics demo. Creating an object from an
@link keeps the typed name. Creating a type now opens its table, from the create dialog and from the debug object generator. Types and views navigate to their node in the Database section instead of a plank stuck on "Loading…". A table can be created without picking a type: it gets a new type named after it. The table's add-column button appears for a database type. The type and location pickers in the create forms list their options and show their labels. A map created on a table's type offers the type's location properties. Toggling a world-view map shows the whole globe. (66727e3) -
The deck shows a plank's companion only when the plank and the companion both fit at their minimum widths. It caps the companion so the pair never runs under the end sidebar, which used to hide the companion's close button. In flat mode, with breadcrumbs, a plank header's controls sit at the header's end. Opening settings closes the companion. (9833b46)
-
A dialog opened with
overlayClassesoroverlayStyle(the login gate) is shown in the deck's full-screen overlay again, with the surface centred on it, as before the move to the Ark dialog. (5e95c71) -
In the native desktop app, the window can now be dragged from any non-button spot in the L0 and R0 rails, the sidebar header, plank and companion headings, and the empty deck. (8412f8b)
-
Mail sync no longer re-pushes and reloads every previously synced message on each capped backfill run, which ran EDGE's operation service out of memory on large mailboxes; tag reconciliation now records its base on capped runs and resolves message ids in bounded batches. (df9ea46)
-
The "Pivot column" select in the Create Kanban dialog lists the single-select fields of the chosen card type again. It was empty for every type, including Task and Organization, because the card type picker supplies a type URI and the pivot field looked the type up by bare typename. (f12ef07)
-
The Create Space dialog puts the icon and colour pickers side by side, and its Cancel and Create buttons end at the fields' edge rather than in the gutter. Across forms, a control narrower than its field (a picker button) now starts under its label instead of centring. (665261a)
-
Layout and contrast fixes for the new
@dxos/react-uicomponents: -
Forms in a dialog or popover now line up with the host's columns, and a form in a popover takes the popover's surface.
- Combobox and select triggers placed directly in a form span the form's content column.
- A panel no longer shifts its body under the header when focus scrolls it.
- List rows with a description keep their icon and actions on the title's line.
- A scrolling block in a settings row (such as the debug port log) spans the row instead of collapsing to zero width.
- The log list scrolls inside its panel, an expanded entry opens beneath its row, a clicked row is ringed as current, rows' checkboxes are optional (
Logger.List checkable), and the drawer's focus ring is no longer hidden by its panes. - Row hover and selection are lower-contrast, and a fieldset's collapse button is a ghost button.
- The
descriptionof Project, Task, TaskSet, Milestone, Organization, Issue, PullRequest, Event, Pipeline, Skill, Routine and Script isFormat.Text, so forms edit it as multi-line text;Format.Textis also on theFormatnamespace from@dxos/echo/Format. - The task set's add-task editor stays at the bottom, below the list.
- Popovers are unpadded by default (the call site sets the inset; Body and Header keep theirs); a popup's arrow no longer covers its first highlighted row; menu checkbox and radio rows show the action's icon with a trailing check; an inheriting Container whose parent is no grid lays out its own column.
-
Select.Trigger'sfit='options'is now the booleanfixed(the trigger keeps its widest option's width); a selected tab takes the control fill. (945092e) -
A ScrollArea contains overscroll only along the axis it scrolls, so a vertical two-finger swipe over a horizontally scrolling area (such as the project timeline's chart) scrolls the panel around it instead of being swallowed. (6a7bed4)
-
Card layout cleanups. A grid
Card.Roottakesgutter(rail,mdorlg) to widen its rails; stats cards uselg, so their rows sit further in at the same text size.Card.Rowtakesend, content centred in the end rail (unliketrailing, which reaches back into the content track); stats rows put their controls there, centred, and their units at its start, so values end on one edge. Every stats card header has one layout: the icon in the start rail, the title and optional info as a two-column grid, and the button or menu centred in an end rail that is kept even when empty, so the info ends at the same edge on every card. An icon-only button inside aBlockno longer adds its own inset, which had pushed it off-centre in the cell. The Surfaces card shows a selected role's surfaces as JSON blocks again (a label row had clipped them to nothing), and the EDGE, Indexer and Sync cards show each space's name or id beside its copy button rather than a bare icon.Card.Rowtakesspan—fullacross both rails,endon through the end rail — in place of hand-written grid-column overrides, and a markdown card's word count now spans the rails as its snippet does, so the two start at the same edge. A parent task's timeline lane carries every descendant's start and finish as nodes, read from the task tree, so its first node is where its sub-tasks' work began even when they are not on one checklist. The project timeline's horizontal scrollbar spans only the chart, not the sticky lane names, via a newtrackStartonScrollArea.Root. The debug port's session id is a disabled copyable input, as the Space ID is. A form's markdown field (e.g. a task's description) fills its frame and wraps long tokens such as an inline-code URL, so it no longer scrolls sideways with its scrollbar mid-field. (4f8e566) -
Arrow keys move between slides again in a fullscreen presentation. The presentation now takes focus when it opens, so the deck's plank navigation and landmark focus traversal no longer swallow Left and Right. (5e16828)
-
Sheets render again in the browser and desktop app, formulas evaluate inside markdown documents again, and agents waiting on a question resume in the app. (7c08839)
-
A pull request now stays on the task it is attached to, so a sub-task fixed on its own can carry its own PR alongside its parent's; only a second, different open PR on the same task is refused.
Task.artifactTargetis replaced byTask.checkArtifact, which validates without redirecting. (fcbb5c4)