XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEWorkflow

【WinUI】XFE基于windows的工作流

公开
关注 0 Fork 0 Star 0
UTF-8
$ErrorActionPreference = 'Stop'
$repoRoot = Split-Path $PSScriptRoot
$manifestRoot = Join-Path $repoRoot 'XFEWorkflow\XFEWorkflow.Plugins.Standard\Manifests'
New-Item -ItemType Directory -Force -Path $manifestRoot | Out-Null
function Port($name, $label, $type = 'String', $required = $false, $default = $null, $secret = $false) {
    $value = [ordered]@{ name = $name; label = $label; type = $type; required = $required; secret = $secret }
    if ($null -ne $default) { $value.defaultValue = $default }
    return $value
}
function Action($id, $name, $inputs, $outputs, $description = '') {
    return [ordered]@{ id = $id; name = $name; category = ''; description = $description; inputs = @($inputs); outputs = @($outputs); executionOutputs = @('next') }
}
function Plugin($id, $name, $entry, $permissions, $actions) {
    foreach ($a in $actions) { $a.pluginId = $id; $a.category = $name }
    $manifest = [ordered]@{ schemaVersion = 1; sdkMajorVersion = 1; id = $id; name = $name; version = '1.0.0'; author = 'XFEstudio'; description = "$name 官方能力"; assembly = 'XFEWorkflow.Plugins.Standard.dll'; entryType = "XFEWorkflow.Plugins.Standard.$entry"; supportedRids = @(); permissions = @($permissions); dependencies = @(); capabilities = @($actions) }
    $manifest | ConvertTo-Json -Depth 20 | Set-Content -LiteralPath (Join-Path $manifestRoot "$id.json") -Encoding utf8NoBOM
}
Plugin 'xfe.http' 'HTTP' 'HttpPlugin' @('network') @(
    (Action 'xfe.http.request' 'HTTP 请求' @((Port 'url' '地址' 'String' $true), (Port 'method' '方法' 'String' $false 'GET'), (Port 'headers' '请求头' 'Object'), (Port 'body' '请求正文' 'Any'), (Port 'contentType' '内容类型' 'String' $false 'application/json'), (Port 'ensureSuccess' '非成功状态报错' 'Boolean' $false $true)) @((Port 'status' '状态码' 'Number'), (Port 'text' '文本'), (Port 'json' 'JSON' 'Any'), (Port 'headers' '响应头' 'Object')))
)
Plugin 'xfe.file' '文件' 'FilePlugin' @('filesystem') @(
    (Action 'xfe.file.read' '读取文本 / JSON' @((Port 'path' '路径' 'String' $true)) @((Port 'text' '文本'), (Port 'json' 'JSON' 'Any'))),
    (Action 'xfe.file.write' '写入文本' @((Port 'path' '路径' 'String' $true), (Port 'text' '内容' 'Any' $true), (Port 'append' '追加' 'Boolean' $false $false)) @((Port 'path' '路径'))),
    (Action 'xfe.file.list' '列出文件' @((Port 'path' '目录' 'String' $true), (Port 'pattern' '匹配模式' 'String' $false '*'), (Port 'recursive' '包含子目录' 'Boolean' $false $false)) @((Port 'files' '文件' 'Array')))
)
$commandInputs = @((Port 'script' '命令脚本' 'String' $true), (Port 'workingDirectory' '工作目录(空为用户目录)'), (Port 'administrator' '以管理员身份启动(UAC)' 'Boolean' $false $false), (Port 'timeoutSeconds' '最长执行秒数' 'Number' $false 300), (Port 'environment' '环境变量' 'Object'), (Port 'failOnNonZero' '非零退出码报错' 'Boolean' $false $false))
$commandOutputs = @((Port 'stdout' '标准输出'), (Port 'stderr' '错误输出'), (Port 'exitCode' '退出码' 'Number'), (Port 'succeeded' '成功' 'Boolean'), (Port 'truncated' '输出已截断' 'Boolean'), (Port 'processId' '进程 ID' 'Number'), (Port 'administrator' '实际管理员权限' 'Boolean'), (Port 'result' '完整结果' 'Object'))
Plugin 'xfe.command' '命令行' 'CommandPlugin' @('process', 'filesystem') @(
    (Action 'xfe.command.powershell' 'PowerShell 脚本' $commandInputs $commandOutputs 'Windows PowerShell 5.1;支持多行脚本、UTF-8 输出、取消和管理员启动。'),
    (Action 'xfe.command.cmd' 'CMD 命令' $commandInputs $commandOutputs 'Windows CMD;支持多行批处理、UTF-8 输出、取消和管理员启动。')
)
Plugin 'xfe.ai' 'AI' 'AiPlugin' @('network', 'credentials') @(
    (Action 'xfe.ai.chat' 'AI 对话' @((Port 'endpoint' '兼容接口地址' 'String' $false 'https://api.openai.com/v1/'), (Port 'model' '模型' 'String' $true), (Port 'credential' 'API Key 凭据引用'), (Port 'apiKey' '临时 API Key' 'String' $false $null $true), (Port 'system' '系统提示词'), (Port 'prompt' '提示词' 'Any'), (Port 'messages' '消息数组' 'Array'), (Port 'temperature' '采样温度' 'Number')) @((Port 'text' '回复'), (Port 'response' '完整响应' 'Object')))
)
Plugin 'xfe.wecom' '企业微信' 'WeComPlugin' @('network', 'credentials') @(
    (Action 'xfe.wecom.send' '发送群机器人通知' @((Port 'credential' 'Webhook 凭据引用'), (Port 'webhook' '临时 Webhook' 'String' $false $null $true), (Port 'format' 'text / markdown' 'String' $false 'text'), (Port 'content' '内容' 'Any' $true), (Port 'mentionedList' '提醒用户' 'Array')) @((Port 'response' '响应' 'Object')))
)
$tab = Port 'tab' '浏览器句柄' 'Resource' $true
$selector = Port 'selector' 'CSS 选择器' 'String' $true
$frames = Port 'frame' 'iframe 索引路径(例:0/1)'
$browserActions = @(
    (Action 'xfe.browser.open' '打开浏览器标签' @((Port 'profile' '登录配置' 'String' $false 'default'), (Port 'url' '地址' 'String' $false 'about:blank')) @((Port 'tab' '标签句柄' 'Resource'))),
    (Action 'xfe.browser.navigate' '网页导航' @($tab, (Port 'url' '地址' 'String' $true)) @()),
    (Action 'xfe.browser.wait' '等待元素' @($tab, $selector, $frames, (Port 'milliseconds' '最长等待' 'Number' $false 30000)) @((Port 'found' '存在' 'Boolean'))),
    (Action 'xfe.browser.click' '点击网页元素' @($tab, $selector, $frames) @()),
    (Action 'xfe.browser.input' '填写网页元素' @($tab, $selector, $frames, (Port 'text' '文本' 'String' $true)) @()),
    (Action 'xfe.browser.extract' '提取网页元素' @($tab, $selector, $frames, (Port 'attribute' '属性(空为文本)')) @((Port 'text' '文本'), (Port 'items' '全部匹配' 'Array'))),
    (Action 'xfe.browser.script' '执行网页脚本' @($tab, $frames, (Port 'script' 'JavaScript' 'String' $true)) @((Port 'result' '结果' 'Any'))),
    (Action 'xfe.browser.screenshot' '网页截图' @($tab, (Port 'path' '保存路径' 'String' $true)) @((Port 'path' '路径'))),
    (Action 'xfe.browser.download' '下载网页文件' @($tab, (Port 'url' '地址' 'String' $true), (Port 'path' '保存路径' 'String' $true)) @((Port 'path' '路径'))),
    (Action 'xfe.browser.close' '关闭浏览器标签' @($tab) @())
)
Plugin 'xfe.browser' '网页自动化' 'BrowserPlugin' @('browser', 'filesystem') $browserActions
$timer = Action 'xfe.timer.interval' '插件间隔触发器' @((Port 'seconds' '间隔秒数' 'Number' $false 60)) @((Port 'timestamp' '时间'))
$timer.isTrigger = $true
Plugin 'xfe.timer' '触发器示例' 'TimerPlugin' @() @($timer)