Skip to content

space_ui (xo-space)

From Innerpedia, the encyclopedia of you

space_ui is a JavaScript project within xo-space. Created in July 2026, it was last touched 1 month ago. It holds 85 files across nine folders, 1.7 MB in all.

An explorable map of ~/xo-projects. Four primary sections share the same navigation structure: Projects, Agents, Inbox, and Setup. Primary links open a section's default page; the secondary links open its pages and can be copied, opened in another tab, or revisited with Back/Forward.

Contents
  1. (Top)
  2. Overview
  3. Files
  4. Structure
  5. Technology
  6. See also
  7. External links

Overview

SectionDefault routePages
Projects (1)#/projects/overviewOverview, Data (List, Graph, Tree), Timeline, Manage
Agents (2)#/agents/overviewOverview, Sessions, Trends, Configure
Inbox (3)#/inbox/itemsItems, Connections, Jobs, Activity, Sharing activity, Sharing
Setup (4)#/setup/workspaceWorkspace, Intelligence layer, Connectors, Secrets, Jobs, Server

Space starts at Projects Overview. Data contains the existing List, Graph and Tree views at #/projects/data/list, #/projects/data/graph and #/projects/data/tree. The List / Graph / Tree links sit in each view’s local toolbar. The Data section link remembers the last view used; a direct #/projects/data link opens List. Clicking Projects or pressing 1 always opens Overview. The section roots #/projects, #/agents, #/inbox, and #/setup normalize to their defaults. Legacy #/dashboard, #/graph, #/tree, and #/time links open the corresponding Projects page. #/sharing and #/projects/sharing now open Inbox Sharing at #/inbox/sharing. The previous #/projects/list, #/projects/graph and #/projects/tree links also remain valid and normalize to the corresponding Data route. The former #/projects/files, #/projects/files/list, #/projects/files/graph and #/projects/files/tree addresses remain aliases for Data. Connectors and Secrets keep their aliases #/connectors and #/secrets. Technical details is a child of Setup Server at #/setup/server/details; #/quirq remains an alias. Stored Inbox links using view: "projects" continue to open List; that API value is independent of the Projects section URL.

Wiki and GitHub stay at the top right across views. Wiki opens the local #/wiki overview in the same tab; GitHub opens in a new tab. Wiki has no numbered shortcut. Its three-step quickstart and topic cards link to the full Space guides, which open online in a new tab. Existing first-run and storage-help actions focus the matching overview section. The overview itself works offline.

The toolbar adapts to the active page. The Cmd+K search trigger sits with Wiki and GitHub in the top-right cluster on every page, including Overview and Graph. A single Refresh button stays in the top bar on every page, beside search, Wiki and GitHub. It reloads the entire document at the current URL, including its route and query string. Unsaved forms, open drawers and temporary filters reset just as they do with the browser reload button. Refresh this page in the command palette uses the same action. Every Projects page keeps Graph root in the section bar. Manage is a Projects page at #/projects/manage; its Add project button opens the clone form. The old #/setup/projects link opens Manage. Cards start collapsed; one card opens at a time to show metadata and Issues, while inline sharing drafts stay mounted. Copy icons beside recorded metadata copy its exact value; tooltips and keyboard focus identify each action. View activity, Share, Pin, Copy GitHub URL and Remove are grouped in each card header and work while collapsed. Pins keep their existing browser storage and feed Data List’s Pinned filter, including across open tabs. Inbox Sharing keeps Share a project and Check now beside its own navigation. Each Manage project card has Share, which opens a Space ID form in that card. Cancel keeps you on the page; submitting grants access to that Space ID. Drafts stay with their project while you filter or navigate within Space. Choosing a node from Data List, Data Tree, Manage or Timeline opens Data Graph rooted on that node. The secondary navigation does not repeat primary section labels. Projects page descriptions are removed to leave more room for graphs and content; List keeps its counts and actions in a compact row. List, Tree, Timeline, Setup, Inbox Items, both activity pages, and the Agents session list have their own search; typing there keeps you on that page. Wiki, Sharing, Quirq, Inbox Connections/Jobs, and the Agents charts/detail have no page-search field; they still show the Cmd+K trigger.

