xuanzhu 0.1.7 → 0.1.8

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 (3) hide show
  1. package/README.md +44 -12
  2. package/dist/cli.js +183 -171
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -27,7 +27,8 @@ xzh # 启动
27
27
  - **多模型支持**:DeepSeek、Anthropic Claude、OpenAI、Google Gemini、智谱 GLM、通义千问、Groq、Ollama,以及任意 OpenAI 兼容端点。
28
28
  - **内置工具**:读取 / 写入 / 编辑文件、列目录、glob 查找、grep 搜索、执行 shell 命令。
29
29
  - **流式响应**:实时渲染 Markdown,支持代码块,中文对齐正确。
30
- - **默认全自动**:`autoApprove` 默认为 `true`,所有工具——包括写文件、执行命令、读取工作区之外的文件——都直接执行,无需逐项确认,开箱即用;`/auto off` 可切换为写文件与执行命令逐项确认。唯一的例外是读取**凭据类文件**(`~/.ssh`、`.env`、`~/.xzh/config.json`、`*.pem` 等)时会确认一次 —— 防止凭据被读进上下文并转交给模型服务商。这与是否在工作区内无关。
30
+ - **默认全自动**:`autoApprove` 默认为 `true`,**所有工具都直接执行、不做任何确认** —— 包括写文件、执行命令、读取工作区之外的文件,以及读取凭据类文件(`~/.ssh`、`.env`、`~/.xzh/config.json` 等)。开箱即用,不打断。`/auto off` 可切换为写文件与执行命令逐项确认。
31
+ - 如果希望读取凭据类文件时确认一次(防止密钥被读进上下文后转交给模型服务商),把 `confirmSensitiveRead` 设为 `true`,默认关闭。
31
32
  - **多轮自主执行**:自动串联工具调用完成任务,可随时 `Ctrl+C` 中断。
32
33
 
33
34
  ## 环境要求
@@ -309,7 +310,7 @@ API Key 也可以来自环境变量,优先级低于配置文件:
309
310
  | --- | --- |
310
311
  | `.xuanzhu/memory/MEMORY.md` | 长期记忆:稳定的项目结论与约定,启动时会注入系统提示词(节选) |
311
312
  | `.xuanzhu/memory/YYYY-MM-DD.md` | 每日日志:按天追加的过程记录 |
312
- | `.xuanzhu/rules.md` | 项目规则,内容作为「项目级指令」注入系统提示词。**首次初始化时若项目根已有 `AGENTS.md`**,会以它的内容作为初始规则 |
313
+ | `.xuanzhu/rules.md` | 项目规则,内容作为「项目级指令」注入系统提示词。**首次初始化时若项目根已有 `AGENTS.md`**,则写入一条「必须严格按照 `AGENTS.md` 执行」的指令(而非复制其内容)—— 这样 `AGENTS.md` 始终是唯一真实来源,你改完它模型下次读取即是新版 |
313
314
 
314
315
  记忆由玄猪自行维护:
315
316
 
@@ -399,8 +400,8 @@ description: 一句话说明该技能的用途与适用场景
399
400
  | 按键 | 作用 |
400
401
  | --- | --- |
401
402
  | `Enter` | 提交输入 |
402
- | `Ctrl+Enter` / `Shift+Enter` | 输入换行 |
403
- | `Ctrl+J` | 输入换行(等价按键,任何终端都可用) |
403
+ | `Alt+Enter` | 输入换行(终端原生编码,任何终端都可用) |
404
+ | `Ctrl+Enter` / `Shift+Enter` | 输入换行(需终端支持扩展键盘协议,见下) |
404
405
  | `↑` / `↓` | 浏览历史输入(终端面板内为命令历史) |
405
406
  | `Tab` | 终端面板内补全:命令名(PATH)或文件路径 |
406
407
  | `PgUp` / `PgDn` | 上翻 / 下翻一页(左栏对话区、右栏终端输出) |
@@ -437,22 +438,53 @@ description: 一句话说明该技能的用途与适用场景
437
438
 
438
439
  其他终端:xterm / VTE 系(gnome-terminal 等)由本程序自动协商,开箱可用;
439
440
  kitty / Ghostty 会把该 xterm 兼容序列映射成「所有按键都用转义码上报」而破坏普通输入,
440
- 故玄猪对这两类终端不发送请求,请改用 `Ctrl+J` 或在终端侧自行配置。
441
+ 故玄猪对这两类终端不发送请求,请改用 `Alt+Enter` 或在终端侧自行配置。
441
442
 
442
443
  界面内命令:`/help`、`/clear`、`/copy [N|all]`、`/mouse`、`/reset`、`/cwd`、`/switch <目录>`、`/term`、`/model`、`/auto [on|off]`、`/intent [on|off]`、`/exit`。
