create-dwy 0.19.1 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/package.json +1 -1
- package/src/cli-help.js +28 -2
- package/src/sync-all.js +95 -583
- package/src/sync-codex.js +14 -7
- package/src/sync-opencode.js +8 -22
- package/src/sync.js +60 -149
- package/src/tab-multiselect.js +15 -53
- package/templates/ai-tools/CHANGELOG.md +195 -0
- package/templates/ai-tools/CLAUDE.md +39 -58
- package/templates/ai-tools/VERSION +1 -1
- package/templates/ai-tools/hooks/Git/pre-git-commit-ai-signature-check.sh +5 -4
- package/templates/ai-tools/rules/Android/dwy-android-core.md +147 -13
- package/templates/ai-tools/rules/Android/dwy-android-layering.md +142 -0
- package/templates/ai-tools/rules/Android/dwy-android-mvp.md +55 -0
- package/templates/ai-tools/rules/Android/dwy-android-support-only.md +2 -0
- package/templates/ai-tools/rules/Docker/dwy-docker.md +23 -1
- package/templates/ai-tools/rules/Flutter/dwy-flutter-core.md +2 -0
- package/templates/ai-tools/rules/Flutter/dwy-flutter-testing.md +1 -1
- package/templates/ai-tools/rules/HarmonyOS/dwy-arkts-ui-build.md +12 -8
- package/templates/ai-tools/rules/Python/dwy-python-backend.md +4 -43
- package/templates/ai-tools/rules/Python/dwy-python-layering.md +169 -0
- package/templates/ai-tools/rules/Vue/dwy-vue-core.md +11 -49
- package/templates/ai-tools/rules/Vue/dwy-vue-layering.md +153 -0
- package/templates/ai-tools/rules/iOS/dwy-apple-layering.md +133 -0
- package/templates/ai-tools/rules/iOS/dwy-swift-core.md +2 -0
- package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-code-craft.md +83 -0
- package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dependency-freshness.md +27 -66
- package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit.md +8 -219
- package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-oss-commercial-license.md +27 -123
- package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prod-branch.md +31 -0
- package/templates/ai-tools/rules//346/225/260/346/215/256/345/272/223/dwy-postgres.md +17 -10
- package/templates/ai-tools/rules//346/225/260/346/215/256/345/272/223/dwy-redis.md +6 -3
- package/templates/ai-tools/skills/Docker/dwy-deploy-first/SKILL.md +14 -14
- package/templates/ai-tools/skills/Docker/dwy-deploy-first/references/chapter-01-mirrors.md +2 -2
- package/templates/ai-tools/skills/Docker/dwy-docker/SKILL.md +21 -13
- package/templates/ai-tools/skills/Docker/dwy-docker/references/ask-templates.md +13 -12
- package/templates/ai-tools/skills/Docker/dwy-docker/references/templates.md +3 -1
- package/templates/ai-tools/skills/Docker/dwy-docker/references/version-rules.md +10 -6
- package/templates/ai-tools/skills/Docker/dwy-docker/scripts/query_dockerhub.py +21 -6
- package/templates/ai-tools/skills/Docker/dwy-docker/scripts/scan_images.sh +2 -2
- package/templates/ai-tools/skills/Docker/dwy-mirror-source/SKILL.md +44 -30
- package/templates/ai-tools/skills/Docker/dwy-mirror-source/references/dockerfile-snippets.md +2 -0
- package/templates/ai-tools/skills/Docker/dwy-mirror-source/references/mirror-providers.md +8 -8
- package/templates/ai-tools/skills/Docker/dwy-mirror-source/scripts/apply_mirrors.py +14 -1
- package/templates/ai-tools/skills/Docker/dwy-mirror-source/scripts/check_mirrors.py +4 -0
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/SKILL.md +8 -6
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/references/digest/python-sdk.md +3 -3
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/references/digest/stream-engine.md +2 -2
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/references/review-rules/anti-patterns.md +3 -1
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/references/review-rules/change-checklist.md +4 -4
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/references/review-rules/lethal-violations.md +5 -5
- package/templates/ai-tools/skills/DolphinDB/dwy-dolphindb/references/review-rules/perf-baselines.md +5 -5
- package/templates/ai-tools/skills/Python/dwy-eapi/SKILL.md +2 -2
- package/templates/ai-tools/skills/Python/dwy-eapi/v0/breaking.md +3 -0
- package/templates/ai-tools/skills/Python/dwy-eapi/v0/email-canonical.md +28 -3
- package/templates/ai-tools/skills/Python/dwy-eapi/v0/index.md +2 -2
- package/templates/ai-tools/skills/Python/dwy-eapi/v0/providers-email.md +12 -2
- package/templates/ai-tools/skills/Vue/dwy-eui/references/eui-design-guide.md +1 -1
- package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-architecture/SKILL.md +11 -14
- package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/references/state-and-contract.md +1 -1
- package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prototype/SKILL.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-github-action-publish/SKILL.md +32 -15
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-github-action-publish/references/electron-release-workflow-template.yml +3 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-github-action-publish/references/release-workflow-template.yml +8 -5
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/SKILL.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/assets/appstore-submission.yaml +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/references/aso.md +2 -0
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-ios-app-store-release/references/in-app-purchase-review.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/SKILL.md +4 -3
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/android.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/backend-deploy.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/changelog.md +45 -27
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/frontend-deploy.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/generic-release.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/git-tag.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/harmony.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/ios.md +1 -1
- package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-semver/SKILL.md +8 -0
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/SKILL.md +7 -7
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/references/checks-runtime.md +63 -59
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_base.sh +10 -1
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_capacity.sh +21 -23
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_db.sh +9 -1
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_docker.sh +20 -24
- package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_logs.sh +3 -3
- package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/SKILL.md +4 -2
- package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/references/api.md +1 -1
- package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/scripts/synthesize.py +1 -0
- package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/media-platform-packaging/SKILL.md +7 -5
- package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/media-platform-packaging/references/platform-copy-examples.md +5 -3
- package/templates/ai-tools/skills//351/200/232/347/224/250/dwy-dependency-choice/SKILL.md +140 -0
- package/templates/ai-tools/skills//351/200/232/347/224/250/dwy-git-commit/SKILL.md +113 -0
- package/templates/ai-tools/skills//351/200/232/347/224/250/dwy-shared/SKILL.md +16 -13
- package/templates/ai-tools/skills//351/200/232/347/224/250/dwy-whiteboard-prototype/SKILL.md +1 -1
- package/src/sync-packs.js +0 -223
- package/src/sync-scene.js +0 -178
- package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-development.md +0 -115
package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_docker.sh
CHANGED
|
@@ -43,7 +43,7 @@ docker ps --format "{{.Names}}|{{.Ports}}" 2>/dev/null | while IFS='|' read -r n
|
|
|
43
43
|
done
|
|
44
44
|
|
|
45
45
|
echo ""
|
|
46
|
-
echo "--- 镜像 tag 分级检查 (生产期望: 固定到具体 patch, 跑 /dwy-docker
|
|
46
|
+
echo "--- 镜像 tag 分级检查 (生产期望: 固定到具体 patch, 跑 /dwy-docker 按当次 tag 列表选) ---"
|
|
47
47
|
# 浮动 tag 黑名单 (无版本号或仅描述类的)
|
|
48
48
|
FLOATING_TAGS='^(latest|stable|mainline|edge|current|alpine|slim|bookworm|bullseye|buster|jammy|focal|noble|nightly)$'
|
|
49
49
|
docker ps --format "{{.Names}}|{{.Image}}" 2>/dev/null | while IFS='|' read -r name image; do
|
|
@@ -87,7 +87,7 @@ docker ps --format "{{.Names}}|{{.Image}}" 2>/dev/null | while IFS='|' read -r n
|
|
|
87
87
|
fi
|
|
88
88
|
done
|
|
89
89
|
echo ""
|
|
90
|
-
echo "[i] 修复:对每条 [!!!] / [!!] / [!] 的镜像,跑 /dwy-docker
|
|
90
|
+
echo "[i] 修复:对每条 [!!!] / [!!] / [!] 的镜像,跑 /dwy-docker 按当次 tag 列表固定版本。query_dockerhub.py 只是 Hub 先验"
|
|
91
91
|
|
|
92
92
|
echo ""
|
|
93
93
|
echo "--- 容器是否以 root 运行 ---"
|
|
@@ -169,7 +169,7 @@ echo "max-size: ${LOG_MAX_SIZE:-(未配置, 单容器日志可无限增长)}"
|
|
|
169
169
|
echo "max-file: ${LOG_MAX_FILE:-(未配置)}"
|
|
170
170
|
if [[ -z "$LOG_MAX_SIZE" ]]; then
|
|
171
171
|
echo "[!!] HIGH: 未限制单容器日志大小,长跑容器可能写满磁盘"
|
|
172
|
-
echo " 建议: daemon.json
|
|
172
|
+
echo " 建议: daemon.json 的 log-opts 写上 max-size 和 max-file。数字按 check_logs 的日增量和根盘剩余,没有增速才用冷启动先验,不要写死 100m"
|
|
173
173
|
fi
|
|
174
174
|
|
|
175
175
|
echo ""
|
|
@@ -177,39 +177,36 @@ echo "--- docker compose 文件位置 (用于人工核查) ---"
|
|
|
177
177
|
sudo -n find /home /opt /srv /root -maxdepth 5 \( -name "docker-compose*.yml" -o -name "compose.yml" \) 2>/dev/null | head -10
|
|
178
178
|
|
|
179
179
|
echo ""
|
|
180
|
-
echo "---
|
|
181
|
-
# a.
|
|
180
|
+
echo "--- 镜像源 (候选名单不是合格线) ---"
|
|
181
|
+
# a. 时区只说明要不要考虑公网加速,不决定哪个源合格
|
|
182
182
|
TZ_VAL=$(timedatectl show -p Timezone --value 2>/dev/null || readlink -f /etc/localtime 2>/dev/null | sed 's|.*/zoneinfo/||')
|
|
183
183
|
echo "服务器时区: ${TZ_VAL:-unknown}"
|
|
184
184
|
LIKELY_CN=0
|
|
185
185
|
case "$TZ_VAL" in
|
|
186
186
|
Asia/Shanghai|Asia/Chongqing|Asia/Urumqi|Asia/Harbin|Asia/Hong_Kong|PRC) LIKELY_CN=1 ;;
|
|
187
187
|
esac
|
|
188
|
-
[[ "$LIKELY_CN" == "1" ]] && echo "→ 时区在 PRC
|
|
189
|
-
|| echo "→ 时区非 PRC
|
|
188
|
+
[[ "$LIKELY_CN" == "1" ]] && echo "→ 时区在 PRC。拉 docker.io 前先探测,私有库不参加公网竞速" \
|
|
189
|
+
|| echo "→ 时区非 PRC。加速可选"
|
|
190
190
|
|
|
191
191
|
# b. daemon.json registry-mirrors
|
|
192
|
+
# 主机名在候选名单里不等于通过。合格要看当次 Registry 请求的内容和延迟。
|
|
192
193
|
echo ""
|
|
193
194
|
MIRRORS=$(echo "$DAEMON_JSON" | grep -oE '"registry-mirrors"[[:space:]]*:[[:space:]]*\[[^]]*\]' | head -1)
|
|
194
195
|
if [[ -n "$MIRRORS" ]]; then
|
|
195
196
|
echo "daemon registry-mirrors:"
|
|
196
197
|
echo " $MIRRORS"
|
|
197
|
-
# 简单识别推荐源
|
|
198
198
|
echo "$MIRRORS" | grep -oE 'https?://[a-zA-Z0-9.-]+' | while read u; do
|
|
199
199
|
case "$u" in
|
|
200
200
|
*daocloud*|*aliyun*|*aliyuncs*|*ustc*|*tsinghua*|*163*|*tencent*|*huaweicloud*)
|
|
201
|
-
echo " [
|
|
201
|
+
echo " [i] $u (在候选名单里,未测延迟和内容)" ;;
|
|
202
202
|
*)
|
|
203
|
-
echo " [i] $u (
|
|
203
|
+
echo " [i] $u (名单外。私有库或用户指定源保持不动;公网源要当次探测)" ;;
|
|
204
204
|
esac
|
|
205
205
|
done
|
|
206
206
|
else
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
echo "[i] daemon.json 未配 registry-mirrors (境外服务器一般不需要)"
|
|
211
|
-
fi
|
|
212
|
-
echo " 修复: 跑 /dwy-mirror-source 自动写入阿里云/中科大/daocloud 镜像源"
|
|
207
|
+
echo "[i] daemon.json 未配 registry-mirrors"
|
|
208
|
+
echo " 拉的是 docker.io 公网时,跑 /dwy-mirror-source,当次探测后按延迟从低到高写入"
|
|
209
|
+
echo " 不要因为没写 daocloud 判失败。私有库或用户指定源不参加公网竞速"
|
|
213
210
|
fi
|
|
214
211
|
|
|
215
212
|
# c. 当前运行中容器使用的境外 registry (registry-mirrors 仅对 docker.io 生效)
|
|
@@ -231,21 +228,20 @@ docker ps --format "{{.Names}}|{{.Image}}" 2>/dev/null | while IFS='|' read -r n
|
|
|
231
228
|
|
|
232
229
|
case "$registry" in
|
|
233
230
|
docker.io)
|
|
234
|
-
tag="
|
|
235
|
-
[[ -z "$MIRRORS" && "$LIKELY_CN" == "1" ]] && tag="[!!] 未配 mirror 国内拉取慢"
|
|
231
|
+
tag="[i] docker.io。加速是否最快看当次探测,不看名单里有没有源"
|
|
236
232
|
;;
|
|
237
233
|
gcr.io|ghcr.io|k8s.gcr.io|registry.k8s.io|quay.io|mcr.microsoft.com|nvcr.io|docker.elastic.co)
|
|
238
234
|
if [[ "$LIKELY_CN" == "1" ]]; then
|
|
239
|
-
tag="[!!] HIGH 境外 registry, registry-mirrors 不生效,
|
|
235
|
+
tag="[!!] HIGH 境外 registry, registry-mirrors 不生效, 跑 /dwy-mirror-source 选当次延迟最低且内容正确的前缀"
|
|
240
236
|
else
|
|
241
237
|
tag="[i] 境外 registry"
|
|
242
238
|
fi
|
|
243
239
|
;;
|
|
244
240
|
*daocloud*|*aliyun*|*aliyuncs*|*ustc*)
|
|
245
|
-
tag="[
|
|
241
|
+
tag="[i] 用了候选前缀,未测是否本次最快"
|
|
246
242
|
;;
|
|
247
243
|
*)
|
|
248
|
-
tag="[i] 自建/私有 registry"
|
|
244
|
+
tag="[i] 自建/私有 registry,不参加公网竞速"
|
|
249
245
|
;;
|
|
250
246
|
esac
|
|
251
247
|
printf " %-32s registry=%-32s %s\n" "$name" "$registry" "$tag"
|
|
@@ -253,7 +249,7 @@ done
|
|
|
253
249
|
|
|
254
250
|
echo ""
|
|
255
251
|
echo "[i] 修复路径:"
|
|
256
|
-
echo " 1. docker.io 加速 → /dwy-mirror-source
|
|
257
|
-
echo " 2. gcr/ghcr/k8s → 把 image
|
|
258
|
-
echo " 3. 镜像版本不固定 → /dwy-docker
|
|
252
|
+
echo " 1. docker.io 加速 → /dwy-mirror-source 当次探测后按延迟排序写入 registry-mirrors"
|
|
253
|
+
echo " 2. gcr/ghcr/k8s → 把 image 改成当次延迟最低的前缀, 候选见 dwy-mirror-source"
|
|
254
|
+
echo " 3. 镜像版本不固定 → /dwy-docker 按当次 tag 列表固定,N-1 只是偏好"
|
|
259
255
|
REMOTE
|
package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_logs.sh
CHANGED
|
@@ -190,9 +190,9 @@ echo "估算 Docker 日志日均增量: ${GROWTH_MB} MB/day (基于容器存活
|
|
|
190
190
|
if [[ "$GROWTH_MB" -gt 0 && "$ROOT_FREE_MB" -gt 0 ]]; then
|
|
191
191
|
DAYS=$(( ROOT_FREE_MB / GROWTH_MB ))
|
|
192
192
|
echo "按当前增速预计可撑: ${DAYS} 天 (粗估, 仅算 docker json-log)"
|
|
193
|
-
if [[ "$DAYS" -lt 30 ]]; then echo "[!!!] CRITICAL:
|
|
194
|
-
elif [[ "$DAYS" -lt 90 ]]; then echo "[!!] HIGH:
|
|
195
|
-
else echo "[
|
|
193
|
+
if [[ "$DAYS" -lt 30 ]]; then echo "[!!!] CRITICAL: 按当前增速不足 30 天写满根盘。先确认已有 max-size;配额按这条增速收紧或扩盘,不要套用固定的 10m/50m/100m"
|
|
194
|
+
elif [[ "$DAYS" -lt 90 ]]; then echo "[!!] HIGH: 按当前增速不足 90 天写满根盘。30/90 天是告警线,不是要配成的保留天数"
|
|
195
|
+
else echo "[i] 按当前增速撑过 90 天。90 天是告警线,不是目标配额"
|
|
196
196
|
fi
|
|
197
197
|
else
|
|
198
198
|
echo "[i] 无法估算日均增量 (容器刚起或无日志)"
|
package/templates/ai-tools/skills//350/207/252/345/252/222/344/275/223/dwy-doubao-tts/SKILL.md
CHANGED
|
@@ -18,8 +18,10 @@ description: >
|
|
|
18
18
|
1. **私人配置唯一位置**:`~/.dwy/config.yaml`(权限 `600`),豆包段为顶层 key `doubao_tts`
|
|
19
19
|
2. **禁止**把 `api_key`、音色 ID 写入 skill、项目、commit;禁止回显完整 Key
|
|
20
20
|
3. 输出音频默认 `doubao_tts.output_dir`(默认 `~/Movies/doubao-tts`),不落到仓库内
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
|
|
22
|
+
## 当前接口先验
|
|
23
|
+
|
|
24
|
+
写作时可用的资源是 `seed-icl-2.0`,地址是 `POST https://openspeech.bytedance.com/api/v3/tts/unidirectional`。真正调用以 `~/.dwy/config.yaml` 的 `resource_id` 和 `endpoint` 为准。返回 4xx、模型下线或连不上时,查火山引擎控制台当前文档和账号已开通资源,换可用地址和资源 ID。不要把查到的新地址写回本 skill。结束码 `20000000`、`speech_rate` / `loudness_rate` 的 `[-50,100]` 只属于这条先验接口,换接口后以新文档为准。
|
|
23
25
|
|
|
24
26
|
## 全局配置约定(`~/.dwy/config.yaml`)
|
|
25
27
|
|
|
@@ -206,6 +206,7 @@ def synthesize(
|
|
|
206
206
|
timeout: int,
|
|
207
207
|
) -> dict[str, Any]:
|
|
208
208
|
"""发单向流式请求,拼接 base64 音频并落盘。"""
|
|
209
|
+
# 配置缺字段时才用当前先验。4xx 或模型下线不要死磕这两条,改查火山控制台文档。
|
|
209
210
|
endpoint = cfg.get("endpoint") or "https://openspeech.bytedance.com/api/v3/tts/unidirectional"
|
|
210
211
|
resource_id = cfg.get("resource_id") or "seed-icl-2.0"
|
|
211
212
|
speaker = speaker_id(cfg, voice_key)
|
|
@@ -35,13 +35,15 @@ description: |
|
|
|
35
35
|
|
|
36
36
|
## 平台文案规则
|
|
37
37
|
|
|
38
|
+
字数上限和标签分隔符是各平台当前发布页的先验。交付前以该平台此刻的输入限制为准。页面改了上限或分隔符,按页面改文案。不要用 20、16 或英文逗号把一份文案判失败,也不要把新上限写回本文件。
|
|
39
|
+
|
|
38
40
|
| 平台 | 标题策略 | 简介与标签 |
|
|
39
41
|
|---|---|---|
|
|
40
42
|
| B站 | 主题 + 明确收益;长度不强行压缩 | 用开场问题、内容范围、一个边界或收获;4–7 个 `#标签` |
|
|
41
|
-
| YouTube | 主题 + 明确收益;长度不强行压缩 |
|
|
43
|
+
| YouTube | 主题 + 明确收益;长度不强行压缩 | 用开场问题、内容范围、一个边界或收获;标签字段当前先验是不用 `#`、多个关键词用英文逗号分隔,例如 `AI education, large language models, Transformer` |
|
|
42
44
|
| 抖音 | 问题或反常识钩子优先 | 1–2 句,强调观看收益;3–6 个标签 |
|
|
43
|
-
| 小红书 |
|
|
44
|
-
| 微信视频号 |
|
|
45
|
+
| 小红书 | 当前上限先验:20 个汉字(标点计入)。先写“小白也能懂”或直接收益 | 2–4 句,口语、可保存;5–8 个标签 |
|
|
46
|
+
| 微信视频号 | 当前上限先验:16 个字符(中文、英文、数字与标点均计入)。优先“人群 + 主题/收益” | 1–2 句,直接说明看完能获得什么;3–5 个标签 |
|
|
45
47
|
|
|
46
48
|
避免“保姆级”“秒变专家”“全网最全”等空泛承诺。标题、封面主字和简介可以分工,不能机械重复。
|
|
47
49
|
|
|
@@ -118,8 +120,8 @@ description: |
|
|
|
118
120
|
|
|
119
121
|
## 交付前检查
|
|
120
122
|
|
|
121
|
-
- [ ]
|
|
122
|
-
- [ ]
|
|
123
|
+
- [ ] 小红书标题不超过该平台当前标题上限。页面上读不到限制时,用先验 20 字(标点计入)。
|
|
124
|
+
- [ ] 微信视频号标题不超过该平台当前标题上限。页面上读不到限制时,用先验 16 字(标点计入)。
|
|
123
125
|
- [ ] 每个封面只含一个主标题,且与缩略图尺寸匹配。
|
|
124
126
|
- [ ] 16:9、4:3、3:4 是独立构图,不是同图硬裁。
|
|
125
127
|
- [ ] 已核对并报告每张图片的像素比例与保存路径。
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# 平台文案示例
|
|
2
2
|
|
|
3
|
+
字数和标签分隔符跟 `SKILL.md` 一样,是当前发布页的先验。页面限制变了,以页面为准。
|
|
4
|
+
|
|
3
5
|
## 小红书标题长度
|
|
4
6
|
|
|
5
|
-
计算 Unicode
|
|
7
|
+
计算 Unicode 字符数,标点也计入。当前上限先验 20。
|
|
6
8
|
|
|
7
9
|
| 合格示例 | 字符数 |
|
|
8
10
|
|---|---:|
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
|
|
12
14
|
## 微信视频号标题长度
|
|
13
15
|
|
|
14
|
-
计算 Unicode
|
|
16
|
+
计算 Unicode 字符数,中文、英文、数字和标点均计入。当前上限先验 16。
|
|
15
17
|
|
|
16
18
|
| 合格示例 | 字符数 |
|
|
17
19
|
|---|---:|
|
|
@@ -20,7 +22,7 @@
|
|
|
20
22
|
|
|
21
23
|
## YouTube 标签格式
|
|
22
24
|
|
|
23
|
-
YouTube
|
|
25
|
+
YouTube 标签字段的当前先验:不用 `#`,多个标签用英文逗号分隔。发布页改了分隔符就跟页面走:
|
|
24
26
|
|
|
25
27
|
```text
|
|
26
28
|
AI education, large language models, Transformer, generative AI
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dwy-dependency-choice
|
|
3
|
+
description: "新增或升级运行时依赖、选版本、选基础镜像 / SDK、检查开源许可证时必须使用(即使用户没说 skill 名)。只选发布满 7 天的正式版;闭源商用禁止 GPL / AGPL / SSPL / 非商业许可。各栈查发布时间和隐私协议附录模板在本 skill。不负责本包自己的 SemVer(那是 dwy-semver)。已安装的旧版本不用为此升级。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 依赖选型(版本 + 许可)
|
|
7
|
+
|
|
8
|
+
新装或新选依赖、base 镜像、SDK、字体、图标、素材、模型权重时读本 skill。已安装的旧版本不用为此升级。本包自己的版本号走 `dwy-semver`。
|
|
9
|
+
|
|
10
|
+
没有 skill 的工具只看这两份短 rule,和本 skill 冲突时以本 skill 为准:`rules/开发流程/dwy-dependency-freshness.md`、`rules/开发流程/dwy-oss-commercial-license.md`。
|
|
11
|
+
|
|
12
|
+
## 一、版本
|
|
13
|
+
|
|
14
|
+
预发布(beta / rc / alpha)未冻结 API。刚发布的正式版也常带回归。先丢掉预发布,再查正式版的首次发布时间,避开不满 7 天的版本。
|
|
15
|
+
|
|
16
|
+
适用所有包管理器。下面没列出的栈,查该包实际所在的 registry。
|
|
17
|
+
|
|
18
|
+
### 适用边界
|
|
19
|
+
|
|
20
|
+
- 只约束首次选型:新项目引入新包、新搭脚手架选 base 镜像 / SDK、原项目引入此前没用过的依赖。
|
|
21
|
+
- 已安装的旧版本无需为此升级。
|
|
22
|
+
- 7 天是下限排除条件,不是「必须选最近一个满 7 天的版本」。最终选哪个稳定正式版,看成熟度、维护、体积、和当前栈是否兼容。
|
|
23
|
+
|
|
24
|
+
### 硬约束
|
|
25
|
+
|
|
26
|
+
候选必须同时满足下面两条。给用户的选项同样只列合格版本。
|
|
27
|
+
|
|
28
|
+
- 只选正式版。禁止版本号或 tag 含 `beta` / `rc` / `alpha` / `preview` / `nightly` / `snapshot` / `canary` / `dev` / `experimental`,或 registry 标为 pre-release(npm dist-tag `next` / `beta` / `rc`、GitHub `prerelease: true`、PyPI 版本号带 `a` / `b` / `rc`)。预发布即使超过 7 天也不用。
|
|
29
|
+
- 选定前查该正式版的首次发布时间。用官方 registry 的发布时间,不是上传时间,不是 `latest` / `stable` tag 时间。
|
|
30
|
+
- 禁止采用发布时间距今不满 7 天的版本。含安全补丁,无例外。等满 7 天再用。
|
|
31
|
+
- 禁止 `@latest` / `latest` / `stable` / 浮动 tag / 不带版本号。这些会落到刚发布的版本或预发布通道。
|
|
32
|
+
- 用户口头点名某个 beta / rc:不直接装。说明只选正式版,改给最近一个合格正式版让用户确认。
|
|
33
|
+
|
|
34
|
+
### 各栈查发布时间
|
|
35
|
+
|
|
36
|
+
表里的 URL 和字段是当前先验。包不在这个宿主、字段不是首次发布,或请求失败,就换它实际所在的 registry 或发行说明。不要用示例版本号顶上。查到的新入口不要写回本表。
|
|
37
|
+
|
|
38
|
+
| 栈 | 查发布时间 |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| npm / pnpm | 先验:`npm view <pkg> time --json`。官方 registry 连不上,或包不在 npmjs,改查实际所在的 registry。刚发布的传播延迟不是换源的理由 |
|
|
41
|
+
| uv / pip | 先验:`https://pypi.org/pypi/<pkg>/json`。取该版本各文件里最早的 `upload_time`,不要默认 `[0]` 就是首次。包不在 pypi.org 就查它实际所在的 index |
|
|
42
|
+
| Docker | 查该 tag 的首次发布时间。Hub tags API 的 `last_updated` 会因重复推送变动,不能当成首次发布。Hub 不通或镜像不在 Hub 时改查它所在 registry |
|
|
43
|
+
| Android(Gradle / Maven) | 先验:包所在仓库的 `maven-metadata.xml`。`<lastUpdated>` 会随元数据重写,不能单独当成首次发布。对不上就看该版本的发行说明或 tag。包不在 Maven Central 就查它实际的仓库 |
|
|
44
|
+
| iOS(CocoaPods) | 先验:`https://github.com/CocoaPods/Specs` 或该 pod 源仓库的 release / tag。不在 Specs 里就查实际 spec 源 |
|
|
45
|
+
| iOS(SPM) | 源仓库 release / tag 时间 |
|
|
46
|
+
| 鸿蒙(ohpm) | 先验:ohpm registry 包元数据 publishTime。这个 host 没有该包就查项目实际使用的 ohpm 源 |
|
|
47
|
+
| Flutter(pub) | 先验:`https://pub.dev/packages/<pkg>` 的 published,或 pub API。私有 pub 用那个 host |
|
|
48
|
+
|
|
49
|
+
拿不到精确发布时间:选更早的正式版,不选「最新」,不选 beta。
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 反例:预发布,即使发布超过 7 天也不用
|
|
53
|
+
pnpm add some-pkg@1.3.0-beta.2
|
|
54
|
+
uv add some-pkg==2.0.0rc1
|
|
55
|
+
FROM node:23.0.0-rc
|
|
56
|
+
|
|
57
|
+
# 反例:直接装 latest
|
|
58
|
+
pnpm add some-pkg@latest
|
|
59
|
+
FROM node:latest
|
|
60
|
+
|
|
61
|
+
# 正例:先查正式版发布时间,再锁一个已满 7 天的正式版
|
|
62
|
+
npm view some-pkg time --json
|
|
63
|
+
pnpm add some-pkg@1.2.3
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 二、许可
|
|
67
|
+
|
|
68
|
+
闭源商用(收费、SaaS、付费 App、对外交付)引入开源库时查许可。纯学习原型先不挡;一旦上架或收费,补齐本节。
|
|
69
|
+
|
|
70
|
+
当前仓库本身是对外发布的开源库时,依赖许可按该库自己的许可证评估。GPL 不因为本节自动禁止。
|
|
71
|
+
|
|
72
|
+
只查直接依赖,不强制盘传递依赖。覆盖 npm/pnpm、PyPI/uv、CocoaPods/SPM、Gradle/Maven、ohpm、pub、Docker 基础镜像、字体、图标、素材、模型权重与 SDK。
|
|
73
|
+
|
|
74
|
+
### 三条
|
|
75
|
+
|
|
76
|
+
1. 未确认 license 的包禁止引入。
|
|
77
|
+
2. 明确不可商用或强 copyleft:换可商用替代,或购买商业授权。不要直接使用。
|
|
78
|
+
3. 只有许可强制要求署名 / NOTICE 时,才在隐私协议附录声明(含锁定版本)。不强制署名的库不写。
|
|
79
|
+
|
|
80
|
+
### 禁止引入
|
|
81
|
+
|
|
82
|
+
| 类型 | 常见标识 | 原因 |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| 明确非商业 | `CC-BY-NC*`、`CC-NC`、`PolyForm-Noncommercial`、许可证写 Non-Commercial / No Commercial Use | 商用即侵权 |
|
|
85
|
+
| 强传染 copyleft(闭源商用) | `GPL-2.0`、`GPL-3.0`、`AGPL-3.0`、`SSPL` | 可能强制整包开源或限制网络服务形态 |
|
|
86
|
+
| 限制竞争 / 生产用途 | `BUSL`(未到 Change Date 且限制 Production)、Commons Clause、部分 Source-Available | 表面开源,实则禁商用或禁竞争 |
|
|
87
|
+
| 仅免费个人 / 评估 | 字体、图标、SDK 写 free for personal use only、evaluation only | 商用需买授权 |
|
|
88
|
+
| 无 license | 仓库无 LICENSE,或 all rights reserved 却当开源用 | 默认不可用 |
|
|
89
|
+
|
|
90
|
+
已知会把上表许可顶进运行时链接的包也不得引。
|
|
91
|
+
|
|
92
|
+
例外必须记下来:已购买商业授权且合同覆盖当前用途(授权方、合同编号、到期日);LGPL 不得默认通过,单独评估后再定。
|
|
93
|
+
|
|
94
|
+
选型对比加一列 License:
|
|
95
|
+
|
|
96
|
+
- `OK-商用`:可商用,无强制署名则声明页可不写
|
|
97
|
+
- `OK-商用+强制署名`:MIT / BSD / Apache-2.0 / ISC 等要求保留版权与许可声明,进隐私协议附录
|
|
98
|
+
- `OK-商用+额外义务`:Apache NOTICE、MPL 文件级 copyleft,按义务处理
|
|
99
|
+
- `禁-不可商用/高风险`:不得作为推荐默认项
|
|
100
|
+
|
|
101
|
+
### 强制署名时的声明
|
|
102
|
+
|
|
103
|
+
许可明确要求 attribution / copyright notice / NOTICE / 保留许可文本时才声明。
|
|
104
|
+
|
|
105
|
+
落点只有隐私协议附录「第三方开源组件」。不写进个人信息处理条款正文。关于页可以链到附录,不替代附录。
|
|
106
|
+
|
|
107
|
+
| 字段 | 说明 |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| 组件名 | 直接依赖包名 |
|
|
110
|
+
| 版本 | lockfile 里的锁定版本,禁止只写 `latest` |
|
|
111
|
+
| 许可证 | SPDX 标识 |
|
|
112
|
+
| 版权声明 | 来自 LICENSE 或包元数据 |
|
|
113
|
+
| 许可全文或链接 | 全文或稳定 URL |
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
附录:第三方开源组件
|
|
117
|
+
|
|
118
|
+
本产品直接使用的、且许可证要求保留声明的开源组件如下:
|
|
119
|
+
|
|
120
|
+
1. axios 1.7.9
|
|
121
|
+
License: MIT
|
|
122
|
+
Copyright (c) 2014-present Matt Zabriskie
|
|
123
|
+
https://github.com/axios/axios/blob/v1.7.9/LICENSE
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
只列直接依赖里许可强制署名的项。新增、替换、锁定版本变更时更新附录。发版前附录版本与 lockfile 一致,已移除的组件从附录删掉。
|
|
127
|
+
|
|
128
|
+
### 常见许可
|
|
129
|
+
|
|
130
|
+
| SPDX | 商用闭源 | 是否强制进附录 |
|
|
131
|
+
| --- | --- | --- |
|
|
132
|
+
| MIT / ISC / BSD-2/3 | 可 | 是 |
|
|
133
|
+
| Apache-2.0 | 可 | 是(保留 NOTICE) |
|
|
134
|
+
| MPL-2.0 | 通常可 | 按义务;改过的 MPL 文件另有开源义务 |
|
|
135
|
+
| LGPL-2.1/3.0 | 须单独评估 | 评估通过后再定 |
|
|
136
|
+
| GPL / AGPL / SSPL | 禁 | — |
|
|
137
|
+
| CC-BY-NC* | 禁 | — |
|
|
138
|
+
| 无 license | 禁 | — |
|
|
139
|
+
|
|
140
|
+
推荐开源方案时带上 license 和商用结论(OK / OK+强制署名 / 禁 / 需商业授权)。禁区许可不作为默认推荐,改列可商用替代。不得以「业界都在用」跳过核查。
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dwy-git-commit
|
|
3
|
+
description: "准备 git commit、写 commit message、处理 git pull / rebase 冲突、做提交前检查时必须使用(即使用户没说 skill 名)。先 fetch 再 rebase,冲突未清零不提交;暂存区不进密钥;message 用约定 type;删掉 AI 署名。只改代码、不提交时不要用。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git 提交
|
|
7
|
+
|
|
8
|
+
本次任务包含提交、commit message、`git pull` / rebase 冲突、提交前检查时读本 skill。只改代码、不提交时不用。
|
|
9
|
+
|
|
10
|
+
没有 skill 的工具只看 `rules/开发流程/dwy-git-commit.md`。和那份短 rule 冲突时以本 skill 为准。
|
|
11
|
+
|
|
12
|
+
任一步不通过:中止提交。项目按多人协作处理,本地未基于最新远程提交前,禁止产生新 commit。
|
|
13
|
+
|
|
14
|
+
## 1. 顺序
|
|
15
|
+
|
|
16
|
+
1. 拉取远程并处理完全部冲突
|
|
17
|
+
2. 安全写法检查
|
|
18
|
+
3. 暂存区敏感扫描
|
|
19
|
+
4. 变更范围确认
|
|
20
|
+
5. Scope 与 message 格式
|
|
21
|
+
6. 删掉 AI 署名
|
|
22
|
+
|
|
23
|
+
## 2. 先同步远程
|
|
24
|
+
|
|
25
|
+
未完成同步、冲突未清零:禁止 `git commit`。
|
|
26
|
+
|
|
27
|
+
先 fetch,再 rebase。工作区有未提交改动时带 `--autostash`,禁止为了拉代码丢弃本地改动。
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git fetch origin
|
|
31
|
+
git pull --rebase --autostash
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
当前分支已设置上游时,上面两条即可。未设置上游但远程存在同名分支:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git fetch origin
|
|
38
|
+
git pull --rebase --autostash origin "$(git branch --show-current)"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
无 `origin` 时,对实际存在的 remote 做同等操作。
|
|
42
|
+
|
|
43
|
+
冲突出现后:
|
|
44
|
+
|
|
45
|
+
1. 逐处消解 `<<<<<<<` / `=======` / `>>>>>>>`。
|
|
46
|
+
2. `git add` 已解决文件。
|
|
47
|
+
3. rebase 进行中用 `git rebase --continue`,不要另开 `git commit` 顶掉 rebase。
|
|
48
|
+
4. stash 弹出后再次冲突,同样消解并 `git add`。
|
|
49
|
+
5. 全库无冲突标记、无未结束的 rebase / merge,再做后面的检查。
|
|
50
|
+
|
|
51
|
+
禁止用 `git rebase --abort` / `git merge --abort` 躲冲突后直接提交。
|
|
52
|
+
|
|
53
|
+
只有这两种情况可以跳过同步,并在回复里写明原因:仓库没有任何 remote;`git fetch` 后当前分支在所有 remote 上都不存在同名分支。
|
|
54
|
+
|
|
55
|
+
| 情况 | 处理 |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| fetch / pull 网络失败 | 中止提交 |
|
|
58
|
+
| 仍有冲突标记或 rebase / merge 未结束 | 中止提交 |
|
|
59
|
+
| 已落后远程却未 rebase 完成 | 中止提交 |
|
|
60
|
+
| 改动很小、刚才拉过、先提交再拉、猜远程没人推 | 仍要先 fetch |
|
|
61
|
+
| 用 force push 顶掉远程 | 禁止用强推代替拉取 |
|
|
62
|
+
|
|
63
|
+
## 3. 命令写法
|
|
64
|
+
|
|
65
|
+
`git commit -m "..."` 会对双引号内容做 shell 展开。出现反引号或 `$(...)` 时,禁止直接使用双引号。
|
|
66
|
+
|
|
67
|
+
优先把 message 写进文件:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git commit -F /tmp/commit-msg.txt
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
message 内无单引号时,可以用单引号:`git commit -m 'feat: 支持 runConcurrent'`。
|
|
74
|
+
|
|
75
|
+
## 4. 暂存区敏感扫描
|
|
76
|
+
|
|
77
|
+
同时看 `git diff --cached` 和 `git diff --cached --name-only`。
|
|
78
|
+
|
|
79
|
+
禁止提交:`.env*`、`*.pem`、`*.key`、`*.p12`、`*.pfx`、`*.jks`、`*.keystore`、真实数据的 `*.sql`、`*.dump`、`*.sqlite`、敏感表的 `*.xlsx` / `*.csv`、`*.log`、`pgdata/`、`cache/*.json`。
|
|
80
|
+
|
|
81
|
+
禁止内容:`sk-` 开头的 API Key、`AKIA` 开头的 AWS Key、`ghp_` GitHub Token、`password=`、`token=`、`secret=`、明文数据库连接串、私钥头、`IP:端口`、`ssh user@ip`。
|
|
82
|
+
|
|
83
|
+
`.env.example`、环境变量读取方式、`localhost` / `127.0.0.1` 示例连接串可以留。
|
|
84
|
+
|
|
85
|
+
命中后停止,输出 `文件名:行号:命中片段` 和改法(`.gitignore`、改环境变量、换占位符)。用户确认后才能继续。用户强制提交时,message body 追加 `GIT-SECURITY: 用户已确认提交此内容`。
|
|
86
|
+
|
|
87
|
+
## 5. 范围与 message
|
|
88
|
+
|
|
89
|
+
先看 `git diff --cached`。一条 subject 说不清这次改动,就拆 commit。
|
|
90
|
+
|
|
91
|
+
格式:`<type>(<scope>): <subject>`,或 `<type>: <subject>`。破坏性变更写成 `feat!:` / `fix!:`(有 scope 时 `feat(<scope>)!:`),body 加 `BREAKING CHANGE: ...`。
|
|
92
|
+
|
|
93
|
+
`type` 只使用:`feat`、`fix`、`refactor`、`chore`、`docs`、`test`、`perf`、`style`、`ci`。
|
|
94
|
+
|
|
95
|
+
Scope 按变更模块和仓库现有习惯。单模块优先加 scope。跨模块可以不加。归不稳时宁可不加,不新造一套 scope。
|
|
96
|
+
|
|
97
|
+
`subject`:中文动宾短语,不超过 72 字符,不用句号,不含 emoji。body 只写为什么。
|
|
98
|
+
|
|
99
|
+
示例:
|
|
100
|
+
|
|
101
|
+
- `feat(eui): 添加 Image 组件懒加载支持`
|
|
102
|
+
- `refactor(backend): 提取分页逻辑为共享工具`
|
|
103
|
+
- `fix(eui)!: 重构 EDialog open 属性为 v-model:open`
|
|
104
|
+
|
|
105
|
+
## 6. AI 署名
|
|
106
|
+
|
|
107
|
+
提交前看完整的 commit 命令和 message 文件。有 AI 署名就删掉再提交。环境会自己往命令里塞署名(例如 `Co-authored-by: Cursor <cursoragent@cursor.com>`),看见就去掉。
|
|
108
|
+
|
|
109
|
+
hook 会拦:`Co-Authored-By:`、`Generated with`、Claude / ChatGPT / GPT / Copilot / Cursor 等产品名、`noreply@anthropic.com`、`noreply@openai.com`。
|
|
110
|
+
|
|
111
|
+
名单里没有的,提交前自己判断。一行只要是在给 AI 工具、模型、Agent、机器人署名,或声明这段提交由 AI 生成、协助、代写,就删。人写的正常说明留着。
|
|
112
|
+
|
|
113
|
+
不要加 `--trailer`,不要多一条 `-m` 放署名,不要把署名留在 `-F` 的文件里。hook 拦住之后删掉再交,不绕过 hook。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dwy-shared
|
|
3
|
-
description: "管理 dwy-shared 模板仓库与 dwy CLI 工具。功能 1:把本机已有的 skill/rule/hook/command 文件加进 dwy-shared 仓库时,自动读现有分类目录、推荐归位、AskUserQuestion 确认后 cp/git mv + commit + push 到
|
|
3
|
+
description: "管理 dwy-shared 模板仓库与 dwy CLI 工具。功能 1:把本机已有的 skill/rule/hook/command 文件加进 dwy-shared 仓库时,自动读现有分类目录、推荐归位、AskUserQuestion 确认后 cp/git mv + commit + push 到 origin。发布新的 create-dwy 后,其他项目跑 dwy,选同步项目配置。功能 2:管理 dwy npm CLI(create-dwy)的安装/更新/卸载/版本查询/CDN 延迟应急。涉及以下任何场景必须使用此 skill:用户说「加 X 到 dwy-shared」「在 dwy-shared 新增 skill/rule/hook/command」「dwy 仓库整理」「dwy-shared 仓库管理」「换 dwy-shared 仓库路径」「重设 dwy-shared」「升级/装/卸/重装 dwy CLI」「dwy 拉不到最新版」「create-dwy 怎么装」「dwy --version 显示旧版」「dwy CDN 没传播」。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# dwy-shared 仓库管理
|
|
@@ -29,7 +29,7 @@ skill 与 dwy-shared 仓库深度绑定但**不硬编码路径**。每次执行
|
|
|
29
29
|
```json
|
|
30
30
|
{
|
|
31
31
|
"repo_path": "/绝对/路径/到/dwy-shared",
|
|
32
|
-
"git_url": "https://
|
|
32
|
+
"git_url": "https://github.com/danweiyuancircle/dwy-ai-experience.git",
|
|
33
33
|
"configured_at": "2026-05-18T12:34:56Z"
|
|
34
34
|
}
|
|
35
35
|
```
|
|
@@ -61,7 +61,7 @@ fi
|
|
|
61
61
|
- **未 clone**:输出 git URL 让用户先 clone:
|
|
62
62
|
|
|
63
63
|
```
|
|
64
|
-
git clone https://
|
|
64
|
+
git clone https://github.com/danweiyuancircle/dwy-ai-experience.git <你想放的位置>
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
然后告诉路径
|
|
@@ -77,7 +77,7 @@ fi
|
|
|
77
77
|
cat > "$HOME/.config/dwy-shared/repo.json" <<EOF
|
|
78
78
|
{
|
|
79
79
|
"repo_path": "$PATH",
|
|
80
|
-
"git_url": "https://
|
|
80
|
+
"git_url": "https://github.com/danweiyuancircle/dwy-ai-experience.git",
|
|
81
81
|
"configured_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
82
82
|
}
|
|
83
83
|
EOF
|
|
@@ -129,7 +129,7 @@ done
|
|
|
129
129
|
|
|
130
130
|
读源文件的 description / 内容前 500 字,结合现有分类样例,推荐 1 个最匹配分类。
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
同步界面按模板实际分类目录自动生成 Tab,Skills 与 Rules 依次逐项勾选。优先复用 `通用` / `Vue` / `Python` / `Docker` / `产品0到1` / `自媒体` / `发布发版` / `安全` / `内容创作` / `DolphinDB` 等已有分类,避免同义分类重复。新文件不属于现有分类时,建议新建分类目录;不再维护技术栈包或场景包映射。
|
|
133
133
|
|
|
134
134
|
### 步骤 5:AskUserQuestion 确认分类
|
|
135
135
|
|
|
@@ -216,13 +216,16 @@ git -C "$REPO_PATH" push origin master
|
|
|
216
216
|
### 步骤 11:完成提示
|
|
217
217
|
|
|
218
218
|
告知用户:
|
|
219
|
-
- ✓ 已 push 到
|
|
220
|
-
- 更新当前仓库的 `templates/ai-tools/` 后,发布新的 `create-dwy` 版本;其他项目升级 CLI
|
|
219
|
+
- ✓ 已 push 到 origin
|
|
220
|
+
- 更新当前仓库的 `templates/ai-tools/` 后,发布新的 `create-dwy` 版本;其他项目升级 CLI 后跑 `dwy`,选同步项目配置
|
|
221
221
|
- 提醒:如果对方 dwy CLI <0.12.0,必须先升级 CLI 才能识别分类目录结构
|
|
222
222
|
|
|
223
223
|
## 工作流程 B:dwy CLI 管理
|
|
224
224
|
|
|
225
|
-
|
|
225
|
+
官方 registry `https://registry.npmjs.org/` 是刚发布包的先验,镜像经常落后。先用它。
|
|
226
|
+
|
|
227
|
+
- 传播延迟:刚 publish,`ETARGET` 或 `npm view` 仍是旧版。打官方 registry 看 `dist-tags`。新版已经在官方源上时,等一会儿再装,不要改镜像。
|
|
228
|
+
- 源不可用:官方源超时、证书失败、连不上。这才换源。换到能拿到**同一版本**内容的源,不只是 HTTP 200。在内容正确的源里取延迟最低的。私有源或用户指定的 registry 不参加公网竞速。当次选出的源不要写回本 skill。
|
|
226
229
|
|
|
227
230
|
| 用户意图 | 命令 |
|
|
228
231
|
|---|---|
|
|
@@ -233,17 +236,17 @@ git -C "$REPO_PATH" push origin master
|
|
|
233
236
|
| 查 npm 上最新版 | `npm view create-dwy version` |
|
|
234
237
|
| 应急重装(cache 损坏) | `npm cache clean --force && npm i -g create-dwy@latest --registry=https://registry.npmjs.org/ --prefer-online` |
|
|
235
238
|
|
|
236
|
-
|
|
239
|
+
上表的 `--registry` 是先验。官方源不可用时,把 `--registry` 换成这次选出的源,版本号保持不变。
|
|
237
240
|
|
|
238
|
-
|
|
241
|
+
### 传播延迟和源不可达分开
|
|
239
242
|
|
|
240
|
-
|
|
243
|
+
如果用户刚 publish 完,跑 `npm view create-dwy version` 还显示旧版 / `npm i` 报 `ETARGET`,先确认是不是传播延迟(30s ~ 几分钟),不是源挂了。
|
|
241
244
|
|
|
242
245
|
```bash
|
|
243
246
|
curl -s https://registry.npmjs.org/create-dwy | jq '."dist-tags".latest'
|
|
244
247
|
```
|
|
245
248
|
|
|
246
|
-
|
|
249
|
+
官方源已经是新版:等 30s 再装,仍用官方源。官方源本身失败:按上面换内容正确、延迟最低的源。
|
|
247
250
|
|
|
248
251
|
## 错误处理速查
|
|
249
252
|
|
|
@@ -265,7 +268,7 @@ skill 文件**零绝对路径**。换台机器装上后第一次用时自动走
|
|
|
265
268
|
需要用户机器满足:
|
|
266
269
|
1. 装了 `git` / `jq` / `npm`(jq 用于解析缓存 JSON)
|
|
267
270
|
2. clone 了 dwy-shared 仓库到任意位置(skill 引导)
|
|
268
|
-
3. 对
|
|
271
|
+
3. 对 origin(`https://github.com/danweiyuancircle/dwy-ai-experience.git`)有 push 权限
|
|
269
272
|
4. 缓存文件 `~/.config/dwy-shared/repo.json` 是机器本地配置,**不**随 skill 文件同步出去
|
|
270
273
|
|
|
271
274
|
## 安全约束
|
package/templates/ai-tools/skills//351/200/232/347/224/250/dwy-whiteboard-prototype/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dwy-whiteboard-prototype
|
|
3
|
-
description: "用 HTML 白板(FigJam/draw.io
|
|
3
|
+
description: "用 HTML 白板(FigJam/draw.io 风格)画可交互原型。触发场景:用户说『画白板 / 白板原型 / 把状态画出来 / 把跳转画清楚 / whiteboard』。产出:每个页面一个 HTML 白板,画布摆状态、SVG 连线表达跳转。产品 0 到 1 流程里的线框和高保真平面图不走本 skill,走 dwy-prototype。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 白板原型(HTML 可交互)
|