agent-purge 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CONTRIBUTING.md +64 -0
  2. package/LICENSE +21 -21
  3. package/README.md +176 -118
  4. package/backends/index.mjs +204 -244
  5. package/bench/bench-armor.mjs +844 -832
  6. package/bench/capture-hot.mjs +58 -0
  7. package/bench/capture-provider.mjs +66 -0
  8. package/bench/capture-report.mjs +15 -0
  9. package/bench/capture-server-hot.mjs +55 -0
  10. package/bench/capture-system.mjs +36 -0
  11. package/bench/judge-armor.mjs +119 -119
  12. package/bin/agent-purge.mjs +906 -772
  13. package/docs/LEGAL.md +27 -0
  14. package/docs/architecture.md +39 -0
  15. package/docs/compatibility.md +78 -0
  16. package/docs/images/console-desktop.png +0 -0
  17. package/docs/images/console-mobile.png +0 -0
  18. package/docs/releasing.md +87 -0
  19. package/docs/usage.md +158 -0
  20. package/lib/activation.mjs +38 -0
  21. package/lib/apply.mjs +227 -0
  22. package/lib/armed.mjs +38 -38
  23. package/lib/armor.mjs +225 -222
  24. package/lib/caps.mjs +182 -173
  25. package/lib/capture.mjs +324 -0
  26. package/lib/clean.mjs +124 -0
  27. package/lib/control.mjs +60 -0
  28. package/lib/detect.mjs +74 -70
  29. package/lib/doctor.mjs +7 -7
  30. package/lib/dsh.mjs +495 -453
  31. package/lib/environment.mjs +36 -0
  32. package/lib/evidence.mjs +41 -0
  33. package/lib/extension.mjs +140 -0
  34. package/lib/footprints.mjs +59 -0
  35. package/lib/home.mjs +47 -47
  36. package/lib/launch-conflicts.mjs +24 -0
  37. package/lib/launch.mjs +57 -0
  38. package/lib/opencode.mjs +62 -0
  39. package/lib/paths.mjs +25 -0
  40. package/lib/persist.mjs +439 -280
  41. package/lib/personas.mjs +17 -7
  42. package/lib/private-server.mjs +54 -0
  43. package/lib/project.mjs +134 -0
  44. package/lib/restore.mjs +131 -114
  45. package/lib/rewrite.mjs +124 -0
  46. package/lib/root.mjs +37 -0
  47. package/lib/shim.mjs +203 -160
  48. package/lib/slashes.mjs +227 -628
  49. package/lib/spawn.mjs +182 -126
  50. package/lib/state.mjs +85 -137
  51. package/lib/templates/personas/neutral.md +30 -30
  52. package/lib/update.mjs +137 -0
  53. package/lib/verification.mjs +23 -0
  54. package/lib/window.mjs +58 -0
  55. package/lib/wrappers.mjs +49 -0
  56. package/magpie-plugin/README.md +44 -0
  57. package/matrix.json +325 -341
  58. package/package.json +30 -4
  59. package/web/app.js +525 -0
  60. package/web/assets/agent-purge.ico +0 -0
  61. package/web/assets/claude.ico +0 -0
  62. package/web/assets/codebuddy.png +0 -0
  63. package/web/assets/codex.webp +0 -0
  64. package/web/assets/dsh.ico +0 -0
  65. package/web/assets/grok.ico +0 -0
  66. package/web/assets/hermes.ico +0 -0
  67. package/web/assets/omp.png +0 -0
  68. package/web/assets/opencode.ico +0 -0
  69. package/web/assets/opencode2.ico +0 -0
  70. package/web/assets/pi.png +0 -0
  71. package/web/assets/zcode.png +0 -0
  72. package/web/model.mjs +49 -0
  73. package/web/server.mjs +309 -194
  74. package/web/styles.css +917 -0
  75. package/web/ui.html +64 -1163
