dw-kit 1.2.0 → 1.3.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.
Files changed (63) hide show
  1. package/.claude/hooks/post-write.sh +64 -58
  2. package/.claude/hooks/pre-commit-gate.sh +96 -90
  3. package/.claude/hooks/privacy-block.sh +99 -94
  4. package/.claude/hooks/progress-ping.sh +53 -47
  5. package/.claude/hooks/safety-guard.sh +60 -54
  6. package/.claude/hooks/scout-block.sh +88 -82
  7. package/.claude/hooks/session-init.sh +91 -74
  8. package/.claude/hooks/stop-check.sh +88 -36
  9. package/.claude/hooks/telemetry-log.sh +34 -0
  10. package/.claude/rules/code-style.md +37 -37
  11. package/.claude/rules/commit-standards.md +37 -37
  12. package/.claude/rules/dw.md +136 -0
  13. package/.claude/settings.json +120 -99
  14. package/.claude/skills/dw-arch-review/SKILL.md +119 -119
  15. package/.claude/skills/dw-archive/SKILL.md +81 -81
  16. package/.claude/skills/dw-commit/SKILL.md +81 -81
  17. package/.claude/skills/dw-config-init/SKILL.md +91 -91
  18. package/.claude/skills/dw-config-validate/SKILL.md +75 -75
  19. package/.claude/skills/dw-dashboard/SKILL.md +209 -209
  20. package/.claude/skills/dw-debug/SKILL.md +97 -97
  21. package/.claude/skills/dw-decision/SKILL.md +116 -0
  22. package/.claude/skills/dw-docs-update/SKILL.md +125 -125
  23. package/.claude/skills/dw-estimate/SKILL.md +90 -90
  24. package/.claude/skills/dw-execute/SKILL.md +98 -98
  25. package/.claude/skills/dw-flow/SKILL.md +274 -274
  26. package/.claude/skills/dw-handoff/SKILL.md +81 -81
  27. package/.claude/skills/dw-kit-report/SKILL.md +152 -152
  28. package/.claude/skills/dw-log-work/SKILL.md +69 -69
  29. package/.claude/skills/dw-onboard/SKILL.md +201 -201
  30. package/.claude/skills/dw-plan/SKILL.md +125 -125
  31. package/.claude/skills/dw-prompt/SKILL.md +62 -62
  32. package/.claude/skills/dw-requirements/SKILL.md +98 -98
  33. package/.claude/skills/dw-research/SKILL.md +114 -114
  34. package/.claude/skills/dw-retroactive/SKILL.md +311 -311
  35. package/.claude/skills/dw-review/SKILL.md +66 -66
  36. package/.claude/skills/dw-rollback/SKILL.md +90 -90
  37. package/.claude/skills/dw-sprint-review/SKILL.md +99 -99
  38. package/.claude/skills/dw-task-init/SKILL.md +59 -59
  39. package/.claude/skills/dw-test-plan/SKILL.md +113 -113
  40. package/.claude/skills/dw-thinking/SKILL.md +70 -70
  41. package/.claude/skills/dw-upgrade/SKILL.md +72 -72
  42. package/.dw/config/dw.config.yml +82 -82
  43. package/.dw/core/PILLARS.md +122 -0
  44. package/.dw/core/templates/v2/spec.md +68 -0
  45. package/.dw/core/templates/v2/tracking.md +62 -0
  46. package/.dw/core/v14-evaluation-protocol.md +118 -0
  47. package/CLAUDE.md +42 -39
  48. package/MIGRATION-v1.3.md +201 -0
  49. package/README.md +43 -6
  50. package/package.json +86 -84
  51. package/src/cli.mjs +45 -9
  52. package/src/commands/dashboard.mjs +116 -0
  53. package/src/commands/doctor.mjs +165 -149
  54. package/src/commands/init.mjs +339 -332
  55. package/src/commands/metrics.mjs +165 -0
  56. package/src/commands/upgrade.mjs +297 -262
  57. package/src/lib/active-index.mjs +87 -0
  58. package/src/lib/copy.mjs +118 -110
  59. package/src/lib/cut-analysis.mjs +161 -0
  60. package/src/lib/telemetry.mjs +80 -0
  61. package/.claude/rules/dw-core.md +0 -100
  62. package/.claude/rules/dw-skills.md +0 -53
  63. package/.claude/rules/workflow-rules.md +0 -77
