Commit Graph
37 Commits
Author SHA1 Message Date
mr.zeroandClaude Opus 5 786b20986f Quote the load check so /bin/sh can parse it
ci/woodpecker/manual/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
The check used escaped double quotes around a Ruby interpolation, which
the pipeline's /bin/sh rejected with "Unterminated quoted string". Single
quotes outside, plain concatenation inside — no escapes left to misread.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 07:12:04 +02:00
mr.zeroandClaude Opus 5 9c21133ce5 Add a CI check
ci/woodpecker/push/woodpecker Pipeline failed
ci/woodpecker/manual/woodpecker Pipeline failed
The repo was registered in Woodpecker but had no pipeline, so nothing
ever ran on it. There is no test suite here, so the check is what can
actually catch a regression in a library: that it still compiles and
loads.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-17 07:07:35 +02:00
mr.zeroandClaude Fable 5 db8a97b365 Relayout open windows on terminal resize
NAWS mid-session updates now propagate to the window stack: Application
re-runs each open window's relayout on resize. Window#relayout re-centers
(clamped to the screen edge) by shifting all descendants; MasterDetail
recomputes its full geometry and re-renders the detail at the new width.
ButtonBar placement is extracted into ButtonBar.place for reuse.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:11:27 +02:00
mr.zeroandClaude Opus 4.8 4d38046c70 Add FakeOS: configurable character-mode OS simulator
BBS::FakeOS is a generic, teletype-style engine for simulating retro
operating systems: a scripted boot sequence (BIOS POST, memory test,
banners, typewriter output) followed by an interactive command shell.

Each simulated OS (MS-DOS, CP/M, AmigaDOS CLI, ...) is just a
FakeOS.define { ... } config — prompt, colors, boot block, command table
and an on_unknown fallback — so new OSes are added as configuration, not
code. on_unknown is the natural hook for a conversational/LLM-backed
shell. Exposed as a Flow step (`os <definition>`) alongside tui/app.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 20:04:59 +02:00
mr.zeroandClaude Opus 4.8 6b320318ca Render GFM tables and enable mouse-wheel scrolling
Markdown.to_lines now detects GFM tables (header + delimiter row) and
renders them as box-drawn, alignment-aware tables that shrink to fit the
pane width, instead of mangling the rows into a single paragraph.

ScrollView now handles mouse-wheel events, and Window routes wheel
events to the widget under the cursor, so a detail/content pane scrolls
even when keyboard focus is on an adjacent list.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 19:20:39 +02:00
mr.zero 4fa7ebc54d README.md update 2026-05-13 22:51:17 +02:00
mr.zero 6c5a1eabc2 README.md update 2026-05-13 22:41:47 +02:00
mr.zero 18e77c14b5 new window dsl 2026-05-13 22:23:37 +02:00
mr.zero 5bf754f38c new theme 2026-05-13 21:51:53 +02:00
mr.zero 2454521f19 new windows types 2026-05-13 20:35:46 +02:00
mr.zero 26f4d2a4ee text format 2026-05-13 18:59:44 +02:00
mr.zero dbb88cc6f9 new themes 2026-05-13 18:48:44 +02:00
mr.zero 8ad80cbfa7 fixes 2026-05-13 18:39:46 +02:00
mr.zero 11c26a5b63 theme dsl 2026-05-13 18:34:25 +02:00
mr.zero 04eaebdc21 fix 2026-05-13 18:26:35 +02:00
mr.zero 40c9397e12 exit fix 2026-05-12 22:38:51 +02:00
mr.zero 4ffc6243c0 new framework fix 2026-05-12 22:36:33 +02:00
mr.zero 9ae939a213 ascii art 2026-05-12 22:30:56 +02:00
mr.zero 953498a62d new framework 2026-05-12 22:15:07 +02:00
mr.zero be21826ecc list_view 2026-05-12 21:25:21 +02:00
mr.zero da5acfd55e refact 2026-05-12 20:49:45 +02:00
mr.zero 3588245624 new message helper 2026-05-12 20:36:28 +02:00
mr.zero da752535b6 modal 2026-05-12 20:32:10 +02:00
mr.zero 88ef31d8b6 tui helpers 2026-05-12 20:22:53 +02:00
mr.zero 5ced101328 frame buffer 2026-05-12 19:18:11 +02:00
mr.zeroandClaude Sonnet 4.6 4eca9513a8 Add nav DSL to TUI::Page; helpers accumulates across calls
Page#nav sets up up/down key handlers for four common patterns:
  nav :menu,   size:    – wrapping @menu_sel selection
  nav :cycle           – wrapping @item_sel over @items
  nav :list,   window: – @item_sel/@scroll with a visible window
  nav :scroll, content:, window: – @scroll over arbitrary content

size/window accept an integer or a lambda evaluated on the Context
at runtime, so terminal-size-dependent values work naturally.

TUI#helpers now accumulates into one module instead of replacing it,
so configure methods on page classes can each extend helpers without
clobbering previous calls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 22:17:31 +02:00
mr.zeroandClaude Sonnet 4.6 148fd88660 Add fill/screen_fill primitives and string style support
New drawing primitives:
  fill(x:, y:, w:, h:, bg:)   — fills a rectangle with background color
  screen_fill(bg:)             — fills the entire terminal

Box now accepts bg: which fills its interior with a background color.

All drawing methods (text, bar, list, box) now accept raw ANSI escape
strings as style/highlight values in addition to named symbols.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:52:59 +02:00
mr.zeroandClaude Sonnet 4.6 cac10176a2 Add page-based TUI DSL
Each screen is now a self-contained `page` block with its own `enter`,
`render`, and `key` handlers. Shared logic lives in a `helpers` block
mixed into the render context. A `chrome` block renders persistent UI
(header, sidebar, footer) before every frame.

New context primitives: `go(page)` for transitions, `reload` to re-run
the current page's `enter` block, `printable` key binding for text input.

`FlowRunner#run_tui` now passes the flow context to TUIRunner so username
and other session data are available without reaching into internals.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:30:06 +02:00
mr.zeroandClaude Sonnet 4.6 8a3e38aa25 Add NAWS terminal size negotiation and dynamic dimensions
- Negotiate NAWS (option 31) on connect to receive terminal cols/rows
- Expose term_cols/term_rows on Session (default 80×24)
- Add term_cols/term_rows helpers to TUIRunner::Context
- Make bar() default width dynamic via term_cols

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:05:44 +02:00
mr.zero 73c711336d TUI 2026-05-11 20:24:40 +02:00
mr.zeroandClaude Sonnet 4.6 15cd593b33 Update README: new primitives, fetch/pick, BBS::Color
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 10:41:39 +02:00
mr.zeroandClaude Sonnet 4.6 bd8aa51684 Add BBS::Color module with c() helper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 10:34:36 +02:00
mr.zeroandClaude Sonnet 4.6 c01159dc23 Add fetch, pick, body, output primitives
fetch: loading-indicator + ctx store for API calls
pick: numbered list with selection and sub-flow drill-down
body: word-wrapped article text (strip markdown, reflow)
output: raw string block for complex multi-line content

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 09:27:45 +02:00
mr.zero 272e75bd6f new primitives 2026-04-29 17:50:45 +02:00
mr.zero d9232eabb4 upgrade for our main bbs server 2026-04-28 22:47:52 +02:00
mr.zeroandClaude Sonnet 4.6 ce005cdb1b Add README with full gem documentation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:35:00 +02:00
mr.zeroandClaude Sonnet 4.6 4690ade510 Initial commit: extracted from impostor-bbs gems/bbs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:18:57 +02:00