create-dwy 0.15.0 → 0.16.1

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.
Files changed (89) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/bin/index.js +5 -3
  3. package/package.json +3 -2
  4. package/src/searchable-select.js +419 -0
  5. package/src/skills-install.js +48 -7
  6. package/src/sync-all.js +17 -25
  7. package/src/sync.js +38 -32
  8. package/templates/ai-tools/CHANGELOG.md +76 -0
  9. package/templates/ai-tools/CLAUDE.md +27 -0
  10. package/templates/ai-tools/VERSION +1 -0
  11. package/templates/ai-tools/hook-manifests/hooks.json +7 -0
  12. package/templates/ai-tools/hooks/Git/pre-git-commit-ai-signature-check.sh +57 -0
  13. package/templates/ai-tools/rules/Android/dwy-android-core.md +215 -4
  14. package/templates/ai-tools/rules/Android/dwy-android-pitfalls.md +52 -0
  15. package/templates/ai-tools/rules/Docker/dwy-docker.md +52 -1
  16. package/templates/ai-tools/rules/HarmonyOS/dwy-arkts-ui-build.md +50 -1
  17. package/templates/ai-tools/rules/HarmonyOS/dwy-arkts-ui-design.md +139 -0
  18. package/templates/ai-tools/rules/HarmonyOS/dwy-harmony-pitfalls.md +72 -0
  19. package/templates/ai-tools/rules/Python/dwy-python-backend.md +16 -63
  20. package/templates/ai-tools/rules/Python/dwy-python-base-lib.md +89 -0
  21. package/templates/ai-tools/rules/Python/dwy-python-pitfalls.md +49 -0
  22. package/templates/ai-tools/rules/Vue/dwy-vue-base-lib.md +127 -0
  23. package/templates/ai-tools/rules/Vue/dwy-vue-core.md +22 -86
  24. package/templates/ai-tools/rules/Vue/dwy-vue-pitfalls.md +66 -0
  25. package/templates/ai-tools/rules/iOS/dwy-ios-pitfalls.md +7 -0
  26. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dependency-freshness.md +59 -0
  27. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-git-commit.md +9 -6
  28. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-development.md +47 -2
  29. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/SKILL.md +511 -0
  30. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/checks-data.md +126 -0
  31. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/checks-network.md +88 -0
  32. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/checks-runtime.md +195 -0
  33. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/references/security-doc-search.md +179 -0
  34. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_base.sh +39 -0
  35. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_capacity.sh +278 -0
  36. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_db.sh +147 -0
  37. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_docker.sh +230 -0
  38. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_env.sh +64 -0
  39. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_https.sh +60 -0
  40. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_logs.sh +209 -0
  41. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_nginx.sh +100 -0
  42. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_resilience.sh +157 -0
  43. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_secrets.sh +265 -0
  44. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_services.sh +94 -0
  45. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/check_ssh.sh +56 -0
  46. package/templates/ai-tools/skills/unitcircle/uc-deploy-audit/scripts/run_all.sh +105 -0
  47. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-acceptance/SKILL.md +3 -2
  48. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-architecture/SKILL.md +51 -9
  49. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-commercial/SKILL.md +58 -0
  50. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-competitor/SKILL.md +2 -1
  51. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-explore/SKILL.md +83 -0
  52. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-mvp/SKILL.md +2 -1
  53. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prd/SKILL.md +1 -0
  54. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/SKILL.md +14 -9
  55. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/references/state-and-contract.md +65 -13
  56. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prototype/SKILL.md +30 -11
  57. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-release/SKILL.md +3 -2
  58. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-design/SKILL.md +17 -10
  59. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-dev/SKILL.md +42 -10
  60. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-launch/SKILL.md +22 -10
  61. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-prd/SKILL.md +13 -4
  62. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-ship/SKILL.md +13 -4
  63. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-tasks/SKILL.md +12 -2
  64. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-tdd-dev/SKILL.md +15 -6
  65. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-validate/SKILL.md +2 -1
  66. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-version/SKILL.md +1 -0
  67. package/templates/ai-tools/skills//345/205/203/345/267/245/345/205/267/dwy-shared/SKILL.md +22 -1
  68. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/SKILL.md +1 -1
  69. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/references/checks-runtime.md +2 -2
  70. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_docker.sh +3 -3
  71. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-deploy-audit/scripts/check_secrets.sh +1 -1
  72. package/templates/ai-tools/skills//350/277/220/347/273/264/345/217/221/345/270/203/dwy-deploy-first/SKILL.md +176 -0
  73. package/templates/ai-tools/skills//350/277/220/347/273/264/345/217/221/345/270/203/dwy-deploy-first/references/chapter-01-mirrors.md +112 -0
  74. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-ideate/SKILL.md +0 -21
  75. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/SKILL.md +0 -113
  76. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/templates/STATE.md +0 -56
  77. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dev-qa/SKILL.md +0 -117
  78. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-market-analysis/SKILL.md +0 -92
  79. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-coarse/SKILL.md +0 -72
  80. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-coarse/templates/prd-coarse.md +0 -61
  81. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-detailed/SKILL.md +0 -76
  82. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-detailed/templates/prd-detailed.md +0 -119
  83. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prototype/SKILL.md +0 -104
  84. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-spike/SKILL.md +0 -81
  85. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/SKILL.md +0 -212
  86. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/templates/impl-plan.md +0 -115
  87. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tech-feasibility/SKILL.md +0 -105
  88. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-version-plan/SKILL.md +0 -64
  89. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-version-plan/templates/version-plan.md +0 -72
@@ -1,25 +1,37 @@
1
1
  ---
2
2
  name: dwy-stage-launch
