Repository navigation
Make the Charm TUI a screen you can sit in - #4
Merged
Merged
Conversation
The harness is a Go package behind a Charm TUI, headless print, ACP, and loopback HTTP. Jev gates choose the model, the skill, when to compact, and when a shell call is too dangerous to run. Suzuri launches the binary with OSC 7880. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
The host change allowlists rock and sets ROCK_SESSION_TITLE. The Suzuri tests passed here; this token cannot push that repository. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
The public page is a static site under site/, with its own mineral palette, deployed by Actions when the site or the workflow changes. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
configure-pages can turn GitHub Pages on when the repo has no site yet. The hero copy stays on the session store and the Suzuri pane. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
The host file on that branch matches the tested OSC patch. The page notes that Pages still needs the GitHub Actions source selected once. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
Share one geometry between layout and View so the plan column and the transcript fill the row exactly, and wrap the transcript instead of clipping it. The ready sentence is whole at 60, 80, 100, 110, and 140 columns, and the status line, composer, and help survive short heights. Draw with the site palette (ground, panel, copper, hot, text, mute) as light/dark pairs resolved from Bubble Tea's background report, and give Glamour the same palette instead of WithAutoStyle. Put the fast model, mode, Jev state, and context meter on the status line. The meter tracks the session size the compaction gate reads and eases on a critically damped Harmonica spring that stops ticking once it settles. Forward wheel events to the transcript or the plan under the pointer, and let a click or drag on the scrollbar move the transcript. Rework /help, /sessions, /permissions, /agents, /plan, and the allow dialog into readable panels that keep their safety text. Stop q from quitting Rock inside lists, list every slash command in the placeholder, and cut text on graphemes instead of bytes. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
stubllm is a deterministic OpenAI-compatible server: one tool call that asks by default, then a markdown reply that says whether it ran. visual.sh runs the rock binary in tmux inside xterm, sends keys through tmux, resizes, scrolls, and grabs frames with ffmpeg. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
Glamour registers an inline Chroma config once per process under one shared name and highlights with the 256-color formatter, so code kept the first theme's colors and lost the palette. Register rock-dark and rock-light Chroma styles, pick one by name, and highlight in truecolor. Light one meter cell for any context above zero; the percentage beside it stays exact. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
The public page was telling a geology story. The headline is the question people actually ask. macOS, Linux, and Windows each show one command, and the page picks the matching one. The scripts install the current 1.0 build with Go. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
Site headings now describe the Go CLI. Installers and blob links point at main. Docs mark the language as Go only. Pages workflow is gone; CI builds, vets, and race-tests. rock --help and -h exit 0. Co-authored-by: Stephen Horton <StephenSHorton@users.noreply.github.com>
StephenSHorton
marked this pull request as ready for review
October 4, 2026 04:42
This was referenced Oct 4, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #3 (
cursor/rock-1-0-a11b).What was wrong
layout()reserved one plan width andView()drew another, and the transcript viewport never wrapped. Any line wider than the transcript column was cut. At 110 columns the column was110-36-2 = 72cells, which ends the ready sentence at "not in this sc". At 100 columns the row was 101 cells wide.WithAutoStyle, which queries the terminal on stdin while Bubble Tea owns it, and the renderer was rebuilt on every resize.MouseModeCellMotionwas on, but no mouse message ever reached the viewport.qto quit, soqin/sessions,/permissions, or the allow dialog quit Rock and left the ask unanswered.clip()sliced bytes.What changed (all in
internal/tui, plus threeDepsfields set incmd/rock)layout()and only read byView(). Plan column plus gap plus transcript fill the row exactly. Transcript text is wrapped on graphemes. Rows go to the header, status, composer, and help first, and the body takes what is left. Plan mode on screens narrower than 64 columns stacks the plan above the transcript.site/styles.css, each with a light-terminal pair. Pairs resolve throughlipgloss.LightDarkwhen Bubble Tea sendsBackgroundColorMsg. Lip Gloss v2 movedAdaptiveColorintocompat, which queries the terminal at package init for everyrocksubcommand. Glamour gets a style built from the same palette.jev:offline|live, the configured fast model (the strong model while a turn uses it), and the context meter. The meter trackssession.Bytes(), the number the compaction gate reads. It is read on the harness goroutine inside the sink, so there is no race. A critically damped Harmonica spring drives it, and its tick stops when it settles./helpshows keys plus every slash command./sessionsis newest first and marks the open session./permissionslists mode, allow, ask, and deny, ending with "Permissions are not a sandbox…"./agentshas an empty state. The plan pane says "Plan mode. Shell is blocked…". The allow dialog previews the call (- old/+ newforedit_file,$ cmdforshell) and keeps the choices and keys visible at short heights.qcloses panels instead of quitting. The placeholder lists all ten slash commands,/defaultand/quitincluded.clip()andwrapText()cut on graphemes.Tests
internal/tui/model_test.gokeeps the four original tests and adds 14 view assertions. They cover the column split and the whole ready sentence at 60, 80, 99, 100, 110, 120, and 140 columns; heights 8–16; the status line; meter easing; each panel opening and closing;q; the plan pane; the allow dialog; wheel and scrollbar; the light palette; Glamour colors; slash commands; and grapheme-safe clipping. One test runs the real harness against an in-process OpenAI-compatible stub and answers the dialog both ways.go test ./...passes, andgo test -race ./internal/tui/passes.internal/tui/testdata/stubllmandinternal/tui/testdata/visual.share the tooling for the visual run on a real xterm.Follow-up cleanup
mainviago install …@main. No GitHub API pin.v1-plan.md). Protocol, quarry, and features stay negotiable. Cloud agents can runrock-docson port 4173; the product binary builds withgo build ./cmd/rock..github/workflows/pages.yml. Added.github/workflows/ci.yml(go build,go vet,go test -race).rock --help/-hexit 0.