xuanzhu 0.8.3 → 0.8.5
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.
- package/README.md +58 -23
- package/dist/cli.js +850 -748
- package/dist/skills/v2ray/SKILL.md +5 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -170,10 +170,7 @@ xzh
|
|
|
170
170
|
| `xzh config edit` | 使用 `nano` 编辑配置文件 |
|
|
171
171
|
| `xzh config path` | 打印配置文件路径 |
|
|
172
172
|
| `xzh config init` | 生成默认配置文件 |
|
|
173
|
-
| `xzh
|
|
174
|
-
| `xzh secret list` | 列出凭据名称(不显示内容) |
|
|
175
|
-
| `xzh secret remove <名称>` | 删除凭据 |
|
|
176
|
-
| `xzh sudo <命令>` | 用已保存的 sudo 密码执行命令(密码经 stdin 传给 `sudo -S`) |
|
|
173
|
+
| `xzh vpn` | 交互式设置 / 探测 / 测试 / 启停全局 HTTP(S)/SOCKS5 代理 |
|
|
177
174
|
| `xzh setup` | 检查并自动安装依赖(玄猪自身 + 技能:playwright / officecli / 剪贴板工具等) |
|
|
178
175
|
| `xzh init` | 扫描项目并生成 / 补全 `AGENTS.md` 与 `docs/`(已有内容只补缺失小节) |
|
|
179
176
|
| `xzh init --dry-run` | 只预览将生成的内容,不写文件 |
|
|
@@ -215,6 +212,9 @@ XZH_HOME=/path/to/dir xzh # 改用 /path/to/dir/config.json
|
|
|
215
212
|
适用于多环境并行(本机 / 远程 / 容器各持一份配置互不干扰)。设置后**不会**执行
|
|
216
213
|
`~/.xuanzhu` 的旧目录迁移 —— 那是为你显式指定的新位置,不该把家目录里的旧数据搬进去。
|
|
217
214
|
|
|
215
|
+
Windows 上如果希望 bash 工具使用 Git Bash / WSL 的 shell,可设置 `XZH_SHELL`(指向一个
|
|
216
|
+
支持 `-lc` 的 POSIX shell);默认 Windows 仍用 `cmd.exe`。
|
|
217
|
+
|
|
218
218
|
```json
|
|
219
219
|
{
|
|
220
220
|
"version": 1,
|
|
@@ -231,6 +231,13 @@ XZH_HOME=/path/to/dir xzh # 改用 /path/to/dir/config.json
|
|
|
231
231
|
"confirmSensitiveRead": false,
|
|
232
232
|
"memoryMaxChars": 12000,
|
|
233
233
|
"globalMemoryMaxChars": 4000,
|
|
234
|
+
"globalMemoryTtlDays": 90,
|
|
235
|
+
"promptCache": true,
|
|
236
|
+
"network": {
|
|
237
|
+
"enabled": true,
|
|
238
|
+
"proxy": "http://127.0.0.1:10809",
|
|
239
|
+
"noProxy": "127.0.0.1,localhost,::1"
|
|
240
|
+
},
|
|
234
241
|
"maxParallelAgents": 4,
|
|
235
242
|
"intent": { "enabled": false },
|
|
236
243
|
"providers": {
|
|
@@ -253,6 +260,12 @@ XZH_HOME=/path/to/dir xzh # 改用 /path/to/dir/config.json
|
|
|
253
260
|
| `confirmSensitiveRead` | `false` | 读取凭据类文件(`.env`、`~/.ssh`、`config.json` 等)时是否确认 |
|
|
254
261
|
| `memoryMaxChars` | `12000` | **项目**长期记忆字符上限,超出即自动精简(`0` = 不限制长度,仍去重) |
|
|
255
262
|
| `globalMemoryMaxChars` | `4000` | **全局**长期记忆字符上限;全局记忆注入每个项目,默认更紧 |
|
|
263
|
+
| `globalMemoryTtlDays` | `90` | 全局自动记录保留天数;只清理 `## 自动记录` / `## 网络代理` 小节,手工小节不动(`0` = 不清理) |
|
|
264
|
+
| `promptCache` | `true` | 服务商 prompt caching;Anthropic 显式断点,OpenAI/Gemini 为自动缓存 |
|
|
265
|
+
| `network.proxy` | — | 全局 HTTP(S)/SOCKS5 代理;模型请求与 bash 子进程共用,`xzh vpn` 管理 |
|
|
266
|
+
| `network.proxyAuthId` | — | 代理用户名/密码的加密凭据引用;`xzh vpn` 自动生成,config 不保存密码 |
|
|
267
|
+
| `network.noProxy` | `127.0.0.1,localhost,::1` | 不走代理的地址;本机模型端点默认绕过 |
|
|
268
|
+
| `network.enabled` | `false` | 代理开关;在 `xzh vpn` 菜单中可停用并保留地址 |
|
|
256
269
|
| `maxParallelAgents` | `4` | 并行子代理数量上限(`1` = 串行,硬上限 16) |
|
|
257
270
|
| `intent.enabled` | `false` | 意图分析(每条消息先分析再处理) |
|
|
258
271
|
| `intent.prompt` | 内置模板 | 意图分析模板,占位符 `{{'用户发送过来的消息'}}` |
|
|
@@ -292,7 +305,7 @@ xzh model modelid custom/qwen3.6-35b qwen3.6-35b-new
|
|
|
292
305
|
xzh model remove openai/gpt-4o # 删除(id / 模型名 / 序号 / 别名均可)
|
|
293
306
|
```
|
|
294
307
|
|
|
295
|
-
想让某个模型**不参与回退**,直接 `xzh model remove`
|
|
308
|
+
想让某个模型**不参与回退**,直接 `xzh model remove` 删掉即可。当前使用的模型显示在底部状态栏,
|
|
296
309
|
发生回退时输出区会给出提示;想临时换一个用,直接在对话里 `/model` 选(`xzh model` 仍是增删改的入口)。
|
|
297
310
|
|
|
298
311
|
**自定义模型的别名与模型 ID**:交互式 `xzh model add custom` 会先问「模型别名」(仅用于展示,
|
|
@@ -399,8 +412,8 @@ API Key 也可以来自环境变量,优先级低于配置文件:
|
|
|
399
412
|
| `list_skills` | 列出玄猪可用的全部技能 | 否 |
|
|
400
413
|
| `load_skill` | 加载指定技能的完整指南 | 否 |
|
|
401
414
|
| `memory_read` | 读取项目 / 全局记忆(`target=project\|global\|all`;长期记忆 + 最近日志) | 否 |
|
|
402
|
-
| `memory_write` | 写入项目 / 全局记忆(`target` + `scope
|
|
403
|
-
| `memory_compact` | 用精简后的完整内容重写项目 /
|
|
415
|
+
| `memory_write` | 写入项目 / 全局记忆(`target` + `scope`),支持 `source=user/tool/model`;来源为工具输出且写项目记忆时需确认;凭据值自动 AES-GCM 加密 | 否 |
|
|
416
|
+
| `memory_compact` | 用精简后的完整内容重写项目 / 全局长期记忆(凭据值自动加密;支持来源确认;把新结论并入主题小节 / 语义压缩) | 否 |
|
|
404
417
|
| `todo_write` | 创建 / 更新任务列表(每次提交完整列表) | 否 |
|
|
405
418
|
| `goal_complete` | 目标模式(`/goal`)下声明目标已全部完成(仅主代理可用) | 否 |
|
|
406
419
|
| `report_status` | 结构化上报受阻 / 需要用户决定 / 置信度低(仅主代理可用) | 否 |
|
|
@@ -426,7 +439,7 @@ API Key 也可以来自环境变量,优先级低于配置文件:
|
|
|
426
439
|
## 任务拆分与子代理
|
|
427
440
|
|
|
428
441
|
**任务拆分**:任务需要 3 步以上、或用户一次提出多项要求时,玄猪会先用 `todo_write`
|
|
429
|
-
|
|
442
|
+
把计划写成结构化列表,每完成一步就更新状态。列表显示在顶部信息区的快捷键提示下方(`任务 2/5` +
|
|
430
443
|
进行中项),比"它说自己做到哪了"更可靠。
|
|
431
444
|
|
|
432
445
|
**子代理**:`task` 工具会**新建一个独立的 Agent 实例**去完成一件子任务,只有最终结论
|
|
@@ -621,6 +634,7 @@ npm run bench -- \
|
|
|
621
634
|
输出:按 window/profile 的成功率汇总、按任务类型的汇总、逐项明细;同时写
|
|
622
635
|
`/tmp/xzh-bench-results.json`。`--modules`、`--tasks`、`--timeout` 可调。
|
|
623
636
|
端点未返回 `usage` 时,token 数使用本地估算(用于比较趋势,不当作精确计费)。
|
|
637
|
+
TUI `/usage` 显示服务端真实 input/output 与缓存命中;缓存统计取决于服务商是否返回。
|
|
624
638
|
|
|
625
639
|
## 小上下文模型(small 档)
|
|
626
640
|
|
|
@@ -800,7 +814,8 @@ AutoX.js 那侧也可用环境变量 `XZH_DEVICE_PORT` 指定端口。
|
|
|
800
814
|
- 因此每个项目目录各自拥有独立的记忆与规则;`~/.xzh` 保存**全局配置、全局记忆、会话、日志与技能**,
|
|
801
815
|
不保存项目记忆
|
|
802
816
|
- **查看 / 清空**:`/memory` 显示项目记忆目录、长期记忆字符数与每日日志份数;
|
|
803
|
-
`/memory global`
|
|
817
|
+
`/memory global` 查看全局记忆状态、`/memory show [global]` 查看全文;
|
|
818
|
+
`/memory clear [global]` 清空对应记忆。
|
|
804
819
|
清空**必须二次确认**:确认框默认停在「拒绝」,要按 `y`(或 ← → 切到「允许」再回车)才会执行,
|
|
805
820
|
一个回车不会误删。它只删对应 `memory/` 下的记忆文件,**不会**删除 `~/.xzh/sessions/` 的会话存档,
|
|
806
821
|
清空后系统提示词立即刷新(后续请求不再注入旧记忆)
|
|
@@ -816,22 +831,42 @@ AutoX.js 那侧也可用环境变量 `XZH_DEVICE_PORT` 指定端口。
|
|
|
816
831
|
|
|
817
832
|
- 启动时先注入全局记忆,再注入项目记忆;全局记忆默认上限 `globalMemoryMaxChars=4000`,
|
|
818
833
|
超限自动去重/裁剪,仍超限时用 `memory_compact target=global` 语义精简。
|
|
819
|
-
-
|
|
820
|
-
|
|
821
|
-
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
全局记忆会自动记录一条「sudo 密码存放在 `~/.xzh/secrets/sudo`,使用 `xzh sudo`」的指针。
|
|
834
|
+
- 记忆超过约 2500 字符时,静态提示词只放**主题目录**;每轮按最近 3 条用户消息挑相关小节注入。
|
|
835
|
+
- `globalMemoryTtlDays` 默认 90 天:只清理 `## 自动记录` 下过期的日期行,手工整理的小节不会被动。
|
|
836
|
+
- 当用户说「全局 / 所有项目 / 跨项目 / 以后都 / 统一用」时,玄猪会**自动捕获**消息里的
|
|
837
|
+
关键信息写入全局记忆;只属于当前项目的内容仍写项目记忆。模型也可以用
|
|
838
|
+
`memory_write target=global` 主动补充。
|
|
839
|
+
- **凭据自动加密**:对话中出现 `sudo 密码是 ...` / `token=...` 这类内容时,玄猪在写入记忆前
|
|
840
|
+
会用 **AES-256-GCM** 加密到 `~/.xzh/vault/`(目录 0700,`key` 与 `entries.json` 均 0600),
|
|
841
|
+
记忆里只保留 `[加密凭据 sec_xxx]` 引用,不出现明文。密钥与密文同机,这能保证
|
|
842
|
+
记忆/日志/模型上下文不含明文,但不防本地 root。
|
|
843
|
+
- 密码原文不要出现在回复里;模型只能看到加密引用。
|
|
831
844
|
- `memory_read` / `memory_write` / `memory_compact` 都支持 `target=project|global`
|
|
832
845
|
(`memory_read` 还支持 `all`)。
|
|
833
846
|
|
|
834
|
-
###
|
|
847
|
+
### 外网与代理(`xzh vpn` / `v2ray`)
|
|
848
|
+
|
|
849
|
+
运行 `xzh vpn` 进入交互菜单(和 `xzh model` 一致,方向键 / 数字选择):
|
|
850
|
+
|
|
851
|
+
```text
|
|
852
|
+
玄猪代理
|
|
853
|
+
地址:socks5h://127.0.0.1:10808
|
|
854
|
+
状态:已启用
|
|
855
|
+
请选择操作:
|
|
856
|
+
1. 设置 / 修改代理
|
|
857
|
+
2. 探测本机代理
|
|
858
|
+
3. 测试当前代理
|
|
859
|
+
4. 启用 / 停用代理
|
|
860
|
+
5. 清除代理配置
|
|
861
|
+
6. 退出
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
代理支持 HTTP(S) 与 SOCKS5;带用户名/密码的地址会把认证拆到加密 vault,config 只保留地址。
|
|
865
|
+
SOCKS 对 `npm` / `pip` 支持有限,这些工具建议同时开启 HTTP 入站。
|
|
866
|
+
配置成功且 `lastCheckOk` 不为 false 时,
|
|
867
|
+
**模型请求与 bash 子进程都会走这个代理**;
|
|
868
|
+
系统提示词会标记「全局代理(已配置)」,此时不会触发 `v2ray` 技能,避免重复探测。
|
|
869
|
+
只有没配置代理、或在 `xzh vpn` 菜单中测试失败时,才用下面的 `v2ray` 技能临时兜底。
|
|
835
870
|
|
|
836
871
|
内置 `v2ray` 技能用于「需要外网但直连失败」的场景:探测本机已有的
|
|
837
872
|
v2ray / Clash / mihomo / sing-box **本地 SOCKS/HTTP 入站端口**,验证后**只对当前命令**
|
|
@@ -999,7 +1034,7 @@ description: 一句话说明该技能的用途与适用场景
|
|
|
999
1034
|
kitty / Ghostty 会把该 xterm 兼容序列映射成「所有按键都用转义码上报」而破坏普通输入,
|
|
1000
1035
|
故玄猪对这两类终端不发送请求,请改用 `Alt+Enter` 或在终端侧自行配置。
|
|
1001
1036
|
|
|
1002
|
-
界面内命令:`/help`、`/clear`、`/tools`、`/context`、`/compact`、`/focus [文件]`、`/device`、`/image`(`/paste`)、`/copy [N|A-B|last|all]`、`/mouse`、`/reset`、`/
|
|
1037
|
+
界面内命令:`/help`、`/clear`、`/tools`、`/context`、`/compact`、`/focus [文件]`、`/device`、`/image`(`/paste`)、`/copy [N|A-B|last|all]`、`/mouse`、`/reset`、`/resume [编号]`、`/cwd`、`/switch <目录>`、`/term`、`/model [编号|id|模型名]`、`/goal <目标>`(`/goal [status|continue|off]`)、`/memory [global|show [global]|clear [global]]`、`/usage`、`/undo [N]`、`/init [--dry-run|--force]`、`/auto [on|off]`、`/intent [on|off]`、`/exit`。
|
|
1003
1038
|
|
|
1004
1039
|
### 选中与复制
|
|
1005
1040
|
|