443
444
 
444
- ### 选中与复制(重要)
445
+ ### 选中与复制
445
446
 
446
- 玄猪为了支持滚轮滚动**捕获了鼠标**,这会禁用终端的原生拖拽选择,因此在界面里直接框选通常选不中。三种办法:
447
+ 在输出区**按住左键拖拽**,拖过要复制的行,**松开即写入系统剪贴板** —— 滚轮同时可用,互不影响。
447
448
 
448
449
  | 方式 | 说明 |
449
450
  | --- | --- |
450
- | **按住 Shift 拖拽** | 多数终端(VS Code、Windows Terminal、iTerm2、GNOME Terminal…)会用 Shift 绕过应用级鼠标捕获,**最省事** |
451
- | `/mouse` | 关闭鼠标捕获,之后可用鼠标直接框选复制;代价是滚轮不再滚动。再执行一次恢复 |
452
- | `/copy` | 让玄猪主动把输出区写入系统剪贴板(OSC 52,无需手动选择)。支持 `/copy 100`(最近 100 行)、`/copy 100-200`(按行号范围)、`/copy last`(最近一次对话,含提问)、`/copy all`(全部) |
451
+ | **在输出区拖拽** | 玄猪自己实现的选择(按整行)。松开即复制,不需按键、不占 `/mouse` |
452
+ | 按住 **Shift** 拖拽 | 使用**终端原生**框选(多数终端用 Shift 绕过应用级捕获),需要精确到字符时用 |
453
+ | `/copy [N\|A-B\|last\|all]` | 主动复制输出区。支持 `/copy 100`(最近 100 行)、`/copy 100-200`(行号范围)、`/copy last`(最近一次对话)、`/copy all`(全部) |
454
+ | `/mouse` | 把鼠标**完全交还终端**(改用终端原生框选与右键菜单,滚动输出区改用 `PgUp`/`PgDn`)。切换结果会写回配置 |
455
+
456
+ > **为什么拖拽选择要自己实现**:终端协议里的 `?1000h` 是**整体开关** ——
457
+ > 开启后终端把所有鼠标事件都交给程序,原生选择随之失效;关闭后滚轮又没用了
458
+ > (玄猪跑在**备用屏**上,终端没有回滚历史可滚)。既然事件已经在程序手里,
459
+ > 就由玄猪自己记录选区并写剪贴板,从而让「滚轮滚动」与「选中复制」并存。
460
+ >
461
+ > 选择按**整行**进行:输出区的长行会折行、还含 ANSI 颜色与宽字符,做字符级映射的
462
+ > 复杂度远高于收益,而实际要复制的基本都是整段内容。复制的是**原始逻辑行**
463
+ > (不是屏幕上折行后的样子),所以长行不会被截断。
464
+ >
465
+ > 以上都依赖终端支持 **OSC 52**。少数终端(如默认配置的 GNOME Terminal)出于安全会忽略它,
466
+ > 此时粘贴出来是空的 —— 请改用 Shift+拖拽,或终端自带的复制方式。
467
+
468
+ ### 换行键为何有时不生效
469
+
470
+ 玄猪通过终端协议请求「带修饰键的 Enter」(默认为 xterm 的 `modifyOtherKeys`),
471
+ 但**部分终端并不实现它**——最典型是基于 xterm.js 的 IDE 内置终端(VS Code / CodeBuddy)。
472
+ 这类终端会把 `Ctrl+Enter`、`Shift+Enter` 编成与普通 `Enter` **完全相同的字节**,
473
+ 程序无从区分,因此无法把它们当作换行。
474
+
475
+ **`Alt+Enter` 走终端原生编码,任何终端都可用**,是最可靠的换行方式。
476
+
477
+ 想弄清你的终端到底发了什么、或试用另一种上报协议:
453
478
 
454
- > `/copy` 依赖终端支持 OSC 52。少数终端(如默认配置的 GNOME Terminal)出于安全会忽略该序列,
455
- > 此时粘贴出来是空的,请改用 Shift 拖拽。
479
+ ```bash
480
+ # 诊断:把终端送来的原始字节记到 ~/.xzh/keys.log
481
+ XZH_DEBUG_KEYS=1 xzh
482
+ # 按几下 Ctrl+Enter / Shift+Enter,退出后查看
483
+ cat ~/.xzh/keys.log
484
+
485
+ # 备选协议:改用 kitty 键盘协议上报修饰键(部分终端据此可用 Shift+Enter)
486
+ XZH_KITTY_KEYS=1 xzh
487
+ ```
456
488
 
457
489
  默认开启自动批准(`autoApprove: true`),所有工具——包括写文件与执行命令——都会直接执行、不再询问;
458
490
  执行 `/auto off` 可切换为逐项确认,设置会持久保存到配置文件。