feat: interactive web dashboard with codex support#677
Merged
laynepenney merged 7 commits intosprint-18from Apr 13, 2026
Merged
feat: interactive web dashboard with codex support#677laynepenney merged 7 commits intosprint-18from
laynepenney merged 7 commits intosprint-18from
Conversation
Contributor
|
Thank you for your contribution! Before we can merge this PR, we need you to sign our Contributor License Agreement. To sign, please comment on this PR with the following exact text:
You can also re-trigger the CLA check by commenting I have read the CLA Document and I hereby sign the CLA You can retrigger this bot by commenting recheck in this Pull Request. Posted by the CLA Assistant Lite bot. |
…images The blog index was missing 11 posts (Sprint 5-11 recaps, building-collaboration, building-my-own-memory, design-session-that-saved-us, what-is-memory, why-synapt) because those posts existed only as HTML with no .md frontmatter stubs for the build script. Added .md stubs so build_blog_index.py generates a complete index. Also restores Sprint 15 hero images to the correct versions from 34f34b2, which were overwritten by a bad merge resolution in 5a73f49.
STYLE_SUFFIX in hero.py and DEFAULT_STYLE in generate_hero.py now inject "wireframe holographic owl as focal subject" into every prompt so agents can't accidentally generate human-only or abstract heroes. Humans may still appear alongside owls when context calls for it. Regenerated 8 off-theme hero images: building-collaboration, multi-agent-synergy, when-claude-and-codex-debug-together, agent-madness (round 1), anatomy-of-a-miss, mission-control, recall-field-guide, sprint-12-recap.
Several code paths in channel.py, registry.py, and sharding.py opened SQLite connections without PRAGMA busy_timeout, causing instant failure on write contention when multiple MCP servers share the same database. Set busy_timeout=5000 on all 8 missing connection sites to match the existing timeout in _open_db().
…rvation, and fullscreen/popout Web dashboard (app.py + template.html): - Detect codex agents from agents.toml; send double-Enter for codex input protocol - Output panel: expand (50vh), fullscreen (100vh overlay), and pop-out (new window) - Both fullscreen and pop-out include input bars for sending messages - Scroll preservation: track user scroll position, only auto-scroll when at bottom - "New output below" indicator when scrolled up with new content arriving - Escape key exits fullscreen; close button deselects agent Channel (channel.py): - Silent reaping for ephemeral s_* identities; no more "left" message spam - Ephemeral presences fully deleted on reap instead of set to offline Tmux dashboard (spawn.rs): - /send, /focus, /back, /zoom, /help commands in input pane - Codex double-enter detection from agents.toml at dashboard creation - Replaced clear with ANSI escape to preserve scrollback
…endpoint
- Add /api/agent/{name}/key endpoint with safety-allowlisted tmux keys
- Add key palette UI (Enter, Esc, y/n, arrows, Tab, ^C, ^D, q) with
event delegation
- Empty-field heuristic: arrow keys and Enter forward to tmux when input
is empty; normal text editing when input has content
- Inline ANSI-to-HTML parser (SGR standard, 256-color, RGB) replacing
broken ansi_up v6 CDN dependency
- Cursor position overlay via tmux display-message (cursor_x, cursor_y)
- Visual feedback: 150ms delayed refresh after key sends
- /api/agent/{name}/snapshot now accepts ansi=true for ANSI escape codes
and cursor position data
- Fix pop-out window to use ANSI rendering (was plain textContent)
- Add /terminal/{name} endpoint and WebSocket bridge for xterm.js
terminal pop-out (experimental)
- Allow bare Enter in /api/agent/{name}/input for confirming selections
- Skip codex double-Enter on bare Enter sends
Reaper no longer writes leave messages to channel JSONL; presence table already tracks offline status. Agents whose display_name matches their griptree name are treated as ephemeral. Dashboard renderer returns empty string for join/leave events.
b2c6ac1 to
1fa63f7
Compare
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Summary
Premium boundary
Premium boundary: core OSS (dashboard UI, channel infrastructure, tmux orchestration)
Test plan