3
- description: "【dwy·立项阶段】产品 0 到 1 的第一阶段编排。触发场景:用户说『走立项流程 / 做立项 / 只想先把立项做完 / 验证这个想法值不值得做 / 想法收敛+竞品+需求验证+POC+MVP 一条龙』,要把模糊想法跑过三道闸门确认值不值得立项时。可独立触发——只想做立项不进后续,就触发我。"
3
+ description: "【dwy·立项阶段】产品 0 到 1 的第一阶段编排。触发场景:用户说『走立项流程 / 做立项 / 只想先把立项做完 / 验证这个想法值不值得做 / 想法收敛+竞品+需求验证+商业分析+POC+MVP 一条龙』,要把模糊想法跑过闸门确认值不值得立项时。可独立触发——只想做立项不进后续,就触发我。"
4
4
  ---
5
5
 
6
6
  ## 职责(单一·编排层)
7
- 按序调度立项阶段的原子 skill,串起三道闸门,不掺产出内容。核心原则:**廉价验证在前、昂贵投入在后**。需求验证是总闸门,过不了不进任何后续重活。
7
+ 按序调度立项阶段的原子 skill,串起闸门,不掺产出内容。核心原则:**廉价验证在前、昂贵投入在后**。需求验证是总闸门,过不了不进任何后续重活。
8
8
 
9
9
  ## 前置校验(开工前读 state)
10
10
  - 读 `.dwy/prod/[项目]/state.json`
11
- - 立项是首阶段,无上游依赖;若 `state.json` 不存在则由本阶段初始化
11
+ - **先检 `schema_version`**:缺失或低于当前版本 → 按 `dwy-product-launcher/references/state-and-contract.md`「schema 版本与迁移」升级 state 再继续
12
+ - 立项是首阶段,无上游依赖;若 `state.json` 不存在则由本阶段初始化(写 `schema_version = "3"`)
12
13
 
13
14
  ## 编排顺序(带闸门)
14
- 1. **dwy-ideate** — 想法收敛
15
+ 1. **dwy-explore** — 想法探索收敛。用 YC forcing questions 逼清楚做什么、值不值,并收敛成结构化想法定义(产出 `想法收敛.md` + `confirmed.idea`,含 `mode` = startup/builder)。想不清楚或明显不值 → 建议停下重想,不硬推;想清楚才进下一步
15
16
  2. **dwy-competitor** — 竞品分析
16
17
  3. **dwy-validate(闸 1·总闸门)** — 需求验证。**没人要即停整个流程**,不进任何后续
17
- 4. **dwy-poc(闸 2)** — 仅闸 1 过才做。技术可行性验证,**做不出即砍**
18
- 5. **dwy-mvp(闸 3)** — 仅闸 2 过才做。MVP 范围裁剪,**功能 ≤ 7 个**
18
+ 4. **dwy-commercial(商业闸门)** — 仅闸 1 过才做。商业模式 + 变现 + 定价 + 单位经济 + GTM 获客 + 可行性结论。**startup 模式下商业不可行即停**;**builder 模式跳过**(不评估、不挡)
19
+ 5. **dwy-poc(闸 2)** — 仅商业闸过(或 builder 跳过)才做。技术可行性验证,**做不出即砍**
20
+ 6. **dwy-mvp(闸 3)** — 仅闸 2 过才做。MVP 范围裁剪,**功能 ≤ 7 个**
19
21
 
20
- 每道闸门未过 → 立即中断本阶段,回写 state 标记停止原因,不静默跳过。
22
+ > dwy-explore 与 dwy-validate 分工:explore 定性逼问给**方向**(做什么、给谁、最窄切入),validate 定量验证给**证据**(搜索量/竞品/访谈),不重复。
23
+ > dwy-commercial 在 validate 之后:先确认「有人真要」,再判断「能跑通商业」。startup 模式 fail 即停;builder 模式(练手/学习)跳过不挡。
24
+
25
+ 每道闸门未过 → 立即中断本阶段,回写 state 标记停止原因,不静默跳过。**硬闸门不受 run_mode 影响**:auto 下闸门未过同样停。商业闸门仅对 startup 模式是硬闸门,builder 模式自动放行。
26
+
27
+ ## run_mode 感知
28
+ - `dwy-explore` 末尾问得的 `run_mode` 决定本阶段内的非闸门门控:`standard` 照常问用户、`auto` 自动决策推进。
29
+ - 闸门(validate/commercial/poc/mvp)是硬约束,两种模式都按结果停或过(commercial 仅 startup 模式硬)。
30
+
31
+ ## 自动流转(准出后)
32
+ - 闸全过 + 立项确认 → 回写 `current_stage = "prd"`,按 `run_mode` 流转:`standard` 问「继续做需求版本 / 停」、`auto` 直接触发 `dwy-stage-prd`。
21
33
 
22
34
  ## 准出条件(硬约束)
23
- - 三闸全过:`confirmed.validation` / `confirmed.poc` / `confirmed.mvp_features` 均写入
24
- - 用户明确确认立项
25
- - 回写 `state.json`:`current_stage = "prd"`(进入下一阶段需求版本)
35
+ - 闸全过:`confirmed.validation` / `confirmed.commercial` / `confirmed.poc` / `confirmed.mvp_features` 均写入(`commercial` 在 builder 模式为 skipped/pass=true)
36
+ - 立项确认(standard 问用户;auto 自动判定,但闸门未过仍停)
37
+ - 回写 `state.json`:`current_stage = "prd"`,按 run_mode 流转下一阶段
@@ -8,15 +8,24 @@ description: "【dwy·需求版本阶段】产品 0 到 1 的第二阶段编排
8
8
 
9
9
  ## 前置校验(开工前读 state)
10
10
  - 读 `.dwy/prod/[项目]/state.json`