PageSearch scope
Projects ListAll search words match across project name, folder ID and description. Combines with the Filter menu’s All projects, Live or Pinned options beside Sort by.
TreeFolder and file names, keeping the ancestors of matches visible.
TimelineProject names; the selected timeline mode and date range still apply.
SetupSetting names and topics. Choose a result to open its section; searches never read field values or credentials, and all unfinished forms stay mounted.
Setup → ConnectorsWorkspace integrations and account apps by name, identifier, description, and connected account label. Filtering preserves open controls and unsaved edits.
Inbox → ItemsTitle, body, kind, source, and project in the loaded status page, intersected with the source filter. The matching count shows this scope.
Inbox → ActivityLoaded workspace event labels, details, project names/IDs, runtime and session ID, intersected with the project selector. Load older adds more events to this search.
Inbox → Sharing activityLoaded relay event labels, details and repository names, intersected with the repository selector.
Sessions listProject, path, source, model, and session ID in the loaded sessions, intersected with the selected sources. Matching counts distinguish loaded rows from the total.

Each page remembers its query while you navigate within the app; a full reload resets it. Press / outside an editable control to open the command palette on Graph and on pages that have search. In a page search, Escape clears the query; pressing it again removes focus. The clear button does the same reset. When Inbox is narrowed, Mark all loaded seen explicitly includes loaded new items hidden by search or source filters.

This folder is a bundled snapshot of the xo-atlas UI (originally a standalone folder with no remote), trimmed to the single endpoint-driven page and served by this API, so every workspace that runs xo-space gets the graph with zero configuration.

Files

Build-free ES modules (no bundler, no dependencies); the browser loads them directly. Descended from the single-file xo-atlas v3.html.

