xuanzhu 0.1.8 → 0.2.0

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 CHANGED
@@ -1,5 +1,7 @@
1
1
  # 玄猪 XuanZhu
2
2
 
3
+ [English](https://github.com/amble311/xuanzhu/blob/main/docs/README.en.md) | **中文**
4
+
3
5
  > 专为终端打造的 AI 编码 Agent —— 一条 `xzh` 命令,把 AI 编程助手带进你的终端。
4
6
 
5
7
  ## 快速上手
@@ -314,8 +316,10 @@ API Key 也可以来自环境变量,优先级低于配置文件:
314
316
 
315
317
  记忆由玄猪自行维护:
316
318
 
317
- - 启动时读取 `MEMORY.md` 注入提示词,让玄猪一开始就了解项目背景
318
- - 需要更多历史时调用 `memory_read`;完成实质工作后调用 `memory_write` 记录结论
319
+ - 启动时读取 `MEMORY.md` 与**当天的日志**注入提示词(各取节选),让玄猪一开始就了解项目背景
320
+ - 需要更多历史时调用 `memory_read`;**每完成一件实质工作后**必须调用 `memory_write` 记录结论
321
+ (技术方案、项目约定、踩过的坑、重要发现)。这条要求同时写在系统提示词的「核心原则」里,
322
+ 明确要求**在给出最终答复前先写记忆** —— 此前措辞偏弱(「可调用」),实测几乎不会触发
319
323
  - `.xuanzhu` **始终**位于当前项目路径之下,**不做任何向上查找**:在 `/a/b/c` 工作就只用
320
324
  `/a/b/c/.xuanzhu`,即使 `/a` 或 `/a/b` 下已有 `.xuanzhu` 也不会复用
321
325
  - **启动时**与 **`/switch` 切换目录时**,若该目录下尚无 `.xuanzhu`,会自动创建
@@ -392,8 +396,11 @@ description: 一句话说明该技能的用途与适用场景
392
396
  - 唯一匹配直接补全(目录补 `/`、命令与文件补空格);多匹配先补公共前缀,再按一次列出候选
393
397
  - 终端宽度不足 80 列时自动隐藏右侧面板,也可用 `/term` 手动开关
394
398
  - 鼠标滚轮按指针所在区域生效:在右侧滚动命令输出,在左侧滚动对话区
395
- - 限制:为让命令能被 `Ctrl+C` 可靠中断且不引入原生依赖,每条命令独立执行,
396
- 因此 `vim` / `htop` / `less` 这类需要 TTY 的全屏交互程序不可用,`export` 也不跨命令保留
399
+ - 命令经系统自带的 `script` 包装启动,为子进程分配 **PTY** ——
400
+ 因此**颜色、进度条、交互式提示都正常**(`npm init` 的提问、y/n 确认都能应答),
401
+ 命令运行期间的按键会转发给它
402
+ - 限制:仍**不支持 `vim` / `htop` / `less`** 这类全屏交互程序(没有真正的屏幕刷新与
403
+ 窗口尺寸协商),`export` 的环境变量也不跨命令保留(每条命令独立进程)
397
404
 
398
405
  ## 界面快捷键
399
406
 
@@ -450,8 +457,20 @@ kitty / Ghostty 会把该 xterm 兼容序列映射成「所有按键都用转义
450
457
  | --- | --- |
451
458
  | **在输出区拖拽** | 玄猪自己实现的选择(按整行)。松开即复制,不需按键、不占 `/mouse` |
452
459
  | 按住 **Shift** 拖拽 | 使用**终端原生**框选(多数终端用 Shift 绕过应用级捕获),需要精确到字符时用 |
453
- | `/copy [N\|A-B\|last\|all]` | 主动复制输出区。支持 `/copy 100`(最近 100 行)、`/copy 100-200`(行号范围)、`/copy last`(最近一次对话)、`/copy all`(全部) |
454
- | `/mouse` | 把鼠标**完全交还终端**(改用终端原生框选与右键菜单,滚动输出区改用 `PgUp`/`PgDn`)。切换结果会写回配置 |
460
+ | `/copy [N\|A-B\|last\|all]` | 主动复制**左侧对话区**。支持 `/copy 100`(最近 100 行)、`/copy 100-200`(行号范围)、`/copy last`(最近一次对话)、`/copy all`(全部) |
461
+ | `/copy term [N\|A-B\|all]` | 主动复制**右侧终端输出**(默认最近 30 行) |
462
+ | `/mouse` | 切换鼠标捕获(默认**开启**:滚轮滚动输出区 + 拖拽选择)。关掉则把鼠标完全交还终端 |
463
+
464
+ > **为什么多行拖选会把两栏内容混在一起**:终端原生的选择是**矩形选择** ——
465
+ > 它只知道「从第几列到第几列」,**看不到应用的分栏**。所以从左侧拖到右侧、
466
+ > 或反向拖动时,同一个屏幕行上的两栏文字都会被纳入。这是协议层面的限制,
467
+ > 应用无法干预。
468
+ >
469
+ > 要复制**单栏**内容,用命令式复制(`/copy` 左栏、`/copy term` 右栏)——
470
+ > 它们按栏取内容,绝不会串栏。玄猪自己的拖拽选择(`/mouse` 开启时)也限定在左栏。
471
+ >
472
+ > 反之,若只想要终端原生的框选与右键菜单:按 `Shift` 拖拽临时绕过,
473
+ > 或用 `/mouse` 关闭捕获(此时滚动输出区改用 `PgUp`/`PgDn`)。
455
474
 
456
475
  > **为什么拖拽选择要自己实现**:终端协议里的 `?1000h` 是**整体开关** ——
457
476
  > 开启后终端把所有鼠标事件都交给程序,原生选择随之失效;关闭后滚轮又没用了
@@ -506,7 +525,7 @@ src/
506
525
  └── utils/ ANSI 与路径工具
507
526
  ```
508
527
 
509
- 详见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
528
+ 详见 [docs/ARCHITECTURE.md](https://github.com/amble311/xuanzhu/blob/main/docs/ARCHITECTURE.md)。
510
529
 
511
530
  ## 开发
512
531