11
- - 校验上游完整:`confirmed.mvp_features` 必须存在(立项阶段三闸全过)
12
- - 缺失 → 报错中断,提示先跑 dwy-stage-launch
11
+ - **先检 `schema_version`**:缺失或低于当前版本 → 按 `dwy-product-launcher/references/state-and-contract.md`「schema 版本与迁移」升级 state 再继续
12
+ - 上游 `confirmed.mvp_features` 缺失(如单独触发本阶段)→ **不报错**,基于已聊上下文 + 现有产出**轻量补齐**一份够用的 MVP 范围,写回 `confirmed.mvp_features` 标注「上下文补齐」。
13
+ - **安全边界**:补的是 MVP 范围,**禁止**凭空标 `confirmed.validation`/`confirmed.poc` 的 `pass=true`——若想做真实立项验证,仍需跑 dwy-stage-launch。
14
+ - `run_mode` 缺失(没跑过 explore)→ 默认 `standard`,或按用户当下意图问一次。
13
15
 
14
16
  ## 编排顺序
15
17
  1. **dwy-prd** — 写产品需求文档
16
18
  2. **dwy-version** — 版本规划(V1.0 / V1.1 …路线图)
17
19
  3. **dwy-tasks** — 任务拆分 + 开发顺序
18
20
 
21
+ ## run_mode 感知
22
+ - `standard`:PRD / V1.0 范围 / 开发顺序照常问用户确认。
23
+ - `auto`:基于上下文自动决策,不问用户。
24
+
25
+ ## 自动流转(准出后)
26
+ - 回写 `current_stage = "design"`,按 `run_mode`:`standard` 问「继续做设计架构 / 停」、`auto` 直接触发 `dwy-stage-design`。
27
+
19
28
  ## 准出条件(硬约束)
20
- - 用户确认 PRD + V1.0 范围 + 开发顺序
29
+ - PRD + V1.0 范围 + 开发顺序确认(standard 问用户 / auto 自动判定)
21
30
  - `confirmed.prd` / `confirmed.version_plan` / `confirmed.tasks` 均写入
22
- - 回写 `state.json`:`current_stage = "design"`
31
+ - 回写 `state.json`:`current_stage = "design"`,按 run_mode 流转下一阶段
@@ -8,14 +8,23 @@ description: "【dwy·上架迭代阶段】产品 0 到 1 的第五阶段编排
8
8
 
9
9
  ## 前置校验(开工前读 state)
10
10
  - 读 `.dwy/prod/[项目]/state.json`
11
- - 校验上游完整:`confirmed.dev_progress` 必须存在(当前版本全模块测试通过)
12
- - 缺失 → 报错中断,提示先跑 dwy-stage-dev
11
+ - **先检 `schema_version`**:缺失或低于当前版本 → 按 `dwy-product-launcher/references/state-and-contract.md`「schema 版本与迁移」升级 state 再继续
12
+ - 上游 `confirmed.dev_progress` 缺失(如单独触发本阶段)→ **不报错**,基于已聊上下文 + 现有源码/产出**轻量补齐**够本阶段用的开发完成结论,写回 `confirmed.dev_progress` 标注「上下文补齐」。仅当上下文完全不足才提示用户补信息。
13
+ - `run_mode` 缺失 → 默认 `standard`,或按用户当下意图问一次。
13
14
 
14
15
  ## 编排顺序
15
16
  1. **dwy-acceptance** — 验收(对照 PRD 与验收标准把关)
16
17
  2. **dwy-release** — 发布上线
17
18
 
19
+ ## run_mode 感知
20
+ - `standard`:验收结论、迭代方向照常问用户。
21
+ - `auto`:验收自动判定;但**发布上线是高风险不可逆操作 → 仍停下让用户确认**(auto 不绕高风险不可逆动作),确认后再 release。
22
+
23
+ ## 自动流转(准出后)
24
+ - 当前版本标记完成。若有下一版本,回写 `current_stage = "prd"` 进入下一轮版本编排:`standard` 问「继续做下一版 / 停」、`auto` 直接触发 `dwy-stage-prd`(下一版本无高风险闸门时连跑)。
25
+ - 无下一版本 → 流程正常结束(ship 是末阶段)。
26
+
18
27
  ## 准出条件(硬约束)
19
- - 上线完成 + 用户确认下一版迭代方向
28
+ - 上线完成(release 前的高风险确认两种模式都做)+ 下一版迭代方向已定
20
29
  - `confirmed.acceptance` / `confirmed.release` 均写入
21
- - 回写 `state.json`:当前版本标记完成;若有下一版本,`current_stage` 复位到 `prd` 进入下一轮版本编排
30
+ - 回写 `state.json`:当前版本标记完成;若有下一版本,`current_stage` 复位到 `prd`,按 run_mode 流转
@@ -12,11 +12,21 @@ description: "【dwy·任务拆解】产品 0 到 1 需求规划阶段。触发
12
12
 
13
13
  ## 实现
14
14
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
15
- 读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
15
+ 读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方法论产出,落到下方「产出契约」。
16
+ - **AI 自主拆解**:架构阶段文档(`技术架构.md`/`数据库设计.md`/`接口契约.md` + `PRD.md`/`版本路线图.md`)已建好,AI 据此**自行判断**模块怎么切、方案怎么选,按 writing-plans 方法论直接产出,不再逐点弹 `AskUserQuestion` 找用户拍板。仅当文档间出现**实质冲突或硬缺口**(无法据现有文档推断)时才向用户确认。
16
17
  - 本 skill 依赖的外部 skill:`writing-plans`(对应 `~/.dwy/skills/writing-plans/`)
