xuanzhu 0.7.0 → 0.8.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 +87 -1
- package/dist/cli.js +699 -618
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -383,6 +383,9 @@ API Key 也可以来自环境变量,优先级低于配置文件:
|
|
|
383
383
|
| `goal_complete` | 目标模式(`/goal`)下声明目标已全部完成(仅主代理可用) | 否 |
|
|
384
384
|
| `report_status` | 结构化上报受阻 / 需要用户决定 / 置信度低(仅主代理可用) | 否 |
|
|
385
385
|
| `task` | 派生子代理(默认 `code-explorer`)执行子任务,只返回结论;一轮内多个调用**并行**执行 | 否 |
|
|
386
|
+
| `repo_map` | 仓库地图:按查询返回相关文件 / 符号,或目录概览 | 否 |
|
|
387
|
+
| `find_symbol` | 按名称查找函数 / 类 / 类型定义,返回 `文件:行号` 与签名 | 否 |
|
|
388
|
+
| `read_symbol` | 只读某个符号的代码范围(比整文件更省上下文) | 否 |
|
|
386
389
|
| `read_file` | 读取文件(带行号,支持偏移与行数限制) | 否 |
|
|
387
390
|
| `list_dir` | 列出目录内容 | 否 |
|
|
388
391
|
| `glob` | 按 `**` / `*` / `?` 模式查找文件 | 否 |
|
|
@@ -535,6 +538,89 @@ API Key 也可以来自环境变量,优先级低于配置文件:
|
|
|
535
538
|
(要求先实际尝试);`low_confidence` 不受限制。`goal_complete` 只用于「真正完成」,
|
|
536
539
|
受阻不再被当成完成。
|
|
537
540
|
|
|
541
|
+
## 任务账本与上下文压缩
|
|
542
|
+
|
|
543
|
+
长任务的状态不只存在对话历史里,还落在 `<项目>/.xuanzhu/state/task.json`:
|
|
544
|
+
|
|
545
|
+
- 当前任务、状态、计划、已完成步骤、决策、改动文件、验证结果、未决问题、工作集;
|
|
546
|
+
- **新会话不会自动继续旧任务**:加载时把遗留的 `active` 降级为 `paused`;
|
|
547
|
+
只有用户说「继续」或 `/focus` 等显式操作才会恢复;
|
|
548
|
+
- 用户中断且本轮 **0 次工具调用** → `abandoned`(大概率误发);有工具副作用 → `paused`;
|
|
549
|
+
- 历史被裁剪时,任务账本摘要会并入 `[上下文提醒]`,模型不必从残片猜进度。
|
|
550
|
+
|
|
551
|
+
```text
|
|
552
|
+
/compact # 用一次模型调用把旧历史压成摘要,保留最近几轮原文
|
|
553
|
+
/focus src/app.ts # 把文件加入工作集(/focus 列出,rm 移除,clear 清空)
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
`/compact` 的摘要会同时写入任务账本;它只压缩**内存里的对话**,不重写
|
|
557
|
+
`~/.xzh/sessions` 存档,`/resume` 恢复的仍是原始会话。
|
|
558
|
+
|
|
559
|
+
## 仓库地图与符号检索
|
|
560
|
+
|
|
561
|
+
大项目里「先读整文件」是最贵的操作。第三期提供三个确定性工具(不调用模型):
|
|
562
|
+
|
|
563
|
+
```text
|
|
564
|
+
repo_map query="agent loop" # 相关文件/符号,或目录概览
|
|
565
|
+
find_symbol name="buildConversation" # 文件:行号 + 签名
|
|
566
|
+
read_symbol name="buildConversation" # 只读该符号的代码范围
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
索引按文件扩展名解析函数 / 类 / 类型 / 变量 / Markdown 标题,跳过
|
|
570
|
+
`node_modules`、`.git`、`dist` 等目录;进程内缓存 60 秒,`refresh: true` 可重建。
|
|
571
|
+
适合先用 `repo_map` / `find_symbol` 定位,再 `read_symbol` 或 `read_file offset/limit`。
|
|
572
|
+
|
|
573
|
+
子代理报告也有统一约束:结论最前、引用用 `文件:行号`、不贴完整文件/日志;
|
|
574
|
+
报告进入主上下文时按档位截断(small 档 4000 字符,full 档默认 12000)。
|
|
575
|
+
|
|
576
|
+
## 基准(bench)
|
|
577
|
+
|
|
578
|
+
第四期提供可重复的合成大仓库基准:默认生成 300 个无关模块 + 一个带 bug 的
|
|
579
|
+
`src/math.mjs`,用三个任务比较不同上下文窗口 / 档位的**成功率、模型调用次数、工具调用、
|
|
580
|
+
输入/输出 token 与耗时**。
|
|
581
|
+
|
|
582
|
+
```bash
|
|
583
|
+
npm run bench -- --mock # 不调用模型,验证基准回路
|
|
584
|
+
npm run bench -- \
|
|
585
|
+
--endpoint=http://127.0.0.1:8181/v1 --model=local \
|
|
586
|
+
--windows=8192,16384 --profiles=small,full --runs=3
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
任务:
|
|
590
|
+
|
|
591
|
+
| 任务 | 验收方式 |
|
|
592
|
+
| --- | --- |
|
|
593
|
+
| `fix-add` | 修复 `add` 后 `node test.mjs` 通过 |
|
|
594
|
+
| `add-multiply` | 新增 `multiply` 并验证 `multiply(3,4)===12` |
|
|
595
|
+
| `find-add` | 不改文件,答案包含 `src/math.mjs` 与问题判断 |
|
|
596
|
+
|
|
597
|
+
输出:按 window/profile 的成功率汇总、按任务类型的汇总、逐项明细;同时写
|
|
598
|
+
`/tmp/xzh-bench-results.json`。`--modules`、`--tasks`、`--timeout` 可调。
|
|
599
|
+
端点未返回 `usage` 时,token 数使用本地估算(用于比较趋势,不当作精确计费)。
|
|
600
|
+
|
|
601
|
+
## 小上下文模型(small 档)
|
|
602
|
+
|
|
603
|
+
模型窗口 ≤ 32k(或配置 `contextProfile: "small"`)时自动切精简档:
|
|
604
|
+
|
|
605
|
+
- **提示词更短**:只保留「先读后改、改完验证、只做最新消息、少轮次」等硬规则;
|
|
606
|
+
- **工具更少**:只下发读写 / 检索(含 `repo_map` / `find_symbol` / `read_symbol`)/
|
|
607
|
+
执行 / 计划 / 状态 / 记忆等核心工具,隐藏 `task`、`load_skill`、`memory_compact`
|
|
608
|
+
等低频 schema;
|
|
609
|
+
- **读取更小**:`read_file` 默认且最多 300 行,大文件用 `offset/limit` 分段;
|
|
610
|
+
- **输出有上限**:默认 2048 tokens(`maxOutputTokens` 可覆盖);
|
|
611
|
+
- **大输出落盘**:`bash` 结果超过 6000 字符时,完整内容保存到
|
|
612
|
+
`.xuanzhu/artifacts/`,上下文只留头尾摘要与文件路径,需要时再用 `read_file` 回查;
|
|
613
|
+
- **预算可视化**:`/context` 显示系统提示词、工具 schema、历史、状态块各占多少,
|
|
614
|
+
以及是否已裁剪。
|
|
615
|
+
|
|
616
|
+
配置:
|
|
617
|
+
|
|
618
|
+
```json
|
|
619
|
+
{ "contextProfile": "auto", "maxOutputTokens": 2048 }
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
`auto` 按窗口自动判断,`small` / `full` 可强制档位。
|
|
623
|
+
|
|
538
624
|
## 图片输入(Ctrl+V)
|
|
539
625
|
|
|
540
626
|
在输入框按 **Ctrl+V**(或 `/image`、`/paste`)会把**系统剪贴板里的图片**加为本轮附件,
|
|
@@ -850,7 +936,7 @@ description: 一句话说明该技能的用途与适用场景
|
|
|
850
936
|
kitty / Ghostty 会把该 xterm 兼容序列映射成「所有按键都用转义码上报」而破坏普通输入,
|
|
851
937
|
故玄猪对这两类终端不发送请求,请改用 `Alt+Enter` 或在终端侧自行配置。
|
|
852
938
|
|
|
853
|
-
界面内命令:`/help`、`/clear`、`/tools`、`/device`、`/image`(`/paste`)、`/copy [N|A-B|last|all]`、`/mouse`、`/reset`、`/undo`、`/resume [编号]`、`/cwd`、`/switch <目录>`、`/term`、`/model [编号|id|模型名]`、`/goal <目标>`(`/goal [status|continue|off]`)、`/memory [clear]`、`/init [--dry-run|--force]`、`/auto [on|off]`、`/intent [on|off]`、`/exit`。
|
|
939
|
+
界面内命令:`/help`、`/clear`、`/tools`、`/context`、`/compact`、`/focus [文件]`、`/device`、`/image`(`/paste`)、`/copy [N|A-B|last|all]`、`/mouse`、`/reset`、`/undo`、`/resume [编号]`、`/cwd`、`/switch <目录>`、`/term`、`/model [编号|id|模型名]`、`/goal <目标>`(`/goal [status|continue|off]`)、`/memory [clear]`、`/init [--dry-run|--force]`、`/auto [on|off]`、`/intent [on|off]`、`/exit`。
|
|
854
940
|
|
|
855
941
|
### 选中与复制
|
|
856
942
|
|