a2ui-base 0.3.0

Framework-agnostic base for A2UI (Agent to UI): protocol, models, and catalog
Documentation
# a2ui-base

[![crates.io](https://img.shields.io/crates/v/a2ui-base.svg)](https://crates.io/crates/a2ui-base)
[![docs.rs](https://docs.rs/a2ui-base/badge.svg)](https://docs.rs/a2ui-base)
[![MIT](https://img.shields.io/badge/license-MIT-blue.svg)](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