Skip to content

插件 API

Sea Lantern 插件執行時基於 Lua。插件透過全域 sl 命名空間存取宿主提供的能力。

詳細介面定義、參數說明和限制,以主倉庫 docs/plugin/ 為準。

注意

本文中的插件指 Sea Lantern Lua 插件,不包含 Minecraft 伺服器 Bukkit / Spigot / Paper 插件檔案。 伺服器插件檔案管理屬於獨立模組。

執行時模型

  • 插件執行時會建立全域 sl 表。
  • 插件能力由 manifest.json 中宣告的 permissions 控制。
  • 未授權模組呼叫時會回傳權限錯誤。
  • 插件執行在受限 Lua 環境中,只開放必要標準函式庫。
  • sl.i18n 預設可用,其餘模組需要對應權限。

API 模組

模組權限說明
sl.loglog輸出插件日誌
sl.storagestorage插件私有鍵值儲存
sl.fsfs.*沙箱檔案系統操作
sl.apiapi插件 API 註冊與呼叫
sl.uiui.*UI 注入、Toast、選單和元件橋接
sl.elementelement頁面元素查詢與操作
sl.serverserver伺服器資訊和日誌存取
sl.consoleconsole控制台命令和狀態存取
sl.systemsystem系統及應用資訊查詢
sl.httpnetwork受限 HTTP 請求
sl.processprocess.*執行插件目錄內程式
sl.pluginsplugins.*存取其他插件資源
sl.i18n國際化介面

基礎呼叫

lua
sl.log.info("plugin loaded")

local locale = sl.i18n.getLocale()
local title = sl.i18n.t("common.app_name")

sl.storage.set("enabled", true)
local enabled = sl.storage.get("enabled")

local servers = sl.server.list()
sl.console.send("server-id", "say Hello")

檔案系統

檔案系統採用 scope 隔離:

lua
local text = sl.fs.read("data", "config.txt")
sl.fs.write("data", "output.txt", "Hello")

支援的 scope:

Scope說明
data插件私有資料目錄
server目前伺服器目錄
global全域共享目錄

權限:

權限說明
fs.<scope>.read讀取檔案
fs.<scope>.write寫入檔案
fs.<scope>.list列出目錄
fs.<scope>.meta查詢檔案資訊
fs.<scope>.delete刪除檔案
fs.<scope>.transfer移動、複製、重新命名

舊權限 fs 會轉換為 fs.data

程序權限

權限說明
execute_program完整程序能力
process.exec執行程式
process.inspect查詢背景程序
process.output.read讀取輸出
process.kill終止程序

sl.process.exec() 要求程式路徑在 manifest.jsonprograms 中宣告,且程式和工作目錄必須位於插件目錄內。

安全限制

  • 檔案系統拒絕絕對路徑、路徑越界、符號連結和 reparse point。
  • 虛擬路徑不會暴露宿主真實路徑。
  • 刪除操作不會遞迴刪除非空目錄。
  • HTTP 僅支援 httphttps,禁止存取本機和私有網路位址。
  • HTTP 請求不自動跟隨重定向,回應內容有大小限制。
  • 控制台命令會經過狀態和安全規則校驗。
  • 儲存介面適用於小型結構化資料。

UI 與元素操作

sl.ui 用於向宿主註冊 UI 行為,包括:

  • HTML / CSS 注入;
  • Toast 通知;
  • 側邊欄;
  • 上下文選單;
  • 元件橋接。

sl.element 用於查詢和操作既有頁面元素。

元件橋接需要額外權限:

  • ui.component.read
  • ui.component.write
  • ui.component.proxy
  • ui.component.create

國際化

插件可以讀取宿主語言,也可以註冊插件專屬翻譯:

lua
sl.i18n.registerLocale("zh-TW", "繁體中文")
sl.i18n.addTranslations("zh-TW", {
  title = "範例插件"
})

插件翻譯統一進入 plugins.<plugin_id>.* 命名空間。

Trusted 插件

目前 Trusted 插件機制包括:

  • 人工審核;
  • 內建 trusted catalog;
  • 套件 hash 校驗;
  • 權限上限校驗;
  • 啟用時授權。

目前機制不等同於完整數位簽章體系。

高風險權限包括:

  • execute_program
  • plugin_folder_access
  • plugins.write
  • ui.component.proxy

此類插件需要額外審核和使用者確認。

開發位置

內容路徑
插件 API 文件docs/plugin/*.md
Lua 執行時backend/tauri-host/src/plugins/runtime/
信任規則backend/plugin-trust/
命令實作backend/tauri-host/src/commands/plugins/
前端 APIfrontend/src/api/plugin.ts

修改插件 API 時,需要同步檢查執行時實作、前端封裝、命令註冊以及文件。插件 UI、權限行為和資料格式都屬於相容性介面。

基於 GPL-3.0 許可發布