asdshuaishuai/moonviz/playground does not have a README file

    BitWriter

    type BitWriter

    CamView

    type CamView

    Camera

    pub(all) struct Camera {
    pan_x : Double
    pan_y : Double
    zoom : Double
    }

    MoonBit 终端画布(playground 宿主层,纯 MoonBit,wasm-gc/native/js 均可编译)。

    组成:
    • Camera:视口(平移/缩放)与屏幕字符坐标 ↔ 世界坐标变换
    • ScreenBuf:字符栅格(每格 = 字符 + ANSI 前缀)
    • draw_document:Document → 栅格(树序:容器先画、子节点覆盖)
    • pick_at:屏幕 → 世界 → 最上层节点(供拖拽命令)

    拖拽坐标先经相机逆变换,再交给引擎会话协议(handle_human)。

    Camera::new

    fn Camera::new() -> Camera

    Cell

    type Cell

    DeflateToken

    pub enum DeflateToken {
    Lit(Int)
    Match(len~ : Int, dist~ : Int)
    }

    Vendored from mizchi/zlib (Apache-2.0) — DEFLATE fixed Huffman 压缩

    FirstLine

    type FirstLine

    HiResBuf

    type HiResBuf

    增强像素画布:抗锯齿(2x 超采样)+ 圆角矩形 + 5×7 位图字体 + DEFLATE 压缩。

    渲染管线:Document → layout → 高分辨率 RGBA → downscale → DEFLATE PNG。 输出比 store-mode 小 5-20 倍,且边缘平滑、有文字标注、圆角柔和。

    MovePayload

    type MovePayload

    ReplState

    type ReplState

    MoonBit 画布交互命令层(全目标共享;输入循环由各 target 的 main 提供)。

    命令:help / render / list / decl / svg / pick / drag / pan / zoom / agent width|height / agent text <文本> / exit

    RgbaBuf

    type RgbaBuf

    纯 MoonBit PNG 像素画布:渲染计划 → RGBA 位图 → PNG 字节流。 借用 std 的 @base64 作为文本面;配合 native 目标可以直接打开。

    ScreenBuf

    type ScreenBuf

    apply_command

    fn apply_command(st : ReplState, line : String) -> String

    camera_pan

    fn camera_pan(c : Camera, dx : Double, dy : Double) -> Unit

    camera_zoom_in

    fn camera_zoom_in(c : Camera) -> Unit

    camera_zoom_out

    fn camera_zoom_out(c : Camera) -> Unit

    draw_document

    fn draw_document(buf : ScreenBuf, camera : Camera, doc :
    Document
    , highlight : String?) -> Unit

    文档 → 栅格。高亮节点用亮色边框(拖拽/告警聚焦)。

    frame_of

    fn frame_of(s : ScreenBuf) -> String

    清屏 + 光标复位 + 画栅格内容(重绘一次画布的完整 ANSI 输出)

    handle

    fn handle(request : String) -> String

    Agent / 渲染入口:违规整体拒绝

    handle_human

    fn handle_human(request : String) -> String

    人类入口:结构硬、视觉软;成功携带视觉债

    pick_at

    fn pick_at(doc :
    Document
    , camera : Camera, col : Double, row : Double) -> String?

    命中检测:屏幕列/行 → 世界坐标 → 含该点的最小面积节点 id

    png_encode

    fn png_encode(buf : RgbaBuf) -> Array[Byte]

    render_png

    fn render_png(doc :
    Document
    , width : Int, height : Int) -> Array[Byte]

    render_png_hires

    fn render_png_hires(doc :
    Document
    , width : Int, height : Int) -> Array[Byte]

    scenario_report

    fn scenario_report() -> String

    version

    fn version() -> String

    playground 引擎会话协议(纯 MoonBit,文本进出,无任何宿主依赖)。

    文本协议:首行为操作名,其后为载荷:

    • render\n<声明文本> → 解析 + Agent 硬门槛 + SVG
    • human_move\n<id>\n<x>\n<y>\n<声明文本> → 人类策略(结构硬 / 视觉软)

    会话无内部状态:声明文本本身就是状态。任何宿主(CLI、编辑器、未来的 画布进程)都可以用同一协议驱动引擎,引擎对其一无所知。