Files
playbook/antigravity-awesome-skills/skills/lore/scripts/README.zh-CN.md
T
2026-07-13 07:44:54 +00:00

54 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# lore 脚本
跨平台 Python 3.6+ 辅助脚本,减少重复的机械工作。无第三方依赖。被 `init` / `sync` / `audit` / `compress` / `lore mirror` 调用,也可独立运行做临时检查。
脚本清单和命令速查在仓库根 `README.md` 的"Scripts"章节里。本文件覆盖根 README 不适合放的内容:设计意图、集成点、局限。
## 设计要点
**优先跨平台。** 仅使用 Python 标准库,不依赖 `bash``jq` 或任何平台特定工具。Windows / Linux / macOS 行为完全一致。
**JSON 友好输出。** 每个脚本都支持 `--json` 便于机器消费。Agent 调用方解析输出;人类可以直接 `less``jq`(如果装了)。
**组合而非重复。** `find_duplicates.py``find_stale.py` 通过 `list_entries.py --json` 复用解析器,不重复实现 entry 格式解析。Entry 格式只在一处定义——将来格式变更只需改 `list_entries.py`
**默认只读。** 这些脚本不写 `.lore/`,只观察。Agent 决定如何处理发现的问题。
**从项目根目录运行。** `list_entries.py` 向上遍历定位 `.lore/`。其他脚本通过 subprocess 调用它,所以这个约束会传递生效。
## 何时调用
| 脚本 | 调用点 | 用途 |
|---|---|---|
| `history.py` | lore history | 列出与 memory entry / file / scope 相关的 git commits |
| `id_hash.py` | 写新 entry 时(init / sync| 计算 entry ID 的 4 字符内容 hash |
| `list_entries.py` | query / audit / compress 的预步骤 | 把所有 entry 枚举为 JSON 供后续处理 |
| `find_duplicates.py` | sync 步骤 5(去重)| 写之前找出可能的重复 entry |
| `find_stale.py` | audit 步骤 2compress 步骤 2lore mirror(可选)| 找出过期 entry 或已标记 `#stale` 的 entry |
## 输出通道
**stdout 是数据通道;stderr 是警告通道。** 所有脚本遵循这个分离,这样 `--json` 消费者就不必从解析结果里过滤噪音。当前只有 `list_entries.py` 会发警告:
- `[WARN] .lore/.config.json has no schema_version field.` —— 配置文件存在但缺 `schema_version` 字段时,每个调用触发一次。加 `"schema_version": 1` 即可消除。
- `[WARN] .lore/.config.json#schema_version=N is newer than this lore skill expects (max: 1).` —— 配置版本超过本 skill 能理解的范围时触发。从上游 pull 最新 lore。
两条警告都是告知性质;`list_entries.py` 不管配置状态如何,stdout 输出始终一致。完整 schema 版本策略见 `references/compatibility.md`
## 测试
没有真实 `.lore/` 时,可以快速验证 import 和参数解析是否正常:
```bash
python scripts/id_hash.py "test entry"
python scripts/list_entries.py # 应输出 "(no entries)" 或清晰报错
```
`list_entries.py``find_duplicates.py``find_stale.py` 需要有内容的 `.lore/` 才能产出有意义的输出。先用 `lore init` 建一个。
## 局限
- **去重只到词袋重叠程度。** Jaccard 相似度能抓到词汇相似的改写,但抓不到语义等价(如 "use TypeScript" vs "TypeScript-only codebase")。更深的检查仍需 LLM 介入。
- **日期计算比较朴素。** `find_stale.py` 直接用 `#verified` / `#added` 标签的日期。如果系统时钟不对,结果会偏差。
- **不自动 archive。** 脚本会报告待 archive 的 entry,但不会移动它们。实际搬迁到 `.lore/archive/` 仍需通过 `lore sync` 完成。
- **理论上可能有 hash 冲突**(4 个十六进制字符 = 16 位 = 1/65536 概率)。实际项目基本不会遇到。如果遇到了,对 entry 文本做微调以改变 hash。