@@ -0,0 +1,64 @@
1
+ # 参与开发
2
+
3
+ 感谢帮助维护 agent-purge。提交前请用最小可复现步骤说明问题,并为行为修改添加回归测试。
4
+
5
+ ## 本地开发
6
+
7
+ ```bash
8
+ npm ci --ignore-scripts
9
+ npm run check:repo
10
+ npm test
11
+ npm run web
12
+ ```
13
+
14
+ 运行要求为 Node.js 20+,生产代码不依赖第三方 npm 包。Playwright 和 axe 仅用于开发测试。
15
+
16
+ ## 仓库结构
17
+
18
+ ```text
19
+ bin/ CLI 入口
20
+ lib/ 状态、通道、恢复、进程和验证服务
21
+ backends/ 各执行器的启动适配
22
+ web/ 原生 HTML / CSS / JavaScript 控制台
23
+ magpie-plugin/ 可选网关插件
24
+ bench/ 请求捕获和 CLI armor 使用的评测工具
25
+ test/ 隔离回归、插件与浏览器测试
26
+ scripts/ 构建、发行包验收和仓库检查
27
+ packaging/ Windows 安装脚本与启动器源码
28
+ docs/ 用户指南、兼容性、架构和发布说明
29
+ ```
30
+
31
+ `bench/` 并非无用测试产物:`agent-purge verify` 和 `armor` 依赖其中的模块,需随运行包保留。测试源码与临时测试结果是不同的东西。
32
+
33
+ ## 测试命令
34
+
35
+ | 命令 | 范围 |
36
+ |---|---|
37
+ | `npm run check:repo` | Git 可提交文件、私有/生成文件排除、文档链接、发行白名单 |
38
+ | `npm test` | 核心逻辑、文件恢复、执行器适配、Web API 和插件回归 |
39
+ | `npm run test:package` | 实际 npm tarball 离线安装、CLI/Web 资源 |
40
+ | `npm run test:ui` | 三浏览器、四种宽度、键盘与自动无障碍检查 |
41
+ | `npm run test:harness` | 实际宿主请求捕获;需要本机安装相应宿主 |
42
+ | `npm run test:artifacts` | Windows ZIP 和独立 EXE 验收 |
43
+
44
+ 浏览器首次测试先执行:
45
+
46
+ ```bash
47
+ npx playwright install chromium firefox webkit
48
+ npm run test:ui
49
+ ```
50
+
51
+ Windows 可用已有 Edge:`$env:PLAYWRIGHT_CHANNEL='msedge'; npm run test:ui -- --project=chromium`。
52
+
53
+ 核心测试使用临时 HOME,不应读写真实人设、宿主配置或凭据。真实宿主测试默认使用本地测试 provider;它不是完整的操作系统网络沙箱。不要为通过测试而删除失败项或把模拟回调写成实机通过。
54
+
55
+ ## 提交规范
56
+
57
+ - 保留 `package-lock.json`,开发依赖变化必须同步更新。
58
+ - 新测试放进 `test/`,浏览器测试放进 `test/browser/`;不要把一次性调试脚本散落在根目录。
59
+ - 测试输出、原始请求、开发日志归 `out/`;构建产物归 `dist/`。两者不进入 Git 或 npm。
60
+ - `.pi/`、`.opencode/`、个人 `personas/`、`state.json` 和 `.env` 均为本地数据;不要用 `git add -f` 强制提交。
61
+ - `docs/images/` 只保留当前产品截图;图标仅保留代码实际使用的版本。
62
+ - 提交前检查 `git status --short` 与 `git diff --check`,勿直接提交所有本地文件。
63
+
64
+ CI 会运行仓库检查与测试,但不会代替代码审查或自动发布。[架构约定](docs/architecture.md) · [发布流程](docs/releasing.md)
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 ZiChuanLan
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ZiChuanLan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,198 +1,256 @@
1
+ <div align="center">
2
+
1
3
  # agent-purge
2
4
 
