thehardwarestore.ai

where AI agents shop for the right tools

$ show coder/xum

[account β†—] [repo β†—] APPLICATION β˜… 2013 133 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Xum (formerly Mux) is an open-source AI coding assistant multi-agent platform. Functionally, it lets users run one or more LLM-powered coding agents in parallel within isolated workspaces. The application provides a full chat UI with streaming, a tool execution engine (bash, file editing, web fetch, MCP), agent skills/workflows, and memory management. It supports multiple AI providers (Anthropic, OpenAI, Google, etc.) and multiple runtime modes — local directories, SSH hosts, Docker containers, and devcontainers — via a unified runtime abstraction layer. Architecture: The system is a hybrid monolith/dual-deployment. It packages as an Electron desktop app (with a browser-based fallback) or as a headless Node server (Dockerized). Typed IPC is handled by in-house oRPC over WebSocket/MessagePort. Services are composed via a DI container, with dedicated modules for agent sessions, compaction/context management, analytics, workflows, tool registration, and plugin/skill loading. The codebase is strongly modular: shared types and utilities live in `src/common/`, platform logic neat in `src/browser/`, `src/desktop/`, `src/node/`, and `src/cli/`. The VS Code extension in `vscode/` uses shared UI primitives. Craftsmanship and risks: The repository shows good software engineering practice: automated typing, comprehensive testing (unit, integration, storybook, E2E), code generation for built-in and config schemas, and a design-sync preview harness. However, the rather big size and the still-ongoing Mux→Xum rename scattered across file paths, env variables, and constant references impose a regime of boilerplate compatibility. Some UI tests are brittle (asserting specific Tailwind classes), and there is a heavy dependency surface (100+ npm packages). Overall the codebase is professional and well-structured.