17
18
  - 若 `~/.dwy/skills/writing-plans/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
18
19
 
19
20
  ## 产出契约(硬约束)
20
21
  - 落到:`.dwy/prod/[项目]/02-需求规划/开发任务拆解.md`
21
- - 固定章节:模块划分 / 每模块任务清单(含验证标准)/ 依赖顺序
22
+ - 固定章节:
23
+ - **模块划分**:按业务域/Features 内聚分模块
24
+ - **任务清单(拆到 TDD 步)**:每个任务带
25
+ - `Files`:精确文件路径(Create / Modify / Test)
26
+ - `Interfaces`:`Consumes`(用前序任务的精确签名)+ `Produces`(后续任务依赖的函数名/参数/返回类型)——任务依赖图的数据来源
27
+ - `Steps`:2-5 分钟一步的 RED→GREEN→REFACTOR(写失败测试 → 跑挂 → 最小实现 → 跑过 → commit),每步含**真实内容**
28
+ - 一个**可独立测试的交付物** + 验证标准(精确命令 + 期望输出)
29
+ - **No Placeholders**:禁 TBD / 「加校验」「处理边界」这类空泛,禁引用任何任务都没定义的类型/函数
30
+ - **任务依赖图**:由各任务 Interfaces 的 Consumes/Produces 推出(到任务级,不只模块级)
31
+ - 任务粒度 = 「能带自己测试周期、值得新 reviewer 独立卡验收的最小单元」;setup/配置/脚手架折叠进它服务的任务,不单列
22
32
  - 回写 state.json:`confirmed.tasks`
@@ -9,17 +9,26 @@ description: "【dwy·TDD开发】产品 0 到 1 开发阶段。触发场景:
9
9
  ## 输入(从哪读)
10
10
  - state.json 的 `confirmed.tasks`、`confirmed.architecture`、`confirmed.dev_progress`
11
11
  - `.dwy/prod/[项目]/02-需求规划/开发任务拆解.md`
12
- - `.dwy/prod/[项目]/03-设计与架构/技术架构.md`、`数据库设计.md`、`接口契约.md`
12
+ - `.dwy/prod/[项目]/04-架构设计/技术架构.md`、`数据库设计.md`、`接口契约.md`
13
13
 
14
14
  ## 实现
15
15
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
16
- 读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
16
+ 读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方法论产出,落到下方「产出契约」。
17
+ - **AI 自主开发**:架构阶段文档(`技术架构.md`/`数据库设计.md`/`接口契约.md`)+ `开发任务拆解.md` 已建好,AI 据此**自行**按模块循环 RED→GREEN→REFACTOR,测试通过自动进下一模块,不再逐点弹 `AskUserQuestion` 找用户拍板。仅当文档间出现**实质冲突或硬缺口**(无法据现有文档推断)时才向用户确认。
17
18
  - 本 skill 依赖的外部 skill:`test-driven-development`、`systematic-debugging`(各对应 `~/.dwy/skills/<名>/`)
18
19
  - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
19
20
 
20
- 每模块循环:RED 写失败测试 → GREEN 最小实现通过 → REFACTOR 重构。测试通过自动进下一模块。
21
+ 每任务循环:RED 写失败测试 → GREEN 最小实现通过 → REFACTOR 重构。
22
+
23
+ **逐任务验收闭环(一任务一闭环,按序执行)**:每个任务 done 时——
24
+ 1. **核验**:对照该任务在拆解时定的验证标准(精确命令 + 期望输出)跑通过;未过保持 `todo`,不得跳过
25
+ 2. **标记**:`confirmed.dev_progress.<module>.<task> = done`
26
+ 3. **记录**:`09-开发日志.md` 记一行(任务 / 验证结果 / 关键决策)
27
+ 4. **独立提交**:该任务的源码 + 测试**单独 commit**(一任务一 commit,不攒一坨),message 带任务标识;多 agent 并发时各自在自己 worktree 内提交
28
+
29
+ **逐任务绿 = 必要不充分**:本闭环跑的是「该任务、在自己 worktree、领任务那一刻代码态」下的测试,并发时各 agent 互相看到的是中间失败态。它**不替代**合并后的全量收口——真实准出态只能由「全部分支合并后、统一工作树、一次性跑的全量单测 + 构建打包」定义,那道**合并后全量收口闸由编排层 `dwy-stage-dev` 独占执行**(见其第四步),承做 agent 不自行下「全量已绿」结论。
21
30
 
22
31
  ## 产出契约(硬约束)
23
- - 落到:项目源码目录 + 各模块单元测试 + `.dwy/prod/[项目]/09-开发日志.md`
24
- - 固定章节(开发日志):模块进度 / 关键决策 / 遇到的问题与解法
25
- - 回写 state.json:`confirmed.dev_progress.<module> = todo|done`(逐模块维护)
32
+ - 落到:项目源码目录 + 各任务单元测试 + `.dwy/prod/[项目]/09-开发日志.md`
33
+ - 固定章节(开发日志):任务进度 / 验证结果 / 关键决策 / 遇到的问题与解法
34
+ - 回写 state.json:`confirmed.dev_progress.<module>.<task> = todo|done`(逐任务维护)
@@ -7,12 +7,13 @@ description: "【dwy·需求市场验证】产品 0 到 1 总闸门(闸1)。
7
7
  验证需求真实存在 + 有市场,给出 pass/fail 结论。**总闸门**:过不了流程直接停,不进后续。
8
8
 
9
9
  ## 输入(从哪读)
10
- - state.json 的 `confirmed.idea`、`confirmed.competitors`
10
+ - state.json 的 `confirmed.idea`(含 explore 已定性逼出的 core_problem、key_assumptions——本 skill 把它变成定量验证)、`confirmed.competitors`
11
11
  - `.dwy/prod/[项目]/01-立项/想法收敛.md`、`竞品分析.md`
12
12
 
13
13
  ## 实现
14
14
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
15
15
  读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
16
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
16
17
  - 本 skill 依赖的外部 skill:`market-sizing`、`sentiment-analysis`、`interview-script`(各对应 `~/.dwy/skills/<名>/`)
17
18
  - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
18
19
 
@@ -13,6 +13,7 @@ description: "【dwy·版本规划】产品 0 到 1 需求规划阶段。触发
13
13
  ## 实现
14
14
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
15
15
  读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
16
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
16
17
  - 本 skill 依赖的外部 skill:`outcome-roadmap`、`prioritize-features`(各对应 `~/.dwy/skills/<名>/`)
17
18
  - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
18
19
 
@@ -153,10 +153,31 @@ git -C "$REPO_PATH" mv <仓库内相对路径> <new-相对路径>
153
153
 
154
154
  **冲突处理**:目标已存在 → AskUserQuestion 让用户选「覆盖 / 改名 / 取消」。
155
155
 
156
+ ### 步骤 6.5:bump ai-tools 内部版本 + CHANGELOG(强制)
157
+
158
+ 凡改动 `$REPO_PATH/dwy-cli/templates/ai-tools/` 下任意内容,**必须**同批更新:
159
+
160
+ | 文件 | 动作 |
161
+ | ---- | ---- |
162
+ | `dwy-cli/templates/ai-tools/VERSION` | 按 `CHANGELOG.md` 内维护约定 bump(MAJOR / MINOR / PATCH) |
163
+ | `dwy-cli/templates/ai-tools/CHANGELOG.md` | 顶部追加 `## x.y.z — YYYY-MM-DD` 段 + Added/Changed/Fixed/Removed |
164
+
165
+ 约定全文见:`$REPO_PATH/dwy-cli/templates/ai-tools/CHANGELOG.md`「维护约定」。
166
+
167
+ - 新增 skill/rule/hook/command 或新增强制约束 → 至少 **MINOR**
168
+ - 仅修正文案 / 链接 / 不改强制语义 → **PATCH**
169
+ - 破坏同步结构 / 删除广泛依赖项且无迁移 → **MAJOR**
170
+
171
+ **禁止**只提交模板文件而不改 `VERSION` + `CHANGELOG.md`。
172
+
156
173
  ### 步骤 7:staged + 显示 diff