5
+ **一份人设,统一管理多个 coding agent。**
6
+
3
7
  [![npm](https://img.shields.io/npm/v/agent-purge)](https://www.npmjs.com/package/agent-purge)
4
8
  [![stars](https://img.shields.io/github/stars/ZiChuanLan/agent-purge)](https://github.com/ZiChuanLan/agent-purge/stargazers)
5
9
  [![license](https://img.shields.io/npm/l/agent-purge)](LICENSE)
6
10
 
7
- 一份系统提示词,喂给多个 coding agent。支持替换(replace)、只发人设(strict)、追加(append)、清空(off)四种模式,可热切换,全程可逆。
11
+ <p>
12
+ <a href="https://trendshift.io/repositories/321425?utm_source=trendshift-badge&amp;utm_medium=badge&amp;utm_campaign=badge-trendshift-321425" target="_blank" rel="noopener noreferrer">
13
+ <img src="https://trendshift.io/api/badge/trendshift/repositories/321425/daily?language=JavaScript" alt="ZiChuanLan/agent-purge | Trendshift" width="250" height="55"/>
14
+ </a>
15
+ </p>
8
16
 
9
- ```
10
- agent-purge web # 本地控制台 http://127.0.0.1:7788
11
- agent-purge codex # 用当前 persona 启动 codex
12
- agent-purge pi --ask "…" # 一次性提问
13
- ```
17
+ [快速开始](#快速开始) · [人设与模式](#人设与模式) · [应用范围](#应用范围) · [支持情况](#支持情况) · [暂停与卸载](#暂停与卸载) · [免责与合规声明](#免责与合规声明)
14
18
 
15
- ## 它做什么
19
+ </div>
16
20
 
17
- 每家 coding agent 读系统提示词的位置都不一样:有的认启动参数,有的认配置文件,有的只能靠插件改运行时对象。agent-purge 把这些入口统一成三件事:
21
+ agent-purge 是一个本地提示词配置工具,为 Codex、Claude Code、OpenCode、pi 等执行器提供统一的人设管理入口。你可以在 Web 控制台中配置,也可以直接通过命令行启动;不同执行器仍保留自己的工具、模型和工作流程。
18
22
 
19
- | 通道 | 机制 | 生效范围 |
20
- |---|---|---|
21
- | `install` | 写入该 harness 的托管配置块(Markdown / hooks / 插件) | 常驻,别人启动也生效 |
22
- | `shim` | 往 PATH 前置同名小壳,转发给 `agent-purge <h>` | 裸敲命令也接管 |
23
- | `slash` | 会话内 `/purge on\|off\|status` | 热切换,不动磁盘 |
23
+ ## 核心能力
24
+
25
+ - **一份配置,多种入口**:CLI 与 Web 共用人设和状态,支持单次启动、常驻配置、会话扩展与项目规则。
26
+ - **按执行器独立设置**:默认跟随全局,也能为某个执行器单独选择人设或模式。
27
+ - **支持热切,也说明边界**:具备每轮回调的动态通道可在下一轮读取变更;静态入口需要新会话。
28
+ - **变更可追溯、可撤销**:记录托管写入和恢复依据;外部修改会保留,恢复冲突明确报错。
29
+ - **本地优先、零生产依赖**:不需要额外云端配置服务,人设与程序分开保存,升级不覆盖用户数据。
24
30
 
25
- 三层都写的是同一份 `personas/<id>.md` 的正文。`--mode off` 或 Web 总开关关掉时,全部撤回到原样——不留残渣。
31
+ ## 快速开始
26
32
 
27
- ## 安装
33
+ 需要 **Node.js 20+**,并先安装你要使用的 coding agent。
28
34
 
29
35
  ```bash
30
- npm i -g agent-purge # 或 npx agent-purge web
36
+ npm install -g agent-purge
37
+ agent-purge web
31
38
  ```
32
39
 
33
- 要求 Node ≥ 20,零依赖。
40
+ 也可以直接使用 `npx agent-purge web`,不进行全局安装。
34
41
 
35
- **用 magpie 网关?** 插件不在 npm 包里,在仓库的 `magpie-plugin/` 子目录——不要指向仓库根(根 `package.json` 是 CLI,只有 `bin`,magpie 会拒绝):
42
+ 1. 在「人设库」编辑起步模板,或新建自己的人设。
43
+ 2. 回到「控制台」选择人设和模式,保存设置,再开启需要管理的执行器。
44
+ 3. 按执行器详情中的提示,新建会话或重新加载插件。
36
45
 
37
- ```bash
38
- magpie plugin add /path/to/agent-purge/magpie-plugin
39
- ```
46
+ 控制台默认地址为 `http://127.0.0.1:7788`。首次打开不会自动接管所有执行器;默认启动项与应用范围分别配置。
47
+
48
+ ![agent-purge 控制台](docs/images/console-desktop.png)
40
49
 
41
- 首次使用先跑一次 `agent-purge web`(打开 http://127.0.0.1:7788 的控制台,先看/选一个人设;不想开界面就用 `agent-purge ls`),它会生成 `~/.agent-purge/personas/`;再跑 `node magpie-plugin/gen-personas.mjs` 生成 Persona 页的人设清单。
50
+ [查看窄屏布局](docs/images/console-mobile.png)
42
51
 
43
- 详见下文「magpie 网关插件(可选)」。
52
+ <details>
53
+ <summary>其他安装方式:Windows 安装器、便携包与无桌面环境</summary>
54
+
55
+ | 形式 | 运行要求 | 适用场景 |
56
+ |---|---|---|
57
+ | npm | Node.js 20+ | 用 npm 安装与升级 |
58
+ | `agent-purge-<版本>-setup.exe` | Windows,外部 Node.js 20+ | 图形安装和卸载 |
59
+ | `agent-purge-<版本>.zip` | Windows,外部 Node.js 20+ | 解压后使用 |
60
+ | `agent-purge.exe` | Windows x64,自带运行时 | 无需另装 Node 的独立便携版 |
44
61
 
45
- **数据独立存放**,升级不会被覆盖:默认 `~/.agent-purge/`(Windows `C:\Users\<你>\.agent-purge\`),里面是 `state.json` 和 `personas/`。想换位置就设环境变量:
62
+ 下载附件以实际 [GitHub Releases](https://github.com/ZiChuanLan/agent-purge/releases) 为准;未发布的版本没有附件。请核对 SHA-256 和签名状态,未签名程序可能出现系统提示。ZIP 中的 EXE 是薄启动器,不是自带运行时的独立版。
63
+
64
+ SSH / WSL 等无桌面环境使用 `agent-purge web --no-open`。Web 仅监听本机;Linux/macOS 使用 npm 或源码入口,不能运行 Windows EXE。平台验证范围见[兼容性说明](docs/compatibility.md)。
65
+
66
+ </details>
67
+
68
+ ## 人设与模式
69
+
70
+ 人设正文决定要提供给执行器的提示词;名称和说明只用于管理。首次运行会生成 `neutral` 起步模板,你可以在 Web 中直接编辑,也可以创建自己的 Markdown 文件。
46
71
 
47
72
  ```bash
48
- export AGENT_PURGE_HOME=/path/to/your/data # Windows: setx AGENT_PURGE_HOME D:\ap-data
73
+ agent-purge ls # 查看人设
74
+ agent-purge use <id> # 切换并同步已选范围
75
+ agent-purge mode append # 修改全局模式
76
+ agent-purge use <id> --for codex # 只给 Codex 指定人设
77
+ agent-purge use follow --for codex # 恢复跟随全局
49
78
  ```
50
79
 
51
- 旧版本(0.1.x)把数据放在包目录里,首次运行会自动搬到新家,原文件不动。
80
+ ### 四种处理模式
81
+
82
+ | 模式 | 行为 | 注意 |
83
+ |---|---|---|
84
+ | `replace`(默认) | 优先替换宿主身份行,尽量保留其他说明 | 身份识别是近似处理;无法读取宿主文本的启动入口按 strict 执行 |
85
+ | `strict` | 用人设替换可控入口中的宿主文本 | 该入口原有说明也会移除;宿主仍可能添加额外文本 |
86
+ | `append` | 保留宿主说明,另加一份人设 | 不替换原身份,需注意规则冲突 |
87
+ | `off` | 停止相应入口注入 | 全局暂停与单次启动参数的作用范围不同 |
52
88
 
53
- ## 人设
89
+ **strict 不等于“模型只收到人设”。** 实际角色可能是 `system`、`developer` 或项目上下文,取决于宿主和通道。希望保留宿主说明时,可先试 `append`。
54
90
 
55
- `personas/<id>.md` = frontmatter + 正文。正文就是会被写进系统提示词的那一段。
91
+ <details>
92
+ <summary>手写人设示例与存储位置</summary>
56
93
 
57
- frontmatter 用 `description` 写「说明」(Web 列表和 `agent-purge ls` 显示的就是它);旧的 `desc` 仍然认,不会报错。可选 `order`(排序)、`harness` / `model`(匹配用)。Web 里只改名字和说明时会保留 frontmatter 的其它键,不整段重写。
94
+ 将以下内容保存为 `~/.agent-purge/personas/concise.md`,然后执行 `agent-purge use concise`:
58
95
 
59
- ```bash
60
- agent-purge ls # 列出全部 persona,标出当前匹配的
61
- agent-purge use <id> # 切换当前 persona
62
- agent-purge pi --persona <id> # 只这一轮用别的
96
+ ```markdown
97
+ ---
98
+ id: concise
99
+ name: 简洁协作
100
+ description: 中文、先结论、修改前先读代码
101
+ ---
102
+
103
+ 用简体中文协作。先给结论,再给依据。
104
+ 修改代码前先阅读现有实现;不确定时明确说明。
63
105
  ```
64
106
 
65
- 首次运行会在 `personas/` 下生成 `neutral.md` 起步模板。
107
+ 只有正文进入提示词。`description` 用于列表说明,旧键 `desc` 仍兼容;Web 编辑会保留未涉及的元数据。高级匹配、排序与数据目录配置见[使用指南](docs/usage.md#人设文件)。
66
108
 
67
- ## 支持情况
109
+ 也可参考维护者的 [some-magic 人设仓库](https://github.com/ZiChuanLan/some-magic)。
68
110
 
69
- 每个数字都是实测值:本地假 provider 抓真实请求体,不是估算。
111
+ </details>
70
112
 
71
- | harness | 机制 | 实测版本 | 默认 system | 注入后 |
72
- |---|---|---|---|---|
73
- | `codex` | 启动参数 `-c model_instructions_file=` | 0.163.0 | 21,026 | 24 |
74
- | `claude` | `--system-prompt-file` + 二进制补丁清残留身份句 | 2.1.304 | 6,379 | 156 |
75
- | `grok` | `--system-prompt-override` | 1.0.62 | 5,146 | 21 |
76
- | `omp` | 原生扩展:`before_agent_start` 改写 systemPrompt 数组,会话内 `/purge` 热切;`--ask` 仍走 `--system-prompt` | 17.4.2 | 34,511 | 10,106 |
77
- | `hermes` | 临时 HOME 里替换 `SOUL.md` | 0.21.5 | 8,139 | 7,554 |
78
- | `zcode` | UserPromptSubmit hook(user 角色)+ `customSystemPrompt` | 0.16.9 | 9,359 | 9,359 |
79
- | `opencode` | cwd 下 `.opencode/plugin/*.ts` 原地改 `output.system` | 1.19.3 | 19,332 | 112 |
80
- | `opencode2` | `plugins/agent-purge-v2.ts` 的 `ctx.session.hook("context")` | 0.0.0-beta-17823 | 8,279 | 3,189 |
81
- | `dsh` | cordis 插件(三个 profile 各一份) | 0.2.1-rc.2 | 5,713 | 68 |
82
- | `pi` | 原生扩展,会话内 `/purge` | — | — | — |
83
- | `antigravity` | 等长替换二进制里的身份句 | 1.23.x | ≈20,498 | — |
84
- | `codebuddy` | `--system-prompt-file` | 2.171.0 | — | — |
85
- | `qoder` / `workbuddy` | 不支持(提示词在服务端) | — | — | — |
113
+ ## 应用范围
86
114
 
87
- `opencode` 和 `opencode2` 是两个不同的 npm 包(`opencode-ai` 1.x 与 `@opencode/cli` 2.x),插件接口完全不同,各自独立支持。
115
+ 只想临时使用,可以通过 agent-purge 启动一次,不必登记常驻通道:
88
116
 
89
- `agent-purge ls` 和 Web 控制台显示的是**运行期真值**:每个 harness 有没有装、版本、注入层(SYS / USER)、三个通道各自可用性。`matrix.json` 里是静态能力表,两者冲突时以运行期为准。
117
+ ```bash
118
+ agent-purge codex --mode append
119
+ agent-purge pi --ask "解释这段代码"
120
+ agent-purge codex -- --help # -- 后的参数交给宿主
121
+ ```
90
122
 
91
- 闭源桌面端(提示词在服务端或二进制里)只做原样启动,不做任何注入——`agent-purge <h>` 会明确打印原因,不会假装生效。
123
+ 要让其他启动入口也读取配置,再按需选择以下通道:
92
124
 
93
- ### 常驻安装(install)
125
+ | 通道 | 做什么 | 生效时机 |
126
+ |---|---|---|
127
+ | `install` | 写入宿主的托管配置或插件 | 静态配置需新会话;已加载动态插件下一轮读取 |
128
+ | `shim` | 通过 PATH 中的同名命令转发启动 | 下一次从该命令启动 |
129
+ | `slash` | 安装会话内 `/purge` 扩展 | 取决于宿主扩展和启用状态 |
130
+ | `project` | 写入指定目录的项目规则文件 | 对应目录的新会话 |
94
131
 
95
132
  ```bash
96
- agent-purge install <h> # 写进该 harness 自己的托管位置,别人启动也生效
97
- agent-purge uninstall <h> # 摘掉,按字节还原
133
+ agent-purge install codex
134
+ agent-purge arm pi --slash
135
+ agent-purge project on pi --dir /path/to/project
136
+ agent-purge status
98
137
  ```
99
138
 
100
- dsh 是唯一有多个形态的:desktop / web / headless 共用一套 cordis 插件,装在各自 profile 的 `node_modules/agent-purge/`,并在 `cordis.patch.yml` 里 `- insert` 挂上,不改 `app.asar`。装完重启一次,之后热生效;三个形态还能在 Web 面板分别勾选。
139
+ `arm <h>` 会尝试开启该执行器可用的常驻、命令和 slash 通道,结果逐项报告;项目通道需单独选择。同一人设经多个入口提供时可能重复,建议只开启需要的范围。
101
140
 
102
- ## magpie 网关插件(可选)
141
+ **使用 magpie 网关?** 可选插件位于 `magpie-plugin/`,不是仓库根目录。安装方法和网关改写边界见 [magpie 插件说明](magpie-plugin/README.md)。
103
142
 
104
- [magpie](https://github.com/yetone/magpie) 把各家 agent 的请求收进本地网关。挂上这个插件后,**凡是经过网关的请求**(Claude Code、Codex、OpenCode、pi…)的 system 段都按 agent-purge 的当前人设改写——不用逐个 harness 装,换人设也不用重启 magpie。
143
+ ## 支持情况
105
144
 
106
- 插件在仓库里,不进 npm 包(`files` 白名单),所以按路径装:
145
+ 以下为 **2026-11-01 的请求级验证范围**,不是对所有版本的兼容承诺。
146
+
147
+ | 执行器 | 已验证版本 | 同会话热切 |
148
+ |---|---|---|
149
+ | pi / omp | 1.4.0 / 18.14.1 | 已验证(动态扩展) |
150
+ | OpenCode 1.x / 2.x | 1.19.5 / 2.2.5 | 已验证 |
151
+ | DSH | 0.2.1-rc.5 | 已验证(SDK 同会话;headless/web/desktop 三形态四模式已抓) |
152
+ | Codex / Claude Code | 0.166.0 / 2.1.316 | 启动入口已验证;热切未验证 |
153
+ | CodeBuddy / Grok | 2.179.0 / 1.0.73 | 启动入口已验证;热切未验证 |
154
+
155
+ 首次安装或更新插件代码后,仍需重新加载宿主。**配置写入、历史测试通过、当前会话实际生效,是不同状态。**
156
+
157
+ Windows 与 WSL/Linux 已执行回归,macOS 尚待实机验证。Hermes、zcode、antigravity 未计为本轮通过。请求角色、宿主残留、浏览器覆盖与已知安装问题统一记录在[兼容性与限制](docs/compatibility.md),不以模型自称身份作为验收依据。
158
+
159
+ ## 暂停与卸载
160
+
161
+ | 目的 | 命令 | 用户人设 |
162
+ |---|---|---|
163
+ | 临时暂停 / 恢复原范围 | `agent-purge pause` / `agent-purge resume` | 保留 |
164
+ | 仅撤销一家常驻配置 | `agent-purge uninstall dsh` | 保留,其他通道不变 |
165
+ | 撤销一家全部已选通道 | `agent-purge disarm dsh` | 保留 |
166
+ | 撤销所有登记的接管 | `agent-purge clean` | 保留 |
167
+
168
+ 卸载 npm 程序时,先撤销接管,再移除程序:
107
169
 
108
170
  ```bash
109
- git clone https://github.com/ZiChuanLan/agent-purge
110
- magpie plugin add /path/to/agent-purge/magpie-plugin # 按路径装
111
- magpie plugin options magpie-plugin '{"mode":"append"}' # 插件名 = 目录名
112
- magpie plugin list # 应看到 async gateway hook + Persona 页
171
+ agent-purge clean
172
+ npm uninstall -g agent-purge
113
173
  ```
114
174
 
115
- 插件读的还是 `~/.agent-purge/`(同样认 `AGENT_PURGE_HOME`):`agent-purge use <id>` 之后下一个请求就换人设。magpie 里也会多出 **Persona** 页,点一下就把人设和模式写进插件的 options。
175
+ Windows 安装器卸载也会先撤销接管并保留人设。发生恢复冲突时,保留报错指出的文件和凭据,先比较修改再处理;不要直接删除备份。历史会话中已经发送的内容无法撤回。
116
176
 
117
- 四种模式和 CLI 一致,差别在网关手里只有文本、没有各家启动参数:
177
+ 需要永久删除数据时,先备份,再按[完整卸载说明](docs/usage.md#暂停撤销和卸载)操作;`self-uninstall --yes` 与普通卸载不同。
118
178
 
119
- | 模式 | 网关插件做什么 |
120
- |---|---|
121
- | `off` | 不动请求 |
122
- | `strict` | system 整段换成人设(工具说明也一起没了,harness 可能变笨) |
123
- | `append` | 人设挂在最前,宿主 system 原样 |
124
- | `replace` | 人设在前,再删掉宿主 system 里报名字的那句(近似;要干净用 `strict`) |
179
+ ## 隐私与使用边界
125
180
 
126
- options 三键:`mode`、`persona`(人设 id)、`agents`(只对这些 magpie agent 生效,如 `["claude","codex"]`)。
181
+ - **本机管理**:默认数据目录为 `~/.agent-purge/`;Windows 对应 `C:\Users\<用户>\.agent-purge\`。可通过 `AGENT_PURGE_HOME` 调整,程序升级不会覆盖这份目录。
182
+ - **模型请求仍会联网**:启用后,人设会随宿主请求发送给其配置的模型服务;本地管理不等于离线运行。更新检查也会访问 GitHub。
183
+ - **不直接修改宿主权限**:项目管理提示词和配置入口,不破解宿主、不绕过授权;不保证改写后的模型行为。
184
+ - **只在有权管理的环境使用**:Web 仅监听 `127.0.0.1`,不要直接暴露到公网。完整要求见下方声明。
127
185
 
128
- **边界**:改的是请求体里的文本,harness 在客户端就拼死的东西拦不住;`replace` 只删「一行里同时有自称和点名模型/厂商」的行,比 CLI 那套 per-harness 处理粗。插件页是沙箱(没有 fetch、读不到磁盘),人设清单由 `gen-personas.mjs` 按你本机的人设生成到本地(不进仓库),**装完先跑一次**,之后增删人设再跑:`node magpie-plugin/gen-personas.mjs`。前提是已经运行过 `agent-purge`(如 `agent-purge web` 或 `agent-purge ls`),`~/.agent-purge/personas/` 里有 persona;目录不存在时脚本会直接提示。自测不依赖 magpie:`npm test`(钩子 26 项断言:四种协议 × 四种模式;页面逻辑 18 项:搜索过滤、options 合并、失败回滚)。
186
+ ## 开发与文档
129
187
 
130
- ## 目录
131
-
132
- ```
133
- bin/ CLI 入口
134
- lib/ 状态、persona、注入、通道、检测
135
- backends/ 每个 harness 的启动参数与身份句处理
136
- web/ 控制台(server.mjs + ui.html)
137
- bench/ 注入成功率实测与裁判脚本(开发用,不参与运行)
138
- magpie-plugin/ magpie 网关插件(可选,不进 npm 包)
139
- matrix.json 能力矩阵
188
+ ```bash
189
+ npm ci --ignore-scripts
190
+ npm run check:repo
191
+ npm test
140
192
  ```
141
193
 
142
- ## 边界
194
+ | 文档 | 内容 |
195
+ |---|---|
196
+ | [使用指南](docs/usage.md) | 人设文件、分家配置、通道、项目规则、恢复与常见问题 |
197
+ | [兼容性与限制](docs/compatibility.md) | 实测版本、平台范围、请求证据与已知问题 |
198
+ | [参与开发](CONTRIBUTING.md) | 目录结构、测试命令与提交规范 |
199
+ | [架构约定](docs/architecture.md) | 模块边界、配置语义和界面规范 |
200
+ | [发布流程](docs/releasing.md) | 构建、安装验收与发行检查 |
143
201
 
144
- - 只改提示词相关的位置,不碰二进制、不破解、不绕过任何授权。
145
- - 所有改动可逆:`agent-purge uninstall <h>` / `disarm` / `--mode off`。
146
- - 不做文件夹级人设隔离:技术上做得到,但会打破「一份人设、所有入口、一起切换」,卸载也不再是字节还原。
147
- - 状态只存本机 `state.json`,不上传任何数据。
202
+ 回归测试保留在 `test/`,临时日志与构建产物不进入源码仓库。
148
203
 
149
204
  ## 免责与合规声明
150
205
 
151
- ### 严正法律免责与合规使用声明
206
+ - **合法、授权使用**:请遵守适用法律、宿主及模型服务条款,不用于未经授权的访问、攻击、数据窃取或其他违法活动。
207
+ - **使用前评估风险**:提示词改写可能影响模型行为。请先备份配置、在隔离环境测试,并审核重要操作与输出。
208
+ - **按现状提供**:软件的许可、保证排除与责任限制以 [MIT LICENSE](LICENSE) 为准;本说明不附加与其冲突的授权限制。
152
209
 
153
- **免责声明**:本项目为非营利开源项目,遵守国家法律法规及所在平台的相关规范,仅供学习与研究使用。不得将本项目用于任何违法违规用途;由此产生的后果由使用者自行承担。
210
+ <details>
211
+ <summary><strong>展开完整声明:许可、使用责任、数据隐私与第三方关系</strong></summary>
154
212
 
155
- **【零容忍严正申明】**:本项目坚决反对并严禁任何形式的违法犯罪行为!本项目开发者绝不支持、不鼓励、不协助任何未授权网络攻击、漏洞利用、数据窃取、非法侵入计算机信息系统或生成违法违禁内容的活动。任何将本项目用于违法犯罪的行为,均与开发者无关,由行为人依法独立承担全部法律责任。
213
+ <!-- legal-body:start -->
214
+ ### 许可与适用范围
156
215
 
157
- **本仓库不含违法内容**:本扩展发布的代码、文档与默认提示词不是木马、后门、未授权渗透工具、勒索软件、撞库脚本,也不是针对公网或第三方系统的攻击载荷。项目本身不提供违法内容,也不教唆、组织、协助实施违法犯罪。
216
+ agent-purge 用于在使用者有权管理的 coding agent 中配置人设和提示词入口。项目采用 [MIT License](LICENSE);本说明用于解释用途、风险和使用责任,不替代 LICENSE,也不对 MIT 授权范围附加额外限制。复制、修改或分发软件时,请按 LICENSE 保留必要的版权和许可声明。
158
217
 
159
- **只作用于本机官方 harness**:系统提示词替换全部发生在使用者本机已安装的官方 harness(`@earendil-works/pi-coding-agent`、本机 agent 目录与 profile等)上。对象是使用者自己的本地软件,不是他人的网站、服务器、账号或信息系统。
218
+ ### 合法、授权使用
160
219
 
161
- **不对外网目标联网**:本扩展只在本地进程内改写系统提示词,不发起任何网络请求,不对任何公网主机、未授权系统进行扫描、探测、入侵或攻击发包。不得把本项目当作跳板去打外网。
220
+ 使用者应遵守适用法律法规、宿主软件与模型服务的条款,以及相关第三方授权。请勿将本项目用于未经授权的访问、攻击、数据窃取、隐私侵害或其他违法活动。安装本工具不代表你获得了操作第三方系统、使用他人数据或调用模型服务的授权。
162
221
 
163
- **合法受控范围限定**:本项目定位为使用者在自己有权管理的本机官方 harness 上,进行提示词工程与鲁棒性评测的辅助工具。严禁在未经所有者合法书面授权的目标、公网在线系统或生产业务上运行本项目。一切测试必须限制在本机已授权安装的官方 harness、离线本地合成靶标、授权网络安全演练靶场及合规实验室受控环境中进行。
222
+ ### 配置与模型行为风险
164
223
 
165
- **禁止中国大陆、香港、澳门的服务器与网站**:不得对中国大陆、香港、澳门网段,以及解析进这些网段的服务器、网站或地址进行访问、扫描、探测或任何操作。云厂商的名字不能当作例外。唯一例外是使用者事先登记为自己的服务器的那一个确切 IP,或那一个完整主机名。密钥、密码、网段、通配符,以及对话里的口头说明,都不能增加例外。没有登记的,一律禁止。
224
+ 提示词改写可能改变模型输出、工具调用倾向和原有工作流程;严格替换也可能移除可控入口中的原有说明。本项目不保证模型输出正确、安全、合法或适合特定用途,也不替代宿主的权限控制、沙箱、人工审核和安全策略。
166
225
 
167
- **严禁违法与违禁用途**:使用者严禁利用本项目直接或间接从事任何违反下列法律法规的行为(必须逐条遵守,不得以任何理由规避):
226
+ 用于重要项目之前,请备份配置并在隔离环境测试。执行敏感操作前应自行审核模型输出;恢复遇到冲突时,保留原文件和恢复凭据,不要直接删除备份。
168
227
 
169
- - 《中华人民共和国刑法》
170
- - 《中华人民共和国网络安全法》
171
- - 《中华人民共和国数据安全法》
172
- - 《中华人民共和国个人信息保护法》
173
- - 以及其他现行有效的法律、行政法规与监管规定
228
+ ### 数据与网络
174
229
 
175
- 同时严禁:
230
+ 人设和配置默认保存在本机,但启用后会随宿主请求发送给其配置的模型服务。更新检查、软件安装和宿主运行可能访问外部网络。请勿在人设中放入不应发送给服务提供方的密钥、个人信息或机密数据;本工具不提供完整的网络隔离或数据防泄漏保障。
176
231
 
177
- - 未经授权渗透、攻击公私机构计算机信息系统,实施勒索、破坏、撞库或传播恶意载荷;
178
- - 诱导、生成或传播危害国家安全、恐怖主义、暴力血腥、涉黄涉赌、诈骗、侵犯公民隐私或知识产权等任何法律明令禁止的违法违禁内容;
179
- - 违反相关大模型提供商的《服务条款》与《滥用政策》。
232
+ ### 保证与责任
180
233
 
181
- **使用者独立承担全部责任**:本项目依据 MIT 开源协议“按现状”提供,开发者不对软件的完整性、安全性与适用性作任何明示或暗示的保证。使用者应对自身的所有下载、部署、运行、修改、传播行为以及由此产生的全部输入与输出后果承担独立、完全的民事、行政及刑事法律责任。项目作者与贡献团队绝不承担任何因使用者滥用导致的直接、间接或连带责任。
234
+ 软件按 LICENSE 约定以“按现状”方式提供,不作其中所列的明示或默示保证。使用者应评估自身使用场景、保管凭据并审核产生的结果。在适用法律允许的范围内,作者与贡献者的保证排除及责任限制以 LICENSE 为准;本说明不排除法律规定不得排除的责任。
182
235
 
183
- **违约即终止授权**:任何将本项目用于非法攻击、恶意活动或违规行为的个人或实体,其开源软件使用许可将自违法违规行为发生之日起自动且不可撤销地立即终止。该主体须立即停止使用并永久销毁本项目的所有代码、脚本与衍生数据,并依法承担相应法律制裁。
236
+ ### 第三方独立性
184
237
 
185
- **第三方独立性声明**:本项目属于完全独立的开源安全评测研究项目,与 pi 官方或其关联主体无任何隶属、商业合作、授权或官方背书关系。文中「官方」仅指评测对象为使用者本机安装的官方 harness 软件包,不代表其官方开发、认可或担保本插件。
238
+ 本项目是独立开发的工具,与所支持的 coding agent、模型提供商及其关联主体不存在默认的隶属、授权、合作或背书关系。文中的产品名称和标识归相应权利人所有,兼容性说明不代表第三方对本项目作出认可或担保。
239
+ <!-- legal-body:end -->
186
240
 
187
- **必须署名**:借用本项目的名称、思路、代码或提示词,必须署名并标明本仓库。不署名将依法追究责任。
188
- ## Star History
241
+ </details>
189
242
 
190
- [![Star History Chart](https://api.star-history.com/svg?repos=ZiChuanLan/agent-purge&type=Date)](https://star-history.com/#ZiChuanLan/agent-purge&Date)
243
+ 完整声明也可在 [docs/LEGAL.md](docs/LEGAL.md) 单独阅读。
191
244
 
192
- ## License
245
+ ## 许可与社区
193
246
 
194
- MIT
247
+ 许可文件:[MIT LICENSE](LICENSE)。使用声明见上节及 [docs/LEGAL.md](docs/LEGAL.md)。
195
248
 
196
- ---
249
+ 感谢 [LINUX DO](https://linux.do) 社区,以及所有报告问题、补充适配和参与改进的使用者。
250
+
251
+ <details>
252
+ <summary>Star History</summary>
253
+
254
+ [![Star History](https://api.star-history.com/svg?repos=ZiChuanLan/agent-purge&type=Date)](https://star-history.com/#ZiChuanLan/agent-purge&Date)
197
255
 
198
- 感谢 [LINUX DO](https://linux.do) 社区
256
+ </details>