@jetcrab/pi-desk-workspace
Reusable isolated workspace pool for Pi sessions with a Pi Desk sidebar
Package details
Install @jetcrab/pi-desk-workspace from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@jetcrab/pi-desk-workspace- Package
@jetcrab/pi-desk-workspace- Version
1.1.4- Published
- Oct 20, 2026
- Downloads
- 350/mo · 350/wk
- Author
- jetcrab
- License
- Apache-2.0
- Types
- extension, skill
- Size
- 217.9 KB
- Dependencies
- 3 dependencies · 3 peers
Pi manifest JSON
{
"skills": [
"./dist/skills/workspace-config-authoring",
"./dist/skills/workspace-usage"
],
"extensions": [
"./dist/index.js"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@jetcrab/pi-desk-workspace
为 Pi 会话分配可复用的隔离工作目录,并在 Pi Desk 会话侧栏中查看和管理工作区。项目通过 .pi/workspace.yml 和 Node Handler 定义初始化与项目命令。
官方说明:使用说明
工作区是目录隔离,不是容器或权限沙箱。源码准备方式、依赖安装、端口分配和清理策略由项目 Handler 决定。
安装
在 Pi Desk 中调用管理工具:
{ "args": ["plugins", "install", "@jetcrab/pi-desk-workspace", "--scope", "global"] }
等待安装完成;已有会话需要采用新插件时,再调用 pidesk 的 session reload。独立 Pi 可使用:
pi install npm:@jetcrab/pi-desk-workspace
只有当前项目已受信任、且存在有效的 .pi/workspace.yml 时,插件才向模型注册 workspace 工具。新增或修改配置后需要重载当前会话;Pi 中使用 /reload,Pi Desk 中使用 session reload。
最小示例
在项目中创建 .pi/workspace.yml:
schema: pi.workspace/v3
definitions:
demo:
description: 示例工作区
provision:
description: 准备示例文件
handler: .pi/workspace/prepare.mjs
timeoutSeconds: 30
commands:
reset:
description: 将示例文件恢复为初始内容并释放工作区
from: [occupied]
onSuccess: available
handler: .pi/workspace/prepare.mjs
timeoutSeconds: 30
创建 .pi/workspace/prepare.mjs:
import { writeFile } from 'node:fs/promises'
import { join } from 'node:path'
export default async function run(input, context) {
await writeFile(join(input.workspace.root, 'example.txt'), 'workspace baseline\n', 'utf8')
context.log('示例文件已准备')
return { success: true, summary: '示例基线已准备' }
}
重载后调用 workspace 工具:
{ "action": "acquire", "definition": "demo", "requirement": "示例任务" }
返回 root 和本次占用的 workspaceRef。在返回的目录内操作文件,完成后执行:
{ "action": "run", "command": "reset" }
再次 acquire 相同 definition 和初始化参数时,插件优先复用可用目录。此示例只恢复 example.txt,不会清理其他文件;真实项目应在 Handler 中定义完整的准备与复用基线。
工具调用
所有操作使用同一个 workspace 工具,通过 action 选择行为:
| action | 输入 | 作用 |
|---|---|---|
acquire |
definition、requirement、可选 parameters |
优先复用兼容的可用工作区,否则首次初始化;返回 root 和 workspaceRef,并选为当前工作区 |
info |
可选 workspace |
查询指定或当前工作区,以及项目定义的命令和参数 |
use |
完整 workspaceRef 作为 workspace |
在当前会话选中已有占用;不传 workspace 则只取消当前选择 |
run |
command、可选 workspace 和 parameters |
执行项目声明的命令;默认使用当前工作区 |
list |
无 | 查询当前项目的工作区池 |
requirement 是简短单行任务名,去除首尾空白后非空,最多 20 个 Unicode 字符。已占用工作区必须使用完整 workspaceRef;每次重新分配都会生成新的引用,旧引用失效。
切换工作区不会改变 Pi 会话的 CWD,文件和命令操作应显式使用返回的 root。取消当前选择不会释放工作区;释放由项目命令的状态转换决定。
项目配置与生命周期
物理目录保存在 ~/pi-workspaces/<project-key>/<workspace-id>,项目按本机路径区分。工作区 Root 直接作为项目目录;插件元数据位于其 .pi-workspace/ 子目录中。
available:已准备好,可被分配。occupied:属于本次占用,不进入复用池。- 初始化参数属于复用条件:仅复用同一项目、definition 和初始化参数完全匹配的可用工作区。
provision只在首次创建物理目录时执行;复用前需要恢复的内容由项目的重置命令负责。- 命令通过
from声明允许的起始状态,通过onSuccess选择保持occupied、释放为available或确认removed。
Handler 必须位于项目的 .pi/workspace/ 内,使用 .mjs,默认导出异步函数。context.exec(program, args, { cwd? }) 默认在工作区 root 执行,程序与参数分开传入,非零退出码抛错。Windows 的 .cmd、.bat 通过 cmd.exe 适配,不应依赖 POSIX shell 的管道或变量展开;外部程序需要自行安装。
Handler 返回明确的 { success: true, summary? } 或 { success: false, error }。插件只在执行成功、结果有效、路径与元数据后置校验通过后应用 onSuccess。失败不释放工作区;从 available 执行命令时,会先占用再执行。结果未知时应先检查日志和实际状态,不直接重放操作。
除删除整个工作区的命令外,Handler 必须保留 .pi-workspace/,不得修改其中的 workspace.json。项目的清理和 Git 忽略规则也应保留这份插件元数据。
完整配置和 Handler 合同由随包的 workspace-config-authoring Skill 提供,日常调用见 workspace-usage Skill。源码位于 skills/,npm 包中位于 dist/skills/;配置 Schema 说明位于配置 Skill 的 references/schema.md。
Pi Desk 侧栏
会话侧栏“隔离工作区”支持查看占用与可用工作区、选择当前工作区、执行项目命令、查看活动记录和日志,以及打开来源会话。工作区由模型通过 acquire 获取,侧栏不提供人工创建入口。
重置和删除按命令声明识别,执行前显示影响与确认。重置成功后清除本次占用与记录,目录保留以供复用;来源聊天不会被删除。每次占用最多保存 50 条活动记录,取消当前选择不会清除它们。
支持会话多目录预览的宿主会登记选中工作区的 root,供文件查看器使用;这不会改变 Pi CWD。独立 Pi 使用同一工具与项目配置,不提供 Web 侧栏。
开发
在仓库根目录安装依赖后,构建 SDK 和本插件:
pnpm build:plugin-host-runtime
pnpm --filter @jetcrab/pi-desk-workspace build
pnpm --filter @jetcrab/pi-desk-workspace test
许可证:Apache-2.0。