PathWhat it is
index.htmlThin shell: markup + stylesheet links + an import map + the js/app.js entry. The import map is where core/api.js, core/ui.js and core/connections.js get their cache stamp: views import those three bare, the map rewrites every such import to one ?v= URL (one module instance, fetched fresh after a bump); every other core module keeps the stamp on its import line.
css/The original stylesheet split at its section banners, loaded in original order (cascade unchanged).
fonts/inter/Inter variable font (upright and italic) with its SIL OFL license. css/base.css loads it as --sans; --mono stays the system monospace and is only for code, commands, logs and IDs.
js/app.jsEntry point. Registers views; adding a view = one new file in js/views/ + one import line here.
js/core/registry.jsView registry: primary section links, 1..n hotkeys (ignored while editing), canonical hash routes and aliases, history, lazy mounts, per-view refresh and failure isolation. Primary sections are configured independently of their pages.
js/core/navigation.jsPrimary sections and their page definitions, canonical routes, labels and stable view IDs.
js/core/project-actions.jsThe Add handoff opens Manage’s clone form only after current navigation completes. The legacy Setup-project event opens Manage without opening Add.
js/core/project-share.jsReusable inline Space ID form for Manage project cards, with draft retention, pending-state protection, and the existing share endpoint.
js/core/timeline-summary.jsCounts mapped files or loaded commits in the selected project lanes and date window; playback and trace dimming do not alter those totals.
js/core/project-pins.jsBrowser-local project pins shared by Manage actions and Data filtering, with storage-event synchronization and an in-memory fallback.
js/core/data-views.jsNative List, Graph and Tree links shared by the local Data toolbars.
js/core/section-nav.jsShared secondary navigation and a slot for stable view-owned actions; native links mark the active page.
js/core/project-root.jsRoot picker shared by all Projects pages. Reads node metadata independently of the canvas; a selection opens the appropriate graph, while stale reads cannot reopen the picker after navigation.
js/core/page-refresh.jsShared full-document refresh for the top-bar button and command palette.
js/core/toolbar.jsShared toolbar: Cmd+K trigger in the navbar search slot, active-filter page search, and the / shortcut that opens the palette.
js/core/api.jsThe one fetch layer: API_BASE, query-string auth forwarding, offline / HTTP-error / 501 classification, single-flight GETs, and failText(res), the one wording for a failed result ("xo-space is unreachable", "not available for the active agent", or the HTTP error) that every tab shows.
js/core/store.jsIdempotency helpers: single-flight promises, slotted (non-stacking) intervals.
js/core/ui.jsShared UI helpers: toast, esc (HTML escaping for every interpolated value), rel (relative time; empty for a missing stamp), pills (a filter strip of data-<attr> buttons with is-on / aria-pressed).
js/core/connections.jsPure formatters over one GET /api/connections entry: every (cadence), collectorLabels, pollLine (last poll or the error). Shared by the Inbox's Connections section and Setup Connectors so both read the same.
js/core/server-widget.jsFooter server pill (status poll + terminal start hint).
js/core/preview.jsFile previewer drawer. Any view opens it with a space:preview-file event; markdown renders through markdown.js, HTML renders in an empty-sandbox iframe, everything else as escaped source.
js/views/atlas.jsProjects Overview, Graph and Timeline. Changing projections rebuilds only the atlas engine, disposes its listeners and frames, and ignores superseded reads; the document and other mounted pages remain intact.
js/views/sessions.jsFive Agents routes under #/agents/, sharing one mounted telemetry view: session telemetry from /xo/sessions.json, contributed by whichever backends implement the session_telemetry capability. The module file keeps its sessions.js name; the data file sessions.json and the internal Sessions sub-view are session telemetry, not the tab.
js/views/inbox.jsThree Inbox routes (items, connections, jobs) share a mounted controller. Items shows what arrived in the workspace (new sessions, blocked todos, shares, anything POSTed to /api/inbox) as new / seen / done rows, plus the unread badge on the primary link (initInboxBadge). Styled by css/inbox.css, its own .inb-* classes.
js/views/inbox-activity.jsIndependent workspace Activity and Sharing activity pages. Workspace events, live sessions and project names come from their existing read APIs; Sharing activity reads the relay’s recent-event buffer.
js/views/sharing.jsInbox Sharing management: shared repositories, incoming clones, commits, Apply, members, grants and revocations. Existing Sharing links normalize to #/inbox/sharing.
js/views/projects.jsData List: searchable catalog, Pinned and Live filters and a file browser in each expanded row. Catalog and optional telemetry load independently. Stable rows retain focus, folders and scroll across sorting and navigation; request generations reject stale file replies. Each file and folder row has a Copy path button (also on right-click) offering the path relative to the project root or the full path, built from roots.applied.xo_projects_root in GET /api/runtime-config plus the project id. Registers project-list at #/projects/data/list.
js/core/workspace.jsIndexed project counts from /xo/space.json. Prefers hub index_counts captured before graph display limits; marks incomplete scans with + and treats missing counts as unknown. Older graphs use conservative lower bounds when their display limits were reached.
js/views/tree.jsThe Projects Tree page: horizontal hierarchy over the same /xo/space.json dataset as Graph: folders as columns, files stacked beside their parent. Deep-link #/projects/data/tree.
js/views/chat.jsThe Chat view: Plane-B chat (/api/chat/prompt → SSE stream → transcript refetch) with session sidebar, project binding for new sessions, and mini-markdown rendering. Works across claude_code / hermes / openclaw. Deliberately unregistered: no tab.
js/views/wiki.jsThe compact Wiki overview: local quickstart/view actions and links to detailed online guides. Opens from the header resource link (nav:false, #/wiki), with no primary tab. Legacy space:wiki-page requests focus the matching topic without replacing the overview.
js/views/quirq.jsThe Quirq view: machine-local .quirq state (watcher infrastructure and the derived runtime tier) beside the durable project .xo output. Its file rows come from services/cowork_agent/quirq_catalog.py, which is data-driven:

Structure

Folders

3 subfolders
  • css22 files
  • fonts8 files
  • js53 files

Files

2 files at the top level
  • index.html
  • README.md

Technology

Languages

share of 78 files
JavaScript68%CSS28%Markdown2.6%HTML1.3%

See also