# a2ui-base
[](https://crates.io/crates/a2ui-base)
[](https://docs.rs/a2ui-base)
[](https://github.com/Liangdi/a2ui/blob/master/LICENSE)
[English](README_EN.md) | ไธญๆ
> ๐ฆ **a2ui** crate ็ๆๆๅ ยท ๆกๆถๆ ๅ
ณๆ ธๅฟๅฑ
>
> ๆฌ crate ๆฏ [`a2ui`](https://crates.io/crates/a2ui) workspace ็ๅบ็กๅญ crate,ๅฎๆดไป็ป่ง[ๆ น็ฎๅฝ README](https://github.com/Liangdi/a2ui#readme)ใ
[A2UI (Agent to UI) v1.0](https://github.com/a2ui-project/a2ui) ๅ่ฎฎ็**ๆกๆถๆ ๅ
ณๆ ธๅฟๅฑ**:ๅ่ฎฎ็ฑปๅใ็ปไปถ / ๆฐๆฎๆจกๅใCatalogใๆถๆฏๅค็ๅจใ่ฝๅๅๅใๆ ก้ช,ไปฅๅๆๆ UI ๅ็ซฏๅ
ฑไบซ็ไบคไบๅฑใ**ไธไพ่ตไปปไฝ UI ๆกๆถ**(ratatui / Slint / egui ้ฝไธๅผๅ
ฅ),ๅฏ็ฌ็ซ็จไบๅ
ถไป backend ๆ็บฏๅ่ฎฎ่งฃๆๅบๆฏใ
## ๅจ็ๆไธญ็ไฝ็ฝฎ
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 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-base` ๆฏๆดไธช workspace ็ๅฐๅบ โโ ไธไธชๅ็ซฏ(ratatui / Slint / egui)้ฝๅปบ็ซๅจๅฎไนไธใๆกๆถๆ ๅ
ณ็ไบคไบ้ป่พ(็ฆ็น้ๅ `focus`ใไบไปถ็ปๆๅบ็จ `interaction`ใ็ปไปถ่กไธบ `components`)็ปไธๆพๅจ่ฟ้,ไฟ่ฏไธๅๅ็ซฏๅจ้ฎ็ / ๆ้ฎไบคไบไธ่กไธบไธ่ดใ
## ๆจกๅ
| `protocol` | A2UI v1.0 JSON ๆถๆฏ็ฑปๅ(serverโclientใclientโserver) |
| `model` | ่ฟ่กๆถ็ปไปถๆ ใsurfaceใJSON Pointer ๆฐๆฎ็ปๅฎ |
| `catalog` | Catalogใ็ปไปถ APIใๅฝๆฐๅฎ็ฐใschema-only ๅฝๆฐใๅ
่ catalog |
| `message_processor` | ๆถๆฏ่งฃๆ โ ็ถๆๅๆด;`process_message` / `parse_jsonl` |
| `capabilities` | `ClientCapabilities` / `ServerCapabilities` ๅๅ + ๅ
่ catalog ่งฃๆ(UAX#31 ๆ ก้ช) |
| `validate` | ๅ่ฎฎๆ ก้ช(`ValidationConfig` / `ValidationReport`) |
| `observable` | ๅๅบๅผ็ถๆ็ฎก็ |
| `focus` / `interaction` / `components` | ๅ็ซฏๅ
ฑไบซ็ไบคไบๅฑ(็ฆ็น้ๅใ`EventResult` ๅบ็จใ็ปไปถ `handle_event`) |
## ็จๆณ
```bash
cargo add a2ui-base
```
```rust
use a2ui_base::message_processor::MessageProcessor;
use a2ui_base::catalog::Catalog;
let mut processor = MessageProcessor::new(vec![/* catalogs */]);
// ่งฃๆๅนถๅค็ไธๆก JSON ๆถๆฏ
let msg = MessageProcessor::parse_message(r#"{"version":"v1.0",...}"#)?;
processor.process_message(msg)?;
// ่ฏปๅๅ่ฎฎไบง็็ๅไผ ๆถๆฏ(functionResponse / actionResponse / ...)
let outgoing = processor.drain_outgoing();
```
> ๆณ็ดๆฅๅพๅฐไธไธช่ฝๆธฒๆ็็ป็ซฏ UI?็ปๅ [`a2ui-tui`](https://crates.io/crates/a2ui-tui) ไธ่ตท็จ;ๆ้่ฟ umbrella [`a2ui`](https://crates.io/crates/a2ui) ไปฅ `a2ui::core::...` ่ทฏๅพ่ฎฟ้ฎๆฌ crateใ
## ่ฎธๅฏ่ฏ
MIT