Skip to content

Rust rewrite: lean multiplexer core with paning system with a basic plugin system. - #11

Open
rengwu wants to merge 112 commits into
mainfrom
rewrite/rust
Open

rengwu wants to merge 112 commits into
mainfrom
rewrite/rust

Conversation

@rengwu

@rengwu rengwu commented Sep 7, 2026

Copy link
Copy Markdown
Owner

I rewrote chartr as a lean agent multiplexer in Rust. The focus was to make it a solid core that remains flexible to extension, in the shape of a plugin system.

Core chartr's features:

  • agent state detection (working, blocked, idle, etc.).
  • persistent terminal sessions, survives restarts.
  • paning system with grouped tabs. drag and drop friendly.
  • an open plugin system. freely authorable. sourced from a git repo or local folder.
  • surfaces (plugin panes).
  • two view modes: tabbed mode and sidebar mode (thanks Mitchell Hashimoto for the inspiration)
  • drag-to-sort tabs, sidebar space cards, session tabs.
  • "free sessions", tabs that do not belong in any space.
  • hotkey configuration settings menu.
  • dropdown space picker.
  • 15 system-wide themes that affects both native UI and terminal.
  • 30+ fonts for both terminal and native UI (separate customizations).
  • font size adjustment for both terminal and native UI text (separate customizations).
  • motion reduction.
  • command palette.

Bundled plugins:

  • web browser.
  • skill sources. manage your skills in one place.
  • agents. register agents once, launch them easily.
  • wayfinder maps. interactive star map, launch agents directly from tickets.

Old go/svelte chartr code will be archived and remain in legacy/v0.2.4 branch for reference.

The product's functionality itself is quite complete with possible bugs. Will merge this when chores like the README, release pipeline, iconsets, and other minor stuff are sorted out.

rengwu added 30 commits August 31, 2026 11:19
A GPUI window over herdr sessions, with a two-tier plugin system.
4,333 lines across five crates; cargo test --workspace is 68 green,
clippy and fmt clean, live smoke test passes against a real herdr daemon.

  crates/zeddy-herdr/       the only code that knows herdr exists
  crates/zeddy/             the window
  crates/zeddy-plugin/      the contract a plugin is written against
  crates/zeddy-plugin-host/ the only code that loads foreign code
  crates/zeddy-vt/          the only code that knows a VT parser exists

Verified working: private daemon in its own namespace
(~/.local/state/zeddy/herdr); workspace adoption per directory; frames
stream and paint; PTY resizes to the measured grid; sidebar and tab
chromes render; both plugin tiers load (Hello is a real cdylib whose
activate() ran across the ABI boundary).

Decisions recorded in docs/adr/:
  0001 a private herdr daemon
  0002 gpui + ui + theme rather than Zed's workspace crate (makes
       zeddy GPL-3.0-or-later; native plugins inherit it)
  0003 two plugin tiers (native cdylib, web)
  0004 alacritty's VT core rather than libghostty

Known gaps:
  - web plugin panes render a placeholder; the OS webview is not hosted yet
  - typing not tested end-to-end (no assistive access for synthetic keys);
    keys.rs is unit-tested per keystroke and the transport is live-tested

Claude-Session: https://claude.ai/code/session_01Va1ZF7ko3JMvYWF2nxvewx
Replace the custom VT renderer with Zed's terminal model and view, preserve Chartr-specific hosting behavior, and pin Herdr's semantic mouse forwarding with live daemon handoff.
Preserve the Wayfinder interface and icon refinements captured by the original
chartr repository transplant, as a separate commit above the complete rewrite
history. These changes were uncommitted in chartr-zeddy at the time of import.

Recovered-From: 887eae44047d3b91fdf13a3dc7294e869b7fb2e9
Source-Commit: b31e997
Join the legacy Chartr history at v0.2.4 with all 85 original chartr-zeddy
commits, retaining their original commit IDs, authors, dates, and ancestry.
The rewrite replaces the legacy working tree. A separate commit on the rewrite
line preserves the Wayfinder refinements captured by the earlier transplant.

Resolve the integration to the exact tree of the previous snapshot import,
including the chartr repository metadata and migration documentation. No
application source or working-tree content changes in this history repair.

Preserve the former snapshot at backup/rewrite-rust-snapshot-20260907, the
legacy release at legacy/v0.2.4, and both original source branch tips under
archive/chartr-zeddy/. The source repository and its uncommitted edits remain
untouched.

Source-Repository: chartr-zeddy
Source-Commit: b31e997
Legacy-Commit: be8073f
Replaces-Snapshot: 887eae44047d3b91fdf13a3dc7294e869b7fb2e9
@rengwu rengwu self-assigned this Sep 7, 2026
@rengwu rengwu added the enhancement New feature or request label Sep 7, 2026
Give workspace bindings terminal-level precedence at startup and during live rebinding. Keep Linux Ctrl+K passthrough, test the platform-specific upstream word bindings, and cover restoring terminal input after a shortcut is rebound or cleared.
Unlock the launch guard on drop so a descriptor inherited by a concurrent fork cannot briefly retain the lock after a claim or release completes. Cover mutual exclusion and reacquisition while a duplicate descriptor remains open.
Use lowercase chartr throughout branding, crates, plugin manifests, packaging,
and runtime namespaces. Rename internal view types and rebuild the private
backend with the matching version identity.

Refresh the README, app icon, and workspace reference. Shorten Wayfinder fog
labels to fit their available width without condensing glyphs.

Validated with 279 Rust tests, 9 JavaScript tests, the native plugin example,
the theme playground build and lint, formatting, and shell syntax checks.
Removed duplicate screenshot from README.md.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant