PI-Desktop 新手教程

PI-Desktop 新手教程

给 AI 编程 Agent 一个真正的桌面工作台:模型随便换、项目直接开、Agent 放手干活,而你始终掌控。本教程带你在 10 分钟内装好、接上模型、跑通第一个 Plan 工作流——并在第 10 节正面回答「能不能集成 Cursor CLI」。

GitHub 仓库 0.14.x Early Preview LGPL-3.0 macOS · Windows · Linux 基于 pi-mono 生态

1这是什么

一句话:PI-Desktop 是一个把 AI 编程 Agent 装进「独立桌面工作台」的开源应用——不是又一个聊天窗口,也不是编辑器插件。

大多数编程 Agent 住在终端、编辑器扩展或托管服务里。PI-Desktop 的做法是给 Agent 工作流一个自己的工作区:项目、会话、文件、Diff、预览、模型、权限、插件、长任务,全都放在一个桌面环境里——不绑编辑器,不绑模型厂商,不绑云端。它的 Agent 引擎来自 badlogic 的 pi-mono 生态(pi-ai / pi-agent-core),官方的一句话总结是:Pi 负责让 Agent 跑起来,PI-Desktop 负责让 Agent 真正变成一个长期可用的桌面工作台。

3平台:macOS / Windows / Linux
4进程架构:UI · Electron · Rust · pi
3工作模式:Agent / Plan / Goal
0强制云端依赖(Local-first)
它不做什么消除误解最快的方式是反着说:
  • 不内置任何模型、不卖 token —— Bring Your Own Model,模型请求直连你自己配置的 provider 或端点。
  • 不上传你的代码 —— Local-first:项目和会话都在本机,没有强制账号、没有强制中继。
  • 不绑编辑器 —— 它和 Cursor / VS Code 是并列关系,不是谁的插件。
  • 不做云端托管运行 —— 自动化控制面(MCP Control)也只绑定 127.0.0.1 回环地址。
  • 不是稳定版 —— 0.14.x 早期预览(Early Preview),插件接口和部分桌面行为仍在演进。

2为什么需要它

你已经有一堆能干活的 Agent 了,为什么还要一个「工作台」?先看三条现成路线各自卡在哪。

现成路线代表卡点
终端 AgentClaude Code / Codex CLI会话生命周期绑在终端 tab 上;文件、Diff、预览、权限确认散落在滚动缓冲区里,长任务难管理。
编辑器插件Cursor / Copilot体验最好,但工作流被锁进单一编辑器,模型选择受平台限制,会话跟着编辑器走。
托管云 Agent云端自动化 Agent 服务代码要上云,权限是黑盒,你无法逐条审查每条命令的执行过程。

PI-Desktop 的核心洞察是:Agent 引擎和模型都是可替换的零件,工作台才是常量。引擎用 pi(想换随时可以关注生态),模型走 BYOM 随便换,而项目、会话、权限、Review 这些「长期资产」沉淀在一个独立的桌面应用里——换模型不用重建会话,换编辑器不用搬家,审查和批准永远在同一个地方发生。

一句话记住终端 Agent 给你「一次对话」,PI-Desktop 给你「一个长期干活的车间」:会话可以 pin / branch / 归档,改动有统一 Review 面板,权限有统一关卡。

3核心流程:四进程架构

PI-Desktop 把「好看的 UI」和「有权限的运行时」拆成四个进程——理解这张图,后面所有设计都顺了。

Renderer(React UI) 聊天 / 会话 / 设置 —— 无 Node 集成 Electron Main(编排层) IPC 路由 · 更新 · MCP 控制面 preload IPC Rust Host Core(权限网关) 工具执行 · 沙箱 · SQLite 独占 · 审计日志 pi Agent Sidecar(Node) pi-ai / pi-agent-core · 模型流式 · Agent 循环 local RPC / process bridge JSON-RPC Renderer(React UI) 无 Node 集成 Electron Main IPC · 更新 · MCP 控制面 Rust Host Core 权限网关 · 工具执行 · SQLite ⇄ stdio JSON-RPC pi Agent Sidecar pi-ai / pi-agent-core · 流式

一次「对话 + 工具调用」的完整路径:

