外掛
外掛用來增加動作。重點在於它不被允許成為什麼。
外掛實際上是什麼
動作外掛在 Jint——一個用 C# 寫的 JavaScript 直譯器——中執行,回傳一段 shell。它不執行工作,是 Walis 去跑它產生出來的那段 shell。
就是這一個限制讓外掛可讀:安裝之前,你看得到它究竟會往你的建置裡放什麼。對照 Jenkins,外掛在 controller 的 JVM 裡無沙箱執行,controller 做得到的事它都做得到。
能力
外掛只有 manifest 宣告過的能力:
- 連外——只放行指定網域,其餘一律不通。
- 機密——外掛可以要求把某個機密填進請求標頭(
withSecret),但讀不到值。
沒宣告的能力就是不存在,沒有任何預設權限。
資源上限
| 限制 | 數值 |
|---|---|
| 逾時 | 10 秒 |
| 記憶體 | 8 MB |
| 語句數 | 50 萬 |
| 遞迴層數 | 64 |
這些限制的是產生 snippet 的過程,不是產生出來的 shell 後續跑的建置。
AI 產生草稿
外掛頁可以依需求敘述產生外掛草稿。產生出來的東西一律權限清空、類型與版本強制寫死、絕不自動安裝——模型輸出跟陌生人貼進來的文字被一視同仁,因為它本來就是。
誰能安裝
/api/plugins 僅限管理員。安裝外掛等於在這台機器上加入一段會被執行的程式碼,所以不下放給 operator。
開發
介面上的開發指南分頁帶有目前的 host API。專案的 Docs/plugin-development.md 記錄威脅模型,@walisayu/plugin-sdk 提供型別、本機測試 harness、esbuild 打包與 walis-plugin CLI。
跳脫規則、參數預設值語意與網域比對必須與 host 完全一致——兩邊都有測試釘住,因為不一致正是沙箱逃逸的起點。