PML 2 外掛開發指南

外掛系統觸發點說明

本文件介紹 PML 2 外掛系統的所有觸發點。

一、外掛事件觸發點 (Trigger)

外掛透過 YAML 中的 triggers.on 訂閱下列事件。事件攜帶的資料可透過樣板 {{ctx.data.欄位名}} 在動作參數中引用。

事件總覽

事件名觸發時機觸發位置攜帶資料執行方式
app.startup主視窗初始化完成、應用程式啟動時MainWindow.axaml.csversion, osawait
app.exit應用程式結束時 (日誌釋放前)App.axaml.csversion, osawait
app.update.available偵測到有新版本時MainWindow.axaml.cscurrentVersion, latestVersionfire-and-forget
user.login使用者登入成功時LoginPage.axaml.csusername, groupfire-and-forget
user.logout使用者確認登出後、應用程式重新啟動前UserCenterPage.axaml.csusernameawait
proxy.start啟動隧道 (建立帶有 mefrpc 指令的終端機分頁) 時TerminalPage.axaml.csproxyName, commandfire-and-forget
proxy.stop關閉終端機分頁 (與 proxy.start 配對) 時TerminalPage.axaml.csproxyNamefire-and-forget
page.navigate切換主介面頁面時MainPageFrameViewModel.cspagefire-and-forget
plugin.install外掛檔案安裝成功時PluginService.csfilefire-and-forget
plugin.uninstall外掛解除安裝成功時PluginService.cspluginId, pluginNamefire-and-forget
plugin.enable外掛啟用時PluginService.cspluginIdfire-and-forget
plugin.disable外掛停用時PluginService.cspluginIdfire-and-forget

事件詳情

app.startup / app.exit

應用程式生命週期事件。app.startup 在主視窗載入、隱私權政策檢查完成後觸發; app.exit 在處理程序結束前觸發, 會等待外掛動作執行完畢才釋放日誌資源。

資料欄位說明範例
version應用程式版本號26.2.0
os作業系統平台Win32NT / Unix

app.update.available

啟動後首次偵測到新版本時觸發 (每次執行只觸發一次) 。

資料欄位說明
currentVersion目前版本
latestVersion偵測到的最新版本

user.login / user.logout

資料欄位說明
username登入/登出的使用者名稱
group使用者群組 (僅 user.login)

user.logout 之後應用程式會立即重新啟動,因此採用 await 方式執行, 保證外掛動作 (如通知、上報) 能完整執行。

proxy.start / proxy.stop

資料欄位說明
proxyName隧道/終端機分頁名稱
command啟動指令 (僅 proxy.start)

page 欄位取值: Home、CreateProxy、ManageProxy、NodesMonitoring、UserCenter、 Settings、About、Terminal、Update、Theme、Plugin

plugin.install / plugin.uninstall / plugin.enable / plugin.disable

外掛自身的生命週期事件。注意: 外掛可以訂閱這些事件實現連動, 但訂閱 plugin.uninstall 的外掛在自身被解除安裝後不會再收到後續事件。

二、外掛 YAML 寫法

外掛檔案位於 Config/Plugins/*.yaml,支援熱重載 (檔案變更後 1 秒內自動重新載入) 。

id: my-plugin
name: 範例外掛
description: 隧道啟動時傳送通知
author: 作者名
version: "1.0"

triggers:
  - on: proxy.start                          # 訂閱的事件名
    condition: "ctx.data.proxyName != ''"    # 選填,條件表達式
    actions:
      - name: notify
        params:
          msg: "隧道 {{ctx.data.proxyName}} 已啟動"

functions:
  my_func:                                   # 可重複使用的函式,用 call_function 呼叫
    - name: log
      params:
        msg: "hello"

內建指令 (actions)

指令參數說明
logmsg寫入日誌 (主控台 + 應用程式日誌檔,模組為「外掛」)
notifymsg傳送系統通知 (標題為 外掛ID | PML 2)
http_requesturl, method(預設 GET), body發出 HTTP 請求,回應主體寫入 ctx.variables.http_response
python_runscript, input呼叫 Python 指令碼 (需 PATH 中有 python3) ,傳回的 JSON 合併進變數
call_functionfunc, args呼叫 functions 中定義的函式
conditionalcondition, if_true條件執行一組動作

樣板變數

參數中的 {{...}} 會在執行前替換:

  • {{ctx.data.xxx}} —— 事件攜帶的資料
  • {{ctx.variables.xxx}} —— 執行過程中產生的變數 (如 http_response)
Copyright © RYCBStudio 2026, All Rights Reserved.