@hustle-together/api-dev-tools 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +712 -377
- package/commands/api-create.md +68 -23
- package/demo/hustle-together/blog/gemini-vs-claude-widgets.html +1 -1
- package/demo/hustle-together/blog/interview-driven-api-development.html +1 -1
- package/demo/hustle-together/blog/tdd-for-ai.html +1 -1
- package/demo/hustle-together/index.html +2 -2
- package/demo/workflow-demo-v3.5-backup.html +5008 -0
- package/demo/workflow-demo.html +5137 -3805
- package/hooks/enforce-deep-research.py +6 -1
- package/hooks/enforce-disambiguation.py +7 -1
- package/hooks/enforce-documentation.py +6 -1
- package/hooks/enforce-environment.py +5 -1
- package/hooks/enforce-interview.py +5 -1
- package/hooks/enforce-refactor.py +3 -1
- package/hooks/enforce-schema.py +0 -0
- package/hooks/enforce-scope.py +5 -1
- package/hooks/enforce-tdd-red.py +5 -1
- package/hooks/enforce-verify.py +0 -0
- package/hooks/track-tool-use.py +167 -0
- package/hooks/verify-implementation.py +0 -0
- package/package.json +1 -1
- package/templates/api-dev-state.json +24 -0
- package/demo/audio/audio-sync.js +0 -295
- package/demo/audio/generate-all-narrations.js +0 -581
- package/demo/audio/generate-narration.js +0 -486
- package/demo/audio/generate-voice-previews.js +0 -140
- package/demo/audio/narration-adam-timing.json +0 -4675
- package/demo/audio/narration-adam.mp3 +0 -0
- package/demo/audio/narration-creature-timing.json +0 -4675
- package/demo/audio/narration-creature.mp3 +0 -0
- package/demo/audio/narration-gaming-timing.json +0 -4675
- package/demo/audio/narration-gaming.mp3 +0 -0
- package/demo/audio/narration-hope-timing.json +0 -4675
- package/demo/audio/narration-hope.mp3 +0 -0
- package/demo/audio/narration-mark-timing.json +0 -4675
- package/demo/audio/narration-mark.mp3 +0 -0
- package/demo/audio/narration-timing.json +0 -3614
- package/demo/audio/narration-timing.sample.json +0 -48
- package/demo/audio/narration.mp3 +0 -0
- package/demo/audio/previews/manifest.json +0 -30
- package/demo/audio/previews/preview-creature.mp3 +0 -0
- package/demo/audio/previews/preview-gaming.mp3 +0 -0
- package/demo/audio/previews/preview-hope.mp3 +0 -0
- package/demo/audio/previews/preview-mark.mp3 +0 -0
- package/demo/audio/voices-manifest.json +0 -50
package/commands/api-create.md
CHANGED
|
@@ -16,29 +16,75 @@ This workflow requires REAL user input at each phase. You are **FORBIDDEN** from
|
|
|
16
16
|
|
|
17
17
|
### How to Ask Questions Correctly
|
|
18
18
|
|
|
19
|
-
At every `[Y/n]` or multiple-choice prompt in this workflow, you MUST call:
|
|
19
|
+
At every `[Y/n]` or multiple-choice prompt in this workflow, you MUST call the `AskUserQuestion` tool with this EXACT schema:
|
|
20
20
|
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"questions": [
|
|
24
|
+
{
|
|
25
|
+
"question": "Your question here? (must end with ?)",
|
|
26
|
+
"header": "Phase",
|
|
27
|
+
"multiSelect": false,
|
|
28
|
+
"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"}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
21
36
|
```
|
|
22
|
-
AskUserQuestion({
|
|
23
|
-
questions: [{
|
|
24
|
-
question: "Your question here?",
|
|
25
|
-
header: "Phase",
|
|
26
|
-
options: ["Option A", "Option B", "Option C", "Type something else..."]
|
|
27
|
-
}]
|
|
28
|
-
})
|
|
29
|
-
```
|
|
30
37
|
|
|
31
|
-
**
|
|
38
|
+
**CRITICAL REQUIREMENTS:**
|
|
39
|
+
- `header`: Max 12 characters (e.g., "Scope", "Research", "Format")
|
|
40
|
+
- `options`: 2-4 options, each with `label` (1-5 words) and `description`
|
|
41
|
+
- `multiSelect`: Required boolean (true for checkboxes, false for radio)
|
|
42
|
+
- `question`: Must end with a question mark
|
|
43
|
+
- Users can always select "Other" to provide custom input
|
|
44
|
+
|
|
45
|
+
**WAIT for the user's response before proceeding.** The tool will show a UI dialog and pause execution until the user answers. Do NOT continue until you receive the response.
|
|
32
46
|
|
|
33
47
|
### Violation Detection
|
|
34
48
|
|
|
35
49
|
The enforcement hooks will BLOCK your progress if:
|
|
36
50
|
- `user_question_asked` is false for any phase
|
|
37
51
|
- `user_confirmed`/`user_approved`/`user_completed` is false
|
|
52
|
+
- `phase_exit_confirmed` is false (user must explicitly approve proceeding to next phase)
|
|
38
53
|
- Questions were not asked via the AskUserQuestion tool
|
|
39
54
|
|
|
40
55
|
If you see "BLOCKED" messages, it means you skipped user interaction.
|
|
41
56
|
|
|
57
|
+
### Phase Exit Confirmation (NEW in v3.5.0)
|
|
58
|
+
|
|
59
|
+
**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
|
+
|
|
61
|
+
The exit confirmation question MUST:
|
|
62
|
+
1. Summarize what was accomplished in the current phase
|
|
63
|
+
2. Ask if user is ready to proceed to the next phase
|
|
64
|
+
3. Include options like "Yes, proceed", "No, I have changes", "Add more"
|
|
65
|
+
|
|
66
|
+
Example exit confirmation:
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"questions": [{
|
|
70
|
+
"question": "Phase complete. Research found 5 sources. Ready to proceed to Interview phase?",
|
|
71
|
+
"header": "Proceed",
|
|
72
|
+
"multiSelect": false,
|
|
73
|
+
"options": [
|
|
74
|
+
{"label": "Yes, proceed", "description": "Move to next phase"},
|
|
75
|
+
{"label": "No, more research", "description": "I need additional research on [topic]"},
|
|
76
|
+
{"label": "Review sources", "description": "Show me what was found"}
|
|
77
|
+
]
|
|
78
|
+
}]
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The `phase_exit_confirmed` flag is automatically set when:
|
|
83
|
+
1. An `AskUserQuestion` is called with a question containing words like "proceed", "continue", "ready", "confirm", "approve"
|
|
84
|
+
2. The user responds with an affirmative answer (yes, proceed, confirm, approve, etc.)
|
|
85
|
+
|
|
86
|
+
Both conditions must be true for the flag to be set.
|
|
87
|
+
|
|
42
88
|
---
|
|
43
89
|
|
|
44
90
|
## Key Principles
|
|
@@ -62,21 +108,20 @@ If you see "BLOCKED" messages, it means you skipped user interaction.
|
|
|
62
108
|
│ • "[term] SDK" │
|
|
63
109
|
│ • "[term] npm package" │
|
|
64
110
|
│ │
|
|
65
|
-
│ ⚠️ REQUIRED: Use AskUserQuestion tool:
|
|
66
|
-
│ │
|
|
67
|
-
│
|
|
68
|
-
│ questions: [{
|
|
69
|
-
│ question: "
|
|
70
|
-
│
|
|
71
|
-
│
|
|
72
|
-
│ options: [
|
|
73
|
-
│ "
|
|
74
|
-
│ "
|
|
75
|
-
│ "Both
|
|
76
|
-
│ "Something else (I'll describe)" │
|
|
111
|
+
│ ⚠️ REQUIRED: Use AskUserQuestion tool with EXACT schema: │
|
|
112
|
+
│ │
|
|
113
|
+
│ { │
|
|
114
|
+
│ "questions": [{ │
|
|
115
|
+
│ "question": "Which interpretation of [term]?", │
|
|
116
|
+
│ "header": "Disambig", │
|
|
117
|
+
│ "multiSelect": false, │
|
|
118
|
+
│ "options": [ │
|
|
119
|
+
│ {"label": "REST API", "description": "Official API"},│
|
|
120
|
+
│ {"label": "SDK/Package", "description": "NPM wrapper"},│
|
|
121
|
+
│ {"label": "Both", "description": "API + SDK"} │
|
|
77
122
|
│ ] │
|
|
78
123
|
│ }] │
|
|
79
|
-
│ }
|
|
124
|
+
│ } │
|
|
80
125
|
│ │
|
|
81
126
|
│ WAIT for user response. Do NOT proceed without it. │
|
|
82
127
|
│ ──── Loop back if user selects "Something else" ──── │
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&family=Fredoka:wght@600;700&display=swap" rel="stylesheet">
|
|
10
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.
|
|
10
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.1/gsap.min.js"></script>
|
|
11
11
|
<style>
|
|
12
12
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&family=Fredoka:wght@600;700&display=swap" rel="stylesheet">
|
|
10
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.
|
|
10
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.1/gsap.min.js"></script>
|
|
11
11
|
<style>
|
|
12
12
|
* {
|
|
13
13
|
margin: 0;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&family=Fredoka:wght@600;700&display=swap" rel="stylesheet">
|
|
10
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.
|
|
10
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.1/gsap.min.js"></script>
|
|
11
11
|
<style>
|
|
12
12
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
13
13
|
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;700&family=Righteous&family=Bungee&family=Fredoka:wght@600;700&display=swap" rel="stylesheet">
|
|
10
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.
|
|
11
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.
|
|
10
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.1/gsap.min.js"></script>
|
|
11
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.1/ScrollTrigger.min.js"></script>
|
|
12
12
|
<style>
|
|
13
13
|
/* ============================================
|
|
14
14
|
HUSTLE TOGETHER - 90s BOXY AESTHETIC
|