Skip to content

Commit d0b1cc0

Browse files
fix: 改用嵌套独立 zip 结构
Trae Solo 一个 zip 只能装一个 skill,扁平多子目录结构会导致大部分 skill 装不上。改成:外层 dbskill-{VERSION}.zip 内含 17 个独立 zip, 每个独立 zip 解压后根级即 SKILL.md,可直接拖进 Trae Solo 上传。
1 parent 2e69c9d commit d0b1cc0

2 files changed

Lines changed: 37 additions & 27 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ npx skills add dontbesilent2025/dbskill
3535

3636
#### Trae Solo
3737

38-
Trae Solo 支持上传包含根级 `SKILL.md` 的 zip。从 [GitHub Releases](https://github.com/dontbesilent2025/dbskill/releases) 下载最新的 `dbskill-版本号.zip`里面是 17 skill 子文件夹(每个子文件夹里有标准的 `SKILL.md` + 知识库文件),整体上传到 Trae Solo 即可
38+
Trae Solo 一个 zip 装一个 skill。从 [GitHub Releases](https://github.com/dontbesilent2025/dbskill/releases) 下载最新的 `dbskill-版本号.zip`解压后里面是 17 个独立的 skill zip(每个 zip 解压后根级是 `SKILL.md`),逐个拖进 Trae Solo 的「上传技能」窗口即可
3939

4040
如果想本地构建,运行 `bash tools/build-skills.sh`,产物在 `dist/skills/`
4141

tools/build-skills.sh

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,62 +13,72 @@ fi
1313
rm -rf "$OUT_DIR"
1414
mkdir -p "$OUT_DIR"
1515

16-
STAGE_DIR="$(mktemp -d)"
17-
trap 'rm -rf "$STAGE_DIR"' EXIT
16+
INNER_DIR="$(mktemp -d)"
17+
trap 'rm -rf "$INNER_DIR"' EXIT
1818

19-
stage_one() {
19+
build_one() {
2020
local skill_dir="$1"
2121
local name
22-
local target
22+
local stage_dir
2323
local refs
2424

2525
name="$(basename "$skill_dir")"
26-
target="$STAGE_DIR/$name"
27-
mkdir -p "$target"
26+
stage_dir="$(mktemp -d)"
2827

29-
cp "$skill_dir/SKILL.md" "$target/SKILL.md"
28+
cp "$skill_dir/SKILL.md" "$stage_dir/SKILL.md"
3029

31-
refs="$(grep -Eo '知识库/[^`。 、)]*\.md' "$skill_dir/SKILL.md" || true)"
30+
refs="$(grep -Eo '知识库/[^`,。 、)]*\.md' "$skill_dir/SKILL.md" || true)"
3231
if [ -n "$refs" ]; then
3332
while IFS= read -r ref; do
3433
[ -n "$ref" ] || continue
3534
if [ -f "$ROOT_DIR/$ref" ]; then
36-
mkdir -p "$target/$(dirname "$ref")"
37-
cp "$ROOT_DIR/$ref" "$target/$ref"
35+
mkdir -p "$stage_dir/$(dirname "$ref")"
36+
cp "$ROOT_DIR/$ref" "$stage_dir/$ref"
3837
fi
3938
done <<< "$refs"
4039
fi
4140

42-
echo "staged $name"
43-
}
44-
45-
for skill_md in "$ROOT_DIR"/skills/*/SKILL.md; do
46-
stage_one "$(dirname "$skill_md")"
47-
done
48-
49-
python3 - "$STAGE_DIR" "$OUT_DIR/dbskill-${VERSION}.zip" <<'PY'
41+
python3 - "$stage_dir" "$INNER_DIR/${name}.zip" <<'PY'
5042
import os
5143
import sys
5244
import zipfile
5345
54-
stage_dir, archive_path = sys.argv[1], sys.argv[2]
46+
source_dir, archive_path = sys.argv[1], sys.argv[2]
5547
5648
with zipfile.ZipFile(archive_path, "w", compression=zipfile.ZIP_DEFLATED) as archive:
57-
for root, _, files in os.walk(stage_dir):
49+
for root, _, files in os.walk(source_dir):
5850
for filename in files:
5951
path = os.path.join(root, filename)
60-
archive.write(path, os.path.relpath(path, stage_dir))
52+
archive.write(path, os.path.relpath(path, source_dir))
6153
PY
6254

63-
cat > "$OUT_DIR/README.md" <<EOF
64-
# dbskill skill 包
55+
rm -rf "$stage_dir"
56+
echo "built ${name}.zip"
57+
}
58+
59+
for skill_md in "$ROOT_DIR"/skills/*/SKILL.md; do
60+
build_one "$(dirname "$skill_md")"
61+
done
6562

66-
版本:${VERSION}
63+
cat > "$INNER_DIR/README.md" <<EOF
64+
# dbskill ${VERSION}
6765
68-
从 GitHub Releases 下载 dbskill-${VERSION}.zipzip 的根目录是 17 个 skill 子文件夹,每个子文件夹里有一个标准命名的 SKILL.md(带 YAML frontmatter,含 name + description),并附带该 skill 引用的知识库文件。
66+
里面是 17 个独立的 skill zip 包。每个 zip 解压后根目录是 SKILL.md(带 YAML frontmatter,含 name + description),并附带该 skill 引用的知识库文件。
6967
70-
格式遵循 Anthropic Skills 规范,可用于 Trae Solo、Claude Code 等支持该格式的产品。整体上传 zip,或拆出需要的子文件夹打包后单独上传都可以
68+
格式遵循 Anthropic Skills 规范,可用于 Trae Solo、Claude Code 等支持该格式的产品。逐个上传到 Trae Solo 的「上传技能」窗口即可
7169
EOF
7270

71+
python3 - "$INNER_DIR" "$OUT_DIR/dbskill-${VERSION}.zip" <<'PY'
72+
import os
73+
import sys
74+
import zipfile
75+
76+
inner_dir, archive_path = sys.argv[1], sys.argv[2]
77+
78+
with zipfile.ZipFile(archive_path, "w", compression=zipfile.ZIP_DEFLATED) as archive:
79+
for filename in sorted(os.listdir(inner_dir)):
80+
archive.write(os.path.join(inner_dir, filename), filename)
81+
PY
82+
7383
echo
7484
echo "done: $OUT_DIR/dbskill-${VERSION}.zip"

0 commit comments

Comments
 (0)