a2ui-tui 0.3.0

ratatui terminal backend for A2UI (Agent to UI)
Documentation

a2ui-tui

crates.io docs.rs MIT

English | ไธญๆ–‡

๐Ÿ“ฆ a2ui crate ็”Ÿๆ€ๆˆๅ‘˜ ยท ้ป˜่ฎค็ปˆ็ซฏๅŽ็ซฏ(ratatui)

ๆœฌ crate ๆ˜ฏ a2ui workspace ็š„้ป˜่ฎคๆธฒๆŸ“ๅŽ็ซฏ,ๅฎŒๆ•ดไป‹็ป่งๆ น็›ฎๅฝ• READMEใ€‚

ๆŠŠ A2UI ็ป„ไปถๆ ‘ๆธฒๆŸ“ๅˆฐ็ปˆ็ซฏๅญ—็ฌฆ็ฝ‘ๆ ผ,ๅŸบไบŽ ratatui + crossterm ๆž„ๅปบใ€‚่ฟ™ๆ˜ฏ a2ui ็š„้ป˜่ฎคๅŽ็ซฏ(workspace default-members ไน‹ไธ€),ๆ™ฎ้€š cargo build ๅณ็ผ–่ฏ‘ๅฎƒใ€‚

ๅœจ็”Ÿๆ€ไธญ็š„ไฝ็ฝฎ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  apps:   a2ui-gallery (TUI)   a2ui-slint-gallery   a2ui-egui-gallery  โ”‚
โ”‚  umbrella:   a2ui  (re-export core + tui [+ slint] [+ egui])          โ”‚
โ”‚  โ–ถ backends:   a2ui-tui (ratatui)   a2ui-slint   a2ui-egui            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  a2ui-base  (ๆก†ๆžถๆ— ๅ…ณ:Protocol / Model / Catalog / Processor)         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

a2ui-tui ไพ่ต– a2ui-base;a2ui-gallery ไธŽ umbrella a2ui ไพ่ต–ๅฎƒใ€‚

็‰นๆ€ง

  • โœ… 18 ไธช TUI ็ป„ไปถ:Text, Row, Column, Button, TextField, Card, Divider, List, CheckBox, Icon, Tabs, Modal, Slider, ChoicePicker, DateTimeInput, Image, Video, AudioPlayer
  • โœ… ไบคไบ’ๅผ็ป„ไปถ(็ฎญๅคด้”ฎ่ฐƒ่Š‚ๅ€ผ):Textใ€Rowใ€Columnใ€Buttonใ€TextFieldใ€Sliderใ€CheckBoxใ€ChoicePickerใ€DateTimeInput
  • โœ… ้ป˜่ฎคๅผ€ๅฏ็œŸๅฎžๅ›พ็‰‡ๆธฒๆŸ“(ratatui-image,kitty / iTerm2 / Sixel / Halfblocks ่‡ชๅŠจ้™็บง,ไป…ๆœฌๅœฐๆ–‡ไปถ่ทฏๅพ„)
  • โœ… ๆƒ้‡ๅˆ†ๅ‰ฒ / ๅฏน้ฝ็š„ๅธƒๅฑ€ๅผ•ๆ“Ž(layout_engine)
  • โœ… ้”ฎ็›˜็„ฆ็‚น็ฎก็†(focus_manager)
  • โœ… Minimal + Basic Catalog ็ป„่ฃ…(catalogs)

ๅฏ้€‰็‰นๆ€ง

็‰นๆ€ง ่ฏดๆ˜Ž ๅฏ็”จ
audio ็ป rodio ่ฟ›่กŒ็œŸๅฎž้Ÿณ้ข‘ๆ’ญๆ”พ(ๅŽๅฐ็บฟ็จ‹,ไป…ๆœฌๅœฐๆ–‡ไปถ่ทฏๅพ„,้œ€ ALSA ็ณป็ปŸๅบ“) --features audio

่ง†้ข‘ๆ— ๅฏนๅบ”็‰นๆ€ง,็ปˆ็ซฏๅฐšๆ— ๆˆ็†Ÿๆ–นๆกˆ,ๅง‹็ปˆๆธฒๆŸ“ๅ ไฝ็ฌฆใ€‚

ๆจกๅ—

ๆจกๅ— ่Œ่ดฃ
surface ้€’ๅฝ’ๆธฒๆŸ“ๅ…ฅๅฃ(SurfaceRenderer)
component_impl TuiComponent trait + ๆณจๅ†Œ
layout_engine ๆƒ้‡ๅˆ†ๅ‰ฒ / ๅฏน้ฝ
focus_manager ้”ฎ็›˜็„ฆ็‚น็ฎก็†
components 18 ไธช็ป„ไปถๅฎž็Žฐ
catalogs Minimal + Basic Catalog ็ป„่ฃ…

็”จๆณ•

cargo add a2ui-base a2ui-tui
use a2ui_base::message_processor::MessageProcessor;
use a2ui_tui::catalogs::basic::{build_basic_catalog, build_basic_registry};
use a2ui_tui::surface::SurfaceRenderer;

let catalog = build_basic_catalog();
let registry = build_basic_registry();
let mut processor = MessageProcessor::new(vec![catalog]);

processor.process_message(MessageProcessor::parse_message(json)?)?;

let surface = processor.model.get_surface("main").unwrap();
let renderer = SurfaceRenderer::new(surface, &registry, &catalog);
renderer.render(&mut frame, area);

้€š่ฟ‡ umbrella ๆ—ถๆŠŠ a2ui_base:: / a2ui_tui:: ๆขๆˆ a2ui::core:: / a2ui::tui:: ๅณๅฏใ€‚

่ฎธๅฏ่ฏ

MIT