157
174
 
158
175
  ```bash
159
176
  git -C "$REPO_PATH" add <精准路径>
177
+ # 务必包含 VERSION 与 CHANGELOG
178
+ git -C "$REPO_PATH" add \
179
+ "$REPO_PATH/dwy-cli/templates/ai-tools/VERSION" \
180
+ "$REPO_PATH/dwy-cli/templates/ai-tools/CHANGELOG.md"
160
181
  git -C "$REPO_PATH" status --short
161
182
  git -C "$REPO_PATH" diff --cached --stat
162
183
  ```
@@ -170,7 +191,7 @@ git -C "$REPO_PATH" diff --cached --stat
170
191
  按项目 `CLAUDE.md` 中 Git Commit Scope 规范:
171
192
  - scope: `cli`
172
193
  - type: `feat`(新模板)/ `fix`(修复模板)/ `docs`(仅文档)
173
- - subject: 中文动宾短语 ≤72 字符
194
+ - subject: 中文动宾短语 ≤72 字符;可附 ai-tools 版本号(如 `ai-tools 0.2.0`)
174
195
  - **禁** AI 署名 / Co-Authored-By trailer
175
196
 
176
197
  模板:
@@ -464,7 +464,7 @@ bash {scripts}/check_db.sh <target> [ssh_opts...]
464
464
 
465
465
  根据本次失败项归纳的可执行后续动作:
466
466
 
467
- - 镜像版本不固定 (4.6) → 跑 `/dwy-docker-image` 选 N-1 minor
467
+ - 镜像版本不固定 (4.6) → 跑 `/dwy-docker` 选 N-1 minor
468
468
  - daemon 未配 registry-mirrors (4.6) → 跑 `/dwy-mirror-source` 写国内源
469
469
  - 容器资源偏离推荐 (4.10) → 改 `docker-compose.prod.yml` 的 mem_limit/maxmemory
470
470
  - ...
@@ -11,7 +11,7 @@
11
11
  ## 4.6 Docker 安全 — `{scripts}/check_docker.sh`
12
12
 
13
13
  > **跨 skill 联动**:本节发现的镜像版本/镜像源问题,只**报告**不修复。具体修复路径:
14
- > - 镜像 tag 不固定 / `:latest` / 浮动 tag → 引导用户跑 `/dwy-docker-image`(走 query_dockerhub.py 选 N-1 minor)
14
+ > - 镜像 tag 不固定 / `:latest` / 浮动 tag → 引导用户跑 `/dwy-docker`(走 query_dockerhub.py 选 N-1 minor)
15
15
  > - daemon 未配 registry-mirrors / 容器用境外 registry → 引导用户跑 `/dwy-mirror-source`(写阿里云/中科大/daocloud)
16
16
 
17
17
  | 检查项 | 期望值 | 严重级 |
@@ -107,7 +107,7 @@
107
107
 
108
108
  ## 4.10 硬件识别与资源推荐 — `{scripts}/check_capacity.sh`
109
109
 
110
- > 脚本只输出 raw(硬件规格 + 当前容器 mem_limit + Postgres/Redis 启动参数 + compose 资源声明);主 Claude 用下表生成 "推荐 vs 当前" 对比报告。详细推荐规则与配比公式参考 `dwy-docker-image` skill 第二部分。
110
+ > 脚本只输出 raw(硬件规格 + 当前容器 mem_limit + Postgres/Redis 启动参数 + compose 资源声明);主 Claude 用下表生成 "推荐 vs 当前" 对比报告。详细推荐规则与配比公式参考 `dwy-docker` skill 第二部分。
111
111
 
112
112
  **容器资源推荐分级表(按宿主总内存)**
113
113
 