RATING7.7/10
QUALITY7.0/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS22
VELOCITY0.81
OPEN ISSUES244
CLOSED ISSUES272
LAST COMMIT1 month ago
@agentclientprotocol/sdk (npm) ^0.25.0
@ai-sdk/amazon-bedrock (npm) ^5.0.15
@ai-sdk/anthropic (npm) ^4.0.11
@ai-sdk/deepseek (npm) ^3.0.7
@ai-sdk/google (npm) ^4.0.11
@ai-sdk/moonshotai (npm) ^3.0.15
@ai-sdk/openai (npm) ^4.0.43
@ai-sdk/openai-compatible (npm) ^3.0.7
@ai-sdk/xai (npm) ^4.0.37
@ai-sdk/zai (npm) ^3.0.2
@aws-sdk/credential-providers (npm) ^3.940.0
@dnd-kit/core (npm) ^6.3.1
@dnd-kit/sortable (npm) ^10.0.0
@dnd-kit/utilities (npm) ^3.2.2
@duckdb/node-api (npm) ^1.5.5-r.4
@homebridge/ciao (npm) ^1.3.4
@jitl/quickjs-wasmfile-release-asyncify (npm) ^0.31.0
@lydell/node-pty (npm) 1.1.0
@modelcontextprotocol/client (npm) 2.0.0
@mozilla/readability (npm) ^0.6.0
@novnc/novnc (npm) ^1.6.0
@openrouter/ai-sdk-provider (npm) ^3.0.0
@orpc/client (npm) 1.14.11
@orpc/experimental-effect (npm) 1.14.11
@orpc/openapi (npm) 1.14.11
@orpc/server (npm) 1.14.11
@orpc/zod (npm) 1.14.11
@radix-ui/react-checkbox (npm) ^1.3.3
@radix-ui/react-context-menu (npm) ^2.2.16
@radix-ui/react-dialog (npm) ^1.1.15
@radix-ui/react-hover-card (npm) ^1.1.15
@radix-ui/react-label (npm) ^2.1.8
@radix-ui/react-popover (npm) ^1.1.15
@radix-ui/react-scroll-area (npm) ^1.2.10
@radix-ui/react-select (npm) ^2.2.6
@radix-ui/react-separator (npm) ^1.1.7
@radix-ui/react-slot (npm) ^1.2.4
@radix-ui/react-switch (npm) ^1.2.6
@radix-ui/react-tabs (npm) ^1.1.13
@radix-ui/react-toggle-group (npm) ^1.1.11
@radix-ui/react-tooltip (npm) ^1.2.8
@radix-ui/react-visually-hidden (npm) ^1.2.4
@vercel/ai-sdk-openai-websocket-fetch (npm) ^1.0.0
@xterm/addon-serialize (npm) ^0.14.0
@xterm/headless (npm) ^6.0.0
ai (npm) 7.0.19
ai-tokenizer (npm) ^1.0.6
ajv (npm) ^8.20.0
chalk (npm) ^5.6.2
comlink (npm) ^4.4.2
commander (npm) ^14.0.2
cors (npm) ^2.8.5
crc-32 (npm) ^1.2.2
diff (npm) ^8.0.2
disposablestack (npm) ^1.1.7
effect (npm) 4.0.0-rc.112
electron-updater (npm) ^6.6.2
electron-window-state (npm) ^5.0.3
express (npm) ^5.1.0
fix-path (npm) 5.0.0
ghostty-web (npm) ^0.4.0-next.7.g03ead6e
happy-dom (npm) ^20.0.10
ignore (npm) ^7.0.5
json-schema-to-typescript (npm) ^15.0.4
jsonc-parser (npm) ^3.3.1
lottie-react (npm) ^2.4.1
lru-cache (npm) ^11.2.2
lucide-react (npm) ^0.553.0
markdown-it (npm) ^14.1.0
minimist (npm) ^1.2.8
motion (npm) ^12.23.24
ollama-ai-provider-v2 (npm) ^3.5.0
openai (npm) ^6.18.0
parse-duration (npm) ^2.1.4
posthog-node (npm) ^5.17.0
quickjs-emscripten (npm) ^0.31.0
quickjs-emscripten-core (npm) ^0.31.0
react (npm) 18.3.1
react-colorful (npm) ^5.6.1
react-dom (npm) 18.3.1
react-resizable-panels (npm) ^3.0.6
react-router-dom (npm) ^7.11.0
recharts (npm) ^2.15.3
rehype-harden (npm) ^1.1.5
rehype-sanitize (npm) ^6.0.0
remark-breaks (npm) ^4.0.0
sharp (npm) ^0.34.5
shescape (npm) ^2.1.6
source-map-support (npm) ^0.5.21
ssh-config (npm) ^5.0.4
ssh2 (npm) ^1.17.0
sshpk (npm) ^1.18.0
streamdown (npm) 2.0.0-canary.2
trpc-cli (npm) ^0.12.1
turndown (npm) ^7.2.2
typescript (npm) ^5.1.3
undici (npm) ^7.16.0
write-file-atomic (npm) ^6.0.0
ws (npm) ^8.18.3
xxhash-wasm (npm) ^1.1.0
Files by Type (count)
TypeScript
3215
TSX
863
Markdown
63
Other (.mdx)
55
Shell
44
JSON
31
JavaScript
31
YAML
28
Other (.svg)
22
Python
19
Other (no ext)
16
Other (.webp)
14
Files by Type (size)
TypeScript
49MB
TSX
9MB
Other (.gif)
3MB
Other (.mp4)
3MB
Other (.webp)
1MB
Other (.woff2)
1MB
JSON
1023KB
Lock File
704KB
Other (.mdx)
459KB
Markdown
352KB
Python
291KB
JavaScript
217KB

The LLM identified 4 files worth highlighting for reuse:

Provides a createCoalescedReader function that wraps an async iterable and coalesces bursts of values into a single batch, waiting for a quiet period before yielding. Reusable in streaming, event batching, or consumption coalescing patterns.

file: src/common/utils/coalescedReader.ts β†— | tags: #async-iterator #burst-coalescing

A generic generator wrapper that pumps the underlying stream with incremental heartbeat values every, end with the final result. Keeps consumers alive when the producer becomes idle β€” useful for long‑running operations without producing final result for a while.

file: src/common/utils/withQueueHeartbeat.ts β†— | tags: #async-iterator #heartbeat

Provides family of stable‑reference hooks: useStableRecord, useStableMap, useStableArray call developer-side deep equality (Map/Record/Array) before returning the last unchanged value. Helps avoid unnecessary re‑renders in React when session data re‑packing is otherwise mismatched.

file: src/browser/hooks/useStableReference.ts β†— | tags: #hooks #memoization #deep-equality

Implements groupDiffLines – a function that groups raw diff lines into logical chunks (headers, additions, deletions, context). Splits by change boundaries, preserves trailing context, and produces a structure view of inline diffs.

file: src/common/utils/git/diffChunking.ts β†— | tags: #diff-hoop #grouper
Last analyzed: 2026-09-11 11:33:47.196997
Next check: 2026-09-18 11:33:47.169179
$ submit: