@hustle-together/api-dev-tools 3.10.1 → 3.12.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/.claude/agents/code-reviewer.md +170 -0
- package/.claude/agents/docs-generator.md +80 -0
- package/.claude/agents/implementation-reviewer.md +119 -0
- package/.claude/agents/parallel-researcher.md +52 -0
- package/.claude/agents/research-validator.md +116 -0
- package/.claude/agents/schema-generator.md +70 -0
- package/.claude/agents/test-writer.md +104 -0
- package/.claude/api-dev-state.json +331 -0
- package/.claude/commands/README.md +196 -0
- package/.claude/commands/add-command.md +212 -0
- package/.claude/commands/api-create.md +510 -0
- package/.claude/commands/api-env.md +51 -0
- package/.claude/commands/api-interview.md +344 -0
- package/.claude/commands/api-research.md +357 -0
- package/.claude/commands/api-status.md +279 -0
- package/.claude/commands/api-verify.md +232 -0
- package/.claude/commands/beepboop.md +96 -0
- package/.claude/commands/busycommit.md +111 -0
- package/.claude/commands/commit.md +82 -0
- package/.claude/commands/cycle.md +137 -0
- package/.claude/commands/gap.md +85 -0
- package/.claude/commands/green.md +137 -0
- package/.claude/commands/issue.md +187 -0
- package/.claude/commands/ntfy-setup.md +91 -0
- package/.claude/commands/ntfy-test.md +74 -0
- package/.claude/commands/plan.md +167 -0
- package/.claude/commands/pr.md +121 -0
- package/.claude/commands/publish.md +40 -0
- package/.claude/commands/red.md +137 -0
- package/.claude/commands/refactor.md +137 -0
- package/.claude/commands/spike.md +137 -0
- package/.claude/commands/summarize.md +93 -0
- package/.claude/commands/tdd.md +139 -0
- package/.claude/commands/worktree-add.md +307 -0
- package/.claude/commands/worktree-cleanup.md +275 -0
- package/.claude/hooks/api-workflow-check.py +227 -0
- package/.claude/hooks/enforce-deep-research.py +185 -0
- package/.claude/hooks/enforce-disambiguation.py +155 -0
- package/.claude/hooks/enforce-documentation.py +192 -0
- package/.claude/hooks/enforce-environment.py +253 -0
- package/.claude/hooks/enforce-external-research.py +328 -0
- package/.claude/hooks/enforce-interview.py +421 -0
- package/.claude/hooks/enforce-refactor.py +189 -0
- package/.claude/hooks/enforce-research.py +159 -0
- package/.claude/hooks/enforce-schema.py +186 -0
- package/.claude/hooks/enforce-scope.py +160 -0
- package/.claude/hooks/enforce-tdd-red.py +250 -0
- package/.claude/hooks/enforce-verify.py +186 -0
- package/.claude/hooks/periodic-reground.py +154 -0
- package/.claude/hooks/session-startup.py +151 -0
- package/.claude/hooks/track-tool-use.py +626 -0
- package/.claude/hooks/verify-after-green.py +282 -0
- package/.claude/hooks/verify-implementation.py +225 -0
- package/.claude/research/index.json +6 -0
- package/.claude/settings.json +144 -0
- package/.claude/settings.local.json +12 -0
- package/.claude-plugin/marketplace.json +103 -0
- package/.skills/README.md +293 -0
- package/.skills/_shared/convert-commands.py +192 -0
- package/.skills/_shared/hooks/api-workflow-check.py +227 -0
- package/.skills/_shared/hooks/enforce-deep-research.py +185 -0
- package/.skills/_shared/hooks/enforce-disambiguation.py +155 -0
- package/.skills/_shared/hooks/enforce-documentation.py +192 -0
- package/.skills/_shared/hooks/enforce-environment.py +253 -0
- package/.skills/_shared/hooks/enforce-external-research.py +328 -0
- package/.skills/_shared/hooks/enforce-interview.py +421 -0
- package/.skills/_shared/hooks/enforce-refactor.py +189 -0
- package/.skills/_shared/hooks/enforce-research.py +159 -0
- package/.skills/_shared/hooks/enforce-schema.py +186 -0
- package/.skills/_shared/hooks/enforce-scope.py +160 -0
- package/.skills/_shared/hooks/enforce-tdd-red.py +250 -0
- package/.skills/_shared/hooks/enforce-verify.py +186 -0
- package/.skills/_shared/hooks/periodic-reground.py +154 -0
- package/.skills/_shared/hooks/session-startup.py +151 -0
- package/.skills/_shared/hooks/track-tool-use.py +626 -0
- package/.skills/_shared/hooks/verify-after-green.py +282 -0
- package/.skills/_shared/hooks/verify-implementation.py +225 -0
- package/.skills/_shared/install.sh +114 -0
- package/.skills/_shared/settings.json +93 -0
- package/.skills/add-command/SKILL.md +227 -0
- package/.skills/api-create/SKILL.md +623 -0
- package/.skills/api-env/SKILL.md +64 -0
- package/.skills/api-interview/SKILL.md +357 -0
- package/.skills/api-research/SKILL.md +370 -0
- package/.skills/api-status/SKILL.md +292 -0
- package/.skills/api-verify/SKILL.md +245 -0
- package/.skills/beepboop/SKILL.md +111 -0
- package/.skills/busycommit/SKILL.md +126 -0
- package/.skills/commit/SKILL.md +97 -0
- package/.skills/cycle/SKILL.md +152 -0
- package/.skills/gap/SKILL.md +100 -0
- package/.skills/green/SKILL.md +152 -0
- package/.skills/issue/SKILL.md +202 -0
- package/.skills/plan/SKILL.md +182 -0
- package/.skills/pr/SKILL.md +136 -0
- package/.skills/publish/SKILL.md +160 -0
- package/.skills/red/SKILL.md +152 -0
- package/.skills/refactor/SKILL.md +152 -0
- package/.skills/spike/SKILL.md +152 -0
- package/.skills/summarize/SKILL.md +108 -0
- package/.skills/tdd/SKILL.md +154 -0
- package/.skills/update-todos/SKILL.md +250 -0
- package/.skills/worktree-add/SKILL.md +322 -0
- package/.skills/worktree-cleanup/SKILL.md +290 -0
- package/CHANGELOG.md +115 -0
- package/README.md +161 -7101
- package/bin/cli.js +448 -805
- package/commands/README.md +66 -31
- package/commands/add-command.md +8 -5
- package/commands/beepboop.md +4 -5
- package/commands/busycommit.md +2 -3
- package/commands/commit.md +2 -3
- package/commands/cycle.md +2 -7
- package/commands/gap.md +2 -3
- package/commands/green.md +2 -7
- package/commands/hustle-api-continue.md +8 -5
- package/commands/hustle-api-create.md +70 -29
- package/commands/hustle-api-env.md +1 -0
- package/commands/hustle-api-interview.md +32 -19
- package/commands/hustle-api-research.md +47 -21
- package/commands/hustle-api-sessions.md +8 -7
- package/commands/hustle-api-status.md +21 -1
- package/commands/hustle-api-verify.md +14 -13
- package/commands/hustle-combine.md +488 -241
- package/commands/hustle-ui-create-page.md +113 -50
- package/commands/hustle-ui-create.md +179 -26
- package/commands/issue.md +3 -8
- package/commands/plan.md +2 -3
- package/commands/pr.md +2 -3
- package/commands/red.md +2 -7
- package/commands/refactor.md +2 -7
- package/commands/spike.md +2 -7
- package/commands/summarize.md +2 -3
- package/commands/tdd.md +2 -7
- package/commands/worktree-add.md +208 -216
- package/commands/worktree-cleanup.md +172 -178
- package/hooks/api-workflow-check.py +5 -3
- package/hooks/enforce-component-type-confirm.py +97 -0
- package/hooks/lib/__init__.py +1 -0
- package/hooks/lib/greptile.py +355 -0
- package/hooks/lib/ntfy.py +209 -0
- package/hooks/notify-input-needed.py +73 -0
- package/hooks/notify-phase-complete.py +90 -0
- package/hooks/run-code-review.py +246 -0
- package/hooks/track-token-usage.py +121 -0
- package/package.json +33 -12
- package/scripts/collect-test-results.ts +102 -77
- package/scripts/extract-parameters.ts +112 -70
- package/scripts/generate-test-manifest.ts +118 -77
- package/templates/.env.example +57 -0
- package/templates/BRAND_GUIDE.md +92 -52
- package/templates/CLAUDE-SECTION.md +40 -37
- package/templates/SPEC.json +186 -38
- package/templates/api-dev-state.json +33 -4
- package/templates/api-showcase/_components/APICard.tsx +22 -18
- package/templates/api-showcase/_components/APIModal.tsx +110 -64
- package/templates/api-showcase/_components/APIShowcase.tsx +53 -35
- package/templates/api-showcase/_components/APITester.tsx +128 -67
- package/templates/api-showcase/page.tsx +4 -4
- package/templates/api-test/page.tsx +51 -30
- package/templates/api-test/test-structure/route.ts +43 -34
- package/templates/component/Component.stories.tsx +41 -39
- package/templates/component/Component.test.tsx +96 -78
- package/templates/component/Component.tsx +63 -52
- package/templates/component/Component.types.ts +10 -6
- package/templates/component/Component.visual.spec.ts +170 -0
- package/templates/component/index.ts +2 -2
- package/templates/dev-tools/_components/DevToolsLanding.tsx +8 -8
- package/templates/dev-tools/page.tsx +4 -3
- package/templates/mcp-servers.json +30 -2
- package/templates/page/page.e2e.test.ts +56 -48
- package/templates/page/page.tsx +3 -3
- package/templates/shared/HeroHeader.tsx +16 -15
- package/templates/shared/index.ts +1 -1
- package/templates/ui-showcase/_components/PreviewCard.tsx +20 -20
- package/templates/ui-showcase/_components/PreviewModal.tsx +149 -108
- package/templates/ui-showcase/_components/UIShowcase.tsx +43 -35
- package/templates/ui-showcase/page.tsx +4 -4
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
**YOU MUST USE THE `AskUserQuestion` TOOL AT EVERY CHECKPOINT.**
|
|
10
10
|
|
|
11
11
|
This workflow requires REAL user input at each phase. You are **FORBIDDEN** from:
|
|
12
|
+
|
|
12
13
|
- Self-answering questions
|
|
13
14
|
- Assuming user responses
|
|
14
15
|
- Proceeding without explicit user confirmation
|
|
@@ -26,9 +27,9 @@ At every `[Y/n]` or multiple-choice prompt in this workflow, you MUST call the `
|
|
|
26
27
|
"header": "Phase",
|
|
27
28
|
"multiSelect": false,
|
|
28
29
|
"options": [
|
|
29
|
-
{"label": "Option A", "description": "What this option means"},
|
|
30
|
-
{"label": "Option B", "description": "What this option means"},
|
|
31
|
-
{"label": "Other", "description": "I'll type my own answer"}
|
|
30
|
+
{ "label": "Option A", "description": "What this option means" },
|
|
31
|
+
{ "label": "Option B", "description": "What this option means" },
|
|
32
|
+
{ "label": "Other", "description": "I'll type my own answer" }
|
|
32
33
|
]
|
|
33
34
|
}
|
|
34
35
|
]
|
|
@@ -36,6 +37,7 @@ At every `[Y/n]` or multiple-choice prompt in this workflow, you MUST call the `
|
|
|
36
37
|
```
|
|
37
38
|
|
|
38
39
|
**CRITICAL REQUIREMENTS:**
|
|
40
|
+
|
|
39
41
|
- `header`: Max 12 characters (e.g., "Scope", "Research", "Format")
|
|
40
42
|
- `options`: 2-4 options, each with `label` (1-5 words) and `description`
|
|
41
43
|
- `multiSelect`: Required boolean (true for checkboxes, false for radio)
|
|
@@ -47,6 +49,7 @@ At every `[Y/n]` or multiple-choice prompt in this workflow, you MUST call the `
|
|
|
47
49
|
### Violation Detection
|
|
48
50
|
|
|
49
51
|
The enforcement hooks will BLOCK your progress if:
|
|
52
|
+
|
|
50
53
|
- `user_question_asked` is false for any phase
|
|
51
54
|
- `user_confirmed`/`user_approved`/`user_completed` is false
|
|
52
55
|
- `phase_exit_confirmed` is false (user must explicitly approve proceeding to next phase)
|
|
@@ -59,27 +62,35 @@ If you see "BLOCKED" messages, it means you skipped user interaction.
|
|
|
59
62
|
**Every phase requires an EXIT CONFIRMATION question** before proceeding to the next phase. This prevents Claude from self-answering and moving on without explicit user approval.
|
|
60
63
|
|
|
61
64
|
The exit confirmation question MUST:
|
|
65
|
+
|
|
62
66
|
1. Summarize what was accomplished in the current phase
|
|
63
67
|
2. Ask if user is ready to proceed to the next phase
|
|
64
68
|
3. Include options like "Yes, proceed", "No, I have changes", "Add more"
|
|
65
69
|
|
|
66
70
|
Example exit confirmation:
|
|
71
|
+
|
|
67
72
|
```json
|
|
68
73
|
{
|
|
69
|
-
"questions": [
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
"questions": [
|
|
75
|
+
{
|
|
76
|
+
"question": "Phase complete. Research found 5 sources. Ready to proceed to Interview phase?",
|
|
77
|
+
"header": "Proceed",
|
|
78
|
+
"multiSelect": false,
|
|
79
|
+
"options": [
|
|
80
|
+
{ "label": "Yes, proceed", "description": "Move to next phase" },
|
|
81
|
+
{
|
|
82
|
+
"label": "No, more research",
|
|
83
|
+
"description": "I need additional research on [topic]"
|
|
84
|
+
},
|
|
85
|
+
{ "label": "Review sources", "description": "Show me what was found" }
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
]
|
|
79
89
|
}
|
|
80
90
|
```
|
|
81
91
|
|
|
82
92
|
The `phase_exit_confirmed` flag is automatically set when:
|
|
93
|
+
|
|
83
94
|
1. An `AskUserQuestion` is called with a question containing words like "proceed", "continue", "ready", "confirm", "approve"
|
|
84
95
|
2. The user responds with an affirmative answer (yes, proceed, confirm, approve, etc.)
|
|
85
96
|
|
|
@@ -374,9 +385,39 @@ Both conditions must be true for the flag to be set.
|
|
|
374
385
|
└───────────────────────────────────────────────────────────┘
|
|
375
386
|
│
|
|
376
387
|
▼
|
|
377
|
-
┌─ PHASE 11:
|
|
388
|
+
┌─ PHASE 11: CODE REVIEW (Greptile) ────────────────────────┐
|
|
389
|
+
│ │
|
|
390
|
+
│ Run Greptile AI code review BEFORE refactoring: │
|
|
391
|
+
│ • Bug detection with full codebase context │
|
|
392
|
+
│ • Security vulnerability scanning (OWASP top 10) │
|
|
393
|
+
│ • Performance issue identification │
|
|
394
|
+
│ │
|
|
395
|
+
│ Review returns actionable issues with file:line refs. │
|
|
396
|
+
│ Requires: GREPTILE_API_KEY + GITHUB_TOKEN │
|
|
397
|
+
│ │
|
|
398
|
+
│ ⚠️ REQUIRED: Use AskUserQuestion tool: │
|
|
399
|
+
│ │
|
|
400
|
+
│ AskUserQuestion({ │
|
|
401
|
+
│ questions: [{ │
|
|
402
|
+
│ question: "Code review found [N] issue(s): [list]. │
|
|
403
|
+
│ How should I proceed?", │
|
|
404
|
+
│ header: "Review", │
|
|
405
|
+
│ options: [ │
|
|
406
|
+
│ "Fix all issues in refactor phase", │
|
|
407
|
+
│ "Fix critical only, defer others", │
|
|
408
|
+
│ "Skip - no issues to fix" │
|
|
409
|
+
│ ] │
|
|
410
|
+
│ }] │
|
|
411
|
+
│ }) │
|
|
412
|
+
│ │
|
|
413
|
+
│ WAIT for user response. Do NOT auto-proceed. │
|
|
414
|
+
└───────────────────────────────────────────────────────────┘
|
|
415
|
+
│
|
|
416
|
+
▼
|
|
417
|
+
┌─ PHASE 12: TDD REFACTOR ──────────────────────────────────┐
|
|
378
418
|
│ │
|
|
379
|
-
│
|
|
419
|
+
│ Fix code review issues + clean up while tests stay green: │
|
|
420
|
+
│ • Address Greptile issues (bugs, security, performance) │
|
|
380
421
|
│ • Extract reusable patterns │
|
|
381
422
|
│ • Improve error messages │
|
|
382
423
|
│ • Add JSDoc comments │
|
|
@@ -386,7 +427,7 @@ Both conditions must be true for the flag to be set.
|
|
|
386
427
|
└───────────────────────────────────────────────────────────┘
|
|
387
428
|
│
|
|
388
429
|
▼
|
|
389
|
-
┌─ PHASE
|
|
430
|
+
┌─ PHASE 13: DOCUMENTATION ─────────────────────────────────┐
|
|
390
431
|
│ │
|
|
391
432
|
│ Update documentation files, then: │
|
|
392
433
|
│ │
|
|
@@ -411,7 +452,7 @@ Both conditions must be true for the flag to be set.
|
|
|
411
452
|
└───────────────────────────────────────────────────────────┘
|
|
412
453
|
│
|
|
413
454
|
▼
|
|
414
|
-
┌─ PHASE
|
|
455
|
+
┌─ PHASE 14: COMPLETION ────────────────────────────────────┐
|
|
415
456
|
│ │
|
|
416
457
|
│ Final verification: │
|
|
417
458
|
│ • All tests passing │
|
|
@@ -484,16 +525,16 @@ This command creates:
|
|
|
484
525
|
|
|
485
526
|
## Hooks That Enforce This Workflow
|
|
486
527
|
|
|
487
|
-
| Phase | Hook
|
|
488
|
-
|
|
489
|
-
| 0
|
|
490
|
-
| 2-4
|
|
491
|
-
| 7-8
|
|
492
|
-
| 7-8
|
|
493
|
-
| 8
|
|
494
|
-
| 9
|
|
495
|
-
| All
|
|
496
|
-
| 11
|
|
528
|
+
| Phase | Hook | Purpose |
|
|
529
|
+
| ----- | ------------------------------ | ------------------------------------------ |
|
|
530
|
+
| 0 | `enforce-external-research.py` | Detects API terms, requires disambiguation |
|
|
531
|
+
| 2-4 | `track-tool-use.py` | Logs all research, tracks turns |
|
|
532
|
+
| 7-8 | `enforce-research.py` | Blocks Write if no research done |
|
|
533
|
+
| 7-8 | `enforce-interview.py` | Injects interview decisions |
|
|
534
|
+
| 8 | `verify-implementation.py` | Blocks route if no test file |
|
|
535
|
+
| 9 | `verify-after-green.py` | Triggers verification after tests pass |
|
|
536
|
+
| All | `periodic-reground.py` | Re-grounds every 7 turns |
|
|
537
|
+
| 11 | `api-workflow-check.py` | Blocks completion if docs incomplete |
|
|
497
538
|
|
|
498
539
|
<claude-commands-template>
|
|
499
540
|
## Project-Specific Rules
|
|
@@ -504,7 +545,7 @@ This command creates:
|
|
|
504
545
|
4. **AI SDK**: Use Vercel AI SDK 5.0.11 patterns from `/src/v2/docs/ai-sdk-catalog.json`
|
|
505
546
|
5. **Package Manager**: Use `pnpm` for all operations
|
|
506
547
|
6. **Documentation**: Follow patterns in `/src/v2/docs/Main Doc – V2 Development Patterns.md`
|
|
507
|
-
7. **API Keys**: Support three methods (env,
|
|
548
|
+
7. **API Keys**: Support three methods (env, NEXT*PUBLIC*, custom headers)
|
|
508
549
|
8. **Test Command**: `pnpm test:run` before commits
|
|
509
550
|
|
|
510
551
|
## Never Skip
|
|
@@ -516,4 +557,4 @@ This command creates:
|
|
|
516
557
|
- Phase 10 (Verify) - Re-research after Green
|
|
517
558
|
- Phase 12 (Documentation) - Keep docs in sync
|
|
518
559
|
- Coverage verification - 100% required
|
|
519
|
-
</claude-commands-template>
|
|
560
|
+
</claude-commands-template>
|
|
@@ -42,6 +42,7 @@ Status: BLOCKED - Cannot proceed without FIRECRAWL_API_KEY
|
|
|
42
42
|
## API Key Support
|
|
43
43
|
|
|
44
44
|
The project supports three methods:
|
|
45
|
+
|
|
45
46
|
1. Server env: `OPENAI_API_KEY=sk-...`
|
|
46
47
|
2. Client env: `NEXT_PUBLIC_OPENAI_API_KEY=sk-...`
|
|
47
48
|
3. Custom headers: `X-OpenAI-Key: sk-...`
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
## Key Principle: Questions FROM Research
|
|
8
8
|
|
|
9
9
|
**OLD WAY (Generic Templates):**
|
|
10
|
+
|
|
10
11
|
```
|
|
11
12
|
"Which AI provider should this endpoint support?"
|
|
12
13
|
- OpenAI
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
```
|
|
16
17
|
|
|
17
18
|
**NEW WAY (From Research):**
|
|
19
|
+
|
|
18
20
|
```
|
|
19
21
|
Based on research, Brandfetch API has 7 parameters:
|
|
20
22
|
|
|
@@ -40,6 +42,7 @@ Based on research, Brandfetch API has 7 parameters:
|
|
|
40
42
|
**Interview is BLOCKED until research is done.**
|
|
41
43
|
|
|
42
44
|
The interview READS from the research findings:
|
|
45
|
+
|
|
43
46
|
```
|
|
44
47
|
State file shows:
|
|
45
48
|
research_initial.status = "complete"
|
|
@@ -57,6 +60,7 @@ Discovered parameters:
|
|
|
57
60
|
For each discovered parameter, generate an appropriate question:
|
|
58
61
|
|
|
59
62
|
#### Required Parameters (Confirmation Only)
|
|
63
|
+
|
|
60
64
|
```
|
|
61
65
|
┌────────────────────────────────────────────────────────────┐
|
|
62
66
|
│ REQUIRED PARAMETERS │
|
|
@@ -71,6 +75,7 @@ For each discovered parameter, generate an appropriate question:
|
|
|
71
75
|
```
|
|
72
76
|
|
|
73
77
|
#### Enum Parameters (Multi-Select)
|
|
78
|
+
|
|
74
79
|
```
|
|
75
80
|
┌────────────────────────────────────────────────────────────┐
|
|
76
81
|
│ FORMAT PARAMETER │
|
|
@@ -87,6 +92,7 @@ For each discovered parameter, generate an appropriate question:
|
|
|
87
92
|
```
|
|
88
93
|
|
|
89
94
|
#### Continuous Parameters (Test Strategy)
|
|
95
|
+
|
|
90
96
|
```
|
|
91
97
|
┌────────────────────────────────────────────────────────────┐
|
|
92
98
|
│ QUALITY PARAMETER │
|
|
@@ -105,6 +111,7 @@ For each discovered parameter, generate an appropriate question:
|
|
|
105
111
|
```
|
|
106
112
|
|
|
107
113
|
#### Boolean Parameters (Enable/Disable)
|
|
114
|
+
|
|
108
115
|
```
|
|
109
116
|
┌────────────────────────────────────────────────────────────┐
|
|
110
117
|
│ INCLUDE_COLORS PARAMETER │
|
|
@@ -189,14 +196,14 @@ After interview, propose additional research:
|
|
|
189
196
|
|
|
190
197
|
## Question Types Summary
|
|
191
198
|
|
|
192
|
-
| Discovered Type
|
|
193
|
-
|
|
194
|
-
| Required param
|
|
195
|
-
| Enum param
|
|
196
|
-
| Continuous range | Test strategy
|
|
197
|
-
| Boolean param
|
|
198
|
-
| Optional feature | Priority
|
|
199
|
-
| Error case
|
|
199
|
+
| Discovered Type | Question Type | Example |
|
|
200
|
+
| ---------------- | ----------------- | ------------------------------- |
|
|
201
|
+
| Required param | Confirmation | "Confirm these are understood?" |
|
|
202
|
+
| Enum param | Multi-select | "Which formats to support?" |
|
|
203
|
+
| Continuous range | Test strategy | "How to test 1-100 range?" |
|
|
204
|
+
| Boolean param | Enable/disable | "Expose this parameter?" |
|
|
205
|
+
| Optional feature | Priority | "Include this feature?" |
|
|
206
|
+
| Error case | Handling strategy | "How to handle rate limits?" |
|
|
200
207
|
|
|
201
208
|
## State Tracking
|
|
202
209
|
|
|
@@ -239,7 +246,7 @@ All decisions are saved to `.claude/api-dev-state.json`:
|
|
|
239
246
|
|
|
240
247
|
Creates: `.claude/research/[api-name]/interview.md`
|
|
241
248
|
|
|
242
|
-
|
|
249
|
+
````markdown
|
|
243
250
|
# Interview: [API Name]
|
|
244
251
|
|
|
245
252
|
**Date:** [current-date]
|
|
@@ -248,19 +255,19 @@ Creates: `.claude/research/[api-name]/interview.md`
|
|
|
248
255
|
|
|
249
256
|
## Discovered Parameters
|
|
250
257
|
|
|
251
|
-
| Parameter | Type
|
|
252
|
-
|
|
253
|
-
| domain
|
|
254
|
-
| format
|
|
255
|
-
| quality
|
|
258
|
+
| Parameter | Type | Required | Decision |
|
|
259
|
+
| --------- | ------ | -------- | ---------------------------- |
|
|
260
|
+
| domain | string | Yes | Always required |
|
|
261
|
+
| format | enum | No | json, svg, png |
|
|
262
|
+
| quality | 1-100 | No | Boundary testing: 1, 50, 100 |
|
|
256
263
|
|
|
257
264
|
## Feature Scope
|
|
258
265
|
|
|
259
|
-
| Feature
|
|
260
|
-
|
|
261
|
-
| Basic fetch
|
|
262
|
-
| Multiple formats | Yes
|
|
263
|
-
| Webhooks
|
|
266
|
+
| Feature | Included | Reason |
|
|
267
|
+
| ---------------- | -------- | ------------------ |
|
|
268
|
+
| Basic fetch | Yes | Core functionality |
|
|
269
|
+
| Multiple formats | Yes | User selected |
|
|
270
|
+
| Webhooks | No | Deferred to v2 |
|
|
264
271
|
|
|
265
272
|
## Test Strategy
|
|
266
273
|
|
|
@@ -277,6 +284,7 @@ Creates: `.claude/research/[api-name]/interview.md`
|
|
|
277
284
|
"rate_limit_handling": "exponential_backoff"
|
|
278
285
|
}
|
|
279
286
|
```
|
|
287
|
+
````
|
|
280
288
|
|
|
281
289
|
## Deep Research Approved
|
|
282
290
|
|
|
@@ -286,6 +294,7 @@ Creates: `.claude/research/[api-name]/interview.md`
|
|
|
286
294
|
## Open Questions
|
|
287
295
|
|
|
288
296
|
[Any remaining ambiguities]
|
|
297
|
+
|
|
289
298
|
```
|
|
290
299
|
|
|
291
300
|
## Integration with Hooks
|
|
@@ -293,14 +302,17 @@ Creates: `.claude/research/[api-name]/interview.md`
|
|
|
293
302
|
The `enforce-interview.py` hook injects these decisions when Claude tries to write implementation:
|
|
294
303
|
|
|
295
304
|
```
|
|
305
|
+
|
|
296
306
|
INTERVIEW CONTEXT REMINDER
|
|
297
307
|
|
|
298
308
|
When implementing, remember user decisions:
|
|
309
|
+
|
|
299
310
|
- format: ["json", "svg", "png"] (raw excluded)
|
|
300
311
|
- quality: boundary testing (1, 50, 100)
|
|
301
312
|
- rate limits: exponential backoff
|
|
302
313
|
|
|
303
314
|
Source: .claude/api-dev-state.json
|
|
315
|
+
|
|
304
316
|
```
|
|
305
317
|
|
|
306
318
|
<claude-commands-template>
|
|
@@ -329,3 +341,4 @@ Source: .claude/api-dev-state.json
|
|
|
329
341
|
- Decisions injected during implementation via hook
|
|
330
342
|
- Consistency between interview answers and code enforced
|
|
331
343
|
</claude-commands-template>
|
|
344
|
+
```
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
**NOT shotgun research** - We don't blindly run 20 searches.
|
|
10
10
|
|
|
11
11
|
**Adaptive flow:**
|
|
12
|
+
|
|
12
13
|
1. Run 2-3 initial searches
|
|
13
14
|
2. Summarize findings
|
|
14
15
|
3. PROPOSE additional searches based on context
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
### Initial Discovery (Automatic)
|
|
22
23
|
|
|
23
24
|
Run 2-3 targeted searches:
|
|
25
|
+
|
|
24
26
|
```
|
|
25
27
|
- Context7: "[library-name]" (if SDK/library)
|
|
26
28
|
- WebSearch: "[name] official documentation"
|
|
@@ -28,6 +30,7 @@ Run 2-3 targeted searches:
|
|
|
28
30
|
```
|
|
29
31
|
|
|
30
32
|
Present initial summary:
|
|
33
|
+
|
|
31
34
|
```
|
|
32
35
|
┌────────────────────────────────────────────────────────────┐
|
|
33
36
|
│ INITIAL RESEARCH: [library-name] │
|
|
@@ -81,6 +84,7 @@ After interview, PROPOSE targeted searches based on user's selections:
|
|
|
81
84
|
### Execute Approved Searches
|
|
82
85
|
|
|
83
86
|
Only run searches that were explicitly approved:
|
|
87
|
+
|
|
84
88
|
- Track which searches were proposed vs approved vs skipped
|
|
85
89
|
- Log everything to state file for transparency
|
|
86
90
|
|
|
@@ -100,9 +104,7 @@ Only run searches that were explicitly approved:
|
|
|
100
104
|
"SVG optimization options",
|
|
101
105
|
"batch processing"
|
|
102
106
|
],
|
|
103
|
-
"skipped_searches": [
|
|
104
|
-
"webhook support"
|
|
105
|
-
]
|
|
107
|
+
"skipped_searches": ["webhook support"]
|
|
106
108
|
}
|
|
107
109
|
}
|
|
108
110
|
```
|
|
@@ -141,6 +143,7 @@ Research is cached in `.claude/research/[api-name]/`:
|
|
|
141
143
|
```
|
|
142
144
|
|
|
143
145
|
**Freshness Rule:** If research is >7 days old when referenced:
|
|
146
|
+
|
|
144
147
|
```
|
|
145
148
|
⚠️ Research for "brandfetch" is 15 days old.
|
|
146
149
|
Re-research before using? [Y/n]
|
|
@@ -150,7 +153,7 @@ Re-research before using? [Y/n]
|
|
|
150
153
|
|
|
151
154
|
Creates: `.claude/research/[library-name]/CURRENT.md`
|
|
152
155
|
|
|
153
|
-
|
|
156
|
+
````markdown
|
|
154
157
|
# Research: [Library/Service Name]
|
|
155
158
|
|
|
156
159
|
**Date:** [current-date]
|
|
@@ -159,6 +162,7 @@ Creates: `.claude/research/[library-name]/CURRENT.md`
|
|
|
159
162
|
**Freshness:** 0 days (valid for 7 days)
|
|
160
163
|
|
|
161
164
|
## 1. Official Documentation Links
|
|
165
|
+
|
|
162
166
|
- Main docs: [URL]
|
|
163
167
|
- API reference: [URL]
|
|
164
168
|
- GitHub repo: [URL]
|
|
@@ -166,72 +170,93 @@ Creates: `.claude/research/[library-name]/CURRENT.md`
|
|
|
166
170
|
- TypeScript types: [URL]
|
|
167
171
|
|
|
168
172
|
## 2. Installation & Setup
|
|
173
|
+
|
|
169
174
|
### Installation
|
|
175
|
+
|
|
170
176
|
```bash
|
|
171
177
|
[installation command]
|
|
172
178
|
```
|
|
179
|
+
````
|
|
173
180
|
|
|
174
181
|
### Environment Variables
|
|
182
|
+
|
|
175
183
|
```env
|
|
176
184
|
[required env vars]
|
|
177
185
|
```
|
|
178
186
|
|
|
179
187
|
### API Key Setup
|
|
188
|
+
|
|
180
189
|
[How to obtain and configure]
|
|
181
190
|
|
|
182
191
|
## 3. Complete Request Schema
|
|
192
|
+
|
|
183
193
|
### Required Parameters
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
|
194
|
+
|
|
195
|
+
| Parameter | Type | Description | Validation |
|
|
196
|
+
| --------- | ------ | ----------- | ---------- |
|
|
197
|
+
| [name] | [type] | [desc] | [rules] |
|
|
187
198
|
|
|
188
199
|
### Optional Parameters
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
|
200
|
+
|
|
201
|
+
| Parameter | Type | Default | Description | Notes |
|
|
202
|
+
| --------- | ------ | --------- | ----------- | ------- |
|
|
203
|
+
| [name] | [type] | [default] | [desc] | [notes] |
|
|
192
204
|
|
|
193
205
|
### Continuous Parameters (for test strategy)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
|
197
|
-
|
|
|
206
|
+
|
|
207
|
+
| Parameter | Type | Range | Suggested Test Values |
|
|
208
|
+
| --------- | ------ | ---------- | --------------------- |
|
|
209
|
+
| quality | number | 1-100 | 1, 50, 100 (boundary) |
|
|
210
|
+
| timeout | number | 1000-30000 | 1000, 15000, 30000 |
|
|
198
211
|
|
|
199
212
|
## 4. Complete Response Schema
|
|
213
|
+
|
|
200
214
|
### Success Response
|
|
215
|
+
|
|
201
216
|
[TypeScript interface]
|
|
202
217
|
|
|
203
218
|
### Error Response
|
|
219
|
+
|
|
204
220
|
[TypeScript interface with error codes]
|
|
205
221
|
|
|
206
222
|
## 5. Features & Capabilities
|
|
223
|
+
|
|
207
224
|
### Core Features (Discovered)
|
|
225
|
+
|
|
208
226
|
- [x] [Feature 1]: [description]
|
|
209
227
|
- [x] [Feature 2]: [description]
|
|
210
228
|
|
|
211
229
|
### Features NOT Implemented (Intentional)
|
|
230
|
+
|
|
212
231
|
- [ ] [Feature]: [reason for exclusion]
|
|
213
232
|
|
|
214
233
|
## 6. Limitations & Constraints
|
|
234
|
+
|
|
215
235
|
- Rate limits: [details]
|
|
216
236
|
- Size limits: [details]
|
|
217
237
|
- Timeout: [details]
|
|
218
238
|
|
|
219
239
|
## 7. Testing Considerations
|
|
240
|
+
|
|
220
241
|
- [ ] Test boundary values for continuous params
|
|
221
242
|
- [ ] Test all enum values
|
|
222
243
|
- [ ] Test error responses
|
|
223
244
|
- [ ] Test rate limiting behavior
|
|
224
245
|
|
|
225
246
|
## 8. Research Trail
|
|
247
|
+
|
|
226
248
|
### Searches Performed
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
|
230
|
-
| "[name]" |
|
|
249
|
+
|
|
250
|
+
| Search | Tool | Found |
|
|
251
|
+
| ---------------------- | --------- | ----- |
|
|
252
|
+
| "[name] documentation" | WebSearch | ✓ |
|
|
253
|
+
| "[name]" | Context7 | ✓ |
|
|
231
254
|
|
|
232
255
|
### Proposed but Skipped
|
|
256
|
+
|
|
233
257
|
- "webhook support" - User declined, not needed
|
|
234
|
-
|
|
258
|
+
|
|
259
|
+
````
|
|
235
260
|
|
|
236
261
|
## Research-First Schema Design (MANDATORY)
|
|
237
262
|
|
|
@@ -296,11 +321,12 @@ All research is tracked in `.claude/api-dev-state.json`:
|
|
|
296
321
|
}
|
|
297
322
|
}
|
|
298
323
|
}
|
|
299
|
-
|
|
324
|
+
````
|
|
300
325
|
|
|
301
326
|
## Usage Examples
|
|
302
327
|
|
|
303
328
|
### Research with full flow
|
|
329
|
+
|
|
304
330
|
```bash
|
|
305
331
|
/hustle-api-research brandfetch
|
|
306
332
|
# → Initial search (2-3 queries)
|
|
@@ -328,4 +354,4 @@ All research is tracked in `.claude/api-dev-state.json`:
|
|
|
328
354
|
- Phase 5 uses adaptive proposal flow
|
|
329
355
|
- Phase 10 (Verify) triggers re-research
|
|
330
356
|
- Freshness check prevents stale data
|
|
331
|
-
</claude-commands-template>
|
|
357
|
+
</claude-commands-template>
|
|
@@ -3,19 +3,20 @@
|
|
|
3
3
|
Browse and export saved session logs from previous API development workflows.
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
6
|
+
|
|
6
7
|
```
|
|
7
8
|
/hustle-api-sessions [options]
|
|
8
9
|
```
|
|
9
10
|
|
|
10
11
|
## Options
|
|
11
12
|
|
|
12
|
-
| Option
|
|
13
|
-
|
|
14
|
-
| `--list`
|
|
15
|
-
| `--view [endpoint]`
|
|
16
|
-
| `--export [endpoint] [format]` | Export session to PDF/HTML/MD
|
|
17
|
-
| `--search [term]`
|
|
18
|
-
| `--cleanup`
|
|
13
|
+
| Option | Description |
|
|
14
|
+
| ------------------------------ | ------------------------------ |
|
|
15
|
+
| `--list` | List all saved sessions |
|
|
16
|
+
| `--view [endpoint]` | View a specific session |
|
|
17
|
+
| `--export [endpoint] [format]` | Export session to PDF/HTML/MD |
|
|
18
|
+
| `--search [term]` | Search across all sessions |
|
|
19
|
+
| `--cleanup` | Remove old sessions (>30 days) |
|
|
19
20
|
|
|
20
21
|
## Examples
|
|
21
22
|
|