@@ -1,37 +1,37 @@
1
- # Code Style & Conventions
2
-
3
- ## Nguyên tắc chung
4
- - Đặt tên biến/hàm rõ ràng, tự giải thích (self-documenting)
5
- - Ưu tiên đơn giản, dễ đọc hơn clever code
6
- - Mỗi function làm MỘT việc
7
- - Comments giải thích WHY, không phải WHAT
8
- - Xử lý errors ở đầu function (guard clauses / early return)
9
-
10
- ## Naming Conventions
11
- - Variables/Functions: camelCase
12
- - Classes/Components: PascalCase
13
- - Constants: UPPER_SNAKE_CASE
14
- - Files: kebab-case hoặc theo convention của framework
15
- - Directories: kebab-case
16
-
17
- ## File Organization
18
- - 1 component/class per file (trừ khi strongly related)
19
- - Group imports: external → internal → relative
20
- - Export ở cuối file hoặc inline (nhất quán trong project)
21
-
22
- ## Error Handling
23
- - KHÔNG swallow errors (catch rỗng)
24
- - Log đủ context để debug (error message, input data, stack)
25
- - Dùng custom error types cho domain errors
26
- - Validate input ở boundary (API, form, external data)
27
-
28
- ## Testing
29
- - Test file cùng tên với source: `foo.ts` → `foo.test.ts` hoặc `foo.spec.ts`
30
- - Mỗi test case kiểm tra MỘT behavior
31
- - Test name mô tả expected behavior: "should return error when input is empty"
32
- - Arrange → Act → Assert pattern
33
- - KHÔNG mock internal implementation details
34
-
35
- ## NOTE
36
- Đây là quy tắc mặc định. Team tùy chỉnh theo stack cụ thể của dự án.
37
- Thêm framework-specific rules vào file này hoặc tạo file riêng trong `.claude/rules/`.
1
+ # Code Style & Conventions
2
+
3
+ ## Nguyên tắc chung
4
+ - Đặt tên biến/hàm rõ ràng, tự giải thích (self-documenting)
5
+ - Ưu tiên đơn giản, dễ đọc hơn clever code
6
+ - Mỗi function làm MỘT việc
7
+ - Comments giải thích WHY, không phải WHAT
8
+ - Xử lý errors ở đầu function (guard clauses / early return)
9
+
10
+ ## Naming Conventions
11
+ - Variables/Functions: camelCase
12
+ - Classes/Components: PascalCase
13
+ - Constants: UPPER_SNAKE_CASE
14
+ - Files: kebab-case hoặc theo convention của framework
15
+ - Directories: kebab-case
16
+
17
+ ## File Organization
18
+ - 1 component/class per file (trừ khi strongly related)
19
+ - Group imports: external → internal → relative
20
+ - Export ở cuối file hoặc inline (nhất quán trong project)
21
+
22
+ ## Error Handling
23
+ - KHÔNG swallow errors (catch rỗng)
24
+ - Log đủ context để debug (error message, input data, stack)
25
+ - Dùng custom error types cho domain errors
26
+ - Validate input ở boundary (API, form, external data)
27
+
28
+ ## Testing
29
+ - Test file cùng tên với source: `foo.ts` → `foo.test.ts` hoặc `foo.spec.ts`
30
+ - Mỗi test case kiểm tra MỘT behavior
31
+ - Test name mô tả expected behavior: "should return error when input is empty"
32
+ - Arrange → Act → Assert pattern
33
+ - KHÔNG mock internal implementation details
34
+
35
+ ## NOTE
36
+ Đây là quy tắc mặc định. Team tùy chỉnh theo stack cụ thể của dự án.
37
+ Thêm framework-specific rules vào file này hoặc tạo file riêng trong `.claude/rules/`.
@@ -1,37 +1,37 @@
1
- # Commit Standards
2
-
3
- ## Format
4
- ```
5
- <type>(<scope>): <mô tả tiếng Việt hoặc tiếng Anh>
6
-
7
- [Body - chi tiết thay đổi, lý do]
8
- [Blank line]
9
- [Footer - breaking changes, references]
10
-
11
- Co-Authored-By: Claude <noreply@anthropic.com>
12
- ```
13
-
14
- ## Types
15
- | Type | Khi nào dùng |
16
- |------|-------------|
17
- | `feat` | Tính năng mới |
18
- | `fix` | Sửa lỗi |
19
- | `refactor` | Tái cấu trúc, không thay đổi behavior |
20
- | `test` | Thêm/sửa tests |
21
- | `docs` | Tài liệu, comments |
22
- | `chore` | Build, config, dependencies |
23
- | `style` | Format, whitespace (không thay đổi logic) |
24
- | `perf` | Cải thiện performance |
25
-
26
- ## Quy tắc
27
- - Mỗi commit = 1 subtask hoặc 1 đơn vị logic hoàn chỉnh
28
- - Mô tả ngắn <= 72 ký tự
29
- - Dùng thì hiện tại: "thêm", "sửa", "cập nhật" (không phải "đã thêm")
30
- - KHÔNG commit files chứa secrets (.env, credentials, tokens)
31
- - KHÔNG commit console.log/debugger còn sót
32
-
33
- ## Branch Naming
34
- ```
35
- <type>/<task-name>
36
- ```
37
- Ví dụ: `feat/user-auth`, `fix/login-redirect`, `refactor/api-structure`
1
+ # Commit Standards
2
+
3
+ ## Format
4
+ ```
5
+ <type>(<scope>): <mô tả tiếng Việt hoặc tiếng Anh>
6
+
7
+ [Body - chi tiết thay đổi, lý do]
8
+ [Blank line]
9
+ [Footer - breaking changes, references]
10
+
11
+ Co-Authored-By: Claude <noreply@anthropic.com>
12
+ ```
13
+
14
+ ## Types
15
+ | Type | Khi nào dùng |
16
+ |------|-------------|
17
+ | `feat` | Tính năng mới |
18
+ | `fix` | Sửa lỗi |
19
+ | `refactor` | Tái cấu trúc, không thay đổi behavior |
20
+ | `test` | Thêm/sửa tests |
21
+ | `docs` | Tài liệu, comments |
22
+ | `chore` | Build, config, dependencies |
23
+ | `style` | Format, whitespace (không thay đổi logic) |
24
+ | `perf` | Cải thiện performance |
25
+
26
+ ## Quy tắc
27
+ - Mỗi commit = 1 subtask hoặc 1 đơn vị logic hoàn chỉnh
28
+ - Mô tả ngắn <= 72 ký tự
29
+ - Dùng thì hiện tại: "thêm", "sửa", "cập nhật" (không phải "đã thêm")
30
+ - KHÔNG commit files chứa secrets (.env, credentials, tokens)
31
+ - KHÔNG commit console.log/debugger còn sót
32
+
33
+ ## Branch Naming
34
+ ```
35
+ <type>/<task-name>
36
+ ```
37
+ Ví dụ: `feat/user-auth`, `fix/login-redirect`, `refactor/api-structure`
@@ -0,0 +1,136 @@
1
+ # dw Workflow (consolidated)
2
+
3
+ Config: `.dw/config/dw.config.yml`
4
+ Full methodology: `.dw/core/` (WORKFLOW · THINKING · QUALITY · ROLES · PILLARS)
5
+
6
+ ---
7
+
8
+ ## Override
9
+
10
+ Prompt contains `--no-dw` → ignore all dw instructions for that request, work as plain Claude Code.
11
+
12
+ ---
13
+
14
+ ## 5-Pillar Architecture (v2.0)
15
+
16
+ | Pillar | Role | Owners | Examples |
17
+ |--------|------|--------|----------|
18
+ | **Guards** | Block unsafe actions | privacy-block, pre-commit-gate | Non-negotiable safety |
19
+ | **Surfaces** | Make state visible | ACTIVE.md, project-map, modules | Shared team context |
20
+ | **Records** | Capture decisions | ADRs in `.dw/decisions/` | Organizational memory |
21
+ | **Bridges** | Connect across sessions | auto-handoff, tracking.md | Continuity over time |
22
+ | **Tunes** | Behavioral knobs | roles, depth, presets | Team/solo customization |
23
+
24
+ ---
25
+
26
+ ## Depth Routing
27
+
28
+ Assess per task — file count, API changes, git blame:
29
+
30
+ | Scope | Depth | Approach |
31
+ |-------|-------|----------|
32
+ | ≤2 files, hotfix | quick | Understand → Execute → Close |
33
+ | 3–5 files, new module | standard | spec.md + tracking.md |
34
+ | 6+ files, API/DB/security | thorough | Full 2-file + optional reports/ |
35
+
36
+ Default when unsure: `standard`.
37
+
38
+ ---
39
+
40
+ ## Session Start
41
+
42
+ 1. Read `.dw/tasks/ACTIVE.md` — single source of truth for team state
43
+ 2. Resume any task with status `In Progress` from its `tracking.md`
44
+ 3. Check `.dw/decisions/` for recent ADRs if task touches architecture
45
+
46
+ ---
47
+
48
+ ## Task Docs (v2 default — 2 files)
49
+
50
+ ```
51
+ .dw/tasks/{task-name}/
52
+ ├── spec.md # Intent + plan (stable after approve)
53
+ └── tracking.md # Progress + handoff (mutable)
54
+ ```
55
+
56
+ Legacy 3-file (`context + plan + progress`) still supported for older tasks.
57
+
58
+ Templates at `.dw/core/templates/v2/`.
59
+
60
+ ---
61
+
62
+ ## Skills — Namespace `/dw:*`
63
+
64
+ All dw skills invoke via `/dw:{name}` (colon namespace separator).
65
+
66
+ Core workflow: `/dw:flow` · `/dw:task-init` · `/dw:research` · `/dw:plan` · `/dw:execute` · `/dw:commit` · `/dw:handoff`
67
+
68
+ Decisions: `/dw:decision [title]` — create ADR
69
+
70
+ Dev: `/dw:debug` · `/dw:review` · `/dw:thinking` · `/dw:prompt` · `/dw:docs-update`
71
+
72
+ Role-specific: `/dw:requirements` · `/dw:test-plan` · `/dw:arch-review` · `/dw:dashboard` · `/dw:sprint-review`
73
+
74
+ Setup: `/dw:onboard` · `/dw:retroactive` · `/dw:config-init` · `/dw:upgrade` · `/dw:rollback` · `/dw:archive`
75
+
76
+ See `.dw/core/skills-index.md` for complete list with descriptions.
77
+
78
+ ---
79
+
80
+ ## Commit Format
81
+
82
+ ```
83
+ <type>(<scope>): <description ≤72 chars>
84
+ ```
85
+
86
+ Types: `feat` `fix` `refactor` `test` `docs` `chore` `style` `perf`
87
+
88
+ ---
89
+
90
+ ## Hooks
91
+
92
+ | Hook | Purpose |
93
+ |------|---------|
94
+ | `privacy-block` | Guard — block .env/credentials/keys |
95
+ | `pre-commit-gate` | Guard — quality check + sensitive scan |
96
+ | `stop-check` | Bridge — auto-handoff to tracking.md + uncommitted warning |
97
+ | `telemetry-log` | Meta — local event log for v1.4 cut decisions |
98
+
99
+ Legacy (deprecated, removal in v2.0 based on telemetry): scout-block, post-write, progress-ping, session-init, safety-guard.
100
+
101
+ ---
102
+
103
+ ## Decisions Layer
104
+
105
+ ADRs at `.dw/decisions/{NNNN}-{title}.md`. Create with `/dw:decision`.
106
+
107
+ Status values: `Proposed | Accepted | Deprecated | Superseded by ADR-{NNNN}`
108
+
109
+ When to write: architectural choice · cross-cutting concern · breaking change · trade-off with long-term impact.
110
+
111
+ ---
112
+
113
+ ## Telemetry (Local-Only)
114
+
115
+ - Storage: `.dw/metrics/events.jsonl`
116
+ - Inspect: `dw metrics show`
117
+ - Privacy: zero network; `DW_NO_TELEMETRY=1` to disable
118
+ - Used for: v1.4 data-driven cut decisions (internal teams only)
119
+
120
+ ---
121
+
122
+ ## Config Local Override
123
+
124
+ `.dw/config/dw.config.local.yml` (gitignored) for machine-specific overrides.
125
+
126
+ ---
127
+
128
+ ## Presets
129
+
130
+ | Preset | Audience | Config |
131
+ |--------|----------|--------|
132
+ | `solo` | Vibe coders, solo dev | Guards only, zero task docs |
133
+ | `team` | 5-15 dev teams | Full hooks, tracking encouraged |
134
+ | `enterprise` | Regulated / large teams | Full + roles + audit |
135
+
136
+ Install: `dw init --preset {name}` or `dw init --solo`.
@@ -1,99 +1,120 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Read(*)",
5
- "Grep(*)",
6
- "Glob(*)",
7
- "Bash(git log *)",
8
- "Bash(git diff *)",
9
- "Bash(git show *)",
10
- "Bash(git status)",
11
- "Bash(git blame *)",
12
- "Bash(git stash list)",
13
- "Bash(ls *)",
14
- "Bash(wc *)"
15
- ]
16
- },
17
- "mcpServers": {},
18
- "hooks": {
19
- "UserPromptSubmit": [
20
- {
21
- "hooks": [
22
- {
23
- "type": "command",
24
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/session-init.sh\""
25
- }
26
- ]
27
- }
28
- ],
29
- "PreToolUse": [
30
- {
31
- "matcher": "Read|Glob",
32
- "hooks": [
33
- {
34
- "type": "command",
35
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/scout-block.sh\""
36
- }
37
- ]
38
- },
39
- {
40
- "matcher": "Read",
41
- "hooks": [
42
- {
43
- "type": "command",
44
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/privacy-block.sh\""
45
- }
46
- ]
47
- },
48
- {
49
- "matcher": "Bash",
50
- "hooks": [
51
- {
52
- "type": "command",
53
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/pre-commit-gate.sh\""
54
- }
55
- ]
56
- },
57
- {
58
- "matcher": "Bash",
59
- "hooks": [
60
- {
61
- "type": "command",
62
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/safety-guard.sh\""
63
- }
64
- ]
65
- }
66
- ],
67
- "PostToolUse": [
68
- {
69
- "matcher": "Write|Edit",
70
- "hooks": [
71
- {
72
- "type": "command",
73
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/post-write.sh\""
74
- }
75
- ]
76
- }
77
- ],
78
- "Stop": [
79
- {
80
- "hooks": [
81
- {
82
- "type": "command",
83
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/stop-check.sh\""
84
- }
85
- ]
86
- }
87
- ],
88
- "Notification": [
89
- {
90
- "hooks": [
91
- {
92
- "type": "command",
93
- "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/progress-ping.sh\""
94
- }
95
- ]
96
- }
97
- ]
98
- }
99
- }
1
+ {
2
+ "includeCoAuthoredBy": false,
3
+ "permissions": {
4
+ "allow": [
5
+ "Read(*)",
6
+ "Grep(*)",
7
+ "Glob(*)",
8
+ "Bash(git log *)",
9
+ "Bash(git diff *)",
10
+ "Bash(git show *)",
11
+ "Bash(git status)",
12
+ "Bash(git blame *)",
13
+ "Bash(git stash list)",
14
+ "Bash(ls *)",
15
+ "Bash(wc *)",
16
+ "Bash(node src/smoke-test.mjs)",
17
+ "Bash(xargs echo *)",
18
+ "Edit(/.claude/skills/dw-decision/**)",
19
+ "Bash(node bin/dw.mjs active)",
20
+ "Bash(node bin/dw.mjs metrics show)",
21
+ "Bash(node bin/dw.mjs dashboard)",
22
+ "Bash(node bin/dw.mjs init --help)",
23
+ "Bash(mkdir -p /tmp/test-solo)",
24
+ "Read(//tmp/**)",
25
+ "Bash(DW_NAME=test node /d/huygdv_projects/dw-kit/bin/dw.mjs init --solo)",
26
+ "Bash(npm test *)",
27
+ "Bash(node bin/dw.mjs metrics cut-analysis)",
28
+ "Bash(bash -n .claude/hooks/pre-commit-gate.sh)",
29
+ "Bash(bash -n /dev/stdin)",
30
+ "Bash(dos2unix .claude/hooks/pre-commit-gate.sh)",
31
+ "Bash(sed -i 's/\\\\r$//' .claude/hooks/pre-commit-gate.sh)",
32
+ "Bash(git add *)"
33
+ ],
34
+ "additionalDirectories": [
35
+ "D:\\huygdv_projects\\dw-kit\\.claude\\rules"
36
+ ]
37
+ },
38
+ "hooks": {
39
+ "UserPromptSubmit": [
40
+ {
41
+ "hooks": [
42
+ {
43
+ "type": "command",
44
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/session-init.sh\""
45
+ }
46
+ ]
47
+ }
48
+ ],
49
+ "PreToolUse": [
50
+ {
51
+ "matcher": "Read|Glob",
52
+ "hooks": [
53
+ {
54
+ "type": "command",
55
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/scout-block.sh\""
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "matcher": "Read",
61
+ "hooks": [
62
+ {
63
+ "type": "command",
64
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/privacy-block.sh\""
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "matcher": "Bash",
70
+ "hooks": [
71
+ {
72
+ "type": "command",
73
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/pre-commit-gate.sh\""
74
+ }
75
+ ]
76
+ },
77
+ {
78
+ "matcher": "Bash",
79
+ "hooks": [
80
+ {
81
+ "type": "command",
82
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/safety-guard.sh\""
83
+ }
84
+ ]
85
+ }
86
+ ],
87
+ "PostToolUse": [
88
+ {
89
+ "matcher": "Write|Edit",
90
+ "hooks": [
91
+ {
92
+ "type": "command",
93
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/post-write.sh\""
94
+ }
95
+ ]
96
+ }
97
+ ],
98
+ "Stop": [
99
+ {
100
+ "hooks": [
101
+ {
102
+ "type": "command",
103
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/stop-check.sh\""
104
+ }
105
+ ]
106
+ }
107
+ ],
108
+ "Notification": [
109
+ {
110
+ "hooks": [
111
+ {
112
+ "type": "command",
113
+ "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/progress-ping.sh\""
114
+ }
115
+ ]
116
+ }
117
+ ]
118
+ },
119
+ "mcpServers": {}
120
+ }