This commit is contained in:
+15
-3
@@ -69,12 +69,24 @@ The first `lumbridge-runtime` actor now owns one `PtySession` on a dedicated
|
||||
thread. Bounded command and event queues serialize input, resize, close, and
|
||||
shutdown against ordered raw-byte output. The GPUI slice feeds one actor session
|
||||
through the terminal engine while five surfaces retain deterministic comparison
|
||||
output. Its current text adapter intentionally renders plain rows and does not
|
||||
yet paint cell styles, selection, or the cursor; the next rendering slice owns
|
||||
that work. This actor still runs in-process; moving the same framework-neutral
|
||||
output. Its adapter groups adjacent cells into native GPUI paint runs and renders
|
||||
ANSI/indexed/RGB colors, emphasis, hyperlinks, and cursor shapes. Window geometry
|
||||
drives terminal rows and columns and resizes both the engine and PTY. Selection,
|
||||
scrollback navigation, mouse reporting, and a lower-level terminal canvas remain.
|
||||
This actor still runs in-process; moving the same framework-neutral
|
||||
contract behind local authenticated IPC is the next durability step. See
|
||||
decisions 0004 and 0005.
|
||||
|
||||
## Default workspace composition
|
||||
|
||||
The default desktop workspace is a vertical 3×1 composition: the top 20% holds
|
||||
pane, agent, tool, context, and goal state; the middle 60% is the active terminal
|
||||
or work surface; the bottom 20% is the answer, choice, chat, and approval shelf.
|
||||
Six deterministic surfaces still update in the spike so performance comparisons
|
||||
remain meaningful, but only the selected surface owns the large work region.
|
||||
Users may deliberately split that region later; a dashboard grid is not the
|
||||
calm default. See decision 0008.
|
||||
|
||||
We should evaluate, not blindly copy, WezTerm, Zellij, RMUX, tmux, and cmux. The
|
||||
first spike must compare a reusable terminal crate with a small first-party layer.
|
||||
Remaining correctness cases include OSC 8 links, Kitty
|
||||
|
||||
@@ -66,6 +66,12 @@ surface change never silently launches a process, moves the pane to another
|
||||
host, or changes which agent owns the session. Unsupported surfaces are shown as
|
||||
unavailable rather than simulated.
|
||||
|
||||
The default workspace is a 3×1 vertical composition: the top 20% shows context,
|
||||
pane/agent state, tools, and goal; the middle 60% is the selected terminal or
|
||||
work surface; the bottom 20% is the decision shelf. Multiple panes may continue
|
||||
working offscreen and remain one shortcut away. Explicit split and dashboard
|
||||
layouts remain supported, but they do not displace the primary-terminal default.
|
||||
|
||||
An optional decision shelf sits below the active work surface. It may show an
|
||||
answer draft, two or three concrete choices, why each was suggested, and the
|
||||
capability each choice would need. Suggestions are inert data. Choosing one may
|
||||
|
||||
@@ -32,6 +32,13 @@ They are shallow snapshots for study, not dependencies or vendored source.
|
||||
- `block/buzz`: Rust human/agent collaboration plus production ACP harness design.
|
||||
- `bbarit/terminal`: Rust agent terminal/IDE ideas. No top-level license file was
|
||||
present in the captured snapshot, so do not reuse implementation code.
|
||||
- `OnlyTerp/opengrok`: provider-wire maps, behavioral verification of reasoning
|
||||
controls, local-key posture, drift detection, and fail-closed provider UX;
|
||||
MIT, but its Grok Bot patching is product-specific reference work.
|
||||
- `elie222/rakazo`: persistent AI teammates, delegation, routines, computer
|
||||
providers, browser/terminal/desktop tools, and deterministic sandbox testing;
|
||||
Apache-2.0. Its Electron/React/Postgres architecture is research-only because
|
||||
Lumbridge's shell and local runtime remain native Rust and SQLite.
|
||||
|
||||
## Protocols
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ checkouts are reference material and are not part of Lumbridge's source tree.
|
||||
| Agent IDEs | Orca | `main` | `02a7742406a5` | 322 MB | `stablyai/orca` |
|
||||
| Agent IDEs | Xum | `main` | `a4be59aade55` | 76 MB | `coder/xum` |
|
||||
| Agent IDEs | Zed | `main` | `ce48461eaadd` | 118 MB | `zed-industries/zed` |
|
||||
| Agent IDEs | OpenGrok | `main` | `2b356649cfe5` | 5.4 MB | `OnlyTerp/opengrok` |
|
||||
| Agent IDEs | Rakazo | `main` | `7e1ef9ea5d5d` | 30 MB | `elie222/rakazo` |
|
||||
| Protocols | ACP specification | `main` | `f76fe3f3d132` | 67 MB | `agentclientprotocol/agent-client-protocol` |
|
||||
| Protocols | ACP Rust SDK | `main` | `754d5aa1ce2c` | 4.5 MB | `agentclientprotocol/rust-sdk` |
|
||||
| Harnesses | Codex | `main` | `17e8101699c5` | 103 MB | `openai/codex` |
|
||||
|
||||
+4
-3
@@ -118,9 +118,10 @@ who already have the final cargo-watch release installed.
|
||||
blocked OSC 52 behavior, key encoding, application-cursor mode, and resize.
|
||||
- `lumbridge-core` tests capability-gated split/select/rename/close commands,
|
||||
idempotent request IDs, close-tree promotion, and atomic agentic setup plans.
|
||||
- The GPUI slice tests its key-event adapter. It renders one real actor-owned VT
|
||||
session as plain snapshot rows and keeps five surfaces deterministic; styled
|
||||
cell/cursor rendering remains a separate gate.
|
||||
- The GPUI slice tests its key-event adapter, 20/60/20 geometry-to-PTY sizing,
|
||||
xterm 256-color conversion, styled-run coalescing, and cursor-run boundaries.
|
||||
It renders one real actor-owned VT session while five surfaces continue their
|
||||
deterministic background workload.
|
||||
- The current-GPUI probe compile-checks real AccessKit element wiring and real
|
||||
platform input-handler installation. Unit tests cover its semantic tree and
|
||||
UTF-16/UTF-8 composed-text mutations. OS screen readers, IME candidate windows,
|
||||
|
||||
@@ -22,10 +22,11 @@ from macOS and Linux and the hard gates pass.
|
||||
| API clarity and maintenance burden | review | pending | pending |
|
||||
|
||||
The current programs establish dependency, build, launch, and interaction
|
||||
baselines. GPUI now routes a real PTY through a VT engine and keyboard encoder;
|
||||
its renderer still flattens the immutable screen snapshot to plain rows. The
|
||||
next iteration adds styled cells/cursor/selection, measured pane-driven resize,
|
||||
a native Markdown editor, and one isolated browser child.
|
||||
baselines. GPUI now routes a real PTY through a VT engine and keyboard encoder,
|
||||
paints coalesced styled cell runs and cursor shapes, and derives PTY rows/columns
|
||||
from its 60% terminal band when the window changes. Selection, scrollback
|
||||
navigation, mouse modes, a native Markdown editor, and one isolated browser child
|
||||
remain.
|
||||
|
||||
## Ubuntu baseline — metal, 2026-08-31
|
||||
|
||||
@@ -86,8 +87,9 @@ fallback.
|
||||
## Measurement semantics
|
||||
|
||||
Both renderers retain the same all-deterministic six-surface action stream for
|
||||
comparison. The GPUI integration mode replaces one terminal fixture with a real
|
||||
actor-owned VT session and leaves five deterministic surfaces running. Counters
|
||||
comparison. GPUI now presents the selected surface in a 20/60/20 vertical
|
||||
workspace while one terminal fixture is replaced with a real actor-owned VT
|
||||
session and five deterministic surfaces keep running offscreen. Counters
|
||||
separate external PTY batches/lines from total model updates. The GPUI footer
|
||||
reports dispatch-to-element-build p50/p95 over a bounded 256-sample window. It
|
||||
is deliberately not called key-to-present or frame-present latency: neither
|
||||
|
||||
+18
-18
@@ -9,15 +9,13 @@ framework decision gate, not a decorative dashboard.
|
||||
|
||||
## Current-run audit
|
||||
|
||||
The 2026-08-31 GPUI baseline succeeds at calm density: the six surfaces are easy
|
||||
to scan, typography is consistent, and local/remote targets remain visible. It
|
||||
fails the task flow in four important ways:
|
||||
|
||||
1. all panes have equal visual priority, so `NEEDS INPUT` is too easy to miss;
|
||||
2. no pane exposes visible keyboard focus or selection;
|
||||
3. the command palette affordance has no interaction behind it;
|
||||
4. status and usage text in the footer is too quiet to explain provenance or
|
||||
confidence at a glance.
|
||||
The first 2026-08-31 GPUI baseline proved six-surface density but gave every
|
||||
pane equal visual priority. The current slice replaces that dashboard with a
|
||||
3×1 default: 20% context and pane selection, 60% active work surface, and 20%
|
||||
decision shelf. Keyboard focus, command-palette input, live PTY input, styled VT
|
||||
cells, cursor shapes, and geometry-driven resize are wired. Remaining visible
|
||||
gaps are terminal selection/scrollback, real decision-shelf actions, usage-detail
|
||||
provenance, and end-to-end platform accessibility/IME.
|
||||
|
||||
Screenshots for the audit are stored outside Git under
|
||||
`~/shots/2026-08/lumbridge-ui-audit/`. Accessibility and IME correctness cannot
|
||||
@@ -60,11 +58,12 @@ surface rather than a hosted Lumbridge control plane.
|
||||
palette shortcut.
|
||||
2. The sidebar starts with a compact `ATTENTION` group, followed by workspaces
|
||||
and remote hosts. It does not become a notification feed.
|
||||
3. The active pane receives a two-pixel accent edge plus a quiet tinted header.
|
||||
4. A waiting pane uses an amber semantic label and remains visible when another
|
||||
pane is selected. The label always includes words such as `NEEDS INPUT`.
|
||||
5. Pane headers expose title, execution target, harness state, and unread count
|
||||
in a stable order.
|
||||
3. A compact top 20% context band keeps all pane identities and states visible;
|
||||
the selected pane receives the accent treatment.
|
||||
4. A waiting pane uses an amber semantic label in both the context band and
|
||||
attention sidebar. The label always includes words such as `NEEDS INPUT`.
|
||||
5. The middle 60% gives the selected terminal or work surface uninterrupted
|
||||
reading space and retains target, harness state, dimensions, and surface tabs.
|
||||
6. The footer groups connection state, selected-harness identity, usage-window
|
||||
provenance, and burn forecast into readable regions.
|
||||
7. The selected pane has a quiet surface strip for Terminal, Browser, Tools,
|
||||
@@ -75,7 +74,7 @@ surface rather than a hosted Lumbridge control plane.
|
||||
|
||||
## Keyboard task flow
|
||||
|
||||
- `Alt+Arrow` or `Alt+h/j/k/l`: move focus through the 2×3 pane grid while
|
||||
- `Alt+Arrow` or `Alt+h/j/k/l`: move selection through the pane topology while
|
||||
leaving ordinary terminal arrows and text available to the PTY.
|
||||
- `Alt+1` through `Alt+6`: focus a pane directly while leaving terminal digits
|
||||
available to the PTY.
|
||||
@@ -93,8 +92,8 @@ receive the same state transitions and tests.
|
||||
|
||||
- In the first actor integration, one terminal pane consumes ordered output from
|
||||
a real local PTY while each deterministic tick updates the other five
|
||||
surfaces. The all-deterministic constructor remains available for framework
|
||||
comparison and replay tests.
|
||||
surfaces offscreen. The all-deterministic constructor remains available for
|
||||
framework comparison and replay tests.
|
||||
- One pane enters and leaves `needs input` through a deterministic event.
|
||||
- Markdown, browser-boundary, and review panes update counters without using a
|
||||
web application shell.
|
||||
@@ -103,7 +102,8 @@ receive the same state transitions and tests.
|
||||
element-build timing is never presented as display-present timing.
|
||||
- The PTY actor replaces exactly one synthetic stream without changing focus or
|
||||
layout contracts. Synthetic streams stay available for repeatable performance
|
||||
tests. Raw lines do not claim terminal-emulation fidelity.
|
||||
tests. Live bytes are parsed into VT state and coalesced native paint runs;
|
||||
deterministic fixture text makes no terminal-emulation claim.
|
||||
|
||||
## Hard gates
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# 0008: The default workspace is a primary-terminal 3×1 composition
|
||||
|
||||
Status: accepted for the native vertical slice.
|
||||
|
||||
Lumbridge defaults to three vertical bands in one column. The top 20% exposes
|
||||
pane, agent, tools, context, goal, target, and attention state. The middle 60%
|
||||
belongs to the active terminal or work surface. The bottom 20% holds answers,
|
||||
choices, chat, approvals, and the local-analyst boundary.
|
||||
|
||||
This composition favors the surface where engineers type and read for most of
|
||||
the day. It keeps context and decisions visible without making six equally sized
|
||||
cards compete for attention. Pane selectors and keyboard shortcuts switch the
|
||||
large work surface. Users may later create deliberate splits or dashboard grids,
|
||||
but those are workspace choices rather than the default visual hierarchy.
|
||||
|
||||
The framework spike retains six updating surfaces even when five are offscreen.
|
||||
That preserves the earlier streaming and reducer workload for performance
|
||||
comparison. Hidden surfaces do not receive keyboard input merely because they
|
||||
continue to update.
|
||||
|
||||
Window geometry determines the middle band's terminal rows and columns. The UI
|
||||
resizes the terminal engine and PTY through the bounded runtime actor; it does
|
||||
not resize only the text view or infer terminal wrapping after the fact.
|
||||
Reference in New Issue
Block a user