♻️ refactor(skills): separate thirdparty skills into thirdparty/ subdirectory

- Move all third-party skills from codex/skills/ to codex/skills/thirdparty/
- Move .sources/ to codex/skills/thirdparty/.sources/
- Delete systematic-debugging/CREATION-LOG.md (internal dev note, not skill content)
- Update sync_thirdparty_skills.sh paths and conflict detection
- Update thirdparty_skills.json source_list paths
- Update install_skills_action to collect from both own and thirdparty dirs,
  logging [thirdparty] tag for third-party installs
- Update SKILLS.md directory structure docs
- Update tests to reflect new paths

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
csh
2026-05-15 14:50:02 +08:00
co-authored by Claude Opus 4.7
parent 64950e7979
commit b3df41205d
92 changed files with 1606 additions and 27 deletions
+8 -10
View File
@@ -101,10 +101,8 @@ PY
tracked_skill_exists() {
local name="$1"
if git ls-files --error-unmatch -- "codex/skills/$name" >/dev/null 2>&1; then
return 0
fi
return 1
# conflict only if a first-party SKILL.md exists directly under codex/skills/<name>/
[ -f "codex/skills/$name/SKILL.md" ]
}
cd "$REPO_DIR"
@@ -123,7 +121,7 @@ trap cleanup EXIT
git checkout -B "$TARGET_BRANCH" "origin/$TARGET_BRANCH"
mkdir -p "codex/skills/.sources"
mkdir -p "codex/skills/thirdparty/.sources"
sources_file="$tmp_dir/sources.tsv"
if ! emit_sources_tsv > "$sources_file"; then
@@ -165,13 +163,13 @@ while IFS=$'\x1f' read -r source_id snapshot_dir sync_mode source_list skills_su
echo "ERROR: duplicate third-party skill name: $name" >&2
exit 1
fi
if [ -d "codex/skills/$name" ] && tracked_skill_exists "$name"; then
if [ -d "codex/skills/thirdparty/$name" ] && tracked_skill_exists "$name"; then
echo "ERROR: skill name conflict with tracked skill: $name" >&2
exit 1
fi
rm -rf "codex/skills/$name"
cp -R "$dir" "codex/skills/$name"
rm -rf "codex/skills/thirdparty/$name"
cp -R "$dir" "codex/skills/thirdparty/$name"
names+=("$name")
owners["$name"]="$source_id"
done
@@ -182,12 +180,12 @@ while IFS=$'\x1f' read -r source_id snapshot_dir sync_mode source_list skills_su
echo "ERROR: duplicate third-party skill name: $name" >&2
exit 1
fi
if [ -d "codex/skills/$name" ] && tracked_skill_exists "$name"; then
if [ -d "codex/skills/thirdparty/$name" ] && tracked_skill_exists "$name"; then
echo "ERROR: skill name conflict with tracked skill: $name" >&2
exit 1
fi
render_codex_skill "$snapshot_root" "codex/skills/$name" "$platform_config" "$template_root" "$data_dir" "$scripts_dir"
render_codex_skill "$snapshot_root" "codex/skills/thirdparty/$name" "$platform_config" "$template_root" "$data_dir" "$scripts_dir"
names+=("$name")
owners["$name"]="$source_id"
;;
+3 -3
View File
@@ -6,7 +6,7 @@
"upstream_ref": "main",
"snapshot_dir": "superpowers",
"sync_mode": "copy_skill_dirs",
"source_list": "codex/skills/.sources/superpowers.list",
"source_list": "codex/skills/thirdparty/.sources/superpowers.list",
"skills_subdir": "skills",
"remove_paths": ["skills/ui-ux-pro-max"]
},
@@ -16,7 +16,7 @@
"upstream_ref": "main",
"snapshot_dir": "ui-ux-pro-max",
"sync_mode": "render_codex_skill",
"source_list": "codex/skills/.sources/ui-ux-pro-max.list",
"source_list": "codex/skills/thirdparty/.sources/ui-ux-pro-max.list",
"output_name": "ui-ux-pro-max",
"platform_config": "src/ui-ux-pro-max/templates/platforms/codex.json",
"template_root": "src/ui-ux-pro-max/templates",
@@ -29,7 +29,7 @@
"upstream_ref": "main",
"snapshot_dir": "andrej-karpathy-skills",
"sync_mode": "copy_skill_dirs",
"source_list": "codex/skills/.sources/andrej-karpathy-skills.list",
"source_list": "codex/skills/thirdparty/.sources/andrej-karpathy-skills.list",
"skills_subdir": "skills"
}
]