@warnyin/agents 0.5.1 → 0.6.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/.claude/agents/warnyin-infra.md +1 -1
- package/.claude/agents/warnyin-qa.md +1 -1
- package/.claude/agents/warnyin-sa.md +1 -1
- package/.claude/agents/warnyin-security.md +1 -1
- package/.claude/agents/warnyin-tech-lead.md +1 -1
- package/.claude/commands/warnyin/build.md +9 -9
- package/.claude/commands/warnyin/design.md +4 -4
- package/.claude/commands/warnyin/discovery.md +3 -3
- package/.claude/commands/warnyin/explore.md +1 -1
- package/.claude/commands/warnyin/init.md +2 -2
- package/.claude/commands/warnyin/install-skill.md +2 -2
- package/.claude/commands/warnyin/next.md +3 -3
- package/.claude/commands/warnyin/ship.md +5 -5
- package/.claude/commands/warnyin/update-codemaps.md +1 -1
- package/.claude/commands/warnyin/verify.md +5 -5
- package/{warnyin → .warnyin}/installer/templates/CLAUDE.md +15 -15
- package/{warnyin → .warnyin}/template/docs/codemap/index.md +1 -1
- package/{warnyin → .warnyin}/template/docs/troubleshooting.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/build.md +2 -2
- package/{warnyin → .warnyin}/template/stages/[topic]/business.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/design.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/discovery.md +2 -2
- package/{warnyin → .warnyin}/template/stages/[topic]/proposal.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/research.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/ship.md +3 -3
- package/{warnyin → .warnyin}/template/stages/[topic]/tasks/[task-name]/issue.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/tasks/[task-name]/rule.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/tasks/[task-name]/spec.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/tasks/[task-name]/standard.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/tasks/[task-name]/task.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/test.md +1 -1
- package/{warnyin → .warnyin}/template/stages/[topic]/verify.md +2 -2
- package/{warnyin → .warnyin}/workflow/README.md +13 -13
- package/{warnyin → .warnyin}/workflow/explore.md +2 -2
- package/{warnyin → .warnyin}/workflow/init.md +34 -11
- package/{warnyin → .warnyin}/workflow/next.md +3 -3
- package/{warnyin → .warnyin}/workflow/roles/developer.md +1 -1
- package/{warnyin → .warnyin}/workflow/scripts/build-wave.mjs +10 -8
- package/{warnyin → .warnyin}/workflow/stages/build.md +10 -10
- package/{warnyin → .warnyin}/workflow/stages/design.md +17 -17
- package/{warnyin → .warnyin}/workflow/stages/discovery.md +7 -7
- package/{warnyin → .warnyin}/workflow/stages/ship.md +8 -8
- package/{warnyin → .warnyin}/workflow/stages/verify.md +5 -5
- package/AGENTS.md +15 -15
- package/CLAUDE.md +18 -18
- package/README.md +10 -10
- package/bin/cli.mjs +49 -19
- package/package.json +6 -3
- package/warnyin/stages/achieved/.gitkeep +0 -0
- package/warnyin/stages/context.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/features/[feature-name]/business.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/features/[feature-name]/feature.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/infra.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/project.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/rule.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/techstack/[component]/about.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/techstack/[component]/rule.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/techstack/[component]/standard.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/techstack/[component]/structure.md +0 -0
- /package/{warnyin → .warnyin}/template/docs/techstack/[component]/test.md +0 -0
- /package/{warnyin → .warnyin}/template/stages/[topic]/troubleshooting.md +0 -0
- /package/{warnyin → .warnyin}/workflow/codemap.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/README.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/ba.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/infra.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/po.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/qa.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/sa.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/security.md +0 -0
- /package/{warnyin → .warnyin}/workflow/roles/tech-lead.md +0 -0
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
## 2. ก่อนเทส — อ่านให้เข้าใจก่อนเสมอ
|
|
16
16
|
|
|
17
|
-
1. **spec + tasks ทั้งหมด** — `
|
|
17
|
+
1. **spec + tasks ทั้งหมด** — `docs/stages/<slug>/tasks/*/spec.md` + `task.md`, `design.md`, `proposal.md`
|
|
18
18
|
→ เข้าใจ **จุดประสงค์ของ topic** และสิ่งที่ต้องยืนยัน (อย่าเทสผ่านๆ โดยไม่เข้าใจ)
|
|
19
19
|
2. **`docs/techstack/<component>/test.md`** — guideline ว่าเทสยังไง (เช่น frontend: e2e smoke ผ่าน **playwright-cli**)
|
|
20
20
|
→ ถ้า **ไม่มี** guideline → แนะนำว่าควรเทสแบบไหน/วิธีใดได้บ้าง แล้วเขียนแผนลง `test.md`
|
|
@@ -30,16 +30,16 @@
|
|
|
30
30
|
3. **ใช้ guideline จาก `test.md`** ของ techstack; ถ้าไม่มีให้เสนอวิธีเทสที่เหมาะแล้วเขียนแผนเอง
|
|
31
31
|
4. **Frontend → verify UX/UI ด้วย** (ไม่ใช่แค่ functional — ดู layout, state, flow, ความถูกต้องของหน้าจอ)
|
|
32
32
|
5. **ข้อไหน verify ไม่ผ่าน → แก้จนผ่าน (loop)** และ **นับจำนวนการแก้ไข/จำนวนรอบ**
|
|
33
|
-
6. **ปัญหายาก/ซ้ำในขั้นนี้ → บันทึก `
|
|
33
|
+
6. **ปัญหายาก/ซ้ำในขั้นนี้ → บันทึก `docs/stages/<slug>/troubleshooting.md`** (เหมือน BUILD); เจอปัญหา → อ่าน `docs/troubleshooting.md` ก่อน
|
|
34
34
|
7. **นาน/หลายรอบเกินไป → พิจารณาถาม user ทีละข้อ + เสนอคำตอบที่แนะนำ** (อย่าวนแก้เงียบๆ ไม่จบ)
|
|
35
35
|
8. **ห้ามแตะไฟล์กลางใน `docs/`** — แผนเทสเขียนระดับ topic ที่ `test.md` ก่อน รอ SHIP merge เข้า `docs/techstack/<component>/test.md`
|
|
36
|
-
9. **สวม role QA** — ทำตาม role card
|
|
36
|
+
9. **สวม role QA** — ทำตาม role card `.warnyin/workflow/roles/qa.md` (lens: คิดแบบผู้ใช้จริง + คนหาเรื่อง, edge case, regression; checklist ครบทุกข้อ)
|
|
37
37
|
|
|
38
38
|
---
|
|
39
39
|
|
|
40
40
|
## 4. ลำดับขั้นการทำงาน (process)
|
|
41
41
|
|
|
42
|
-
0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม VERIFY ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `
|
|
42
|
+
0. **★ เช็ค context window ก่อนเริ่ม:** ประเมินว่า context ของ session ปัจจุบันถูกใช้ไปมากน้อยแค่ไหน — ถ้าใช้ไปเยอะหรือ **เกินครึ่ง** → **เสนอ user ให้ `/compact` หรือ `/clear` ก่อนเสมอ** แล้วค่อยเริ่ม VERIFY ใน context ที่โล่ง (สถานะงานอยู่ในไฟล์ `docs/stages/<slug>/` ครบ ไม่หายไปกับ context) — VERIFY เป็นลูปเทส-แก้ที่อาจยาว ต้องมี context เหลือมากพอ; เครื่องอื่นที่ไม่มีคำสั่งนี้ → แนะนำเริ่ม session ใหม่
|
|
43
43
|
1. **เข้าใจจุดประสงค์:** อ่าน spec/tasks/design → สรุปสิ่งที่ต้อง verify (functional + UX/UI)
|
|
44
44
|
2. **วางแผนเทส → เขียน `test.md`:** ตาม guideline `docs/techstack/<component>/test.md`; ไม่มีก็เสนอวิธี (e2e smoke / integration / manual ฯลฯ) แล้วเขียนแผน
|
|
45
45
|
3. **เตรียม local env:** รัน service ที่เกี่ยวข้องตาม `infra.md`
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
|
-
## 5. Output (สร้างที่ `
|
|
53
|
+
## 5. Output (สร้างที่ `docs/stages/<slug>/`)
|
|
54
54
|
|
|
55
55
|
| ไฟล์ | เนื้อหา | ปลายทางตอน SHIP |
|
|
56
56
|
|---|---|---|
|
package/AGENTS.md
CHANGED
|
@@ -12,37 +12,37 @@ Discovery (optional) ──▶ DESIGN ──▶ BUILD ──▶ VERIFY ──▶
|
|
|
12
12
|
|
|
13
13
|
## กฎสำคัญ: ทำตาม playbook กลางเสมอ
|
|
14
14
|
|
|
15
|
-
แก่นของแต่ละ stage คือ **single source of truth** อยู่ที่
|
|
15
|
+
แก่นของแต่ละ stage คือ **single source of truth** อยู่ที่ `.warnyin/workflow/stages/`
|
|
16
16
|
ก่อนทำงานใน stage ใด ให้เปิดอ่านไฟล์ playbook ของ stage นั้นแล้วทำตามอย่างเคร่งครัด
|
|
17
17
|
|
|
18
18
|
| Stage | playbook | สถานะ |
|
|
19
19
|
|---|---|---|
|
|
20
|
-
| Discovery |
|
|
21
|
-
| DESIGN |
|
|
22
|
-
| BUILD |
|
|
23
|
-
| VERIFY |
|
|
24
|
-
| SHIP |
|
|
20
|
+
| Discovery | `.warnyin/workflow/stages/discovery.md` | ✅ พร้อมใช้ |
|
|
21
|
+
| DESIGN | `.warnyin/workflow/stages/design.md` | ✅ พร้อมใช้ |
|
|
22
|
+
| BUILD | `.warnyin/workflow/stages/build.md` | ✅ พร้อมใช้ |
|
|
23
|
+
| VERIFY | `.warnyin/workflow/stages/verify.md` | ✅ พร้อมใช้ |
|
|
24
|
+
| SHIP | `.warnyin/workflow/stages/ship.md` | ✅ พร้อมใช้ |
|
|
25
25
|
|
|
26
26
|
## วิธีเริ่ม
|
|
27
27
|
|
|
28
|
-
0. ครั้งแรกในโปรเจกต์ (docs/ ยังว่าง) → ทำตาม
|
|
29
|
-
1. อ่าน
|
|
30
|
-
2. งานใหม่ → copy
|
|
28
|
+
0. ครั้งแรกในโปรเจกต์ (docs/ ยังว่าง) → ทำตาม `.warnyin/workflow/init.md` เพื่อวิเคราะห์โปรเจกต์ + เติม `docs/` ก่อน
|
|
29
|
+
1. อ่าน `.warnyin/workflow/README.md` เพื่อเข้าใจภาพรวมและโครงสร้าง
|
|
30
|
+
2. งานใหม่ → copy `.warnyin/template/stages/[topic]/` เป็น `docs/stages/<slug>/`
|
|
31
31
|
3. รัน stage ตามลำดับ โดยทำตาม playbook ของแต่ละ stage
|
|
32
|
-
4. output ของงานเก็บใน `
|
|
32
|
+
4. output ของงานเก็บใน `docs/stages/<slug>/`, ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/`
|
|
33
33
|
|
|
34
34
|
## สำรวจโดยไม่สร้าง artifact (EXPLORE)
|
|
35
35
|
|
|
36
|
-
อยากถาม/สำรวจข้อมูลเฉยๆ โดยไม่เปิด topic → ทำตาม
|
|
36
|
+
อยากถาม/สำรวจข้อมูลเฉยๆ โดยไม่เปิด topic → ทำตาม `.warnyin/workflow/explore.md`
|
|
37
37
|
(read-only เด็ดขาด — ไม่สร้าง/แก้ไฟล์ใดๆ จบที่คำตอบในแชท)
|
|
38
38
|
|
|
39
39
|
## เช็คงานค้าง / หาขั้นตอนถัดไป (NEXT)
|
|
40
40
|
|
|
41
|
-
อยากรู้ว่ามีงานอะไรค้างและควรไปต่อยังไง → ทำตาม
|
|
42
|
-
(สแกน `
|
|
41
|
+
อยากรู้ว่ามีงานอะไรค้างและควรไปต่อยังไง → ทำตาม `.warnyin/workflow/next.md`
|
|
42
|
+
(สแกน `docs/stages/*` ระบุ stage ปัจจุบันจาก artifact จริง + gate ที่ขาด — read-only ไม่แก้ไฟล์)
|
|
43
43
|
|
|
44
44
|
## รัน Discovery
|
|
45
45
|
|
|
46
|
-
ทำตาม
|
|
46
|
+
ทำตาม `.warnyin/workflow/stages/discovery.md` — เริ่มอ่าน `docs/project.md`, ตี scope กว้าง→แคบ,
|
|
47
47
|
ถามทีละข้อพร้อมเสนอคำตอบที่แนะนำ, คำถามที่ตอบได้ด้วยโค้ดให้ไปอ่านโค้ดเอง,
|
|
48
|
-
เขียน output ลง `
|
|
48
|
+
เขียน output ลง `docs/stages/<slug>/discovery.md` และ `research.md`
|
package/CLAUDE.md
CHANGED
|
@@ -4,37 +4,37 @@ repo มาตรฐานกลางของ **ways of work** สำหรั
|
|
|
4
4
|
`Discovery (optional) ▶ DESIGN ▶ BUILD ▶ VERIFY ▶ SHIP`
|
|
5
5
|
|
|
6
6
|
## กฎหลัก
|
|
7
|
-
- แก่นของแต่ละ stage เป็น single source of truth ที่
|
|
8
|
-
- อย่า duplicate logic ของ workflow ลงที่อื่น ถ้าต้องแก้พฤติกรรมให้แก้ที่
|
|
9
|
-
- output ของงานจริงเก็บใน `
|
|
7
|
+
- แก่นของแต่ละ stage เป็น single source of truth ที่ `.warnyin/workflow/stages/` — **ทำตาม playbook นั้นเสมอ** ก่อนเริ่มงานใน stage
|
|
8
|
+
- อย่า duplicate logic ของ workflow ลงที่อื่น ถ้าต้องแก้พฤติกรรมให้แก้ที่ `.warnyin/workflow/stages/`
|
|
9
|
+
- output ของงานจริงเก็บใน `docs/stages/<slug>/` (copy จาก template `.warnyin/template/stages/[topic]/`)
|
|
10
10
|
- ความรู้ถาวรระดับโปรเจกต์อยู่ใน `docs/` — เริ่มอ่าน `docs/project.md` เสมอใน Discovery
|
|
11
|
-
- role card กลางอยู่ที่
|
|
11
|
+
- role card กลางอยู่ที่ `.warnyin/workflow/roles/` (BA/PO/SA/Tech Lead/Developer/QA/Security/Infra) — stage ไหนใช้ role ไหนดูใน playbook; reviewer subagent ของ Claude Code อยู่ที่ `.claude/agents/warnyin-*`
|
|
12
12
|
|
|
13
13
|
## Slash commands (namespace `warnyin:`)
|
|
14
|
-
- `/warnyin:init` → วิเคราะห์โปรเจกต์ + เติม `docs/` ครั้งแรกหลังติดตั้ง (`.claude/commands/warnyin/init.md` →
|
|
15
|
-
- `/warnyin:install-skill [role]` → ติดตั้ง skill เสริมประจำ role (รายการอยู่ที่ตารางใน
|
|
16
|
-
- `/warnyin:update-codemaps` → สแกนโครงสร้าง + สร้าง/อัปเดต codemap แบบ token-lean ใน `docs/codemap/` (
|
|
17
|
-
- `/warnyin:explore [คำถาม]` → สำรวจ/ตอบคำถามแบบ read-only — ไม่สร้าง artifact ใดๆ จบที่คำตอบในแชท (
|
|
18
|
-
- `/warnyin:next [slug]` → เช็คงานค้างทุก topic + แนะนำ command ถัดไป แบบ read-only (
|
|
19
|
-
- `/warnyin:discovery [topic]` → Discovery stage (`.claude/commands/warnyin/discovery.md` →
|
|
20
|
-
- `/warnyin:design [slug] [change]` → DESIGN stage (`.claude/commands/warnyin/design.md` →
|
|
21
|
-
- `/warnyin:build [slug]` → BUILD stage — fan-out sub-agent ตาม dependency (
|
|
22
|
-
- `/warnyin:verify [slug]` → VERIFY stage — strategy tester เทส local env + UXUI แก้จนผ่าน (
|
|
23
|
-
- `/warnyin:ship [slug]` → SHIP stage — ส่งมอบ: promote ความรู้ขึ้น `docs/` + archive topic (
|
|
14
|
+
- `/warnyin:init` → วิเคราะห์โปรเจกต์ + เติม `docs/` ครั้งแรกหลังติดตั้ง (`.claude/commands/warnyin/init.md` → `.warnyin/workflow/init.md`)
|
|
15
|
+
- `/warnyin:install-skill [role]` → ติดตั้ง skill เสริมประจำ role (รายการอยู่ที่ตารางใน `.warnyin/workflow/roles/README.md`)
|
|
16
|
+
- `/warnyin:update-codemaps` → สแกนโครงสร้าง + สร้าง/อัปเดต codemap แบบ token-lean ใน `docs/codemap/` (`.warnyin/workflow/codemap.md`)
|
|
17
|
+
- `/warnyin:explore [คำถาม]` → สำรวจ/ตอบคำถามแบบ read-only — ไม่สร้าง artifact ใดๆ จบที่คำตอบในแชท (`.warnyin/workflow/explore.md`)
|
|
18
|
+
- `/warnyin:next [slug]` → เช็คงานค้างทุก topic + แนะนำ command ถัดไป แบบ read-only (`.warnyin/workflow/next.md`)
|
|
19
|
+
- `/warnyin:discovery [topic]` → Discovery stage (`.claude/commands/warnyin/discovery.md` → `.warnyin/workflow/stages/discovery.md`)
|
|
20
|
+
- `/warnyin:design [slug] [change]` → DESIGN stage (`.claude/commands/warnyin/design.md` → `.warnyin/workflow/stages/design.md`)
|
|
21
|
+
- `/warnyin:build [slug]` → BUILD stage — fan-out sub-agent ตาม dependency (`.warnyin/workflow/stages/build.md` + `.warnyin/workflow/scripts/build-wave.mjs`)
|
|
22
|
+
- `/warnyin:verify [slug]` → VERIFY stage — strategy tester เทส local env + UXUI แก้จนผ่าน (`.warnyin/workflow/stages/verify.md`)
|
|
23
|
+
- `/warnyin:ship [slug]` → SHIP stage — ส่งมอบ: promote ความรู้ขึ้น `docs/` + archive topic (`.warnyin/workflow/stages/ship.md`)
|
|
24
24
|
|
|
25
25
|
## การติดตั้งไปโปรเจกต์อื่น (npx installer)
|
|
26
26
|
- `npx @warnyin/agents` (หรือสำรอง `npx github:warnyin/warnyin-agents`) → copy โครงทั้งหมดลงโปรเจกต์ปลายทาง (ข้ามไฟล์ที่มีอยู่, CLAUDE.md/AGENTS.md ที่มีอยู่จะต่อท้ายเป็น section)
|
|
27
|
-
- `--update` → เขียนทับเฉพาะ core (
|
|
28
|
-
- ตัว installer: `bin/cli.mjs` + template CLAUDE.md ของโปรเจกต์ปลายทางที่
|
|
27
|
+
- `--update` → เขียนทับเฉพาะ core (`.warnyin/workflow/`, `.claude/commands/warnyin/`, template ใน `.warnyin/template/`) ไม่แตะ `docs/`/งานจริง
|
|
28
|
+
- ตัว installer: `bin/cli.mjs` + template CLAUDE.md ของโปรเจกต์ปลายทางที่ `.warnyin/installer/templates/CLAUDE.md` (แก้ commands list ที่ไหน ให้แก้ template นี้ด้วย; โฟลเดอร์นี้ไม่ถูก copy ไป target)
|
|
29
29
|
- หลังติดตั้ง → รัน `/warnyin:init` เพื่อเติม `docs/`
|
|
30
30
|
|
|
31
31
|
## รองรับหลาย AI
|
|
32
32
|
repo นี้ tool-agnostic: Claude Code อ่าน `.claude/` + ไฟล์นี้, ส่วน Codex/Antigravity อ่าน `AGENTS.md`
|
|
33
|
-
ทุกเครื่องชี้กลับมาที่ playbook กลางชุดเดียวกันใน
|
|
33
|
+
ทุกเครื่องชี้กลับมาที่ playbook กลางชุดเดียวกันใน `.warnyin/workflow/stages/` — ดูภาพรวมที่ `.warnyin/workflow/README.md`
|
|
34
34
|
|
|
35
35
|
## สถานะการสร้าง workflow (อัปเดต 2026-06-04)
|
|
36
36
|
ครบทั้ง 5 stage: Discovery ✅ · DESIGN ✅ · BUILD ✅ · VERIFY ✅ · SHIP ✅
|
|
37
37
|
(playbook + command + template + build-wave.mjs ครบทุก stage)
|
|
38
38
|
|
|
39
|
-
แพทเทิร์นการเติม/แก้ stage: playbook
|
|
39
|
+
แพทเทิร์นการเติม/แก้ stage: playbook `.warnyin/workflow/stages/<stage>.md` + command `.claude/commands/warnyin/<stage>.md` + อัปเดตตาราง stage ใน `AGENTS.md`/`CLAUDE.md`/`.warnyin/workflow/README.md` + output template ใน `.warnyin/template/stages/[topic]/`
|
|
40
40
|
**สำคัญ: การเปลี่ยนพฤติกรรม stage ใดๆ ให้ user เป็นคนอธิบาย/ยืนยันก่อน อย่าเดาเอง**
|
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ npx @warnyin/agents --update # อัปเดต playbook กลางเป
|
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
- โปรเจกต์ที่มี `CLAUDE.md` / `AGENTS.md` อยู่แล้ว → installer **ต่อท้ายเป็น section** ไม่เขียนทับ
|
|
28
|
-
- `--update` เขียนทับเฉพาะ core (
|
|
28
|
+
- `--update` เขียนทับเฉพาะ core (`.warnyin/workflow/`, `.claude/commands/warnyin/`, template ใน `.warnyin/template/`) — ไม่แตะ `docs/` และงานจริง
|
|
29
29
|
|
|
30
30
|
## เริ่มใช้งาน
|
|
31
31
|
|
|
@@ -47,16 +47,16 @@ npx @warnyin/agents --update # อัปเดต playbook กลางเป
|
|
|
47
47
|
|
|
48
48
|
## แนวคิดหลัก: Tool-agnostic, single source of truth
|
|
49
49
|
|
|
50
|
-
แก่นของ workflow (กฎ / ขั้นตอน / เกณฑ์ผ่าน) เขียน**ครั้งเดียว**เป็น markdown ใน
|
|
50
|
+
แก่นของ workflow (กฎ / ขั้นตอน / เกณฑ์ผ่าน) เขียน**ครั้งเดียว**เป็น markdown ใน `.warnyin/workflow/stages/`
|
|
51
51
|
AI แต่ละเครื่องมีแค่ adapter บางๆ ชี้กลับมาที่ playbook กลางชุดเดียวกัน
|
|
52
52
|
|
|
53
53
|
| AI tool | Adapter | อ่าน playbook จาก |
|
|
54
54
|
|---|---|---|
|
|
55
|
-
| **Claude Code** | `.claude/commands/warnyin/*` + `CLAUDE.md` |
|
|
56
|
-
| **Codex / Antigravity** | `AGENTS.md` |
|
|
57
|
-
| เครื่องอื่นๆ | ชี้มาที่
|
|
55
|
+
| **Claude Code** | `.claude/commands/warnyin/*` + `CLAUDE.md` | `.warnyin/workflow/stages/*.md` |
|
|
56
|
+
| **Codex / Antigravity** | `AGENTS.md` | `.warnyin/workflow/stages/*.md` |
|
|
57
|
+
| เครื่องอื่นๆ | ชี้มาที่ `.warnyin/workflow/stages/` ได้ทันที | `.warnyin/workflow/stages/*.md` |
|
|
58
58
|
|
|
59
|
-
> แก้กฎที่
|
|
59
|
+
> แก้กฎที่ `.warnyin/workflow/stages/` ที่เดียว → ทุกเครื่องได้เหมือนกันทันที
|
|
60
60
|
|
|
61
61
|
## โครงสร้างที่ติดตั้งลงโปรเจกต์
|
|
62
62
|
|
|
@@ -72,7 +72,7 @@ warnyin/ # ★ ทุกอย่างของ workflow รว
|
|
|
72
72
|
stages/ # พื้นที่ทำงานจริงราย topic (copy [topic] เป็น <slug>)
|
|
73
73
|
achieved/ # archive หลัง SHIP (<YYYY-MM-DD>-<slug>)
|
|
74
74
|
|
|
75
|
-
docs/ # ความรู้ถาวรระดับโปรเจกต์ — ของจริงล้วน (seed จาก warnyin/template/docs ตอนติดตั้ง)
|
|
75
|
+
docs/ # ความรู้ถาวรระดับโปรเจกต์ — ของจริงล้วน (seed จาก .warnyin/template/docs ตอนติดตั้ง)
|
|
76
76
|
project.md # ★ จุดเริ่มของ Discovery
|
|
77
77
|
rule.md infra.md troubleshooting.md
|
|
78
78
|
codemap/ features/ techstack/<component>/{about,rule,standard,structure,test}.md
|
|
@@ -83,7 +83,7 @@ AGENTS.md # adapter สำหรับ Codex / Antigravity
|
|
|
83
83
|
CLAUDE.md # adapter สำหรับ Claude Code
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
-
รายละเอียดเต็ม: [
|
|
86
|
+
รายละเอียดเต็ม: [`.warnyin/workflow/README.md`](.warnyin/workflow/README.md)
|
|
87
87
|
|
|
88
88
|
## จุดเด่นของแต่ละ stage
|
|
89
89
|
|
|
@@ -95,7 +95,7 @@ CLAUDE.md # adapter สำหรับ Claude Code
|
|
|
95
95
|
|
|
96
96
|
## Role system
|
|
97
97
|
|
|
98
|
-
role card กลางที่
|
|
98
|
+
role card กลางที่ `.warnyin/workflow/roles/` — แต่ละใบกำหนด Mission / Lens / Checklist / Output ของหนึ่งบทบาท
|
|
99
99
|
|
|
100
100
|
| Role | ใช้ใน | รูปแบบ |
|
|
101
101
|
|---|---|---|
|
|
@@ -106,7 +106,7 @@ role card กลางที่ `warnyin/workflow/roles/` — แต่ละใ
|
|
|
106
106
|
| Security + Infra | DESIGN panel | reviewer (read-only) |
|
|
107
107
|
|
|
108
108
|
- Tech Lead/Security ผูกกับ built-in `/code-review` และ `/security-review` ของ Claude Code
|
|
109
|
-
- skill เสริมต่อ role ติดตั้งด้วย `/warnyin:install-skill` (รายการกลาง:
|
|
109
|
+
- skill เสริมต่อ role ติดตั้งด้วย `/warnyin:install-skill` (รายการกลาง: `.warnyin/workflow/roles/README.md`)
|
|
110
110
|
|
|
111
111
|
## Release เวอร์ชันใหม่ (สำหรับผู้ดูแล repo นี้)
|
|
112
112
|
|
package/bin/cli.mjs
CHANGED
|
@@ -24,8 +24,8 @@ if (args.has('--help') || args.has('-h')) {
|
|
|
24
24
|
ใช้งาน:
|
|
25
25
|
npx @warnyin/agents ติดตั้ง (ข้ามไฟล์ที่มีอยู่แล้ว ไม่เขียนทับ)
|
|
26
26
|
npx @warnyin/agents --update อัปเดต playbook กลางเป็นเวอร์ชันล่าสุด
|
|
27
|
-
(เขียนทับเฉพาะ warnyin/workflow/, .claude/commands/warnyin/,
|
|
28
|
-
template warnyin/template/stages/[topic] — ไม่แตะ docs/ และงานจริง)
|
|
27
|
+
(เขียนทับเฉพาะ .warnyin/workflow/, .claude/commands/warnyin/,
|
|
28
|
+
template .warnyin/template/stages/[topic] — ไม่แตะ docs/ และงานจริง)
|
|
29
29
|
npx @warnyin/agents --dry-run แสดงรายการไฟล์ที่จะสร้าง/อัปเดต โดยไม่เขียนจริง
|
|
30
30
|
|
|
31
31
|
หลังติดตั้ง: เปิด Claude Code ในโปรเจกต์ แล้วรัน /warnyin:init ให้ agent วิเคราะห์โปรเจกต์ + เติม docs/`)
|
|
@@ -38,27 +38,40 @@ if (path.resolve(pkgRoot) === path.resolve(target)) {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// โครงเก่า (≤0.2.x): workflow/ + warnyin-stages/ ที่ root — เตือนให้ย้ายเอง ไม่แตะงานจริงของ user
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
43
|
-
console.warn(`⚠ พบโครงเลย์เอาต์เก่า (≤0.2.x): ${
|
|
44
|
-
|
|
45
|
-
1. git mv warnyin-stages
|
|
46
|
-
2. git rm -r workflow # playbook เก่า (เวอร์ชันใหม่จะอยู่ที่ warnyin/workflow)
|
|
47
|
-
3. ลบ template เก่าถ้ามี: "warnyin/stages/[topic]", "docs/techstack/[component]", "docs/features/[feature-name]"
|
|
48
|
-
(ย้ายไปรวมที่ warnyin/template/ แล้ว)
|
|
41
|
+
const legacyV2 = ['workflow', 'warnyin-stages'].filter((d) => fs.existsSync(path.join(target, d)))
|
|
42
|
+
if (legacyV2.length) {
|
|
43
|
+
console.warn(`⚠ พบโครงเลย์เอาต์เก่า (≤0.2.x): ${legacyV2.join(', ')}
|
|
44
|
+
เวอร์ชันนี้ย้าย core ไปใต้ .warnyin/ และงานจริงไป docs/stages/ — แนะนำย้ายด้วยตัวเองก่อน:
|
|
45
|
+
1. git mv warnyin-stages docs/stages # งานจริงของคุณ (ปลอดภัย ไม่ถูกแตะโดย installer)
|
|
46
|
+
2. git rm -r workflow # playbook เก่า (เวอร์ชันใหม่จะอยู่ที่ .warnyin/workflow)
|
|
49
47
|
แล้วรันคำสั่งนี้อีกครั้ง\n`)
|
|
50
48
|
}
|
|
51
49
|
|
|
50
|
+
// โครงเก่า (0.3–0.5.x): ทุกอย่างอยู่ใต้ warnyin/ ที่ root — เวอร์ชันนี้แยกเป็น .warnyin/ (core) + docs/stages (งานจริง)
|
|
51
|
+
const legacyV5 = ['workflow', 'template', 'installer', 'stages'].filter((d) =>
|
|
52
|
+
fs.existsSync(path.join(target, 'warnyin', d)),
|
|
53
|
+
)
|
|
54
|
+
if (legacyV5.length) {
|
|
55
|
+
console.warn(`⚠ พบโครงเลย์เอาต์เก่า (0.3–0.5.x): warnyin/{${legacyV5.join(', ')}}
|
|
56
|
+
เวอร์ชันนี้ย้าย core ไป .warnyin/ และงานจริงไป docs/stages/ — แนะนำย้ายด้วยตัวเองก่อน:
|
|
57
|
+
1. git mv warnyin/stages docs/stages # งานจริงของคุณ (active + achieved) — ปลอดภัย ไม่ถูกแตะ
|
|
58
|
+
2. git rm -r warnyin/workflow warnyin/template # core เก่า (เวอร์ชันใหม่ installer จะวางที่ .warnyin/)
|
|
59
|
+
แล้วรันคำสั่งนี้อีกครั้ง — installer จะวาง .warnyin/ ชุดใหม่ให้\n`)
|
|
60
|
+
}
|
|
61
|
+
|
|
52
62
|
// core = playbook กลาง + command + agent + template — เขียนทับได้เมื่อ --update
|
|
53
63
|
const CORE = [
|
|
54
|
-
path.join('warnyin', 'workflow'),
|
|
55
|
-
path.join('warnyin', 'template'),
|
|
64
|
+
path.join('.warnyin', 'workflow'),
|
|
65
|
+
path.join('.warnyin', 'template'),
|
|
56
66
|
path.join('.claude', 'commands', 'warnyin'),
|
|
57
67
|
path.join('.claude', 'agents'),
|
|
58
68
|
]
|
|
59
|
-
// scaffold =
|
|
60
|
-
// (
|
|
61
|
-
const
|
|
69
|
+
// scaffold = พื้นที่ทำงานเปล่าของโปรเจกต์ — installer "สร้างเอง" ไม่ copy tree จาก package
|
|
70
|
+
// (สำคัญ: ถ้า copy docs/stages จาก pkgRoot งานจริงของ repo ต้นทางจะรั่วไป target ทุกครั้ง — ดู verify installer-test-ci)
|
|
71
|
+
const SCAFFOLD_FILES = [
|
|
72
|
+
path.join('docs', 'stages', 'context.md'), // บริบทงานที่จดไว้ (next/discovery/explore อ่าน "ถ้ามี")
|
|
73
|
+
path.join('docs', 'stages', 'achieved', '.gitkeep'), // ให้ git track โฟลเดอร์ archive เปล่า
|
|
74
|
+
]
|
|
62
75
|
|
|
63
76
|
const stats = { created: 0, updated: 0, skipped: 0 }
|
|
64
77
|
|
|
@@ -91,8 +104,25 @@ function copyTree(relDir, { overwrite }) {
|
|
|
91
104
|
}
|
|
92
105
|
}
|
|
93
106
|
|
|
94
|
-
/**
|
|
95
|
-
|
|
107
|
+
/** สร้างโครง scaffold เปล่าของ docs/stages เอง (ไม่ copy จาก package — กันงานจริงของ repo ต้นทางรั่วไป target) — ไม่ทับไฟล์ที่มีอยู่ */
|
|
108
|
+
function ensureScaffold() {
|
|
109
|
+
for (const rel of SCAFFOLD_FILES) {
|
|
110
|
+
const dest = path.join(target, rel)
|
|
111
|
+
if (fs.existsSync(dest)) {
|
|
112
|
+
stats.skipped++
|
|
113
|
+
continue
|
|
114
|
+
}
|
|
115
|
+
if (!DRY) {
|
|
116
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true })
|
|
117
|
+
fs.writeFileSync(dest, '')
|
|
118
|
+
}
|
|
119
|
+
stats.created++
|
|
120
|
+
console.log(` + ${rel}`)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** seed docs/ ของโปรเจกต์จาก .warnyin/template/docs — ข้ามโฟลเดอร์ template `[...]` (ไว้ให้ /warnyin:init copy เป็นชื่อจริง) และไม่ทับไฟล์ที่มีอยู่ */
|
|
125
|
+
const TEMPLATE_DOCS = path.join('.warnyin', 'template', 'docs')
|
|
96
126
|
function seedDocs(relDir = TEMPLATE_DOCS) {
|
|
97
127
|
const srcDir = path.join(pkgRoot, relDir)
|
|
98
128
|
if (!fs.existsSync(srcDir)) return
|
|
@@ -142,9 +172,9 @@ function installRootDoc(name, srcPath) {
|
|
|
142
172
|
console.log(`Warnyin Standard Workflow → ${target}${DRY ? ' (dry-run)' : ''}\n`)
|
|
143
173
|
|
|
144
174
|
for (const dir of CORE) copyTree(dir, { overwrite: UPDATE })
|
|
145
|
-
|
|
175
|
+
ensureScaffold()
|
|
146
176
|
seedDocs()
|
|
147
|
-
installRootDoc('CLAUDE.md', path.join(pkgRoot, 'warnyin', 'installer', 'templates', 'CLAUDE.md'))
|
|
177
|
+
installRootDoc('CLAUDE.md', path.join(pkgRoot, '.warnyin', 'installer', 'templates', 'CLAUDE.md'))
|
|
148
178
|
installRootDoc('AGENTS.md', path.join(pkgRoot, 'AGENTS.md'))
|
|
149
179
|
|
|
150
180
|
console.log(`\nสรุป: สร้างใหม่ ${stats.created} · อัปเดต ${stats.updated} · ข้าม (มีอยู่แล้ว) ${stats.skipped}`)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warnyin/agents",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Warnyin Standard Workflow installer — 5-stage ways of work (Discovery/DESIGN/BUILD/VERIFY/SHIP) สำหรับทุกโปรเจกต์",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,16 +10,19 @@
|
|
|
10
10
|
"bin": {
|
|
11
11
|
"warnyin-agents": "bin/cli.mjs"
|
|
12
12
|
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"test": "node --test"
|
|
15
|
+
},
|
|
13
16
|
"files": [
|
|
14
17
|
"bin",
|
|
15
|
-
"warnyin",
|
|
18
|
+
".warnyin",
|
|
16
19
|
".claude/commands",
|
|
17
20
|
".claude/agents",
|
|
18
21
|
"CLAUDE.md",
|
|
19
22
|
"AGENTS.md"
|
|
20
23
|
],
|
|
21
24
|
"engines": {
|
|
22
|
-
"node": ">=
|
|
25
|
+
"node": ">=20"
|
|
23
26
|
},
|
|
24
27
|
"repository": {
|
|
25
28
|
"type": "git",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|