- Up/Down arrows now navigate command history via auto_up/auto_down
- Added blank line spacer between output and separator for clarity
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Standard CLI behavior:
- Up/Down = command history (always)
- Page Up/Down = scroll output (no focus needed)
- Ctrl+Home/End = jump to top/bottom
- Mouse/scrollbar works too
Removed Tab focus switching - not intuitive for CLI users.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use Condition wrapper with try/except to handle case where
self.app doesn't exist yet during key binding setup.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Up/Down move cursor one line (scrolls view)
- Page Up/Down move 20 lines at a time
- Home/End jump to top/bottom
- Keys only active when output buffer is focused (Tab to switch)
- Updated help text with scroll shortcuts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
FormattedTextControl doesn't support scrolling - always renders from top.
Switch to Buffer + BufferControl which has proper scroll support:
- Output buffer uses read-only Buffer with cursor at end
- Tab/Shift-Tab to switch focus between output and input
- Arrow keys scroll when output is focused
- Scrollbar margin shows position
- Auto-scroll on new content (cursor stays at end)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Window.vertical_scroll is read-only in prompt_toolkit.
Use custom scroll_offset to track position and slice output lines.
- scroll_offset=0 shows newest content (auto-scroll)
- Page Up increases offset (scroll into history)
- Page Down decreases offset (towards newest)
- Home/End jump to top/bottom
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Page Up/Down, Home/End key bindings for manual scrolling
- Track user_scrolled flag to preserve position when user scrolls
- Remove visible_lines limit to show full history
- Auto-scroll to bottom on new content (unless user scrolled up)
- Update help text with scroll shortcuts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Set vertical_scroll=999999 to always show newest content
- Update scroll position on every invalidate
- Reduced visible_lines to 20 for safety
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use HSplit with filler + output to push content to bottom
- Output window uses dont_extend_height so it only takes needed space
- Empty filler expands to fill remaining space above
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Instead of trying to scroll the window, just display the most
recent lines that fit on screen. Full history is kept but only
the last 50 lines are rendered.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create separate console_registry module to avoid __main__ vs module import issue
- Handler now correctly finds TUI console instance
- Response output should now appear in TUI output area
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove patch_stdout (was buffering until exit)
- Add 100ms refresh loop that periodically invalidates the app
- Ensures output buffer changes are displayed in real-time
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add patch_stdout to capture external prints in TUI mode
- Any stdout from handlers/pump appears in output area, not prompt
- Simplify response handler logic
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add thread-safe invalidation for cross-task updates
- Fix response handler to properly route to TUI output
- Add debug output if console hook fails
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New console features:
- Scrolling output area above separator line
- Status bar with organism name
- Input area at bottom
- Color-coded messages by source
- Command history with up/down arrows
- Graceful fallback to simple mode on unsupported terminals
Usage:
python run_organism.py # TUI mode (or fallback)
python run_organism.py --simple # Force simple mode
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shows last 20 messages from a specific thread or last 5 per thread
when using /monitor *. Color-coded by direction (console=green,
responses=cyan).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- SecureConsole with Argon2id password hashing
- Password stored in ~/.xml-pipeline/console.key
- Protected commands require password re-entry
- Attach/detach model with idle timeout
- Fallback to simple input for incompatible terminals
- @listener message injection into pump
- Boot handler no longer sends to old console
- Response handler prints to stdout with prompt refresh
Dependencies: argon2-cffi, prompt_toolkit
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>