Skip to content

Purview 是什麼

Purview 實作了 MCP GUI Bridge Protocol v0.1.0。它位於你真正的 GUI 與 MCP 客戶端之間,對外提供應用程式的一份投影:一組視窗,每個視窗承載語義化的內容區塊(欄位、表格、清單、提示、媒體……)以及動作。

你永遠不需要自己組裝協定訊息。你只負責描述視窗並讓它保持最新;剩下的由函式庫對外提供。

為什麼叫 Purview

英文裡的 purview 指一個人被允許看到、被允許決定的範圍——常見搭配是 within the purview of(在……的職權範圍之內)。這恰好就是投影的含義:投影就是 agent 對你的應用程式所擁有的 purview。你放進投影的內容,agent 才讀得到;你公開出來的動作,agent 才呼叫得到。其餘的一切並不是被一道權限檢查擋在門外——它根本不會出現在協定訊息裡。

這個詞裡還藏著 view,這正是故事的另一半:agent 拿到的始終是你 GUI 的一份檢視,而不是 GUI 本身。它無法點擊你的按鈕,也無法越過投影去碰你的元件;它只能透過你定義的動作,請求某件事發生。

三個核心理念

核心不綁定框架。 purview crate 不連結任何 GUI 工具組。它只透過你在啟動時註冊的一個閉包來抵達主執行緒。

語義化,而非像素。 Agent 讀到的是結構化的內容區塊——帶標籤的欄位、具型別的列——而不是一張需要它費力解讀的螢幕擷圖。

協定由函式庫掌管。 動態 tools/list、模態鏈、樂觀並行、遮蔽、通知:全部由你維護的那份投影推導得出。

我該用哪個 crate?

Crate使用時機
purview總是需要。它是核心:投影、協定、伺服器。
purview-gpui你的 UI 用的是 gpui。它省去執行緒調度的樣板程式碼——參見 使用 purview-gpui

心智模型

只有兩條流向,而把它們分清楚是最重要的一個習慣:

讀取側(GUI → 函式庫)。 你 UI 的變更事件透過你保留的具型別控制柄,把值推入投影。這是內容區塊唯一會改變的地方。

寫入側(Agent → GUI)。 每個動作都會變成一個 MCP 工具。它的處理器觸發真正的業務邏輯或 GUI 操作;它不會直接修改投影——變更會經由讀取側流回來。

為何重要

如果處理器直接寫入投影,那麼 Agent 驅動的變更與人類驅動的變更就會走不同路徑,最終必然互相矛盾。把所有變更都匯入同一個方法——本指南的範例都只用單一的 sync()bump()——投影就不可能產生偏離。

你會持有的三樣東西

控制柄來自用途
AppHandle<Cx>build()開啟視窗;讀取快照
Window<Cx>app.open(title)摘要、內容區塊、動作、模態、關閉
內容區塊控制柄win.blocks().fields(..)之後更新該內容區塊

它們全部都可以廉價地 clone,都是 Send + Sync,並且只持有共用核心的弱引用——所以你可以把它們存放在 GUI 元件裡,並從任何執行緒呼叫。一旦核心被釋放,它們的操作就會安全地變成無作用的空操作。