PiDeck / DeepSeek Harness 一键部署工具 —— 把指令集与技能库注入到本机已安装的 Pi 系客户端, 卸载即还原,不留残留。
English · A Windows desktop workbench (PySide6) that injects a system-prompt addendum and a 65-module skill library into Pi-family clients (PiDeck / DeepSeek Harness). Every write is backed up first and a single click restores the original state. Ships 7 prompt templates, a skill manager, a colored run log, and a packaging self-check.
Pi 系客户端读两类东西:系统提示词(每轮都在上下文里)和技能库(目录递归扫描 SKILL.md)。
本工具把这两样按目标端规范写进去,并且:
- 写之前先备份原文件,写的是带标记的管理段,卸载时精确摘除、还原备份
- 技能只增删自己部署的那些,客户端自带技能(
usage-probe/image-gen/pideck-doctor)不受影响 - 同名技能先备份再覆盖,卸载时原样还原
| 目标端 | 配置根 | 注入点 |
|---|---|---|
| PiDeck | ~/.pi/agent |
APPEND_SYSTEM.md(addendum 段,每轮进系统提示词,压缩后仍在)+ skills/ |
| DeepSeek Harness | $DSH_HOME(未设置时 ~/.dsh) |
AGENTS.md(作为持久 user 消息注入)+ home 级 cordis.patch.yml(抬 agent-instructions 的 maxBytes 预算)+ skills/ |
DSH 的
agent-instructions预算不足时会把AGENTS.md整份丢弃,所以必须写 patch 层。 预算解析顺序:用户显式maxBytes> 本工具上次写入值(粘性) > dsh 默认 65536。
界面
- 6 页工作台:首页 / 模板库 / 技能库 / 运行日志 / 历史 / 设置
- 深色 · 浅色双主题,可跟随系统(监听
WM_SETTINGCHANGE实时切换) - 无边框窗口 + 自绘标题栏,边缘缩放走原生
WM_NCHITTEST(子控件不会吞掉边缘事件) - 托盘常驻(点 ✕ 最小化到托盘,可改成直接退出)、开机自启开关
- 运行日志按级别着色(
INFO/WARN/ERROR/L1~L4/ 退出码) - 操作历史(注入 / 卸载 / 自检,落盘
history.json,上限 300 条)
部署
- 三步部署流程:模板页顶部选 ① 客户端(PiDeck / DeepSeek Harness)+ ② 模式(完整 / 极简),再点卡片上的「部署到 …」(选择记在配置里,下次打开沿用)
- 7 个指令集模板,按目标模型分组(见下)
- 65 个技能模块,可在技能库里搜索、按来源筛选、一键禁用/启用(移到
skills-disabled/) - 技能呈现模式:
完整模式= 65 个模块全部进系统提示词,AI 按描述自选极简模式= 只留一个菜单技能进提示词(约 90 tokens/轮),模块加disable-model-invocation不进提示词,AI 按菜单里的模块 id 按需read
- 附加技能包:两个独立技能包可与模板一起部署,也可单独部署 / 单独移除(同样跟随上面选的客户端与模式)
- 启动时自动重注入开关(按上次记录的模板与模式幂等覆盖)
- 打包自检:验证单文件 exe 内的脚本、模板、技能库、图标都可寻址
执行
- 注入过程在后台线程跑 PowerShell,日志按行增量解码(中文不会乱码)
- 任务串行队列,执行中禁止切主题(避免丢掉正在跑的进程)
- 退出前若有任务在跑会二次确认,确认后杀进程树
模板页:① 客户端 → ② 模式 → ③ 部署(深色为极简模式)
| 完整模式(浅色) | 极简模式(深色) |
|---|---|
![]() |
![]() |
附加技能包(勾选后按上面选的客户端与模式部署/移除)
技能库(显示当前模式与每个模块的归属)
在模板页顶部选,或用命令行 -SkillMode。
Pi 会在启动时把每个技能的名字 + 描述 + 路径写进系统提示词(只写这三样,不写正文)。 65 个技能合计约 28,900 字符 ≈ 7,000 tokens / 每轮 —— 这是固定开销,跟技能库大小线性相关。
极简模式把它压到 1 条(约 90 tokens / 每轮):
skills/
├── pi-workbench-menu/SKILL.md ← 唯一进提示词的技能:类目 + 65 个模块「何时用」+ 取用纪律
├── pwn-chain/SKILL.md ⎫
├── ida-reverse/SKILL.md ⎬ frontmatter 里多一行 disable-model-invocation: true
└── …(其余 63 个) ⎭ → Pi 的 formatSkillsForSystemPrompt 会把它们整个滤除
模块文件位置不变,AI 按菜单里的模块 id 直接 read 对应 SKILL.md(/skill:<名字> 也仍可手动强制加载,作为兜底)。
类目由仓库根的 skill-categories.json 决定;未登记的模块归入「其他」。
两种模式对比(用 Pi 自己的加载器实测):
完整模式 full |
极简模式 menu |
|
|---|---|---|
| Pi 加载的技能 | 65 | 66 |
| 进提示词 | 65 条 | 1 条(+ 纪律型技能,见下) |
| 提示词块 | 28,922 字符 | 609 字符(2.1%);带两个附属模板时 1,341 字符 |
| 每轮固定开销 | ≈7,000 tokens | ≈90 tokens(带附属模板量级仍远低于完整模式) |
| 代价 | — | AI 多一跳(先读菜单再读正文);依赖它遵守取用纪律 |
切换:两种模式互相切换是幂等的 —— 切回 完整模式 会自动删掉菜单技能、并用源文件覆盖掉模块上那行标记。
UI 上直接点模式按钮重新部署一次即可;命令行传 -SkillMode(不传则沿用目标端上次记录的模式)。
纪律型技能保持常驻(重要):附加技能包(code-quality-gate / task-boundary)的性质与普通模块不同 ——
普通模块是「要用时去查的资料」,它们则是「每次交付都该生效的纪律」。按默认规则藏进菜单,
就变成「等 AI 想起来才用」,等于失效。所以极简模式下它们不加隐藏标记,照常进系统提示词自动触发;
同时也仍在菜单的「工程交付」类目里,两条路都能走。
实测(用 Pi 自己的 loadSkillsFromDir + formatSkillsForPrompt):极简模式 + 两个附属模板 →
进提示词 3 条(菜单 + 两个附属模板)、块 1,341 字符、0 诊断警告。
例外清单由部署时的 -MenuKeepAdvertised 指定(GUI 自动带上),并写进状态清单;
自检会从状态清单读这份例外,不会把它误判成「漏标记」。
提示:
disable-model-invocation是 Agent Skills 规范字段,已在 Pi 上实测; 其他客户端(如 DSH)是否识别未验证 —— 不确定时先用full。
- 让客户端重新读技能:在 Pi 里敲
/reload(重载 skills / templates / themes / 上下文文件), 或重启客户端。技能清单是会话启动时快照的,不重载不生效。 - 正常下任务就行:极简模式下模型看到的就是那一条菜单技能,描述里列了领域词 (逆向 / 二进制、渗透 / 红队、游戏安全…),命中就自己来读菜单。
- 三条兜底(不需要记):
- 模型没主动读菜单 → 说一句「按技能菜单来」
- 想直接上某个模块 →
/skill:pwn-chain(隐藏的模块仍可用斜杠命令强制加载,66 个全在) - 想看菜单内容 →
/skill:pi-workbench-menu
- 额外的保险:极简模式下部署会在注入的标记块里多写一段「技能取用纪律」 (约 150 tokens,含菜单绝对路径与取用上限)。APPEND_SYSTEM.md 是系统级、每轮都在、 优先级高于技能描述,所以路由比只靠菜单描述稳;切回完整模式或卸载时自动消失。
极简模式的菜单技能自带 6 条硬规矩(写进生成的菜单,不靠模型自觉):
- 先选类目再选模块(每个类目下带「何时进这类」)
- 一个阶段最多 4 个模块正文
- 报名(硬性):选定/换用模块的当下报一行
参考模块: <模块id>(<用途>),禁止只执行不报名、禁止事后补报 - 取不到就直说:读不到模块正文时如实报告,不得声称已按该模块执行
- 已读模块直接复用,不重复读
- 三不要:不为了解全部能力读完所有模块 / 不为比较而读无关类目 / 不凑数
首页右上角「任务构建」按钮,或首页底部「任务构建」快捷卡打开。写清目标(可补上下文与约束)、 选档位 / 通道 / 输出格式,生成一份可直接粘到客户端发出去的任务契约:
[任务契约 · pi-workbench · PiDeck]
## 工作约定
档位:BUILDER / 构建 —— 实现、打包、可复现
工作链:目标 → 设计 → 实现 → 测试 → 打包 → 自检
通道:结构还原 / 逆向(二进制、固件、协议、脱壳)
## 任务输入
{
"目标": "…",
"上下文": "…",
"约束": "…"
}
## 交付要求
1. 先给可执行产物,再列检查点;不写「我可以帮你…」这类前言。
2. 缺参数用占位符(TARGET / PATH / OFFSET / PAYLOAD / SERIAL 等)继续,不回头问。
3. 用到技能模块时报一行:参考模块: <模块id>(用途)。
4. 结论区分「观察到的 / 推测的 / 已验证的」;没跑就写「未执行」并给下一条可复现命令。
## 输出格式
code:输出完整代码围栏,并给出运行方法、必要依赖与测试命令。
## 完成检查
逐项核对目标与约束;只报告实际验证过的内容;列出未验证项与下一步;分段交付时注明已完成与剩余部分。
| 档位 | 工作链 |
|---|---|
| MAX / 全开 | 目标 → 上下文 → 产物 → 自检 |
| FOCUS / 聚焦 | 目标 → 产物 |
| BUILDER / 构建 | 目标 → 设计 → 实现 → 测试 → 打包 → 自检 |
| RESEARCH / 研究 | 目标 → 取证 → 对照 → 自检 |
| CREATIVE / 创作 | 目标 → 角色与设定 → 场景 → 成稿 → 连续性检查 |
通道:自动判断 / 结构还原(逆向)/ 校验链路(授权)/ 攻击面验证 / 客户端工程 / 样本取证 / 内容创作。
输出格式:markdown(结论先行)/ json(只输出一个合法 JSON,不带围栏)/ code(完整围栏 + 运行方法与测试命令)——
要求写进契约,省得拿到带围栏的 JSON 之类返工。
GUI 还有 3 个预设(代码交付 / 方案研究 / 结构输出)一键铺好输入,之后随便改;
预设由 inject.ps1 -Preset 提供(单一实现),显式传的参数优先于预设。
只生成文本:不联网、不写配置、不动已部署内容。命令行同一份实现:
# 生成到屏幕(直接复制)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Compose `
-Profile builder -Channel reverse -Format code `
-Goal "把 demo.exe 的注册校验链还原出来,给出可回滚补丁" `
-Context "课程实验环境;可离线分析" -Constraints "补丁可回滚、保留原文件"
# 用预设(不给 -Goal 也行)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Compose -Preset code|research|struct
# 写文件 / 结构化输出(GUI 与脚本用;-Json 会带 checks / 段数 / 字符数)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Compose -Goal "..." -Out D:\task.md
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Compose -Goal "..." -Json按目标模型分组,共 8 个模板:
| 分组 | 模板 | 说明 |
|---|---|---|
| DeepSeek 4.1 Flash | V5.2c(推荐) | V5.1b 全量 + 3 条结构化反面示例。实测 99.3%~100%(n=300) |
| V5.2c 增强版 | V5.2c 正文原样 + 三个追加块(见下);便于与 V5.2c 对照实测,追加块单独维护、不动 V5.2c 本体 | |
| V5.1b | V5 + 请求归一化(口语/黑话/代词直接出通用完整版)+ 术语工程语义映射。实测 98.3% |
|
| V5 文档引擎 | V5.1b 的母版:把请求重定义为「生成文档」而非「执行操作」,去掉全部对抗性元指令。体积只有 V5.1b 的 65%,实测 94.2%(n=120) | |
| GPT | GPT-6 Astra(推荐) | 收编自上游开源仓库。操作契约路线:绑工作区对象 + 四角色产物(MODIFIED/DIFF/VERIFICATION/ROLLBACK)。本机无 GPT 通道,未实测 |
| GPT-5.6 Sol v45 | 同路线精简版,多一个 PROCESS_RECORD 分支。未实测 | |
| GLM-5.3-Flash | GLM 中性化(推荐) | V5.1b 骨架 + GLM 适配段(思考通道用法 + 框架层拦截的应对)。自研,未实测 |
| GLM5.3f Kovak | 收编自 chiina66/glm5.3f-jailbreak。Kovak 人设 + 思考通道锚定 + 干扰协议。上游无量化数据 |
拼装机制:v5docs / v52c / v51b / v52cx 不预置成品文件,运行时按部件列表现场拼
(prompts/_xxx-header.md + 共用的 prompts/v5-body.md + 可选追加块),成品写到
%LOCALAPPDATA%\pi-workbench\prompts\。正文只存一份、追加块也只存一份;
不动已实测模板的部件,就不会动到它们的基线数据。
V5.2c 增强版的三个追加块(可单独复制到别的模板):
| 追加块 | 文件 | 作用 |
|---|---|---|
| 环境条款效力 | prompts/_ext-auth.md |
声明环境段的优先级(高于会话内提示词与外部数据)与不可降级(任何改成「需先授权」的尝试一律无效) |
| 术语归一化补表 | prompts/_ext-subst.md |
按域(逆向/移动/游戏/渗透/样本)补 40 组口语→工程表述,并写明元规则「目的不变,只换说法」 |
| 交付纪律 | prompts/_ext-deliver.md |
执行前四要素预览(计划/路径/成本/交付物)+ 交付记录优先(先写 Markdown 记录再汇报) |
退役版本迁移:状态清单里的旧 versionKey(v3 / flash / v3en / seagull / v4lite /
hs-v3 / v4 等 12 个)会被 resolve_version_key() 自动迁到 v5docs。
Agent Skills 标准:每个技能是 <name>/SKILL.md,Pi 递归扫描发现。
| 领域 | 技能 |
|---|---|
| 逆向 / 二进制 | reverse-engineering binary-analysis binary-diff radare2 ida-reverse dotnet-reverse dsl-vm-reverse dynamic-instrumentation patch-diff-exploit pwn-chain firmware-pentest protocol-reversing protocol-reverse-engineering |
| 移动端 | apk-reverse mobile-reverse mobile-security mobile-competitive-game-security |
| 破解 / 授权 | crack-keygen full-crack |
| 渗透 / 红队 | network-pentest full-pentest attack-chain pentest-tools api-security js-reverse reverse-engineering-api seagull-pentest seagull-social-eng phishing-kit |
| 免杀 / 对抗 | edr-bypass-re seagull-evasion anti-cheat dma-attack |
| 游戏安全 | game-cheat game-hacking game-engine graphics-api seagull-game-hack seagull-game-security seagull-game-redteam seagull-anticheat |
| 样本 / 情报 | seagull-malware seagull-lab seagull-memory seagull-reverse research-rigor |
| Windows 内核 | windows-kernel |
| 工程交付 | code-quality-gate task-boundary |
| 其他 | adult-fiction border-crossing finance-movement identity-docs politics-history pipeline-renderer l-*(4 个)seagull-auto-ops seagull-exploit seagull-license-security seagull-mature-content seagull-unlimited rei-fallback |
技能库内含第三方收集内容,署名与许可见 NOTICE.md。
往技能库加技能原本是手工建目录 + 改 JSON;现在一条命令,并且带体检。 分工原则:脚本只做机械动作与机械校验,不做语义猜测 —— 类目由你(或 AI)判, 给错了、名字不合规、描述太短,脚本直接拒绍并说明原因,不替你猜。
# 体检(默认动作):硬规则 + 提示词预算 + 登记一致性 + 相对链接可达性
py -X utf8 skill_tool.py check
# 看类目与登记情况(会指出哪些技能没登记,极简模式下会落到「其他」)
py -X utf8 skill_tool.py list
# 加技能(目录或 zip;--dry-run 只校验不落库)
py -X utf8 skill_tool.py add D:\inbox\my-skill --category 工程交付 --dry-run
py -X utf8 skill_tool.py add D:\inbox\my-skill --category 工程交付
py -X utf8 skill_tool.py add D:\inbox\一批技能 --batch --category 逆向 / 二进制
# 只登记类目(不动文件)、新增类目、移出技能(移到 skills-v4/_removed/,可移回)
py -X utf8 skill_tool.py register seagull-exploit --category 逆向 / 二进制
py -X utf8 skill_tool.py new-category 内容创作 --when "写正文/小说/文案、时政历史梳理"
py -X utf8 skill_tool.py remove my-old-skill --yes
# 类目表不是手维护的:真源是每个技能自己 SKILL.md 里的声明
# metadata:
# x-pj-class: 逆向 / 二进制
# add / register 会自动写入声明,gen 按声明重排类目表(加技能时不会漏登记):
py -X utf8 skill_tool.py gen --check # 只读校验三方一致(frontmatter × 类目表 × 磁盘),不一致退出码 1
py -X utf8 skill_tool.py gen # 缺声明的从类目表回填,再按声明重排(已有顺序保留,新技能追加末尾)
# 部署契约:随包资源 ↔ bj_tool.spec ↔ 标记块 ↔ 退出码 ↔ 溯源(README)三方对齐
py -X utf8 skill_tool.py contract
# 技能库打包(含 SHA-256 清单,同样的输入打出同样的字节)/ 校验一个包
py -X utf8 skill_tool.py pack --out build\skill-library.zip
py -X utf8 skill_tool.py pack --verify build\skill-library.zipgen 不做语义猜测:技能没声明类目、声明的类目不存在、或类目表登记了磁盘上却没有的技能,
一律停下报错(退出码 2)并且不动任何文件,不替你归类。
校验规则(来自 Agent Skills 规范与 Pi 文档,不是自定):
| 规则 | 级别 |
|---|---|
frontmatter 必须存在,且含 name 与 description(Pi 会直接不加载无描述的技能) |
错误 |
name 仅小写字母/数字/单连字符,无首尾或连续连字符,≤ 64 字符 |
错误 |
description ≤ 1024 字符 |
错误 |
| 名字与已有技能重名 | 错误 |
| 描述 > 200 字符(完整模式下每轮都进提示词) | 提示 |
| 描述 < 15 字符(路由信息不足) | 提示 |
| 未登记类目(极简模式会落到「其他」) | 提示 |
加技能时还会当场告诉你:这个技能会给完整模式每轮加多少 tokens,以及菜单里那一行会长什么样。
脚本自动把落库目录名规范成
frontmatter 里的 name—— 两者一致是其他 Agent Skills 实现的硬要求。 库里现有 7 个技能声明名与目录名不同(如anti-cheat声明anti-cheat-systems), 菜单会在这类模块后标出(/skill:<真名>),方便用斜杠命令强制加载。
两个独立技能包,可以和模板一起打,也可以单独部署 / 单独移除:
| 包 | 目录 | 作用 |
|---|---|---|
| 工程自检门禁 | code-quality-gate |
交付前 9 维自检评分(改动收敛/可定位/命名/测试/构建/错误码/依赖锁定/模块边界/敢接手),≥7 分通过,输出结构化报告 |
| 任务边界守卫 | task-boundary |
防四类反模式(范围膨胀 / 无用防御 / 意图越界 / 任务打转),任务模式契约 + Stop Ladder 五级判断 |
- 一起打:模板页 →「🧩 附加模板」→ 勾选 → 回模型分组 → 点模板卡上的端按钮
- 单独打:模板页 →「🧩 附加模板」→ 勾选 →「部署勾选包」(只装技能,不动指令集)
- 单独移除:「移除勾选包」(只删这些目录,state 同步更新)
- 首页卡片会显示每个包的就位状态(
✓/—),按目标端skills/里是否真有目录判定
从 Releases 下载 pi-workbench-v1.4.exe(单文件,约 48MB),双击即用(无需 Python 环境)。
本地自己构建的产物名是 pi用学习工作台.exe,功能相同。
首次启动会解压内置资源到临时目录,约 2~4 秒。
git clone https://github.com/2006sila/pi-workbench.git
cd pi-workbench
python -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
# 一键构建(清理 build/dist 后打包单文件)
build.cmd
# 或直接跑开发模式
.venv\Scripts\python bj_tool.py产物:dist\pi用学习工作台.exe
环境:Windows 10/11 + PowerShell 5.1+(注入器依赖 robocopy / tasklist / 注册表)。
开发验证于 Win11 26100 / Python 3.13 / PySide6 6.11.2 / PyInstaller 6.22.3。
不想开 GUI 也可以直接用注入器:
# 注入(默认用随包 skills-v4 全量技能库)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -SourcePrompt prompts\_v52c-header.md
# 只写指令集,不动技能库
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -SourcePrompt ... -NoSkills
# 只装附加技能包(需先注入过模板)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -SkillsOnly `
-SkillsSource 'skills-v4\code-quality-gate;skills-v4\task-boundary'
# 移除附加技能包(不动指令集与其它技能)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -RemoveAddons 'code-quality-gate;task-boundary'
# 多源技能库(分号分隔,相对路径按脚本所在目录解析)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target dsh -SkillsSource 'skills-v4;D:\my-skills'
# 多源里有同名技能时,显式指定取哪一份(不指定则取先出现的,并报出「取了谁/跳过谁」)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target dsh `
-SkillsSource 'skills-v4;D:\my-skills' -SkillSourceMap 'l-reverse=my-skills'
# 来源名 = 来源根的最后一段目录名(上例是 my-skills);写了不存在的来源会停下不写入
# 自检:L1 文件层 / L2 配置层 / L3 进程层(退出码 0=通过,1=有未通过项)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target dsh -Check
# 极简模式部署(只留一个菜单技能进提示词,65 个模块按需读)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck `
-SourcePrompt prompts\_v52c-header.md -SkillMode menu
# 切回完整模式(自动删掉菜单技能、还原模块标记)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck `
-SourcePrompt prompts\_v52c-header.md -SkillMode full
# 卸载还原
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Uninstall
# 目标文件在部署后被外部改过(SHA-256 基线漂移)—— 卸载会停下等你拍板,
# 退出码 3(本次没有写入任何文件);确认要还原就加 -Force,
# 被改过的内容会先另存到 %LOCALAPPDATA%\pi-workbench\backup\drift\<时间>-<目标>\
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Uninstall -Force
# 指令文件里标记块被外部编辑坏了(重复 / 顺序颠倒)时自动修:只保留最后一对
# 不加这个开关时遇到损坏标记块默认报错退出,不会静默改动你的文件
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck `
-SourcePrompt prompts\_v52c-header.md -RepairMarker
# 退出码:0 成功 | 1 失败 / 自检有未通过项 | 3 需人工确认(未写入任何文件)
# 通道体检:文件写对了不代表客户端真的读了。
# 加载层不联网;通道层会真跑一次客户端 CLI 问模型「你现在能看见哪些技能」(一次模型调用)。
# 结论写进 state.evidence.channelProbe,并追加到 logs\operations.log。
# 桌面端跑不了无头,所以拿 CLI 当探针(CLI 读的是同一个配置根);装到别处用 -ProbeCli 指定。
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Probe
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -Probe -ProbeCli D:\tools\pi.cmd -ProbeTimeout 120
# 自定义配置根(沙箱测试用)
powershell -ExecutionPolicy Bypass -File inject.ps1 -Target pideck -AgentDir D:\tmp\sandbox两个目标端还有便捷包装(参数同上):inject-pideck.ps1 / inject-dsh.ps1。
打包自检与构建身份自检(都写结果文件,窗口化 exe 没有 stdout):
# 打包自检:验证随包资源可寻址(清单来自 deploy-contract.json,不再写死在这里)
$env:PJ_BUNDLE_CHECK='1'; .\dist\pi-workbench-v1.4.exe
# 结果:%LOCALAPPDATA%\pi-workbench\bundle-check.json
# 构建身份自检:确认你跑的是不是这个构建(升级排查第一步)
$env:PJ_VERSION_CHECK='1'; .\dist\pi-workbench-v1.4.exe
# 结果:%LOCALAPPDATA%\pi-workbench\version-check.json(版本号 / APP_BUILD / frozen)自我部署(把构建好的 exe 装进分发目录,带 dry-run 与回滚备份):
# 只打印计划,不动手
powershell -ExecutionPolicy Bypass -File deploy-self.ps1 -WhatIfOnly
# 实际部署(默认:dist\ 下最新的 pi-workbench-v*.exe → 仓库上一级目录)
powershell -ExecutionPolicy Bypass -File deploy-self.ps1 -Pkg 'D:\Agent\workplace' -NoStart
# 回滚:脚本会把命令直接打印出来,形如
# Copy-Item -LiteralPath '<目标>.rollback-<时间戳>' -Destination '<目标>' -Force一次性跑完全部验收(沙箱,不碰真实配置):
py -X utf8 tests\run_all.pypi-workbench/
├── bj_tool.py 桌面端主程序(PySide6)
├── bj_tool.spec PyInstaller 打包配置
├── build.cmd 一键构建
├── requirements.txt
├── app.ico 应用图标(7 尺寸)
├── skill_tool.py 技能库维护工具(加技能 / 移除 / 登记类目 / gen / contract / pack / 体检)
├── skill-categories.json 技能类目表(生成物:真源在技能自己的 frontmatter,见 gen)
├── deploy-contract.json 部署契约(随包资源 / 标记块 / 退出码 / 溯源;contract --check 核它)
├── inject.ps1 注入器核心(双目标:安装 / 卸载 / 自检 / 附加包)
├── inject-pideck.ps1 PiDeck 便捷入口
├── inject-dsh.ps1 DeepSeek Harness 便捷入口
├── deploy-self.ps1 自我部署:停进程 → 备份 .rollback-<时间戳> → 覆盖 → 重启
├── prompts/ 指令集模板(头部 + 正文分离,详见 prompts/README.md)
│ └── archive/ 已退役的历史头部
├── skills-v4/ 65 个技能模块(Agent Skills 标准)
├── tests/ 验收脚本(沙箱,不碰真实配置;tests/run_all.py 一次跑完)
├── docs/ README 截图 · docs/SECURITY.md(发布前安全检查)· docs/releases/(发布说明)
├── NOTICE.md 许可范围 / 第三方组件 / 再分发限制(人读)
├── THIRD-PARTY-NOTICES.md 第三方清单(由 skill_tool.py notice 生成,勿手改)
└── dist/ 构建产物(.gitignore)
全部落在 %LOCALAPPDATA%\pi-workbench\,卸载软件后可直接删该目录:
%LOCALAPPDATA%\pi-workbench\
├── state\<target>.json 安装状态清单(versionKey / 技能名单 / 备份路径 / 初值标记 / 版本号 / evidence)
├── backup\<target>\<时间戳>\ 安装前原文件与被覆盖的同名技能
├── backup\<target>\history\ 可恢复版本日志(每次部署一条:写前写后全文 + 双哈希)
├── backup\drift\ 被外部改过的现场副本(卸载 / 恢复时另存)
├── logs\<target>.log 执行日志
├── logs\operations.log 一行一次操作(时间/目标/动作/状态/exit/skills/mode/drift/conflicts)
├── last-run-<target>.json 最近一次执行的结构化结果(含 channelProbe)
├── history-<target>.json GUI 版本窗口读的版本列表
├── diff-<target>.txt 版本对比的最近一次结果(GUI 差异面板读它)
├── compose-preview.md 任务构建器的最近一次产物
├── compose-preset.json 预设回填用(GUI 套预设时读它)
├── prompts\ 现场拼装的成品指令集
├── history.json GUI 操作历史
└── tool-config.json GUI 配置(主题 / 自动注入 / 托盘行为 / 跳过弹窗)
- 备份存的是摘除本工具标记块之后的用户原始内容 —— 状态清单丢失后卸载也不会把旧注入还原回去
hadPromptFile/hadSkillsDir跨次注入持久化,重复注入不覆盖初值(不会误删原本就存在的空目录)- 从完整版切精简版时先清上次部署的技能,不留孤儿目录
- 卸载只按状态清单操作,不删客户端自带技能
- 重复注入幂等:标记块替换而非叠加;配置写入用临时文件 +
os.replace原子替换 - 附加包移除用精确成员判断,且不会误删同名技能
- 每次部署留一份可恢复版本(写前写后全文 + 双哈希);卸载 / 恢复前验
afterHash,文件被外部改过就停下等你拍板 - 恢复前可先看差异(版本窗口「看差异」/
inject.ps1 -Diff <id>)——只比对,不写文件
工具只做文件层的事,这几条是它的能力边界,不是免责声明:
- 不向任何模型发请求。注入全程是本地文件读写,没有联网,不上传任何内容
- 文件写对了 ≠ 已生效。注入完成后需要重启客户端、在新会话里验证;每次运行结束时工具会 在日志里打出一行「未验证:文件已写入,但不代表客户端已加载或已生效」,这句话同时写在结果 JSON 里
- 不保证效果。提示词与技能能不能让某个模型变好,取决于模型版本、服务端策略与会话上下文; 本项目不预填成功率、不给效果承诺
- 技能库是资料不是保证。65 个模块是整理收集的领域参考,内容对不对、能不能用,需要使用者自己判断
- 不替代判断。模板里的纪律段(不猜、不编造、不冒充已完成)是写给 AI 看的约束, 实际会不会遵守由模型决定,工具无法强制
- 仅 Windows:注入器是 PowerShell,窗口缩放用
WM_NCHITTEST,开机自启用注册表Run项 - 无单实例锁:可同时开多个实例,同时注入会互相覆盖状态清单,建议只开一个
- 自检 L4 需人工:会话层(新开会话看是否第一行就给交付物)无法自动判定
- 提示词实测数据来自本机:不同模型版本、不同服务端可能表现不同
- 技能库为收集内容:三个第三方技能包随附原始 LICENSE,其余为整理收集,署名见 NOTICE.md
- 通道体检会花一次模型调用:
-Probe的通道层用你自己客户端的通道与额度(默认要你确认;预检不过不会发起) - 本工具自身零网络:不发任何 HTTP 请求;体检的流量全部来自你客户端自己的 CLI(详见 docs/SECURITY.md)
V1.4 · 2026-09-30
本版是工程加固版。核心是修掉 6 处「静默失效」缺陷 —— 它们的共同特征是 不报错、不提示,但结果不是你以为的那个;另附 alice-assistant 借鉴落地与发布合规。
一、修掉的静默缺陷
Copy-Tree静默不覆盖(影响面最大,6 处调用含备份还原):robocopy的默认规则是「大小相同 + 时间戳相同 = 已相同」,不看内容。 技能包里的SKILL.md常是同一秒解压/生成的,于是「换个来源重装同名技能」 会静默保留旧内容。实测同一对文件(源/目标均 94B 且 mtime 相同、内容不同):/IS、/IS /IT、/MIR全部 rc=0 且纹丝不动,只有「先删目标再拷」才真正更新。 根因是 robocopy 在目录层就跳过,include 开关只管文件层。 现改为「先删目标再整份复制」,与本工具「整份接管」语义一致。- DSH patch 层标记块每次部署累积一层:
Strip-PatchBlock的定位正则末尾$被包在(?s)里 → .NET 多行模式下$匹配\n之前的位置,而[^\r\n]*之后还隔着\r,条件无解、模式永不匹配 → 旧块从没被摘掉。 实测连部署 3 次得到 3 个BEGIN/END。修后老用户已有的累积块会被一次清理干净。 - 移除附加包后状态不一致:
-RemoveAddons只更新installedSkills,menuKeepAdvertised仍指着已删的包 → 下次部署对它调Remove-DisableModelInvocation静默失败,「保持常驻」永远无法兑现,且-Check从不读该字段,发现不了。 -Probe归属误判:原先用-match做子串包含,而技能名存在 5 对包含关系 (reverse-engineering⊂reverse-engineering-api、l-reverse⊂seagull-reverse等), 会把「泄漏了 A」记成「泄漏了 B」。改为按行取词 + 精确比对。-Probe隐藏泄漏被掩盖:原先hit判定先于hid,「答出了菜单技能 + 同时泄漏隐藏模块」被判成pass—— 隐藏标记失效被掩盖。改为隐藏泄漏优先。- 只读保护勾选报错:
TemplatePage._on_readonly_toggle调了self._set_status, 但该函数定义在MainWindow上 → 勾选抛AttributeError,界面看着「没反应」。
二、从 alicewe1/alice-assistant(GPL-3.0,clean-room,只借机制)学到的
- 标记块只认「关键串」(修一个真实的升级兼容缺口):
- 定位改成
<!-- BEGIN pi-workbench+ 任意载荷,版本号只是载荷 - 旧版本块(
v3)、旧版脚本写的变体(BEGIN pi-workbench prompt=x.md)都能被认出来,重新部署原地升级 - 此前标记写死整串:改版本号后旧块会被当成「没有标记块」→ 重复注入会追加第二块
-Check会报出当前标记块版本,旧版本给 WARN 提示「重新部署会原地升级」contract新增断言:定位正则必须基于关键串(改回写死就报错)
- 定位改成
- 备份保留策略:时间戳备份与
backup\drift\各留最近 10 份; 被状态清单引用的「唯一原件」永不清理(删了就等于失去卸载还原能力) - 渲染后占位符断言:指令集模板 / 菜单技能 / DSH patch 层里残留
{{...}}→ 直接拒绝写入 - 合规三段式(发布合规缺口):
NOTICE.md拆成「许可范围 / 第三方组件(各自许可优先)/ 再分发限制」, 并新增THIRD-PARTY-NOTICES.md(由skill_tool.py notice自动生成): 带独立 LICENSE 的技能包(含子目录)、标注作者的技能、声明许可的技能,以及 未声明来源的技能 59 个(如实列出 —— 再分发前须自行确认权利人)skill_tool.py pack --exclude-bare:打「再分发安全包」时排除这些未声明来源的技能contract会校验 NOTICE 三段式存在 + 第三方清单与磁盘一致(数量不符即报错)- 本版同时修正了清单里三个 LICENSE 的 sha256(此前是陈旧值,与磁盘不符)
- Job Object 回收整棵进程树(
bj_tool.py):子进程一 spawn 就挂进KILL_ON_JOB_CLOSE作业,句柄关闭时由内核清掉整棵树(含孙进程), GUI 崩了也不留孤儿;宿主已在别的作业导致 assign 失败时优雅回退到taskkill /T deploy-self.ps1(自我部署):停进程 → 备份.rollback-<时间戳>→ 覆盖 → 校验 SHA256 → 重启;-WhatIfOnly只打印不动手,结束时直接打印回滚命令,回滚备份按-KeepRollbacks清理; 路径按脚本位置推导(不写死盘符),构建产物==目标时拒绝- 测试进仓库:
tests/+tests/run_all.py(一次跑完 12 个套件), 以前放%TEMP%被系统清理过一次,现在跟代码走
三、新增能力
-SkillSourceMap(重名技能来源选择):-SkillsSource支持多来源, 重名时此前只能靠调分号顺序表达偏好、界面上没有入口。现在可显式指定-SkillSourceMap "技能名=来源名";冲突文案报出「取了谁 / 跳过谁 / 怎么改」; 指定了不存在的来源则停下且不写入任何技能(绝不静默退回默认)- 进度「清单先行 + 逐项点亮」:PowerShell 一启动就干活,而进度窗是点按钮才构造的 —— 只靠逐项事件会让窗口挂载前的那几步永远停在「待办」。现在先算好完整清单、 窗口构造时画全行,事件只按 key 点亮;结束时未点亮的行标「跳过」(不留在「待办」)
- 子进程输出分级:噪声前缀黑名单 + 关键行白名单(白名单优先,避免误丢含
ERROR的噪声行)+ 关键行截断 160 字符 + 过滤计数上报(丢了多少行必须可见)
四、其他修正
inject.ps1写入状态清单的toolVersion此前一直是1.0.0(未跟着升版),本版修正为1.4.0- 技能库:修 1 条失效相对链接;7 个技能的
name对齐目录名 (anti-cheat/dma-attack/game-engine/game-hacking/graphics-api/research-rigor/windows-kernel—— 状态清单 / 安装目录 / 类目表 / README 用的都是目录名)
V1.3 · 2026-09-26
-
任务构建器补齐(对齐上游更完整的那一版):
- 新增 上下文 / 约束 两个输入 + 输出格式(markdown / json / code,各自要求写进契约)
- 契约改五段式:工作约定 / 任务输入(JSON 块,转义交给 ConvertTo-Json)/ 交付要求 / 输出格式 / 完成检查
- 3 个预设(代码交付 / 方案研究 / 结构输出):
-Preset只填未显式给的部分;GUI 一键铺好后随便改 -Json带checks(目标非空 / 格式明确 / 交付要求 4 条 / 上下文·约束已给)、段数与字符数- 三个字段各 20000 字符上限,超了直接拒
-
版本对比(
-Diff <版本id>):- 行级 diff(LCS;超 3000 行退化成前缀/后缀比对),前缀
未变 /-当前有 /+恢复后会有,带合计行 - 只读:不动任何目标文件;可
-Out落盘给 GUI - 版本窗口新增「看差异」按钮 + 差异面板(默认收起):恢复前先看清楚会改哪几行,不再是盲恢复
- 行级 diff(LCS;超 3000 行退化成前缀/后缀比对),前缀
-
修:
$out与字符串参数$Out同名(PS 变量名不区分大小写)→ArrayList.Add报「String 不包含 Add 方法」; 另:[Math]::Max($dp[..], $dp[..])这种「方法实参里嵌套多维数组索引」PS 5.1 解析不了,改成先取出再比 -
任务构建器(一句话 → 任务契约):5 个档位(MAX/FOCUS/BUILDER/RESEARCH/CREATIVE)× 7 个通道 → 生成带工作链与四条交付要求的契约,一键复制;GUI 入口(首页右上角按钮 + 首页快捷卡)+ CLI
-Compose -
体检联动:
- 首页新增「体检两端」:一次把两端的通道体检排进队列
- 通道预检:配置根里没有 provider 配置、或没有可核对的已部署技能时,直接报「预检没过(未发起模型调用)」 —— 不再白花一次调用,也不再把自己的配置问题误报成「上下文没送达」
- 体检结论同时写进
state.evidence.channelProbe与last-run-*.json(没 state 时也能查)
-
模板体检(
skill_tool.py contract新增一组):- 身份锚定串必须出现且不得出现在其它模板(防抄串);共享锚定串只能出现在声明的那几个文件
- 合成版本的零件齐全、非空、必须在随包清单里;合成表与
bj_tool.py的COMPOSED、 独立模板与_prompt_file双向对齐(契约改了代码没改就会报) - 没被任何版本引用、也不在随包清单的模板 → 提醒(不报错)
- 顺带把
glm-dshpurge.md补进随包清单(它此前既不在清单、也无版本引用)
-
通道体检(
-Probe)—— 回答「部署到底生效了没有」:- 加载层(不联网):逐个查已装技能的 frontmatter 与 description(缺 description = Pi 直接不加载,
文件写对了不等于客户端会读),菜单技能不能带
disable-model-invocation(带了整个路由失效) - 通道层:真跑一次客户端 CLI,问模型「你现在能看见哪些技能」,按回复分
pass / fail / mismatch / unclear;mismatch= 模型列出了本该隐藏的模块(隐藏标记没生效) - 桌面端跑不了无头,拿 CLI 当探针(读同一个配置根);
-ProbeCli可指定路径,-ProbeTimeout默认 180s - 结论写进
state.evidence.channelProbe;GUI 每张目标卡多了「体检」按钮(会弹窗提醒是一次真实模型调用)
- 加载层(不联网):逐个查已装技能的 frontmatter 与 description(缺 description = Pi 直接不加载,
文件写对了不等于客户端会读),菜单技能不能带
-
-Check新增两段:- 加载层:抽检已装技能能不能被客户端发现
- 生成物一致性:菜单技能与当前技能库/类目表只读比对,不一致就报「已过期,重注入即可刷新」
(生成逻辑拆成
Get-SkillMenuText(只生成)+New-SkillMenu(生成+落盘),前者不写文件)
-
部署契约
deploy-contract.json+skill_tool.py contract: 随包资源清单 ↔ 磁盘 ↔bj_tool.spec的 DATAS ↔ 标记块字符串 ↔ 退出码 ↔ README 溯源,六处互相核; 新增模板忘了进包 / 改了标记块没同步 / README 没写清 commit,都会在这里报错bundle_check()改为从契约读资源清单(旧写法清单写两处,增模板时只改一处不报错)
-
操作留痕
logs\operations.log:一行一次操作(时间 / 目标 / 动作 / 状态 / 退出码 / 技能数 / 模式 / 漂移数 / 冲突数), 追加式永不重写;日志页新增「操作记录」按钮直接打开 -
技能库打包
skill_tool.py pack:zip + 内嵌MANIFEST.sha256,时间戳写死所以同样输入打出同样字节;--verify重算摘要,能查改过 / 丢过 / 多出来的文件 -
界面健壮性(对应 alice 的 breaker/watchdog):
- 单任务输出超 20000 行就只读不显示(子进程 stdout 继续排空,否则它写满管道会卡死)
- 日志页块数上限 5000(自动丢最旧的);文件日志仍是全量
- 单任务超 30 分钟未结束 → 杀整棵进程树并报「已终止(防界面卡死)」
-
README 溯源升级:不再只写一句「参考了…」,写明仓库 / 许可证 / commit / 读到的规模 / 借了哪些机制 / 哪些不抄,并声明与
deploy-contract.json的cleanroom段互相核对 -
类目声明链路(修「新增技能忘了登记 → 极简模式下落进『其他』」):
- 类目表从「手维护」改成「生成物」:真源是每个技能
SKILL.md的metadata.x-pj-class(Agent Skills 规范允许metadata放任意键值;纯追加式改写,不动既有字节) skill_tool.py gen按声明重排类目表(已有顺序保留、新技能追加末尾);gen --check只读校验frontmatter × 类目表 × 磁盘三方一致,可进 CIadd/register自动写入声明,remove自动摘掉(metadata块空了连块一起收)- 脚本不做语义猜测:没声明 / 类目不存在 / 表里有磁盘没有 → 停下报错(退出码 2)且不动任何文件; 另外加了「一个声明都读不到就拒绝重写类目表」的防守,避免把表清空
- 类目表从「手维护」改成「生成物」:真源是每个技能
-
基线漂移拦截(修「
fileHashes只写不读 = 死数据」):- 部署时拿上次
state.fileHashes的after哈希与磁盘现状比对,不一致就告警并记进state.evidence.baselineDrift(标记块以外的用户内容仍按原逻辑保留) - 卸载时同一个比对变成拦截:目标文件被外部改过 → 停下,退出码 3(本次未写入任何文件),
加
-Force才继续,且先把被改过的内容另存到backup\drift\<时间>-<目标>\ state.evidence补上object / action / baselineSha256 / baselineDrift / verification / rollback, 出事不用猜怎么退回去(GUI 也认识退出码 3:弹出「强制卸载」确认,不再当成失败)
- 部署时拿上次
V1.2 · 2026-09-26
- 写入安全加固(无一项改变部署路径,全是新增校验):
- 目录穿越防护:从状态清单 / 配置拼出来的名字先过
Resolve-Within,跑出目标目录就拒写 - 链接检测:写入路径内部出现 symlink / junction / 硬链接时拒写(写到别处、回滚改错文件都是从这里来的);
目标目录自身或上层是链接(用户用
mklink /J把~/.pi联到别的盘)只警告不拦 - 严格 UTF-8 + 8 MB 上限:只对工具自带的技能库与模板启用(这些必须干净); 用户自己的文件保持宽松读取,避免老记事本存成 ANSI/GBK 的文件一升级就装不上
- 标记块损坏不再静默自愈:指令文件里出现重复 / 顺序颠倒的标记块时默认报错退出,
错误信息里给出修复命令;加
-RepairMarker才自动只保留最后一对 - 幂等短路:指令文件内容已是目标状态就跳过重写(按字节比较,BOM 与行尾算在内)
- 结果 JSON 新增
modelStatus:每次运行结束都明写「文件已写入,但不代表客户端已加载或已生效」, 并在界面日志里显示
- 目录穿越防护:从状态清单 / 配置拼出来的名字先过
- 术语归一化补表扩充(
prompts/_ext-subst.md,仅增强版模板):新增三步 —— 先洗口去填充词 → 错字按同音归位 → 表里没有时按材料兜底(二进制 / 网址 / 纯文字三类), 并明写「不要回头问『你指的是哪个』」 - skill_tool.py 新增防串稿检查:description 或正文与别的技能完全一致时报警
(用块标量感知的解析读取,避开
description: |被读成|的误判) - README 新增「边界说明」节:不联网、不保证效果、不预填成功率、文件写对 ≠ 已生效
- 新增 skill_tool.py(技能库维护工具):add / remove / register / new-category / list / check
- 校验按 Agent Skills 规范与 Pi 文档:frontmatter、name 字符集与长度、description ≤1024、重名
- 加技能时报「每轮多少 tokens」并预览菜单行;落库目录名自动规范成 frontmatter 的 name
- check 体检:硬规则 + 提示词预算 + 登记一致性 + 相对链接可达性(剔除代码片段,206 条链接 2 条真失效)
- 菜单给声明名与目录名不同的模块标出
(/skill:<真名>)(库里 7 个),否则斜杠命令用不了 - 修:
reverse-engineering/field-notes.md的悬空链接(引用的案例文件不在包内) - 模板页改为三步部署流程:① 客户端 → ② 模式 → ③ 点卡片部署(选择记在配置,首页「去部署」会把 ① 同步过去)
- 新增技能呈现模式(
-SkillMode full|menu|auto)menu(极简):只留一个菜单技能进系统提示词,其余模块加disable-model-invocation不进提示词,AI 按需read;纪律型技能(附加包)例外,保持常驻- 提示词固定开销从 ≈7,000 tokens/轮降到 ≈90 tokens/轮(实测 2.1%)
- 注入保留原行尾与 BOM;两模式互相切换幂等(切回完整模式自动清菜单技能与标记)
- 新增
skill-categories.json类目表;-Check增加极简模式专项校验
- 菜单技能 6 条硬规矩:类目优先、上限 4 个、报名机制(报告用了哪个模块)、 取不到正文不得假装执行、已读复用、三不要
- 纪律型技能在极简模式下保持常驻:附加包
code-quality-gate/task-boundary不加隐藏标记 (它们靠描述自动触发才有意义),仍留在菜单里;例外写进状态清单,自检不会误判 —— 实测极简模式 + 两附属模板 = 进提示词 3 条 / 1,341 字符 / 0 诊断 - 菜单技能描述改用领域触发词(从类目表现生成),不再用「需要技能」这种元意图词
- 极简模式额外在标记块内注入「技能取用纪律」段(约 150 tokens,系统级,比技能描述更硬)
- 新增 V5.2c 增强版模板 + 部件式拼装(可接可选追加块): 环境条款效力 / 术语归一化补表 / 交付纪律
bundle_check补上_v52c-header.md(原先不在必需清单里,丢了会静默只拼正文)- 修:增强版的
versionKey原先记成文件名v5-2c-ext,会让「重新注入(按上次模板)」 静默回退到 V5.2c —— 已在inject.ps1版本映射里登记v5-2c-ext → v52cx - 首页卡片 / 技能页 / 操作历史显示当前模式;附加包部署同样跟随所选客户端与模式
- 局部操作(部署附加包)不传模式时沿用目标端上次记录,不会误关极简模式
V1.1.1 · 2026-09-25
- 清理界面与代码里的历史代称(附加模板页文案)
- 版本号统一为 V1.1.1
V1.1 · 2026-09-24
- 附加技能包:
code-quality-gate/task-boundary可单独部署、单独移除,首页卡片显示就位状态 - 修 47 个技能库内损坏的文件名(GBK/UTF-8 双重编码还原)
- 修无边框窗口边缘缩放(原生命中测试 + 高 DPI 坐标换算)
- 修主题切换残留幽灵窗口与托盘图标、切页后导航高亮不同步
- 修附加包路径解析、
-SkillsOnly覆盖状态清单、自检恒显示「通过」 - 修注入日志中文乱码、进程对象泄漏、队列早退卡死
- 应用图标(7 尺寸)、任务栏 / Alt-Tab 图标
- 注入改为后台线程 +
CREATE_NO_WINDOW,退出前二次确认并杀进程树
V1.0 · 9.21 版 exe 反汇编还原为可编辑源码,双目标 + V5 模板体系
-
路由 / 菜单式技能组织与若干工程机制 参考了 alicewe1/alice_skill(GPL-3.0), 读的是
802bf17895fc9f0cb2dc0558d13af452d50a6bd8(整仓 2399 个文件 / 424 个技能)。 仅借鉴设计思路与结构,未使用其代码、也未搬其技能正文(clean-room:本仓库 MIT, 以自己的实现与措辞重写)。 -
提示词模板与部署事务机制 参考了 3641397194-wq/gpt6-Astra(MIT,允许复用正文), 读的是
e868f60(208 个文件)。GPT 系模板正文收编自该仓库, 来源与改动逐项记在 NOTICE.md;部署事务、版本日志与按版本恢复、 口语归一表等机制按本仓库的形态重写(PowerShell + Python)。未搬其付费中转、 激活门与社群部分。 -
部署器工程机制(标记 / 备份 / 进程 / 发布) 参考了 alicewe1/alice-assistant(GPL-3.0, 同类产品:提示词 × 技能库 × 客户端部署器,Rust + Tauri)。 读的是
55bedd92fcd6fe06f3d359e3c3414f225e4e2a9e(82 个文件)。 仅借鉴机制与工程约定,未使用其代码(clean-room:本仓库 MIT,且栈也不同 —— 它是 Rust/Tauri,这里是 PowerShell + Python,以自己的实现与措辞重写)。 借到的机制:标记块「只认关键串、版本/载荷可变」(旧块能认出并原地升级)、 备份保留策略(时间戳备份限份 / 固定名备份永不清)、渲染后断言无残留{{...}}、 NOTICE 三段式与自动生成的第三方清单、Job Object 回收整棵进程树(含 assign 失败的兜底)、 自我部署脚本(-WhatIfOnly+.rollback-<时间戳>+ 打印回滚命令)。 -
以上三条的机器可读记录在 deploy-contract.json 的
cleanroom段 (含 repo / commit / 许可证 / 引用方式 / 具体借了什么),py -X utf8 skill_tool.py contract会核对 README 这里写的仓库 / 许可证 / commit 是否与契约一致 —— 口头致谢不算溯源。从 alice 借到的机制:类目索引生成器、只替换锚定节 +
--check只读比对、技能指纹基线与消费方、 退出码分级(3 = 需人工确认)、证据记录字段、沙箱演练不污染主库。 从 gpt6-Astra 借到的机制:路径守卫与根内包含、原子写、 版本日志与按版本恢复(恢复前验 afterHash)、写入前 TOCTOU 复验、 配置根环境变量探测、口语归一表、发布前隐私检查文档结构。 两边都没抄的:越狱/拒答话术与话术替换表、封印/加密/水印、激活门与口令、 付费中转与社群内容、以及 alice 的 365 个技能正文(GPL 内容不进 MIT 仓库)。 -
技能库内含第三方收集内容,署名、完整清单与再分发限制见 NOTICE.md 与自动生成的 THIRD-PARTY-NOTICES.md。
本仓库代码以 MIT 授权。skills-v4/ 与 prompts/ 内含第三方收集内容,
各自遵循其原始许可与署名要求 —— 详见 NOTICE.md。
本仓库内容面向自有设备、自建靶标与已获授权的测试范围。