UI 提交 prompt→ Electron 路由到 pi sidecar→ pi 开始 turn · 流式输出→ 工具调用经 host bridge→ Rust 按 Plan/Goal/Agent 策略裁决→ 在项目工作区沙箱执行→ 结果回流 · 会话持久化
两个关键设计
  • 权限不是 UI 装饰。权限裁决发生在 Rust Host Core(权威层),Renderer 是无特权投影——UI 伪造请求、抢答确认都无效。
  • Plan 不是第二个规划器。Plan / Goal 是同一个 Agent 的状态机状态,切换由 host 校验并留痕,避免「规划 Agent」和「执行 Agent」精神分裂。

4安装

唯一入口是 GitHub Releases。别从第三方下载站拿安装包。

平台架构安装包应用内更新
macOSApple Silicon / Intel.dmg / .zip跳转 Releases 页
Windowsx64NSIS Installer / Portable .exeNSIS ✅ 可应用内更新;Portable 跳转
Linuxx64.AppImage / .deb / .rpmAppImage ✅ 可应用内更新;deb/rpm 跳转
# 下载最新版(浏览器打开)
open https://github.com/vastsa/PI-Desktop/releases/latest

两条易混淆的路,先分清:

路径说明
手动下载所有平台的兜底方式,永远以 Releases 页的 tagged release 为准。
应用内更新打包版本会检查 GitHub Releases 并在应用内提示;只有 Windows NSIS 和 Linux AppImage 能在应用内直接装,其余平台只是带你跳转。

平台注意事项:

  • macOS(未签名):首次打开若被 Gatekeeper 拦截(提示「已损坏」或无法验证),放行隔离标记即可:
    xattr -r -d com.apple.quarantine /Applications/PI-Desktop.app
  • Linux:要求 glibc 2.35+(Ubuntu 22.04 及以上等)。
  • Windows:内置 Bash 工具依赖 Git for Windows(安装包不捆绑 bash),没装会在执行命令时报 SHELL_NOT_FOUND。
Early Preview 提醒版本迭代很快,遇到 bug 先升级到最新 tagged release再排查;CI 构建和旧版本的行为差异可能很大,教程内容以 0.14.x 为基准。

5环境自检与模型接入

装完只完成了一半——PI-Desktop 不带模型,你得自己接一个。官方的「5 步开始干活」如下。

① 下载安装→ ② Settings → Model configuration 接模型→ ③ 侧边栏添加项目目录→ ④ 选 Agent / Plan / Goal→ ⑤ Review 面板检查结果

第 ② 步支持的 provider 类型(官方不维护「指定模型列表」,任何 OpenAI 兼容端点都行):

类型例子备注
官方 APIOpenAI、Anthropic支持 provider OAuth(支持时)
OpenAI 兼容 API各类第三方网关、自建服务填 base URL + key 即可
Hosted Gateway各类模型聚合网关一个入口管多家模型
本地模型Ollama、LM Studio代码不出本机

每个模型可单独配置:Context Window、Max Output、Reasoning / Thinking Level、Temperature、模型专属参数。上下文窗口配小了会出现莫名其妙的截断,建议按 provider 官方标称值填。

权限模式三选一(Agent 模式下生效,决定写文件 / 跑命令要不要你点头):

模式读文件写文件Bash / 插件工具适合谁
ask(默认)自动需确认需确认新手与敏感项目,无脑选它
accept-edits自动自动需确认信得过改代码、但想盯着每条命令
auto自动自动自动全信任环境(沙箱 / 废弃目录)再开
自检清单① 应用能打开 ② 模型配置里 test 通了 ③ 项目目录已添加 ④ 权限模式已选定 ⑤(Windows)Git for Windows 已装。五项全绿,进入第一次实战。

6第一次实战:走一遍 Plan 工作流

推荐新手第一次就用 Plan 模式——先看方案再放行,是建立信任最快的方式。

