@itz4blitz/agentful 0.4.0 → 0.5.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.
- package/README.md +133 -5
- package/bin/cli.js +1031 -47
- package/bin/hooks/README.md +338 -82
- package/bin/hooks/analyze-trigger.js +69 -0
- package/bin/hooks/block-random-docs.js +77 -0
- package/bin/hooks/health-check.js +153 -0
- package/bin/hooks/post-agent.js +101 -0
- package/bin/hooks/post-feature.js +227 -0
- package/bin/hooks/pre-agent.js +118 -0
- package/bin/hooks/pre-feature.js +138 -0
- package/lib/VALIDATION_README.md +455 -0
- package/lib/atomic.js +350 -0
- package/lib/ci/claude-action-integration.js +641 -0
- package/lib/ci/index.js +10 -0
- package/lib/core/CLAUDE_EXECUTOR.md +371 -0
- package/lib/core/README.md +321 -0
- package/lib/core/analyzer.js +497 -0
- package/lib/core/claude-executor.example.js +210 -0
- package/lib/core/claude-executor.js +1046 -0
- package/lib/core/cli.js +141 -0
- package/lib/core/detectors/conventions.js +342 -0
- package/lib/core/detectors/framework.js +276 -0
- package/lib/core/detectors/index.js +15 -0
- package/lib/core/detectors/language.js +199 -0
- package/lib/core/detectors/patterns.js +356 -0
- package/lib/core/generator.js +626 -0
- package/lib/core/index.js +9 -0
- package/lib/core/output-parser.example.js +250 -0
- package/lib/core/output-parser.js +458 -0
- package/lib/core/storage.js +515 -0
- package/lib/core/templates.js +556 -0
- package/lib/index.js +32 -0
- package/lib/init.js +232 -9
- package/lib/pipeline/cli.js +423 -0
- package/lib/pipeline/engine.js +928 -0
- package/lib/pipeline/executor.js +440 -0
- package/lib/pipeline/index.js +33 -0
- package/lib/pipeline/integrations.js +559 -0
- package/lib/pipeline/schemas.js +288 -0
- package/lib/presets.js +207 -0
- package/lib/remote/client.js +361 -0
- package/lib/server/auth.js +286 -0
- package/lib/server/client-example.js +190 -0
- package/lib/server/executor.js +426 -0
- package/lib/server/index.js +469 -0
- package/lib/update-helpers.js +505 -0
- package/lib/validation.js +460 -0
- package/package.json +19 -2
- package/template/.claude/agents/architect.md +260 -0
- package/template/.claude/agents/backend.md +203 -0
- package/template/.claude/agents/fixer.md +244 -0
- package/template/.claude/agents/frontend.md +232 -0
- package/template/.claude/agents/orchestrator.md +528 -0
- package/template/.claude/agents/product-analyzer.md +1130 -0
- package/template/.claude/agents/reviewer.md +229 -0
- package/template/.claude/agents/tester.md +242 -0
- package/{.claude → template/.claude}/commands/agentful-analyze.md +151 -43
- package/template/.claude/commands/agentful-decide.md +470 -0
- package/{.claude → template/.claude}/commands/agentful-product.md +89 -5
- package/template/.claude/commands/agentful-start.md +432 -0
- package/{.claude → template/.claude}/commands/agentful-status.md +88 -3
- package/template/.claude/commands/agentful-update.md +402 -0
- package/template/.claude/commands/agentful-validate.md +369 -0
- package/{.claude → template/.claude}/commands/agentful.md +110 -183
- package/template/.claude/product/EXAMPLES.md +167 -0
- package/{.claude → template/.claude}/settings.json +9 -13
- package/{.claude → template/.claude}/skills/conversation/SKILL.md +13 -7
- package/template/.claude/skills/deployment/SKILL.md +116 -0
- package/template/.claude/skills/product-planning/SKILL.md +463 -0
- package/template/.claude/skills/testing/SKILL.md +228 -0
- package/template/.claude/skills/validation/SKILL.md +650 -0
- package/template/CLAUDE.md +73 -5
- package/template/bin/hooks/block-random-docs.js +121 -0
- package/version.json +1 -1
- package/.claude/agents/architect.md +0 -524
- package/.claude/agents/backend.md +0 -315
- package/.claude/agents/fixer.md +0 -263
- package/.claude/agents/frontend.md +0 -274
- package/.claude/agents/orchestrator.md +0 -283
- package/.claude/agents/product-analyzer.md +0 -792
- package/.claude/agents/reviewer.md +0 -332
- package/.claude/agents/tester.md +0 -410
- package/.claude/commands/agentful-decide.md +0 -214
- package/.claude/commands/agentful-start.md +0 -182
- package/.claude/commands/agentful-validate.md +0 -127
- package/.claude/product/EXAMPLES.md +0 -610
- package/.claude/product/README.md +0 -326
- package/.claude/skills/validation/SKILL.md +0 -271
- package/bin/hooks/analyze-trigger.sh +0 -57
- package/bin/hooks/health-check.sh +0 -36
- /package/{.claude → template/.claude}/commands/agentful-generate.md +0 -0
- /package/{.claude → template/.claude}/product/index.md +0 -0
- /package/{.claude → template/.claude}/skills/product-tracking/SKILL.md +0 -0
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
# Product Structure Guide
|
|
2
|
-
|
|
3
|
-
agentful supports **both** flat and hierarchical product structures with automatic detection. This guide explains how to use each format.
|
|
4
|
-
|
|
5
|
-
## Quick Start
|
|
6
|
-
|
|
7
|
-
### Simple Projects (Flat Structure)
|
|
8
|
-
|
|
9
|
-
Create `.claude/product/index.md` with all your features:
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
your-project/
|
|
13
|
-
├── .claude/
|
|
14
|
-
│ └── product/
|
|
15
|
-
│ └── index.md # All features in one file
|
|
16
|
-
├── src/
|
|
17
|
-
└── package.json
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### Organized Projects (Hierarchical Structure)
|
|
21
|
-
|
|
22
|
-
Create a hierarchical structure under `.claude/product/domains/`:
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
your-project/
|
|
26
|
-
├── .claude/
|
|
27
|
-
│ └── product/
|
|
28
|
-
│ ├── index.md # Product overview
|
|
29
|
-
│ └── domains/
|
|
30
|
-
│ ├── authentication/
|
|
31
|
-
│ │ ├── index.md # Domain overview
|
|
32
|
-
│ │ └── features/
|
|
33
|
-
│ │ ├── login.md
|
|
34
|
-
│ │ └── register.md
|
|
35
|
-
│ └── user-management/
|
|
36
|
-
│ ├── index.md
|
|
37
|
-
│ └── features/
|
|
38
|
-
│ └── profile.md
|
|
39
|
-
├── src/
|
|
40
|
-
└── package.json
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Auto-Detection
|
|
44
|
-
|
|
45
|
-
The system automatically detects which format you're using:
|
|
46
|
-
|
|
47
|
-
1. **Hierarchical**: If `.claude/product/domains/*/index.md` exists
|
|
48
|
-
2. **Flat**: If `.claude/product/index.md` exists (without domains)
|
|
49
|
-
|
|
50
|
-
### Detection Algorithm
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
if exists(".claude/product/domains/*/index.md"):
|
|
54
|
-
→ Use hierarchical structure
|
|
55
|
-
→ Track at subtask → feature → domain levels
|
|
56
|
-
else if exists(".claude/product/index.md"):
|
|
57
|
-
→ Use flat structure
|
|
58
|
-
→ Track at feature level
|
|
59
|
-
else:
|
|
60
|
-
→ Error: No product specification found
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## When to Use Each Format
|
|
64
|
-
|
|
65
|
-
### Flat Structure
|
|
66
|
-
|
|
67
|
-
**Use when:**
|
|
68
|
-
- Quick prototype or MVP
|
|
69
|
-
- Small project with 5-10 features
|
|
70
|
-
- Single developer or small team
|
|
71
|
-
- Simple feature list without dependencies
|
|
72
|
-
|
|
73
|
-
**Example `.claude/product/index.md`:**
|
|
74
|
-
|
|
75
|
-
```markdown
|
|
76
|
-
# My App
|
|
77
|
-
|
|
78
|
-
## Features
|
|
79
|
-
|
|
80
|
-
### 1. User Authentication - CRITICAL
|
|
81
|
-
- Login with email/password
|
|
82
|
-
- JWT token handling
|
|
83
|
-
- Password reset
|
|
84
|
-
|
|
85
|
-
### 2. User Profile - HIGH
|
|
86
|
-
- Edit profile information
|
|
87
|
-
- Upload avatar
|
|
88
|
-
|
|
89
|
-
### 3. Dashboard - MEDIUM
|
|
90
|
-
- Display user stats
|
|
91
|
-
- Recent activity
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
### Hierarchical Structure
|
|
95
|
-
|
|
96
|
-
**Use when:**
|
|
97
|
-
- Large project with 20+ features
|
|
98
|
-
- Multiple team members working in parallel
|
|
99
|
-
- Complex feature dependencies
|
|
100
|
-
- Need domain-driven organization
|
|
101
|
-
|
|
102
|
-
**Example structure:**
|
|
103
|
-
|
|
104
|
-
```markdown
|
|
105
|
-
<!-- .claude/product/index.md -->
|
|
106
|
-
# My App
|
|
107
|
-
|
|
108
|
-
## Domains
|
|
109
|
-
- Authentication (CRITICAL)
|
|
110
|
-
- User Management (HIGH)
|
|
111
|
-
- Dashboard (MEDIUM)
|
|
112
|
-
|
|
113
|
-
<!-- .claude/product/domains/authentication/index.md -->
|
|
114
|
-
# Authentication Domain
|
|
115
|
-
|
|
116
|
-
Handles user identity and access control.
|
|
117
|
-
|
|
118
|
-
## Features
|
|
119
|
-
- Login
|
|
120
|
-
- Register
|
|
121
|
-
- Password Reset
|
|
122
|
-
|
|
123
|
-
<!-- .claude/product/domains/authentication/features/login.md -->
|
|
124
|
-
# Feature: Login
|
|
125
|
-
|
|
126
|
-
Priority: CRITICAL
|
|
127
|
-
|
|
128
|
-
## Subtasks
|
|
129
|
-
1. Create login UI
|
|
130
|
-
2. Implement login API
|
|
131
|
-
3. Add JWT handling
|
|
132
|
-
4. Write tests
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
## Completion Tracking
|
|
136
|
-
|
|
137
|
-
### Flat Structure Tracking
|
|
138
|
-
|
|
139
|
-
```json
|
|
140
|
-
{
|
|
141
|
-
"features": {
|
|
142
|
-
"authentication": {
|
|
143
|
-
"status": "complete",
|
|
144
|
-
"score": 100
|
|
145
|
-
},
|
|
146
|
-
"user-profile": {
|
|
147
|
-
"status": "in_progress",
|
|
148
|
-
"score": 60
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
"gates": {
|
|
152
|
-
"tests_passing": true,
|
|
153
|
-
"no_type_errors": true
|
|
154
|
-
},
|
|
155
|
-
"overall": 72
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Hierarchical Structure Tracking
|
|
160
|
-
|
|
161
|
-
```json
|
|
162
|
-
{
|
|
163
|
-
"domains": {
|
|
164
|
-
"authentication": {
|
|
165
|
-
"status": "complete",
|
|
166
|
-
"score": 100,
|
|
167
|
-
"features": {
|
|
168
|
-
"login": {
|
|
169
|
-
"status": "complete",
|
|
170
|
-
"score": 100,
|
|
171
|
-
"subtasks": {
|
|
172
|
-
"login-ui": { "status": "complete" },
|
|
173
|
-
"login-api": { "status": "complete" }
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
"user-management": {
|
|
179
|
-
"status": "in_progress",
|
|
180
|
-
"score": 60,
|
|
181
|
-
"features": {
|
|
182
|
-
"profile": {
|
|
183
|
-
"status": "in_progress",
|
|
184
|
-
"score": 60
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
"gates": {
|
|
190
|
-
"tests_passing": true,
|
|
191
|
-
"no_type_errors": true
|
|
192
|
-
},
|
|
193
|
-
"overall": 72
|
|
194
|
-
}
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
## Migration Path
|
|
198
|
-
|
|
199
|
-
You can start flat and expand to hierarchical as your project grows:
|
|
200
|
-
|
|
201
|
-
```
|
|
202
|
-
Phase 1: Quick Start
|
|
203
|
-
└── .claude/product/index.md (all features in one file)
|
|
204
|
-
|
|
205
|
-
Phase 2: Scale Up (when needed)
|
|
206
|
-
└── .claude/product/domains/ (split by domain)
|
|
207
|
-
├── authentication/
|
|
208
|
-
├── user-management/
|
|
209
|
-
└── dashboard/
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
### How to Migrate
|
|
213
|
-
|
|
214
|
-
1. **Create domain directories:**
|
|
215
|
-
```bash
|
|
216
|
-
mkdir -p .claude/product/domains/authentication/features
|
|
217
|
-
mkdir -p .claude/product/domains/user-management/features
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
2. **Split features into domain files:**
|
|
221
|
-
```bash
|
|
222
|
-
# Move authentication features
|
|
223
|
-
# .claude/product/domains/authentication/features/login.md
|
|
224
|
-
# .claude/product/domains/authentication/features/register.md
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
3. **Create domain index files:**
|
|
228
|
-
```bash
|
|
229
|
-
# .claude/product/domains/authentication/index.md
|
|
230
|
-
# List overview, goals, and feature summaries
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
4. **Update .claude/product/index.md:**
|
|
234
|
-
```bash
|
|
235
|
-
# Keep only product overview and domain list
|
|
236
|
-
# Remove detailed feature specs (now in domain files)
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
5. **System auto-detects the change:**
|
|
240
|
-
- Next agent run will detect hierarchical structure
|
|
241
|
-
- No configuration changes needed
|
|
242
|
-
|
|
243
|
-
## Best Practices
|
|
244
|
-
|
|
245
|
-
### Flat Structure
|
|
246
|
-
|
|
247
|
-
1. **Keep features focused**: Each feature should be independently testable
|
|
248
|
-
2. **Use priorities**: CRITICAL, HIGH, MEDIUM, LOW
|
|
249
|
-
3. **Clear acceptance criteria**: Specific requirements for each feature
|
|
250
|
-
4. **Track progress**: Update completion.json after validated work
|
|
251
|
-
|
|
252
|
-
### Hierarchical Structure
|
|
253
|
-
|
|
254
|
-
1. **Domain boundaries**: Group related features (e.g., authentication, billing)
|
|
255
|
-
2. **Feature independence**: Each feature should be completable independently
|
|
256
|
-
3. **Subtask granularity**: Break features into small, testable subtasks
|
|
257
|
-
4. **Cross-domain dependencies**: Document in feature files, minimize where possible
|
|
258
|
-
|
|
259
|
-
## Examples
|
|
260
|
-
|
|
261
|
-
See `.claude/product/index.md` template for a complete flat structure example.
|
|
262
|
-
|
|
263
|
-
For hierarchical structure examples, check:
|
|
264
|
-
- `.claude/agents/orchestrator.md` - Product structure reading algorithm
|
|
265
|
-
- `.claude/skills/product-tracking/SKILL.md` - Progress tracking for both formats
|
|
266
|
-
|
|
267
|
-
## Troubleshooting
|
|
268
|
-
|
|
269
|
-
### "No product specification found"
|
|
270
|
-
|
|
271
|
-
**Solution**: Create one of:
|
|
272
|
-
- `.claude/product/index.md`
|
|
273
|
-
- `.claude/product/domains/*/index.md`
|
|
274
|
-
|
|
275
|
-
### "Format mismatch" error
|
|
276
|
-
|
|
277
|
-
**Cause**: completion.json structure doesn't match product files
|
|
278
|
-
|
|
279
|
-
**Solution**: Don't mix formats. Choose one:
|
|
280
|
-
- All flat: `.claude/product/index.md` + `completion.json` with `features` object
|
|
281
|
-
- All hierarchical: `.claude/product/domains/` + `completion.json` with `domains` object
|
|
282
|
-
|
|
283
|
-
### Can I use both formats?
|
|
284
|
-
|
|
285
|
-
**No**: The system auto-detects ONE format. Choose the format that best fits your project size and complexity.
|
|
286
|
-
|
|
287
|
-
## Product Analysis File
|
|
288
|
-
|
|
289
|
-
After running `/agentful-product`, a `product-analysis.json` file is generated:
|
|
290
|
-
|
|
291
|
-
```bash
|
|
292
|
-
.claude/product/
|
|
293
|
-
├── index.md # Your product spec (template)
|
|
294
|
-
└── product-analysis.json # Generated analysis (created by /agentful-product)
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
**Key points:**
|
|
298
|
-
- **Not in templates**: This file doesn't exist in the agentful package itself
|
|
299
|
-
- **Generated on demand**: Created when you run `/agentful-product` in your project
|
|
300
|
-
- **Purpose**: Analyzes your product spec for completeness, clarity, feasibility, testability, and consistency
|
|
301
|
-
- **Scores readiness**: 0-100% score with blocking issues and recommendations
|
|
302
|
-
- **Version controlled**: Commit to git to track spec quality improvements over time
|
|
303
|
-
|
|
304
|
-
**Example content:**
|
|
305
|
-
```json
|
|
306
|
-
{
|
|
307
|
-
"version": "1.0",
|
|
308
|
-
"timestamp": "2026-01-20T00:00:00Z",
|
|
309
|
-
"readiness_score": 75,
|
|
310
|
-
"dimensions": {
|
|
311
|
-
"completeness": { "score": 85 },
|
|
312
|
-
"clarity": { "score": 90 }
|
|
313
|
-
},
|
|
314
|
-
"blocking_issues": [],
|
|
315
|
-
"can_start_development": true
|
|
316
|
-
}
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
## Summary
|
|
320
|
-
|
|
321
|
-
| Format | Best For | Tracking | File Structure |
|
|
322
|
-
|--------|----------|----------|----------------|
|
|
323
|
-
| Flat (.claude/product/index.md) | Small projects, MVPs | Feature level | Single file |
|
|
324
|
-
| Hierarchical | Large projects, teams | Subtask/feature/domain level | Multiple files, domain folders |
|
|
325
|
-
|
|
326
|
-
Choose the format that matches your project needs. The system will auto-detect and adapt!
|
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: validation
|
|
3
|
-
description: Runs production readiness validation checks. Includes TypeScript, linting, tests, coverage, security, and dead code detection.
|
|
4
|
-
model: sonnet
|
|
5
|
-
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Validation Skill
|
|
9
|
-
|
|
10
|
-
This skill runs all production readiness validation checks.
|
|
11
|
-
|
|
12
|
-
## Check Sequence
|
|
13
|
-
|
|
14
|
-
Run all checks in order. Don't skip any.
|
|
15
|
-
|
|
16
|
-
### 1. TypeScript Type Check
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npx tsc --noEmit
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
**Exit code**: 0 = pass, non-zero = fail
|
|
23
|
-
|
|
24
|
-
**Report**:
|
|
25
|
-
```json
|
|
26
|
-
{
|
|
27
|
-
"name": "typescript",
|
|
28
|
-
"passed": true,
|
|
29
|
-
"error_count": 0,
|
|
30
|
-
"files_checked": 47
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### 2. Lint Check
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npm run lint 2>&1 || true
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**Exit code**: 0 = pass, non-zero = fail
|
|
41
|
-
|
|
42
|
-
**Report**:
|
|
43
|
-
```json
|
|
44
|
-
{
|
|
45
|
-
"name": "lint",
|
|
46
|
-
"passed": true,
|
|
47
|
-
"error_count": 0,
|
|
48
|
-
"warning_count": 3
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 3. Dead Code Detection
|
|
53
|
-
|
|
54
|
-
Try multiple tools in order:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
# Try knip first
|
|
58
|
-
npx knip --reporter json 2>/dev/null && exit 0
|
|
59
|
-
|
|
60
|
-
# Fall back to ts-prune
|
|
61
|
-
npx ts-prune 2>/dev/null && exit 0
|
|
62
|
-
|
|
63
|
-
# Manual grep check as fallback
|
|
64
|
-
grep -r "export.*function\|export.*class\|export.*const\|export.*interface\|export.*type" \
|
|
65
|
-
src/ --include="*.ts" --include="*.tsx" -h | \
|
|
66
|
-
while IFS=: read -r file line; do
|
|
67
|
-
export_name=$(echo "$line" | grep -oE "(export|const|function|class|interface|type)\s+\w+" | tail -1 | awk '{print $2}');
|
|
68
|
-
if [ -n "$export_name" ]; then
|
|
69
|
-
usage_count=$(grep -r "$export_name" src/ --include="*.ts" --include="*.tsx" | grep -v "export.*$export_name" | wc -l);
|
|
70
|
-
if [ "$usage_count" -eq 0 ]; then
|
|
71
|
-
echo "$file: Unused export '$export_name'";
|
|
72
|
-
fi;
|
|
73
|
-
fi;
|
|
74
|
-
done
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**Report**:
|
|
78
|
-
```json
|
|
79
|
-
{
|
|
80
|
-
"name": "dead_code",
|
|
81
|
-
"passed": false,
|
|
82
|
-
"issues": [
|
|
83
|
-
{
|
|
84
|
-
"type": "unused_export",
|
|
85
|
-
"file": "src/utils/date.ts",
|
|
86
|
-
"name": "formatDate"
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"type": "unused_file",
|
|
90
|
-
"file": "src/components/OldWidget.tsx"
|
|
91
|
-
}
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### 4. Test Check
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
npm test 2>&1 || true
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
**Exit code**: 0 = pass
|
|
103
|
-
|
|
104
|
-
**Report**:
|
|
105
|
-
```json
|
|
106
|
-
{
|
|
107
|
-
"name": "tests",
|
|
108
|
-
"passed": true,
|
|
109
|
-
"test_count": 47,
|
|
110
|
-
"failed": 0,
|
|
111
|
-
"skipped": 2
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 5. Coverage Check
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
npm test -- --coverage --reporter=json 2>&1 || true
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**Check threshold**: 80%
|
|
122
|
-
|
|
123
|
-
**Report**:
|
|
124
|
-
```json
|
|
125
|
-
{
|
|
126
|
-
"name": "coverage",
|
|
127
|
-
"passed": false,
|
|
128
|
-
"actual": 72.3,
|
|
129
|
-
"required": 80,
|
|
130
|
-
"diff": -7.7,
|
|
131
|
-
"by_file": {
|
|
132
|
-
"src/services/auth.service.ts": 65,
|
|
133
|
-
"src/components/Button.tsx": 100,
|
|
134
|
-
"src/utils/format.ts": 50
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### 6. Security Check
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
# npm audit
|
|
143
|
-
npm audit --production --json 2>/dev/null || true
|
|
144
|
-
|
|
145
|
-
# Check for secrets
|
|
146
|
-
grep -rE "(password|secret|token|api_key|apikey)\s*[:=]\s*['\"][^'\"]{10,}['\"]" \
|
|
147
|
-
src/ --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" -n || true
|
|
148
|
-
|
|
149
|
-
# Check for console.log
|
|
150
|
-
grep -rn "console\.(log|debug|warn)" \
|
|
151
|
-
src/ --include="*.ts" --include="*.tsx" | head -20 || true
|
|
152
|
-
|
|
153
|
-
# Check for @ts-ignore
|
|
154
|
-
grep -rn "@ts-ignore\|@ts-nocheck" \
|
|
155
|
-
src/ --include="*.ts" --include="*.tsx" || true
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
**Report**:
|
|
159
|
-
```json
|
|
160
|
-
{
|
|
161
|
-
"name": "security",
|
|
162
|
-
"passed": false,
|
|
163
|
-
"vulnerabilities": {
|
|
164
|
-
"critical": 0,
|
|
165
|
-
"high": 0,
|
|
166
|
-
"moderate": 2,
|
|
167
|
-
"low": 5
|
|
168
|
-
},
|
|
169
|
-
"issues": [
|
|
170
|
-
{
|
|
171
|
-
"type": "console_log",
|
|
172
|
-
"file": "src/auth/login.ts",
|
|
173
|
-
"line": 45
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
"type": "hardcoded_secret",
|
|
177
|
-
"file": "src/config/api.ts",
|
|
178
|
-
"line": 12
|
|
179
|
-
}
|
|
180
|
-
]
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
## Final Report
|
|
185
|
-
|
|
186
|
-
```json
|
|
187
|
-
{
|
|
188
|
-
"timestamp": "2026-01-18T00:00:00Z",
|
|
189
|
-
"overall": "failed",
|
|
190
|
-
"checks": {
|
|
191
|
-
"typescript": { "passed": true },
|
|
192
|
-
"lint": { "passed": true },
|
|
193
|
-
"dead_code": { "passed": false, "issues": 3 },
|
|
194
|
-
"tests": { "passed": true },
|
|
195
|
-
"coverage": { "passed": false, "actual": 72 },
|
|
196
|
-
"security": { "passed": false, "issues": 2 }
|
|
197
|
-
},
|
|
198
|
-
"must_fix": [
|
|
199
|
-
"Remove unused export: formatDate in src/utils/date.ts",
|
|
200
|
-
"Delete unused file: src/components/OldWidget.tsx",
|
|
201
|
-
"Remove unused dependency: lodash",
|
|
202
|
-
"Add tests to reach 80% coverage",
|
|
203
|
-
"Remove console.log from src/auth/login.ts:45",
|
|
204
|
-
"Fix hardcoded secret in src/config/api.ts:12"
|
|
205
|
-
],
|
|
206
|
-
"can_ignore": [
|
|
207
|
-
"npm audit moderate vulnerabilities (transitive dependencies)"
|
|
208
|
-
]
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Save Report
|
|
213
|
-
|
|
214
|
-
```bash
|
|
215
|
-
# Write to .agentful/last-validation.json
|
|
216
|
-
cat > .agentful/last-validation.json << EOF
|
|
217
|
-
{...report json...}
|
|
218
|
-
EOF
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
## Gates Configuration
|
|
222
|
-
|
|
223
|
-
Update `.agentful/completion.json`:
|
|
224
|
-
|
|
225
|
-
```json
|
|
226
|
-
{
|
|
227
|
-
"gates": {
|
|
228
|
-
"tests_passing": true,
|
|
229
|
-
"no_type_errors": true,
|
|
230
|
-
"no_dead_code": false,
|
|
231
|
-
"coverage_80": false,
|
|
232
|
-
"security_clean": false
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Quick Validation
|
|
238
|
-
|
|
239
|
-
For faster feedback, skip to specific checks:
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
# Type check only
|
|
243
|
-
npx tsc --noEmit
|
|
244
|
-
|
|
245
|
-
# Tests only
|
|
246
|
-
npm test
|
|
247
|
-
|
|
248
|
-
# Coverage only
|
|
249
|
-
npm test -- --coverage
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
## Continuous Integration
|
|
253
|
-
|
|
254
|
-
In CI/CD pipeline:
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
# Run all checks, exit on failure
|
|
258
|
-
set -e
|
|
259
|
-
|
|
260
|
-
npx tsc --noEmit
|
|
261
|
-
npm run lint
|
|
262
|
-
npm test
|
|
263
|
-
npm test -- --coverage
|
|
264
|
-
|
|
265
|
-
# Fail if coverage below 80%
|
|
266
|
-
COVERAGE=$(npm test -- --coverage --reporter=json | jq '.total.lines.pct')
|
|
267
|
-
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
|
|
268
|
-
echo "Coverage $COVERAGE% is below 80% threshold"
|
|
269
|
-
exit 1
|
|
270
|
-
fi
|
|
271
|
-
```
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# analyze-trigger.sh
|
|
4
|
-
# Checks if changed files warrant an /agentful-analyze suggestion
|
|
5
|
-
|
|
6
|
-
FILE="${FILE:-}"
|
|
7
|
-
|
|
8
|
-
# Exit silently if no file specified
|
|
9
|
-
if [ -z "$FILE" ]; then
|
|
10
|
-
exit 0
|
|
11
|
-
fi
|
|
12
|
-
|
|
13
|
-
# Normalize the file path to get just the filename
|
|
14
|
-
FILENAME=$(basename "$FILE")
|
|
15
|
-
FILEPATH="$FILE"
|
|
16
|
-
|
|
17
|
-
# Check for key files that should trigger analysis suggestions
|
|
18
|
-
case "$FILENAME" in
|
|
19
|
-
package.json)
|
|
20
|
-
# Only trigger for root package.json, not node_modules
|
|
21
|
-
if echo "$FILEPATH" | grep -q "node_modules"; then
|
|
22
|
-
exit 0
|
|
23
|
-
fi
|
|
24
|
-
echo "Dependencies changed in package.json. Consider running /agentful-analyze to update architecture understanding."
|
|
25
|
-
exit 0
|
|
26
|
-
;;
|
|
27
|
-
|
|
28
|
-
architecture.json)
|
|
29
|
-
echo "Architecture configuration updated. Run /agentful-analyze to refresh tech stack analysis."
|
|
30
|
-
exit 0
|
|
31
|
-
;;
|
|
32
|
-
|
|
33
|
-
tsconfig.json|jsconfig.json)
|
|
34
|
-
echo "TypeScript/JavaScript configuration changed. Consider running /agentful-analyze to update build settings."
|
|
35
|
-
exit 0
|
|
36
|
-
;;
|
|
37
|
-
|
|
38
|
-
vite.config.*|webpack.config.*|rollup.config.*|next.config.*)
|
|
39
|
-
echo "Build configuration changed. Consider running /agentful-analyze to update bundler settings."
|
|
40
|
-
exit 0
|
|
41
|
-
;;
|
|
42
|
-
|
|
43
|
-
.env.example|.env.sample)
|
|
44
|
-
echo "Environment template changed. Consider running /agentful-analyze to update configuration understanding."
|
|
45
|
-
exit 0
|
|
46
|
-
;;
|
|
47
|
-
|
|
48
|
-
docker-compose.yml|Dockerfile)
|
|
49
|
-
echo "Docker configuration changed. Consider running /agentful-analyze to update deployment setup."
|
|
50
|
-
exit 0
|
|
51
|
-
;;
|
|
52
|
-
|
|
53
|
-
*)
|
|
54
|
-
# No suggestion needed for other files
|
|
55
|
-
exit 0
|
|
56
|
-
;;
|
|
57
|
-
esac
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# health-check.sh
|
|
4
|
-
# Lightweight startup health check for agentful
|
|
5
|
-
|
|
6
|
-
# Exit early on any error
|
|
7
|
-
set -e
|
|
8
|
-
|
|
9
|
-
# Check if .agentful directory exists
|
|
10
|
-
if [ ! -d ".agentful" ]; then
|
|
11
|
-
echo "Agentful not initialized. Run: npx @itz4blitz/agentful init"
|
|
12
|
-
exit 0
|
|
13
|
-
fi
|
|
14
|
-
|
|
15
|
-
# Check if this is a fresh init (no architecture.json means analysis hasn't run)
|
|
16
|
-
if [ ! -f ".agentful/architecture.json" ]; then
|
|
17
|
-
echo "Agentful initialized but not analyzed."
|
|
18
|
-
echo ""
|
|
19
|
-
echo "Run /agentful-generate to:"
|
|
20
|
-
echo " - Detect your tech stack"
|
|
21
|
-
echo " - Discover business domains"
|
|
22
|
-
echo " - Generate specialized agents and skills"
|
|
23
|
-
exit 0
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
# Check for generated agents
|
|
27
|
-
AGENT_COUNT=$(find .claude/agents -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
28
|
-
SKILL_COUNT=$(find .claude/skills -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
|
|
29
|
-
|
|
30
|
-
if [ "$AGENT_COUNT" -lt 3 ] || [ "$SKILL_COUNT" -lt 1 ]; then
|
|
31
|
-
echo "Agentful ready. Consider running /agentful-generate to generate more agents/skills."
|
|
32
|
-
exit 0
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
echo "Agentful ready."
|
|
36
|
-
exit 0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|