@@ -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-image 选 N-1 minor) ---"
46
+ echo "--- 镜像 tag 分级检查 (生产期望: 固定到具体 patch, 跑 /dwy-docker 选 N-1 minor) ---"
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-image 用 query_dockerhub.py 拿 N-1 minor 推荐版本"
90
+ echo "[i] 修复:对每条 [!!!] / [!!] / [!] 的镜像,跑 /dwy-docker 用 query_dockerhub.py 拿 N-1 minor 推荐版本"
91
91
 
92
92
  echo ""
93
93
  echo "--- 容器是否以 root 运行 ---"
@@ -255,5 +255,5 @@ echo ""
255
255
  echo "[i] 修复路径:"
256
256
  echo " 1. docker.io 加速 → /dwy-mirror-source 自动配 daemon registry-mirrors"
257
257
  echo " 2. gcr/ghcr/k8s → 把 image 改 <registry>.m.daocloud.io 前缀, 见 dwy-mirror-source 镜像替换表"
258
- echo " 3. 镜像版本不固定 → /dwy-docker-image 选 N-1 minor 重新固定"
258
+ echo " 3. 镜像版本不固定 → /dwy-docker 选 N-1 minor 重新固定"
259
259
  REMOTE
@@ -320,7 +320,7 @@ done
320
320
  echo ""
321
321
  echo "########## 凭证强度汇总 ##########"
322
322
  echo "[i] 修复指引:"
323
- echo " - WEAK 密码: 立即轮换 + 走 dwy-server-security 规则 (>= 16 字符 + 三类字符)"
323
+ echo " - WEAK 密码: 立即轮换 (建议 >= 16 字符 + 三类字符的强密码)"
324
324
  echo " - 高敏字段 (JWT/SECRET/AK/SK): >= 32 字符随机串"
325
325
  echo " - 生成命令: openssl rand -base64 24 | tr -d '=+/' | cut -c1-20"
