feat(skills): zip格式按照原样结构解析调整完成

This commit is contained in:
wangzhiwei 2026-04-08 16:17:19 +08:00
parent 713c28a534
commit d527e1ad0f
1 changed files with 4 additions and 58 deletions

View File

@ -15,6 +15,7 @@ import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
@ -268,8 +269,9 @@ public class SkillZipParser {
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
System.out.println(entry.getName());
// 检查是否是根目录下的md文件
if (!entry.isDirectory() && entry.getName().endsWith(".md") && !entry.getName().contains("/")) {
if (!entry.isDirectory() && (entry.getName().toLowerCase().endsWith("skill.md") || entry.getName().toLowerCase().endsWith("readme.md"))) {
try (InputStream inputStream = zipFile.getInputStream(entry);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
StringBuilder content = new StringBuilder();
@ -634,36 +636,8 @@ public class SkillZipParser {
}
}
}
/* // 确保包含skills.md文件
boolean hasSkillsMd = false;
for (Map<String, Object> child : children) {
if ("skills.md".equals(child.get("name")) && "file".equals(child.get("type"))) {
hasSkillsMd = true;
break;
}
}
if (!hasSkillsMd) {
Map<String, Object> skillsMdNode = createSkillsMdNode(skillName, skillDescription, skillTags);
children.add(skillsMdNode);
}
// 确保包含scripts目录
boolean hasScriptsDir = false;
for (Map<String, Object> child : children) {
if ("scripts".equals(child.get("name")) && "directory".equals(child.get("type"))) {
hasSkillsMd = true;
break;
}
}
if (!hasScriptsDir) {
Map<String, Object> scriptsDirNode = createScriptsDirNode();
children.add(scriptsDirNode);
}*/
structure.put("children", children);
skillStructure.put("structure", structure);
return skillStructure;
}
@ -816,36 +790,8 @@ public class SkillZipParser {
addFileToTree(children, directoryMap, pathParts, entry, zipFile);
}
}
// 确保包含skills.md文件
boolean hasSkillsMd = false;
for (Map<String, Object> child : children) {
if ("skills.md".equals(child.get("name")) && "file".equals(child.get("type"))) {
hasSkillsMd = true;
break;
}
}
if (!hasSkillsMd) {
Map<String, Object> skillsMdNode = createSkillsMdNode(skillName, skillDescription, skillTags);
children.add(skillsMdNode);
}
// 确保包含scripts目录
boolean hasScriptsDir = false;
for (Map<String, Object> child : children) {
if ("scripts".equals(child.get("name")) && "directory".equals(child.get("type"))) {
hasScriptsDir = true;
break;
}
}
if (!hasScriptsDir) {
Map<String, Object> scriptsDirNode = createScriptsDirNode();
children.add(scriptsDirNode);
}
structure.put("children", children);
skillStructure.put("structure", structure);
return skillStructure;
}
@ -916,7 +862,7 @@ public class SkillZipParser {
// 找到文件所在的目录节点
List<Map<String, Object>> targetChildren = children;
if (directoryPath.length() > 0) {
Map<String, Object> directoryNode = directoryMap.get(directoryPath.toString());
Map<String, Object> directoryNode = directoryMap.get(directoryPath.toString().substring(1));
if (directoryNode != null) {
targetChildren = (List<Map<String, Object>>) directoryNode.get("children");
}