Bug Description
OpenViking 在通过 ov add-resource 索引本地目录时,默认会自动折叠单子目录链(当父目录仅包含一个子目录时,跳过中间层级)。这一行为对 Java Maven/Gradle 项目的多级包结构(如 com/fasterxml/jackson/datatype/jsr310/)造成严重影响:
- 结构丢失:真实的多级包路径被压缩,用户无法通过
ov ls/tree 看到完整源码层级;
- Token 浪费:后续修改目录结构(如加文件触发重索引)时,旧 URI 的索引内容不会自动清理,导致同一文件被重复索引;
- 用户困惑:折叠过程无提示/警告,用户不知道目录结构被修改;CLI 无关闭折叠的选项,被迫使用
.keep 占位文件等 workaround。
Steps to Reproduce
- 准备标准 Java 包结构目录:
src/main/java/
com/ ← 仅含 fasterxml/
fasterxml/ ← 仅含 jackson/
jackson/ ← 仅含 datatype/
datatype/ ← 仅含 jsr310/
jsr310/
Test.java ← 实际文件
- 执行索引命令:
ov add-resource src/main/java --to viking://resources/java --timeout 300
- 查看索引后的目录结构:
ov tree viking://resources/java/ -L 5
- 在
src/main/java/com/ 下新增一个文件 README.md,触发重索引:
touch src/main/java/com/README.md
ov add-resource src/main/java --to viking://resources/java --timeout 300
- 再次查看结构并检查是否存在重复索引。
Expected Behavior
- 保留完整层级:即使目录链每层仅含单个子目录,也应保留原始路径结构(尤其对
src/java/ 等源码目录应智能识别);
- 重索引清理:重索引时自动清理旧 URI 的冗余内容,避免同一文件多份索引;
- 用户友好:
- 折叠时输出警告日志(如
折叠目录: src/main/java/com/);
- 提供 CLI 参数(如
--no-collapse)关闭自动折叠;
- 源码适配:对常见源码结构(Maven/Gradle 的
src/main/java/、前端 src/ 等)默认保留层级。
Actual Behavior
- 结构折叠:步骤3中
ov tree 输出类似:
viking://resources/java/
Test.java ← 实际路径是 com/fasterxml/jackson/datatype/jsr310/Test.java
真实包结构完全丢失。
- 重复索引:步骤5重索引后,旧 URI(
viking://resources/java/Test.java)和新 URI(viking://resources/java/com/README.md 及新结构)共存,导致 Token 浪费。
- 无提示/无开关:全程无日志说明目录被折叠;CLI 无
--no-collapse 等参数,用户只能手动在每层加 .keep 或调整目录结构。
Minimal Reproducible Example
- 每层单子目录加 `.keep` 占位文件;
- 直接索引最深层目录(如 `ov add-resource src/main/java/com/fasterxml/jackson/datatype/jsr310 --to viking://resources/java/...`);
- 重索引前手动 `ov rm` 旧目录。
Error Logs
OpenViking Version
0.3.10
Python Version
3.12.13
Operating System
Linux
Model Backend
None
Additional Context
Workarounds (Current)
-
每层单子目录加 .keep 占位文件;
-
直接索引最深层目录(如 ov add-resource src/main/java/com/fasterxml/jackson/datatype/jsr310 --to viking://resources/java/...);
-
重索引前手动 ov rm 旧目录。
-
该问题对所有天然多级单子目录链的场景(如 Java 包、前端 src/components/ui/...)都适用;
-
用户反馈:把结构困惑留给用户,不符合开发者工具易用性原则;
Bug Description
OpenViking 在通过
ov add-resource索引本地目录时,默认会自动折叠单子目录链(当父目录仅包含一个子目录时,跳过中间层级)。这一行为对 Java Maven/Gradle 项目的多级包结构(如com/fasterxml/jackson/datatype/jsr310/)造成严重影响:ov ls/tree看到完整源码层级;.keep占位文件等 workaround。Steps to Reproduce
src/main/java/com/下新增一个文件README.md,触发重索引:Expected Behavior
src/java/等源码目录应智能识别);折叠目录: src/main/java/com/);--no-collapse)关闭自动折叠;src/main/java/、前端src/等)默认保留层级。Actual Behavior
ov tree输出类似:viking://resources/java/Test.java)和新 URI(viking://resources/java/com/README.md及新结构)共存,导致 Token 浪费。--no-collapse等参数,用户只能手动在每层加.keep或调整目录结构。Minimal Reproducible Example
Error Logs
OpenViking Version
0.3.10
Python Version
3.12.13
Operating System
Linux
Model Backend
None
Additional Context
Workarounds (Current)
每层单子目录加
.keep占位文件;直接索引最深层目录(如
ov add-resource src/main/java/com/fasterxml/jackson/datatype/jsr310 --to viking://resources/java/...);重索引前手动
ov rm旧目录。该问题对所有天然多级单子目录链的场景(如 Java 包、前端
src/components/ui/...)都适用;用户反馈:把结构困惑留给用户,不符合开发者工具易用性原则;