326
326
  echo " - 高敏: openssl rand -hex 32 (生成 64 字符 hex token)"
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: dwy-deploy-first
3
+ description: >-
4
+ 通用「首次部署」检查清单 skill:按章节推进新服务/新镜像的国内可构建落地。
5
+ 当前已开放第 1 章「镜像源」——Dockerfile / 构建环境中的 apt(阿里云)与 uv/pip(阿里云 PyPI);
6
+ 禁止写死具体业务项目名。触发:用户说「首次部署」「第一次上线」「部署第一步」「配置镜像源」
7
+ 「apt 换源」「uv 阿里云」「Docker 构建慢」「国内构建」;或用户执行 /dwy-deploy-first。
8
+ 与 dwy-mirror-source(本机用户级 13 类工具)互补:本 skill 聚焦「项目首次部署构建链路」。
9
+ ---
10
+
11
+ # dwy-deploy-first — 首次部署(分章)
12
+
13
+ 通用流程,**不绑定任何具体仓库或业务名**。按章节执行;用户未点名章节时,从**当前最低未完成章节**开始,完成后询问是否进入下一章。
14
+
15
+ **当前开放章节:** 仅第 1 章(镜像源)。后续章节(构建、健康检查、发布等)待补充,禁止臆造未写章节的强制步骤。
16
+
17
+ **关联 skill(按需读取,勿重复造轮):**
18
+
19
+ | Skill | 边界 |
20
+ | --- | --- |
21
+ | `dwy-mirror-source` | 本机用户级 / 项目级 **开发机** 工具镜像源(pip/uv/npm/Docker daemon 等) |
22
+ | `dwy-docker` | Dockerfile / compose **工程规范**(禁 latest、healthcheck 等) |
23
+ | **本 skill** | **首次部署构建链路**里必须写进仓库的源配置(以 Dockerfile / CI 构建为主) |
24
+
25
+ **参考片段:** `references/chapter-01-mirrors.md`
26
+
27
+ ---
28
+
29
+ ## 总原则
30
+
31
+ 1. **通用模板** — 示例用 `python:3.x-slim-bookworm` 等占位;路径/服务名从用户当前项目推断,不写死历史项目。
32
+ 2. **默认阿里云** — 国内首次部署默认 `aliyun`;用户明确要求清华/中科大时再改。
33
+ 3. **先检查后改** — 扫描现有 `Dockerfile` / `Dockerfile.*` / CI 构建脚本;已合规则静默通过,违规再改。
34
+ 4. **与 dwy-docker 叠加** — 镜像 tag 仍须固定版本;本 skill 不替代版本规范。
35
+ 5. **禁止** `curl https://astral.sh/uv/install.sh` 作为默认装 uv 方式(GitHub 二进制,国内慢/易失败)。
36
+
37
+ ---
38
+
39
+ ## 第 1 章:镜像源(首次部署强制)
40
+
41
+ ### 目标
42
+
43
+ 构建机 / Docker 镜像构建在国内可稳定完成:
44
+
45
+ 1. **apt(Debian/Ubuntu 系)→ 阿里云**
46
+ 2. **uv / pip → 阿里云 PyPI**
47
+
48
+ Alpine / RHEL 系见 `references/chapter-01-mirrors.md`;本章默认以 **Debian/Ubuntu 系官方 Python 基础镜像** 为主(最常见)。
49
+
50
+ ### 1.1 检查清单
51
+
52
+ 扫描用户打开或指定的 Dockerfile / 构建脚本:
53
+
54
+ | # | 检查项 | 合规 | 违规表现 |
55
+ |---|--------|------|----------|
56
+ | A1 | apt 使用国内源 | `mirrors.aliyun.com`(或团队约定的内网 apt 镜像) | 仍 `deb.debian.org` / `archive.ubuntu.com` / `security.debian.org` 且无替换 |
57
+ | A2 | 装 uv 不走 astral.sh 默认 GitHub | `pip install -i https://mirrors.aliyun.com/pypi/simple/ uv` 等 | `curl … astral.sh/uv/install.sh` |
58
+ | A3 | uv 索引 | `UV_INDEX_URL` / `UV_DEFAULT_INDEX` = 阿里云 simple | 未设且会访问 `pypi.org` |
59
+ | A4 | pip 索引 | `PIP_INDEX_URL` 或 `pip -i` = 阿里云 simple | 默认官方 PyPI 且无 `-i` |
60
+ | A5 | trusted-host | 与镜像 host 一致(`mirrors.aliyun.com`) | HTTPS 校验失败或反复警告未处理 |
61
+
62
+ **企业内网私服**(域名非公网 mirror):保留私服,不覆盖为阿里云;记录「已使用私服,本章跳过公网镜像」。
63
+
64
+ ### 1.2 默认 URL(阿里云)
65
+
66
+ ```text
67
+ # Debian/Ubuntu apt
68
+ https://mirrors.aliyun.com/debian/
69
+ https://mirrors.aliyun.com/debian-security/ # 若用 security 源
70
+ https://mirrors.aliyun.com/ubuntu/
71
+
72
+ # PyPI(pip / uv)
73
+ https://mirrors.aliyun.com/pypi/simple/
74
+ trusted-host: mirrors.aliyun.com
75
+ ```
76
+
77
+ ### 1.3 落地动作(Dockerfile 模式)
78
+
79
+ 按顺序改写(最小 diff;匹配用户现有基础镜像代号):
80
+
81
+ #### A. apt → 阿里云
82
+
83
+ - **Debian 12 bookworm(deb822)**:改 `/etc/apt/sources.list.d/debian.sources`
84
+ - **Debian 11 / 旧 sources.list**:改 `/etc/apt/sources.list`
85
+ - **Ubuntu**:改 `sources.list` 或 `ubuntu.sources`
86
+
87
+ 标准片段见 `references/chapter-01-mirrors.md` §apt。
88
+
89
+ `RUN` 中建议:`sed` 换源 → `apt-get update` → `install` → `rm -rf /var/lib/apt/lists/*`。
90
+
91
+ #### B. uv / pip → 阿里云
92
+
93
+ **推荐(安装 uv 本体):**
94
+
95
+ ```dockerfile
96
+ ENV UV_DEFAULT_INDEX=https://mirrors.aliyun.com/pypi/simple/ \
97
+ UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \
98
+ PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \
99
+ PIP_TRUSTED_HOST=mirrors.aliyun.com
100
+
101
+ RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ \
102
+ --trusted-host mirrors.aliyun.com \
103
+ "uv>=0.4"
104
+ ```
105
+
106
+ **禁止默认:**
107
+
108
+ ```dockerfile
109
+ # ❌ 国内易慢/失败
110
+ RUN curl -LsSf https://astral.sh/uv/install.sh | sh
111
+ ```
112
+
113
+ **安装项目依赖:**
114
+
115
+ ```dockerfile
116
+ RUN uv pip install --system --no-cache .
117
+ # 或
118
+ RUN uv sync --frozen
119
+ # 环境变量已指向阿里云时无需再写 -i;若未设 ENV,则显式:
120
+ # RUN uv pip install --system --index-url https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
121
+ ```
122
+
123
+ ### 1.4 非 Docker 首次部署(本机/CI 脚本)
124
+
125
+ 若用户不用 Docker、但在「首次部署」语境配置构建机:
126
+
127
+ | 工具 | 推荐落点 |
128
+ | --- | --- |
129
+ | pip | `PIP_INDEX_URL` 或 `pip.conf` global `index-url` |
130
+ | uv | `~/.config/uv/uv.toml` 的 `[[index]]`,或项目 `pyproject.toml` 的 `[[tool.uv.index]]` |
131
+ | apt | 构建脚本 / 镜像层内 sed;**不**强制改运维员个人笔记本(那是 `dwy-mirror-source`) |
132
+
133
+ 详细用户级配置交给 `dwy-mirror-source`;本 skill 只保证**仓库内可复现的部署构建**写清源。
134
+
135
+ ### 1.5 验收
136
+
137
+ 执行(或指导用户执行)后,确认:
138
+
139
+ 1. Dockerfile / 构建脚本中 **无** 未替换的官方 Debian/Ubuntu 默认源(私服除外)
140
+ 2. **无** 默认 `astral.sh/uv/install.sh`(除非用户书面坚持并接受慢/失败风险)
141
+ 3. `UV_*` / `PIP_*` 指向 `mirrors.aliyun.com`(或约定私服)
142
+ 4. 能完整跑通一次构建(`docker build` 或 `uv sync` / `uv pip install`)且日志显示从阿里云域名拉取
143
+
144
+ 输出简短验收表:
145
+
146
+ ```text
147
+ 第 1 章 镜像源
148
+ - [ ] apt 阿里云
149
+ - [ ] uv/pip 阿里云
150
+ - [ ] 禁止 astral.sh 默认装 uv
151
+ - [ ] 构建试跑通过
152
+ ```
153
+
154
+ ### 1.6 完成后
155
+
156
+ 告知用户:第 1 章已完成。后续章节尚未写入本 skill,**不要自行扩展**未定义的「第 2 章」强制项;若用户继续「首次部署」,询问需求后再扩展 skill 章节。
157
+
158
+ ---
159
+
160
+ ## 反模式(本章)
161
+
162
+ | 反模式 | 正确做法 |
163
+ | --- | --- |
164
+ | 只改本机 `pip.conf`,Dockerfile 仍官方源 | 部署构建以 Dockerfile/CI 为准 |
165
+ | `astral.sh` 装 uv + 仅 pip 换源 | uv 本体也走 `pip -i 阿里云` |
166
+ | 写死某个业务仓库路径/服务名 | 用当前工作区真实路径 |
167
+ | 与 `dwy-mirror-source` 重复扫 13 类本机工具 | 部署构建场景只扫 apt/uv/pip 构建链 |
168
+
169
+ ---
170
+
171
+ ## 章节路线图(占位,未实现勿执行)
172
+
173
+ | 章 | 主题 | 状态 |
174
+ | --- | --- | --- |
175
+ | 1 | 镜像源(apt + uv/pip 阿里云) | **当前** |
176
+ | 2+ | (待定:构建、健康检查、发布等) | 未开放 |
@@ -0,0 +1,112 @@
1
+ # 第 1 章参考:apt / uv / pip 阿里云片段
2
+
3
+ 通用片段,按基础镜像选用。**默认首选阿里云。**
4
+
5
+ ---
6
+
7
+ ## apt — Debian 12 (bookworm, deb822)
8
+
9
+ ```dockerfile
10
+ RUN sed -i \
11
+ 's|deb.debian.org|mirrors.aliyun.com|g; s|security.debian.org|mirrors.aliyun.com|g' \
12
+ /etc/apt/sources.list.d/debian.sources 2>/dev/null \
13
+ || sed -i \
14
+ 's|deb.debian.org|mirrors.aliyun.com|g; s|security.debian.org|mirrors.aliyun.com|g' \
15
+ /etc/apt/sources.list \
16
+ && apt-get update \
17
+ && apt-get install -y --no-install-recommends <packages> \
18
+ && rm -rf /var/lib/apt/lists/*
19
+ ```
20
+
21
+ ## apt — Debian 11 (bullseye)
22
+
23
+ ```dockerfile
24
+ RUN sed -i \
25
+ 's|http://deb.debian.org|https://mirrors.aliyun.com|g; \
26
+ s|http://security.debian.org|https://mirrors.aliyun.com/debian-security|g' \
27
+ /etc/apt/sources.list \
28
+ && apt-get update
29
+ ```
30
+
31
+ ## apt — Ubuntu 22.04
32
+
33
+ ```dockerfile
34
+ RUN sed -i \
35
+ 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g; \
36
+ s|http://security.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' \
37
+ /etc/apt/sources.list \
38
+ && apt-get update
39
+ ```
40
+
41
+ ## apt — Ubuntu 24.04 (noble, deb822)
42
+
43
+ ```dockerfile
44
+ RUN sed -i \
45
+ 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g; \
46
+ s|http://security.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' \
47
+ /etc/apt/sources.list.d/ubuntu.sources \
48
+ && apt-get update
49
+ ```
50
+
51
+ ## apk — Alpine
52
+
53
+ ```dockerfile
54
+ RUN sed -i 's|https://dl-cdn.alpinelinux.org|https://mirrors.aliyun.com|g' \
55
+ /etc/apk/repositories \
56
+ && apk update
57
+ ```
58
+
59
+ ---
60
+
61
+ ## uv + pip 环境变量(推荐写在 Dockerfile 靠前)
62
+
63
+ ```dockerfile
64
+ ENV UV_DEFAULT_INDEX=https://mirrors.aliyun.com/pypi/simple/ \
65
+ UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \
66
+ PIP_INDEX_URL=https://mirrors.aliyun.com/pypi/simple/ \
67
+ PIP_TRUSTED_HOST=mirrors.aliyun.com
68
+ ```
69
+
70
+ ## 安装 uv(禁止默认 astral.sh)
71
+
72
+ ```dockerfile
73
+ # ✅ 阿里云 PyPI
74
+ RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ \
75
+ --trusted-host mirrors.aliyun.com \
76
+ "uv>=0.4"
77
+
78
+ # ❌ 国内易慢
79
+ # RUN curl -LsSf https://astral.sh/uv/install.sh | sh
80
+ ```
81
+
82
+ ## 用 uv 装项目
83
+
84
+ ```dockerfile
85
+ RUN uv pip install --system --no-cache .
86
+ # 或锁文件项目:
87
+ # RUN uv sync --frozen --no-dev
88
+ ```
89
+
90
+ ## 仅 pip(无 uv)
91
+
92
+ ```dockerfile
93
+ RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ \
94
+ --trusted-host mirrors.aliyun.com \
95
+ -r requirements.txt
96
+ ```
97
+
98
+ ## 项目级 uv(pyproject.toml,可选)
99
+
100
+ ```toml
101
+ [[tool.uv.index]]
102
+ url = "https://mirrors.aliyun.com/pypi/simple/"
103
+ default = true
104
+ ```
105
+
106
+ ## 用户级 uv(~/.config/uv/uv.toml,可选;开发机详查 dwy-mirror-source)
107
+
108
+ ```toml
109
+ [[index]]
110
+ url = "https://mirrors.aliyun.com/pypi/simple/"
111
+ default = true
112
+ ```
@@ -1,21 +0,0 @@
1
- ---
2
- name: dwy-ideate
3
- description: "【dwy·想法收敛】产品 0 到 1 立项第一步。触发场景:用户说『我有个想法 / 帮我把这个点子理清楚 / 想做个 XX / 收敛想法 / 立项 / ideate』,要把模糊念头通过苏格拉底式反问发散+收敛成清晰可执行的产品想法时。"
4
- ---
5
-
6
- ## 职责(单一)
7
- 把用户模糊的初始念头,通过苏格拉底式反问发散+收敛,产出一份清晰的产品想法定义。
8
-
9
- ## 输入(从哪读)
10
- - 用户口述的初始想法(首个原子,无上游产出)
11
-
12
- ## 实现
13
- [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
14
- 读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
15
- - 本 skill 依赖的外部 skill:`brainstorming`(对应 `~/.dwy/skills/brainstorming/`)
16
- - 若 `~/.dwy/skills/brainstorming/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
17
-
18
- ## 产出契约(硬约束)
19
- - 落到:`.dwy/prod/[项目]/01-立项/想法收敛.md`
20
- - 固定章节:核心问题 / 目标用户 / 价值主张 / 关键假设 / 边界与不做什么
21
- - 回写 state.json:`confirmed.idea`