场景:让 Agent 给一个小工具库新增一个函数并补测试。全程不碰终端:

  1. 添加项目:侧边栏 → 添加你的项目目录(任意本地 git 仓库或文件夹)。
  2. 新建会话,模式选 Plan。描述需求,例如:阅读 src/utils/ 的现有结构,提出为 parseDuration 新增毫秒解析函数的方案,包含测试计划,先不要改代码。
  3. Agent 在 Plan 模式下调研并产出方案。此时它不能写文件——Write/Edit 在 host 层被硬拒绝,不是「它自觉不动手」。
  4. Agent 调用 SubmitPlan:方案原文以字节级保真写入 .pi/plan/*.md 工件,并弹出审批卡片。点开卡片看到的就是那个 md 文件本身。
  5. 你审批:Approve → 会话原子切换到 Agent 模式并排队一个新的执行 turn;Reject → 不产生任何执行能力。
  6. Review 面板:逐文件看 diff、看命令输出、用 BrowserPreview 预览页面,继续在会话里迭代。
打开项目 模式选 Plan Agent 调研 不能写文件 SubmitPlan 写入 .pi/plan/*.md 字节级保真工件 你的审批 批准 / 拒绝 · 30 分钟有效 Agent 执行 Review 面板 拒绝、超时、崩溃都不会授予执行能力;批准后原子切换到 Agent 模式并排队新的执行 turn 打开项目 · Plan 模式 描述需求 Agent 调研 Plan 下 Write/Edit 被硬拒绝 SubmitPlan 方案落盘 .pi/plan/*.md 你的审批 批准 / 拒绝 · 30 分钟有效 Agent 执行 Review 面板看 diff
为什么这个设计值得学方案不是聊天记录里的一条消息,而是落盘的、带哈希记录的不可变文件;批准记录存数据库(plan_approvals)。审批 UI 崩了重开,未决审批还能恢复,但「已批准」状态无法被伪造——审计链条是完整的。

7产物结构:它在你磁盘上写了什么

Local-first 意味着一切都有迹可循。这张表就是 PI-Desktop 的全部「 footprint 」。

路径内容谁拥有
<项目>/.pi/plan/*.mdPlan 方案工件(不可变,审批记录带路径 / 哈希 / 大小)host 写入,Agent 不能篡改
<项目>/.pi/goal/*.mdGoal 契约工件(同上机制)host 写入
应用数据目录下的 SQLite会话、审批记录(plan_approvals)、脱敏审计日志(完整命令行)仅 Rust 进程读写
Electron user-data 目录应用配置、secrets(加密存储)、mcp-control.json(仅启用 MCP 控制面时)Electron Main

设计原则有两条值得留意:

  • 双轨落盘,可审计可回溯。方案以文件形式留在项目里(可以 commit、可以 diff),审批与执行记录留在 SQLite——出问题时两边对得上。
  • 状态权威在 host。Renderer 重载后只能通过 plans.pending 拿回「仍然待审」的记录,拿不回(也伪造不了)已终态的审批。

8日常怎么用

跑通第一个 Plan 之后,这些是你会天天摸的操作。

  • @ 引用文件:在 Composer 里 @ 项目文件,精确把上下文喂给 Agent。
  • 斜杠命令:输入 / 唤出命令菜单(含插件与扩展注册的命令)。
  • 排队 prompt:Agent 正在跑也能继续输入,任务会排队执行,不用干等。
  • Composer 切模型:同一会话直接换模型,不重建会话、不丢上下文。
  • 会话管理:pin / archive / branch / 全文搜索;长会话可用 new_context 工具在轮次边界开新上下文窗口省 token。
  • checkpoint 恢复:流式响应有检查点,中断的工作尽量可恢复。
  • BrowserPreview:内置浏览器面板直接预览工作区内的页面(只读检查)。

✅ 会发生

  • 切模型后上下文延续,会话继续。
  • 中断后从 checkpoint 尽量恢复。
  • 高危操作先弹权限卡,逐条可审。

❌ 不会发生

  • 没有「PI-Desktop 服务器」接收你的代码——它没有这种服务器。
  • 不会绕过权限卡静默执行命令。
  • Plan / Goal 模式不会偷写文件(host 层硬拒绝)。

9进阶:Skills / MCP / Subagents / 插件

核心保持克制,能力交给生态扩展——插件是 PI-Desktop 的第二条主线。

Skills:把常用 Prompt、工作流和执行规范做成可复用能力,全局安装或只在某个项目启用。

MCP servers:通过 Model Context Protocol 接入外部工具,在设置里配置,或由插件声明:

{
  "id": "docs",
  "transport": "stdio",
  "command": "bin/docs-server",
  "args": ["--stdio"]
}

Subagents 与背景委托:主 Agent 可以把子任务委托给 Subagent(Task 工具,仅 Agent 模式可用),也可以把长任务丢到后台跑。

pi extensions:为 pi CLI 写的扩展可以不经修改直接跑在 PI-Desktop 的 Agent 里。插件通过 contributes.agentExtensions 贡献它们(需要高风险的 agent.extension 权限):

// src/index.ts —— pi ExtensionAPI,jiti 直接加载 TS,无需构建
import { Type } from "typebox";
import { defineTool } from "@earendil-works/pi-coding-agent";

export default function (pi) {
  // 1. 注册一个 Agent 工具
  pi.registerTool(defineTool({
    name: "fx_add", label: "Add", description: "Adds two numbers",
    parameters: Type.Object({ a: Type.Number(), b: Type.Number() }),
    async execute(_id, { a, b }) {
      return { content: [{ type: "text", text: String(a + b) }], details: {} };
    },
  }));

  // 2. 每次工具调用的钩子:这里拦掉所有 Bash
  pi.on("tool_call", (event) =>
    event.toolName === "Bash" ? { block: true, reason: "not here" } : undefined
  );

  // 3. 斜杠命令:出现在 Composer 的 / 菜单
  pi.registerCommand("greet", {
    description: "Say hello",
    async handler(args, ctx) {
      const name = await ctx.ui.input("Your name?");
      ctx.ui.notify(`Hello ${name} ${args}`);
    },
  });
}

插件(Plugin):本地安装或经市场分发,打包成 .piplug(store-only ZIP)。清单文件长这样:

{
  "schemaVersion": 1,
  "id": "local.my-first-plugin",
  "name": "My First Plugin",
  "version": "0.1.0",
  "main": "main.js",
  "contributes": { "agentExtensions": ["src/index.ts"] },
  "permissions": ["agent.extension"],
  "engines": { "piDesktop": ">=0.1.0" }
}

插件能贡献的能力面很宽:commands(命令面板动作)、views(工作面板)、agentTools(Agent 工具)、skills、themes、mcpServers、services(常驻后台)、bus(插件间通信)、settings、agentExtensions。权限模型要求最小化声明——文件访问用 fs 白名单、网络用 net.domains 域名白名单:

{
  "fs":  { "read": { "scope": ["**/*"] }, "write": { "scope": ["docs/**"] } },
  "net": { "domains": ["api.example.com"] }
}
两条硬边界① 插件不能注册模型 provider——模型目录是 host 的事;② agentExtensions 运行在 Agent 进程内、无沙箱,装第三方插件前想清楚它和 Agent 同权。

会话导入:Settings → Import 可以把已有的本地会话带进来,支持 Claude Code、Codex、OpenCode、Pi。(注意:不支持 Cursor——原因见下一节。)

10集成 Cursor CLI:可行路径与边界

直接给结论:「把 Cursor CLI 塞进 PI-Desktop 当引擎」走不通,但反过来「用 Cursor CLI 驾驶 PI-Desktop」是官方支持的正式能力。集成方式取决于你想接在哪一层。

集成层想法结论
模型层把 Cursor 的模型接到 PI-Desktop 里用❌ 不通。Cursor 不提供 OpenAI 兼容 API;插件也注册不了 provider(架构冻结决策)。社区有逆向 Cursor 接口的代理项目,但违反其服务条款、有封号风险——不要在生产工作流里碰。
引擎层让 PI-Desktop 用 Cursor CLI 当 Agent 引擎❌ 不通。Agent 引擎锁定为 pi(pi-ai / pi-agent-core),这是写进架构决策的选型,不提供替换点。
控制层用 Cursor CLI 作为外部 Agent 遥控 PI-Desktop✅ 官方支持。PI-Desktop 内置 MCP Control 控制面,任何本地 MCP 客户端(包括 Cursor CLI)都能连接并驱动它。
工具层在 PI-Desktop 的 Agent 里反向调用 cursor-agent⚠️ 可行但绕。Agent 有 Bash 工具(受权限门控),可以写个 Skill 让它在需要时跑 cursor-agent -p "..."。代价是双账号双计费、输出质量取决于 CLI 非交互模式,知道有这条路即可,日常不推荐。

控制层是唯一值得认真做的集成,拓扑如下——注意方向:Cursor CLI 是客户端,PI-Desktop 是被控端:

Cursor CLI MCP 客户端 MCP 控制面 Electron Main · 127.0.0.1 同一套 IPC 权限检查仍然权威 PI-Desktop 工作区 项目 · 会话 · Agent 流 HTTP + Bearer 默认关闭 · 仅绑定回环地址 · 不暴露 secret / settings 写通道 Cursor CLI MCP 客户端 MCP 控制面 Electron Main · 127.0.0.1 同一套 IPC 权限检查仍然权威 PI-Desktop 工作区 项目 · 会话 · Agent 工作流

四步接通(以 macOS 为例,Windows / Linux 同理):

第 1 步:带环境变量启动 PI-Desktop。注意坑:open -a 经 launchd 启动,环境变量传不进去,要直接运行可执行文件:

# macOS:直接跑 binary(open 命令传不了 env)
PI_DESKTOP_MCP_CONTROL=1 /Applications/PI-Desktop.app/Contents/MacOS/PI-Desktop &

# Linux(AppImage)
PI_DESKTOP_MCP_CONTROL=1 ./PI-Desktop.AppImage &

# Windows PowerShell(Portable 示例;安装版把路径换成安装目录下的 exe)
$env:PI_DESKTOP_MCP_CONTROL = "1"
& ".\PI-Desktop.exe"

第 2 步:读取连接清单拿 endpoint 和 token。启用后 Electron 会在 user-data 目录生成 mcp-control.json(含回环端点 + 256-bit bearer token,文件权限 0600):

# macOS
cat ~/Library/Application\ Support/PI-Desktop/mcp-control.json
# Linux
cat ~/.config/PI-Desktop/mcp-control.json
# Windows PowerShell
Get-Content "$env:APPDATA\PI-Desktop\mcp-control.json"

文件里的字段名以你机器上实际生成的为准(端点形如 http://127.0.0.1:<端口>/...)。找不到就到应用数据目录里搜 mcp-control.json。

第 3 步:在 Cursor CLI 侧注册这个 MCP server(全局 ~/.cursor/mcp.json 或项目 .cursor/mcp.json):

{
  "mcpServers": {
    "pi-desktop": {
      "url": "http://127.0.0.1:<端口>/<mcp 路径>",
      "headers": { "Authorization": "Bearer <mcp-control.json 里的 token>" }
    }
  }
}

第 4 步:在 Cursor CLI 里遥控。之后 cursor-agent 就能调用控制面暴露的工具,完成建项目、开会话、发 prompt、查状态等操作,例如对它说:「连接 pi-desktop,把 ~/WorkBuddy/Demo 项目加进去,开一个会话让 Agent 先出个重构方案」。Cursor 侧对 Streamable HTTP 型 server 的字段名以 Cursor 当前版本文档为准。

安全红线,务必记住
  • token = 桌面同级权限。拿到它的本地进程等于拿到 PI-Desktop 的操作权——绝不提交进 git,绝不贴给不信任的工具。
  • 仅回环地址。绑定非 loopback 会拒绝启动,没有局域网 / 公网配置项;这个面只适合「同一台机器上的自动化」。
  • confirm: true 是 Agent 自确认,不是用户确认。危险操作和权限模式变更要求调用方显式传它——它不会替你弹窗问一遍,所以遥控指令要写得克制。
  • 敏感通道不暴露:secret 读写、settings 写入、原生文件选择器都不在控制面目录里;重启应用后清单标记 inactive,token 需重新读取。
适合谁用如果你日常主力是 Cursor CLI,这个集成的正确打开方式是:Cursor CLI 当编排者和遥控器,PI-Desktop 当带权限网关、Review 面板和持久会话的执行工作台——两边的模型额度各算各的,互不污染。反方向(会话导入)目前不支持 Cursor:Cursor 的会话不在本地开放格式里,PI-Desktop 只认 Claude Code / Codex / OpenCode / Pi 四家。

11运行边界与成本

官方没有发布性能基准,这里给的是写进 spec 的硬边界——都是设计值,不是实测跑分。

边界项数值说明
Bash 默认超时60 秒有界可调(1–21600 秒);超时和中止都会清理整棵进程树,不留孤儿进程。
命令输出截断96KB / 4000 行stdout / stderr 分开计数,截断处带标记。
权限确认超时120 秒超时即拒绝(fail closed),不是放行。
Plan 审批有效期30 分钟绝对时间过期(PLAN_APPROVAL_TIMEOUT),过期等同拒绝。
首轮工具激活4 个只发 Read / Bash / Edit / Write 的 schema,Glob / Grep 等经 ToolSearch 按需加载——上下文经济设计。
进程数4 个Electron 双进程 + Rust sidecar + Node sidecar,内存占用天然高于单 CLI 工具。

成本结构很简单:模型费用 BYOM 自付,PI-Desktop 没有中继、没有抽成、没有强制账号;本地模型(Ollama / LM Studio)则是零 API 成本换零上传。真正要留心的是 Early Preview 的时间成本——接口和打包行为仍在演进,把它当主力工具前,先在非关键项目上跑一两周。

12FAQ / 踩坑

每一条都给可执行的解法,不给「重启试试」。

macOS 打不开,提示「已损坏」或无法验证开发者
未签名应用的正常现象。执行 xattr -r -d com.apple.quarantine /Applications/PI-Desktop.app 清除隔离标记后重新打开。只从官方 Releases 下载时才建议这么做。
命令跑到 60 秒被掐断,是不是 bug
不是 bug,是 Bash 默认超时。长任务(构建、大测试套件)把超时调大(上限 21600 秒);超时后整棵进程树会被清理,不会留后台孤儿进程继续偷跑。
Plan 模式下 Agent 死活不写文件
设计如此:Plan / Goal 模式下 Write / Edit 在 host 层被硬拒绝,权限 UI 之前就拦下,提示词怎么写都绕不过。要让动手,走审批切换到 Agent 模式。
Plan 审批卡片不见了
审批 30 分钟绝对时间过期,过期等同拒绝。重新让 Agent SubmitPlan 即可;崩溃重载后未决审批会通过 plans.pending 恢复,已终态的不会「复活」。
Windows 上执行命令报 SHELL_NOT_FOUND
内置 Bash 工具依赖 Git for Windows 自带的 bash.exe,安装包不捆绑。装 Git for Windows 后重启应用即可;PowerShell / cmd 任务不受影响。
插件装了没反应
按顺序排查三件事:① 清单 permissions 是否完整(如 agent.extension 缺失会直接拒载);② engines.piDesktop 版本要求是否满足;③ activationEvents 是否配置(如 onCommand:... 对应的命令有没有被触发过)。
MCP Control 连不上 / Cursor CLI 侧报认证失败
最常见三个原因:① 用 open -a 启动导致环境变量没生效——直接跑可执行文件;② 应用重启后连接清单标记 inactive,token 变了——重新读 mcp-control.json;③ 配置的 URL / 头字段写错——端点和 token 都以清单文件为准,Cursor 侧字段名以其文档为准。
会话导入列表里没有 Cursor
目前只支持导入 Claude Code / Codex / OpenCode / Pi 四家本地会话。Cursor 会话存储在自有格式里,不开放本地 transcript。想迁移工作上下文,可以把关键结论写进 AGENTS.md 类的项目说明文件带过去。
模型回复被截断 / 上下文莫名丢失
九成是模型配置里的 Context Window / Max Output 填小了。按 provider 官方标称值补齐;同一 provider 多个模型分别配,Composer 里切换时各用各的配置。
怀疑 mcp-control.json 的 token 泄露了
正常重启应用即可——连接清单会在 shutdown 标记 inactive 并生成新 token。顺手检查:token 文件应为 0600 权限;若曾误提交进 git,除了重启还要清理仓库历史。

13许可与安全边界

两件小事,用之前值得知道。

  • 许可:LGPL-3.0。可以自由使用和分发;对库部分做修改时需遵守 LGPL 的回传条款,集成开发前过一眼仓库 LICENSE。
  • Local-first 的准确含义。项目和会话数据留在本机;模型请求直连你配置的 provider——换句话说,你的代码会以 prompt 形式发给你选择的那家模型服务,但不经过 PI-Desktop 的任何中继(它也没有中继)。合规上等同于直接用该 provider 的 CLI / API。
  • 自动化面只有一扇门。MCP Control 默认关闭、仅回环、不暴露 secret 通道;除此之外没有任何远程控制入口(远程 Agent Control 属于 post-MVP 规划,尚未实现)。

本教程基于 2026-09 的官方 README 与 spec(host 协议 v11 / 存储结构 v16)整理;项目处于早期预览,接口可能变化,落地前以官方文档为准。

PI-Desktop 新手教程 · 基于 vastsa/PI-Desktop 0.14.x 官方文档整理