wogiflow 1.0.21 → 1.0.22
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/commands/wogi-bug.md +43 -0
- package/.claude/commands/wogi-bulk.md +144 -0
- package/.claude/commands/wogi-changelog.md +36 -0
- package/.claude/commands/wogi-compact.md +99 -0
- package/.claude/commands/wogi-config.md +50 -0
- package/.claude/commands/wogi-context.md +68 -0
- package/.claude/commands/wogi-correction.md +73 -0
- package/.claude/commands/wogi-debt.md +128 -0
- package/.claude/commands/wogi-deps.md +32 -0
- package/.claude/commands/wogi-epics.md +145 -0
- package/.claude/commands/wogi-export.md +100 -0
- package/.claude/commands/wogi-feature.md +149 -0
- package/.claude/commands/wogi-guided-edit.md +83 -0
- package/.claude/commands/wogi-health.md +43 -0
- package/.claude/commands/wogi-help.md +96 -0
- package/.claude/commands/wogi-hybrid-edit.md +36 -0
- package/.claude/commands/wogi-hybrid-off.md +24 -0
- package/.claude/commands/wogi-hybrid-setup.md +79 -0
- package/.claude/commands/wogi-hybrid-status.md +45 -0
- package/.claude/commands/wogi-hybrid.md +54 -0
- package/.claude/commands/wogi-import.md +44 -0
- package/.claude/commands/wogi-init.md +618 -0
- package/.claude/commands/wogi-log.md +38 -0
- package/.claude/commands/wogi-map-add.md +29 -0
- package/.claude/commands/wogi-map-check.md +35 -0
- package/.claude/commands/wogi-map-index.md +98 -0
- package/.claude/commands/wogi-map-scan.md +38 -0
- package/.claude/commands/wogi-map-sync.md +91 -0
- package/.claude/commands/wogi-map.md +33 -0
- package/.claude/commands/wogi-morning.md +65 -0
- package/.claude/commands/wogi-onboard.md +99 -0
- package/.claude/commands/wogi-plan.md +173 -0
- package/.claude/commands/wogi-ready.md +84 -0
- package/.claude/commands/wogi-resume.md +95 -0
- package/.claude/commands/wogi-review.md +636 -0
- package/.claude/commands/wogi-roadmap.md +241 -0
- package/.claude/commands/wogi-rules.md +104 -0
- package/.claude/commands/wogi-search.md +33 -0
- package/.claude/commands/wogi-session-end.md +49 -0
- package/.claude/commands/wogi-setup-stack.md +151 -0
- package/.claude/commands/wogi-skill-learn.md +66 -0
- package/.claude/commands/wogi-skills.md +87 -0
- package/.claude/commands/wogi-standup.md +28 -0
- package/.claude/commands/wogi-start.md +465 -0
- package/.claude/commands/wogi-status.md +41 -0
- package/.claude/commands/wogi-statusline-setup/skill.md +109 -0
- package/.claude/commands/wogi-story.md +98 -0
- package/.claude/commands/wogi-suspend.md +87 -0
- package/.claude/commands/wogi-test-browser.md +43 -0
- package/.claude/commands/wogi-trace.md +198 -0
- package/.claude/docs/architecture.md +37 -0
- package/.claude/docs/commands.md +343 -0
- package/.claude/docs/knowledge-base/01-setup-onboarding/README.md +177 -0
- package/.claude/docs/knowledge-base/01-setup-onboarding/component-indexing.md +341 -0
- package/.claude/docs/knowledge-base/01-setup-onboarding/framework-detection.md +269 -0
- package/.claude/docs/knowledge-base/01-setup-onboarding/installation.md +146 -0
- package/.claude/docs/knowledge-base/01-setup-onboarding/onboarding-existing.md +317 -0
- package/.claude/docs/knowledge-base/01-setup-onboarding/team-setup.md +346 -0
- package/.claude/docs/knowledge-base/02-task-execution/01-task-planning.md +259 -0
- package/.claude/docs/knowledge-base/02-task-execution/02-execution-loop.md +443 -0
- package/.claude/docs/knowledge-base/02-task-execution/03-verification.md +417 -0
- package/.claude/docs/knowledge-base/02-task-execution/04-completion.md +374 -0
- package/.claude/docs/knowledge-base/02-task-execution/05-session-review.md +170 -0
- package/.claude/docs/knowledge-base/02-task-execution/README.md +173 -0
- package/.claude/docs/knowledge-base/02-task-execution/external-integrations.md +133 -0
- package/.claude/docs/knowledge-base/02-task-execution/model-management.md +202 -0
- package/.claude/docs/knowledge-base/02-task-execution/specification-mode.md +292 -0
- package/.claude/docs/knowledge-base/02-task-execution/sync-daemon.md +96 -0
- package/.claude/docs/knowledge-base/02-task-execution/trade-offs.md +345 -0
- package/.claude/docs/knowledge-base/02-task-execution/workflow-steps.md +357 -0
- package/.claude/docs/knowledge-base/03-self-improvement/README.md +199 -0
- package/.claude/docs/knowledge-base/03-self-improvement/long-input-processing.md +160 -0
- package/.claude/docs/knowledge-base/03-self-improvement/model-learning.md +334 -0
- package/.claude/docs/knowledge-base/03-self-improvement/project-learning.md +301 -0
- package/.claude/docs/knowledge-base/03-self-improvement/skill-learning.md +372 -0
- package/.claude/docs/knowledge-base/03-self-improvement/skill-matching.md +304 -0
- package/.claude/docs/knowledge-base/03-self-improvement/team-learning.md +342 -0
- package/.claude/docs/knowledge-base/04-memory-context/README.md +189 -0
- package/.claude/docs/knowledge-base/04-memory-context/context-management.md +308 -0
- package/.claude/docs/knowledge-base/04-memory-context/memory-commands.md +176 -0
- package/.claude/docs/knowledge-base/04-memory-context/memory-systems.md +359 -0
- package/.claude/docs/knowledge-base/04-memory-context/prd-management.md +115 -0
- package/.claude/docs/knowledge-base/04-memory-context/session-persistence.md +359 -0
- package/.claude/docs/knowledge-base/04-memory-context/team-history.md +317 -0
- package/.claude/docs/knowledge-base/05-development-tools/README.md +84 -0
- package/.claude/docs/knowledge-base/05-development-tools/code-traces.md +278 -0
- package/.claude/docs/knowledge-base/05-development-tools/figma-analyzer.md +253 -0
- package/.claude/docs/knowledge-base/05-development-tools/guided-edit.md +173 -0
- package/.claude/docs/knowledge-base/05-development-tools/mcp-integrations.md +286 -0
- package/.claude/docs/knowledge-base/06-safety-guardrails/README.md +153 -0
- package/.claude/docs/knowledge-base/06-safety-guardrails/checkpoint-rollback.md +302 -0
- package/.claude/docs/knowledge-base/06-safety-guardrails/commit-gates.md +309 -0
- package/.claude/docs/knowledge-base/06-safety-guardrails/damage-control.md +292 -0
- package/.claude/docs/knowledge-base/06-safety-guardrails/security-scanning.md +291 -0
- package/.claude/docs/knowledge-base/README.md +92 -0
- package/.claude/docs/knowledge-base/configuration/README.md +228 -0
- package/.claude/docs/knowledge-base/configuration/all-options.md +1632 -0
- package/.claude/docs/knowledge-base/future-features.md +277 -0
- package/.claude/docs/stack.md +25 -0
- package/.claude/docs/testing.md +71 -0
- package/.claude/rules/README.md +60 -0
- package/.claude/rules/architecture/component-reuse.md +38 -0
- package/.claude/rules/architecture/document-structure.md +76 -0
- package/.claude/rules/architecture/feature-refactoring-cleanup.md +87 -0
- package/.claude/rules/architecture/model-management.md +35 -0
- package/.claude/rules/code-style/naming-conventions.md +55 -0
- package/.claude/rules/security/security-patterns.md +116 -0
- package/.claude/skills/.gitkeep +0 -0
- package/.claude/skills/README.md +131 -0
- package/.claude/skills/_template/commands/.gitkeep +0 -0
- package/.claude/skills/_template/knowledge/anti-patterns.md +49 -0
- package/.claude/skills/_template/knowledge/learnings.md +60 -0
- package/.claude/skills/_template/knowledge/patterns.md +45 -0
- package/.claude/skills/_template/rules/.gitkeep +0 -0
- package/.claude/skills/_template/skill.md +99 -0
- package/.claude/skills/_template/templates/.gitkeep +0 -0
- package/.claude/skills/figma-analyzer/knowledge/anti-patterns.md +216 -0
- package/.claude/skills/figma-analyzer/knowledge/patterns.md +144 -0
- package/.claude/skills/figma-analyzer/skill.md +236 -0
- package/lib/installer.js +59 -19
- package/package.json +5 -1
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Project-Level Learning
|
|
2
|
+
|
|
3
|
+
How WogiFlow learns project-specific patterns and conventions.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Project-level learning captures:
|
|
10
|
+
- Coding patterns unique to your project
|
|
11
|
+
- Architectural decisions
|
|
12
|
+
- Team conventions
|
|
13
|
+
- Feedback history
|
|
14
|
+
|
|
15
|
+
These are stored in `.workflow/state/` and applied to all future work.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## decisions.md
|
|
20
|
+
|
|
21
|
+
The primary store for project-specific patterns.
|
|
22
|
+
|
|
23
|
+
### Structure
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
# Project Decisions
|
|
27
|
+
|
|
28
|
+
## Tech Stack
|
|
29
|
+
- **Language**: TypeScript
|
|
30
|
+
- **Framework**: Next.js
|
|
31
|
+
- **Database**: PostgreSQL (Prisma)
|
|
32
|
+
|
|
33
|
+
## Conventions
|
|
34
|
+
- Use functional components
|
|
35
|
+
- All API calls through `lib/api.ts`
|
|
36
|
+
- State management with Zustand
|
|
37
|
+
|
|
38
|
+
## Patterns
|
|
39
|
+
|
|
40
|
+
### API Calls
|
|
41
|
+
Always use the axios wrapper from `lib/api.ts`:
|
|
42
|
+
```typescript
|
|
43
|
+
import { api } from '@/lib/api';
|
|
44
|
+
const data = await api.get('/users');
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Error Boundaries
|
|
48
|
+
Wrap page components with ErrorBoundary:
|
|
49
|
+
```typescript
|
|
50
|
+
<ErrorBoundary fallback={<ErrorPage />}>
|
|
51
|
+
<PageContent />
|
|
52
|
+
</ErrorBoundary>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Anti-Patterns
|
|
56
|
+
|
|
57
|
+
### ❌ Direct fetch calls
|
|
58
|
+
Don't use raw fetch - use the api wrapper for error handling.
|
|
59
|
+
|
|
60
|
+
### ❌ Class components
|
|
61
|
+
Use functional components with hooks.
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### How It's Updated
|
|
65
|
+
|
|
66
|
+
1. **During Correction**: AI offers to persist pattern
|
|
67
|
+
2. **Manual Edit**: User adds patterns directly
|
|
68
|
+
3. **Automatic Extraction**: From repeated feedback
|
|
69
|
+
4. **On Onboarding**: From detected conventions
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Feedback Patterns
|
|
74
|
+
|
|
75
|
+
History of corrections stored in `feedback-patterns.md`.
|
|
76
|
+
|
|
77
|
+
### Structure
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
# Feedback Patterns
|
|
81
|
+
|
|
82
|
+
## 2024-01-15
|
|
83
|
+
|
|
84
|
+
### Pattern: API Error Handling
|
|
85
|
+
**Trigger**: User corrected missing error handling
|
|
86
|
+
**Resolution**: Always wrap API calls in try/catch
|
|
87
|
+
**Persisted to**: decisions.md
|
|
88
|
+
|
|
89
|
+
### Pattern: Import Ordering
|
|
90
|
+
**Trigger**: User preferred specific import order
|
|
91
|
+
**Resolution**: React imports first, then third-party, then local
|
|
92
|
+
**Persisted to**: decisions.md
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Purpose
|
|
96
|
+
|
|
97
|
+
- Track correction history
|
|
98
|
+
- Identify recurring issues
|
|
99
|
+
- Feed into automatic learning
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Automatic Pattern Extraction
|
|
104
|
+
|
|
105
|
+
When `autoExtract` is enabled:
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"skillLearning": {
|
|
110
|
+
"autoExtract": true,
|
|
111
|
+
"triggers": {
|
|
112
|
+
"onCommit": true,
|
|
113
|
+
"onTaskComplete": true,
|
|
114
|
+
"onCompact": true
|
|
115
|
+
},
|
|
116
|
+
"minCorrectionsToLearn": 1
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Extraction Process
|
|
122
|
+
|
|
123
|
+
1. **Trigger**: On configured events
|
|
124
|
+
2. **Analyze**: Review recent corrections and feedback
|
|
125
|
+
3. **Extract**: Identify patterns from corrections
|
|
126
|
+
4. **Propose**: Suggest adding to decisions.md
|
|
127
|
+
5. **Confirm**: User approves or rejects
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Request Log as Memory
|
|
132
|
+
|
|
133
|
+
The request log serves as institutional memory:
|
|
134
|
+
|
|
135
|
+
```markdown
|
|
136
|
+
### R-047 | 2024-01-15 14:30
|
|
137
|
+
**Type**: new
|
|
138
|
+
**Tags**: #screen:login #component:AuthService
|
|
139
|
+
**Request**: "Add user authentication"
|
|
140
|
+
**Result**: Created AuthService using existing api wrapper pattern
|
|
141
|
+
**Files**: src/services/AuthService.ts
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### How It's Used
|
|
145
|
+
|
|
146
|
+
- **Context**: AI reads recent entries for patterns
|
|
147
|
+
- **Consistency**: Previous approaches inform new work
|
|
148
|
+
- **Audit Trail**: Track decisions over time
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Component Registry Growth
|
|
153
|
+
|
|
154
|
+
As new components are created:
|
|
155
|
+
|
|
156
|
+
1. **Added to app-map.md**: With descriptions and usage
|
|
157
|
+
2. **Preferred for Reuse**: AI checks before creating new
|
|
158
|
+
3. **Variant Detection**: Suggest variants over new components
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
{
|
|
162
|
+
"componentRules": {
|
|
163
|
+
"preferVariants": true,
|
|
164
|
+
"requireAppMapEntry": true
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Correction Workflow
|
|
172
|
+
|
|
173
|
+
When user corrects the AI:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
User: "Don't use raw fetch, use the api wrapper"
|
|
177
|
+
↓
|
|
178
|
+
AI: "I'll fix that. Should I persist this pattern?"
|
|
179
|
+
Options:
|
|
180
|
+
1. Add to decisions.md ← Best for project patterns
|
|
181
|
+
2. Add to agents/developer.md
|
|
182
|
+
3. Add to config.json
|
|
183
|
+
4. Skip (one-time fix)
|
|
184
|
+
↓
|
|
185
|
+
User: "1"
|
|
186
|
+
↓
|
|
187
|
+
AI: Updates decisions.md with pattern
|
|
188
|
+
Commits change
|
|
189
|
+
Logs to feedback-patterns.md
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Configuration
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"corrections": {
|
|
199
|
+
"mode": "inline", // Where to show corrections
|
|
200
|
+
"detailPath": ".workflow/corrections" // Detailed reports
|
|
201
|
+
},
|
|
202
|
+
"skillLearning": {
|
|
203
|
+
"enabled": true,
|
|
204
|
+
"minCorrectionsToLearn": 1 // Min corrections before extraction
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Correction Reports
|
|
212
|
+
|
|
213
|
+
For significant bugs, create detailed reports:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
/wogi-correction
|
|
217
|
+
|
|
218
|
+
# Creates detailed report with:
|
|
219
|
+
# - Root cause analysis
|
|
220
|
+
# - Fix description
|
|
221
|
+
# - Prevention pattern
|
|
222
|
+
# - Files affected
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Report Structure
|
|
226
|
+
|
|
227
|
+
```markdown
|
|
228
|
+
# Correction Report: Auth Token Refresh
|
|
229
|
+
|
|
230
|
+
## Issue
|
|
231
|
+
API calls failed after token expiration
|
|
232
|
+
|
|
233
|
+
## Root Cause
|
|
234
|
+
No token refresh logic in api wrapper
|
|
235
|
+
|
|
236
|
+
## Fix Applied
|
|
237
|
+
Added interceptor to refresh expired tokens
|
|
238
|
+
|
|
239
|
+
## Prevention Pattern
|
|
240
|
+
All API wrappers should include token refresh:
|
|
241
|
+
```typescript
|
|
242
|
+
api.interceptors.response.use(null, async (error) => {
|
|
243
|
+
if (error.response?.status === 401) {
|
|
244
|
+
await refreshToken();
|
|
245
|
+
return api.request(error.config);
|
|
246
|
+
}
|
|
247
|
+
throw error;
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Persisted To
|
|
252
|
+
- decisions.md (pattern added)
|
|
253
|
+
- lib/api.ts (code updated)
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Best Practices
|
|
259
|
+
|
|
260
|
+
1. **Persist Important Corrections**: Don't skip the prompt
|
|
261
|
+
2. **Be Specific**: Include code examples when helpful
|
|
262
|
+
3. **Use Categories**: Organize patterns in decisions.md
|
|
263
|
+
4. **Include Anti-Patterns**: Document what NOT to do
|
|
264
|
+
5. **Review Regularly**: Clean up outdated patterns
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Troubleshooting
|
|
269
|
+
|
|
270
|
+
### Patterns Not Applied
|
|
271
|
+
|
|
272
|
+
Check if pattern is in decisions.md:
|
|
273
|
+
```bash
|
|
274
|
+
grep -i "pattern-keyword" .workflow/state/decisions.md
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Too Many Prompts
|
|
278
|
+
|
|
279
|
+
Reduce correction prompts:
|
|
280
|
+
```json
|
|
281
|
+
{
|
|
282
|
+
"corrections": {
|
|
283
|
+
"mode": "inline" // vs "detailed"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Pattern Conflicts
|
|
289
|
+
|
|
290
|
+
If patterns conflict:
|
|
291
|
+
1. Check decisions.md for contradictions
|
|
292
|
+
2. Remove outdated patterns
|
|
293
|
+
3. Clarify with specific examples
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Related
|
|
298
|
+
|
|
299
|
+
- [Skill Learning](./skill-learning.md) - Framework-level patterns
|
|
300
|
+
- [Model Learning](./model-learning.md) - Per-model optimization
|
|
301
|
+
- [Task Execution](../02-task-execution/) - Where patterns apply
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
# Skill-Level Learning
|
|
2
|
+
|
|
3
|
+
Framework-specific patterns, anti-patterns, and skill creation.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Skills encapsulate framework-specific knowledge:
|
|
10
|
+
- Best practices for React, NestJS, FastAPI, etc.
|
|
11
|
+
- Common anti-patterns to avoid
|
|
12
|
+
- Framework-specific code snippets
|
|
13
|
+
- Official documentation references
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Skill Structure
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
.claude/skills/
|
|
21
|
+
├── react/
|
|
22
|
+
│ ├── skill.md # Skill definition
|
|
23
|
+
│ └── knowledge/
|
|
24
|
+
│ ├── patterns.md # Best practices
|
|
25
|
+
│ └── anti-patterns.md # What to avoid
|
|
26
|
+
├── nestjs/
|
|
27
|
+
│ ├── skill.md
|
|
28
|
+
│ └── knowledge/
|
|
29
|
+
│ ├── patterns.md
|
|
30
|
+
│ └── anti-patterns.md
|
|
31
|
+
└── ...
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"skillLearning": {
|
|
41
|
+
"enabled": true,
|
|
42
|
+
"autoExtract": true,
|
|
43
|
+
"triggers": {
|
|
44
|
+
"onCommit": true,
|
|
45
|
+
"onTaskComplete": true,
|
|
46
|
+
"onCompact": true
|
|
47
|
+
},
|
|
48
|
+
"minCorrectionsToLearn": 1,
|
|
49
|
+
"autoCreateSkills": "ask", // "ask" | "auto" | "off"
|
|
50
|
+
"autoDetectFrameworks": true,
|
|
51
|
+
"fetchOfficialDocs": true
|
|
52
|
+
},
|
|
53
|
+
"skills": {
|
|
54
|
+
"installed": ["react", "nestjs"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Auto-Skill Creation
|
|
62
|
+
|
|
63
|
+
When a framework is detected but no skill exists:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"skillLearning": {
|
|
68
|
+
"autoCreateSkills": "ask" // Prompt before creating
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Options
|
|
74
|
+
|
|
75
|
+
| Value | Behavior |
|
|
76
|
+
|-------|----------|
|
|
77
|
+
| `"ask"` | Prompt user before creating |
|
|
78
|
+
| `"auto"` | Create automatically |
|
|
79
|
+
| `"off"` | Never auto-create |
|
|
80
|
+
|
|
81
|
+
### Creation Flow
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
Framework Detected: NestJS
|
|
85
|
+
↓
|
|
86
|
+
No existing skill found
|
|
87
|
+
↓
|
|
88
|
+
┌─────────────────────────────────────────┐
|
|
89
|
+
│ Create NestJS skill? [y/n] │
|
|
90
|
+
│ │
|
|
91
|
+
│ This will create: │
|
|
92
|
+
│ - .claude/skills/nestjs/skill.md │
|
|
93
|
+
│ - .claude/skills/nestjs/knowledge/patterns.md │
|
|
94
|
+
│ - .claude/skills/nestjs/knowledge/anti-patterns.md
|
|
95
|
+
└─────────────────────────────────────────┘
|
|
96
|
+
↓
|
|
97
|
+
User confirms → Skill created
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Skill Definition (skill.md)
|
|
103
|
+
|
|
104
|
+
```markdown
|
|
105
|
+
# NestJS Skill
|
|
106
|
+
|
|
107
|
+
## Framework
|
|
108
|
+
NestJS - A progressive Node.js framework
|
|
109
|
+
|
|
110
|
+
## When Active
|
|
111
|
+
This skill applies when working with:
|
|
112
|
+
- `.module.ts` files
|
|
113
|
+
- `.controller.ts` files
|
|
114
|
+
- `.service.ts` files
|
|
115
|
+
- `@nestjs/*` imports
|
|
116
|
+
|
|
117
|
+
## Key Concepts
|
|
118
|
+
- Dependency injection via decorators
|
|
119
|
+
- Module-based architecture
|
|
120
|
+
- Guard/Interceptor/Pipe patterns
|
|
121
|
+
|
|
122
|
+
## Official Docs
|
|
123
|
+
https://docs.nestjs.com
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Pattern Files
|
|
129
|
+
|
|
130
|
+
### patterns.md
|
|
131
|
+
|
|
132
|
+
```markdown
|
|
133
|
+
# NestJS Patterns
|
|
134
|
+
|
|
135
|
+
## Module Organization
|
|
136
|
+
|
|
137
|
+
Every feature should have its own module:
|
|
138
|
+
```typescript
|
|
139
|
+
@Module({
|
|
140
|
+
imports: [TypeOrmModule.forFeature([User])],
|
|
141
|
+
controllers: [UsersController],
|
|
142
|
+
providers: [UsersService],
|
|
143
|
+
exports: [UsersService]
|
|
144
|
+
})
|
|
145
|
+
export class UsersModule {}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Service Layer
|
|
149
|
+
|
|
150
|
+
Keep controllers thin, put logic in services:
|
|
151
|
+
```typescript
|
|
152
|
+
@Injectable()
|
|
153
|
+
export class UsersService {
|
|
154
|
+
constructor(
|
|
155
|
+
@InjectRepository(User)
|
|
156
|
+
private usersRepository: Repository<User>,
|
|
157
|
+
) {}
|
|
158
|
+
|
|
159
|
+
findAll(): Promise<User[]> {
|
|
160
|
+
return this.usersRepository.find();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## DTOs
|
|
166
|
+
|
|
167
|
+
Always validate input with class-validator:
|
|
168
|
+
```typescript
|
|
169
|
+
export class CreateUserDto {
|
|
170
|
+
@IsString()
|
|
171
|
+
@IsNotEmpty()
|
|
172
|
+
name: string;
|
|
173
|
+
|
|
174
|
+
@IsEmail()
|
|
175
|
+
email: string;
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### anti-patterns.md
|
|
181
|
+
|
|
182
|
+
```markdown
|
|
183
|
+
# NestJS Anti-Patterns
|
|
184
|
+
|
|
185
|
+
## ❌ Business Logic in Controllers
|
|
186
|
+
|
|
187
|
+
Don't put business logic in controllers:
|
|
188
|
+
```typescript
|
|
189
|
+
// BAD
|
|
190
|
+
@Controller('users')
|
|
191
|
+
export class UsersController {
|
|
192
|
+
@Post()
|
|
193
|
+
create(@Body() dto: CreateUserDto) {
|
|
194
|
+
// Logic here is wrong
|
|
195
|
+
const user = { ...dto, createdAt: new Date() };
|
|
196
|
+
return this.repo.save(user);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// GOOD
|
|
201
|
+
@Controller('users')
|
|
202
|
+
export class UsersController {
|
|
203
|
+
@Post()
|
|
204
|
+
create(@Body() dto: CreateUserDto) {
|
|
205
|
+
return this.usersService.create(dto);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## ❌ Circular Dependencies
|
|
211
|
+
|
|
212
|
+
Avoid circular module dependencies:
|
|
213
|
+
```typescript
|
|
214
|
+
// BAD: Module A imports B, B imports A
|
|
215
|
+
|
|
216
|
+
// GOOD: Use forwardRef() or restructure
|
|
217
|
+
@Module({
|
|
218
|
+
imports: [forwardRef(() => ModuleB)]
|
|
219
|
+
})
|
|
220
|
+
export class ModuleA {}
|
|
221
|
+
```
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Pattern Extraction
|
|
227
|
+
|
|
228
|
+
When corrections relate to a framework:
|
|
229
|
+
|
|
230
|
+
1. **Detect Framework**: Match against installed skills
|
|
231
|
+
2. **Extract Pattern**: Identify the learning
|
|
232
|
+
3. **Route Appropriately**: Skill patterns vs project decisions
|
|
233
|
+
4. **Update Skill**: Add to patterns.md or anti-patterns.md
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
User: "In NestJS, services should be @Injectable"
|
|
237
|
+
↓
|
|
238
|
+
Detected: NestJS-specific correction
|
|
239
|
+
↓
|
|
240
|
+
Added to: .claude/skills/nestjs/knowledge/patterns.md
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Official Docs Integration
|
|
246
|
+
|
|
247
|
+
When `fetchOfficialDocs` is enabled:
|
|
248
|
+
|
|
249
|
+
```json
|
|
250
|
+
{
|
|
251
|
+
"skillLearning": {
|
|
252
|
+
"fetchOfficialDocs": true,
|
|
253
|
+
"officialDocsUrls": {
|
|
254
|
+
"nestjs": "https://docs.nestjs.com",
|
|
255
|
+
"react": "https://react.dev"
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Benefits:
|
|
262
|
+
- Reference official patterns
|
|
263
|
+
- Stay updated with best practices
|
|
264
|
+
- Cite authoritative sources
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Manual Learning Trigger
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
/wogi-skill-learn
|
|
272
|
+
|
|
273
|
+
# Output:
|
|
274
|
+
# 🎓 Skill Learning Extraction
|
|
275
|
+
#
|
|
276
|
+
# Analyzing recent commits and corrections...
|
|
277
|
+
#
|
|
278
|
+
# Found patterns:
|
|
279
|
+
# 1. NestJS: Use ConfigService for env vars
|
|
280
|
+
# 2. React: Prefer named exports for components
|
|
281
|
+
#
|
|
282
|
+
# Add to skills? [y/n]
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Continual Learning Skills
|
|
288
|
+
|
|
289
|
+
Some skills continuously learn:
|
|
290
|
+
|
|
291
|
+
```markdown
|
|
292
|
+
# skill.md
|
|
293
|
+
|
|
294
|
+
## Continual Learning
|
|
295
|
+
This skill should:
|
|
296
|
+
- Track new patterns from corrections
|
|
297
|
+
- Update with latest best practices
|
|
298
|
+
- Learn from code review feedback
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Skill Activation
|
|
304
|
+
|
|
305
|
+
Skills activate based on context:
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
Working on src/users/users.module.ts
|
|
309
|
+
↓
|
|
310
|
+
Detect: NestJS module file
|
|
311
|
+
↓
|
|
312
|
+
Activate: nestjs skill
|
|
313
|
+
↓
|
|
314
|
+
Apply: NestJS patterns from skill
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Activation Triggers
|
|
318
|
+
|
|
319
|
+
| File Pattern | Skill Activated |
|
|
320
|
+
|--------------|-----------------|
|
|
321
|
+
| `*.tsx`, `*.jsx` | react |
|
|
322
|
+
| `*.module.ts`, `*.controller.ts` | nestjs |
|
|
323
|
+
| `*.vue` | vue |
|
|
324
|
+
| `main.py` + fastapi | fastapi |
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Custom Skills
|
|
329
|
+
|
|
330
|
+
Create project-specific skills:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
mkdir -p .claude/skills/my-skill/knowledge
|
|
334
|
+
|
|
335
|
+
cat > .claude/skills/my-skill/skill.md << 'EOF'
|
|
336
|
+
# My Custom Skill
|
|
337
|
+
|
|
338
|
+
## When Active
|
|
339
|
+
When working with internal-api patterns
|
|
340
|
+
|
|
341
|
+
## Key Concepts
|
|
342
|
+
- All API calls must use v2 endpoint
|
|
343
|
+
- Auth tokens must be refreshed
|
|
344
|
+
EOF
|
|
345
|
+
|
|
346
|
+
cat > .claude/skills/my-skill/knowledge/patterns.md << 'EOF'
|
|
347
|
+
# Internal API Patterns
|
|
348
|
+
|
|
349
|
+
## V2 Endpoints
|
|
350
|
+
Always use v2 API endpoints:
|
|
351
|
+
```typescript
|
|
352
|
+
const response = await api.get('/api/v2/users');
|
|
353
|
+
```
|
|
354
|
+
EOF
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Add to config:
|
|
358
|
+
```json
|
|
359
|
+
{
|
|
360
|
+
"skills": {
|
|
361
|
+
"installed": ["my-skill"]
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## Related
|
|
369
|
+
|
|
370
|
+
- [Project Learning](./project-learning.md) - Project-specific patterns
|
|
371
|
+
- [Model Learning](./model-learning.md) - Per-model optimization
|
|
372
|
+
- [Framework Detection](../01-setup-onboarding/framework-detection.md)
|