@hustle-together/api-dev-tools 3.12.10 → 4.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.
Files changed (152) hide show
  1. package/.claude/adr-requests/.gitkeep +10 -0
  2. package/.claude/agents/adr-researcher.md +109 -0
  3. package/.claude/agents/visual-analyzer.md +183 -0
  4. package/.claude/api-dev-state.json +7 -464
  5. package/.claude/documentation-audit.json +114 -0
  6. package/.claude/registry.json +289 -0
  7. package/.claude/settings.json +45 -1
  8. package/.claude/workflow-logs/None.json +49 -0
  9. package/.claude/workflow-logs/session-20251230-143727.json +106 -0
  10. package/.skills/adr-deep-research/SKILL.md +351 -0
  11. package/.skills/api-create/SKILL.md +116 -17
  12. package/.skills/api-research/SKILL.md +130 -0
  13. package/.skills/docs-sync/SKILL.md +260 -0
  14. package/.skills/docs-update/SKILL.md +205 -0
  15. package/.skills/hustle-brand/SKILL.md +368 -0
  16. package/.skills/hustle-build/SKILL.md +786 -0
  17. package/.skills/hustle-build-review/SKILL.md +518 -0
  18. package/.skills/parallel-spawn/SKILL.md +212 -0
  19. package/.skills/ralph-continue/SKILL.md +151 -0
  20. package/.skills/ralph-loop/SKILL.md +341 -0
  21. package/.skills/ralph-status/SKILL.md +87 -0
  22. package/.skills/refactor/SKILL.md +59 -0
  23. package/.skills/shadcn/SKILL.md +522 -0
  24. package/.skills/test-all/SKILL.md +210 -0
  25. package/.skills/test-builds/SKILL.md +208 -0
  26. package/.skills/test-debug/SKILL.md +212 -0
  27. package/.skills/test-e2e/SKILL.md +168 -0
  28. package/.skills/test-review/SKILL.md +707 -0
  29. package/.skills/test-unit/SKILL.md +143 -0
  30. package/.skills/test-visual/SKILL.md +301 -0
  31. package/.skills/token-report/SKILL.md +132 -0
  32. package/CHANGELOG.md +546 -0
  33. package/README.md +369 -56
  34. package/bin/cli.js +359 -123
  35. package/commands/hustle-api-create.md +22 -0
  36. package/commands/hustle-build.md +259 -0
  37. package/commands/hustle-combine.md +81 -2
  38. package/commands/hustle-ui-create-page.md +84 -2
  39. package/commands/hustle-ui-create.md +82 -2
  40. package/hooks/__pycache__/api-workflow-check.cpython-314.pyc +0 -0
  41. package/hooks/__pycache__/auto-answer.cpython-314.pyc +0 -0
  42. package/hooks/__pycache__/cache-research.cpython-314.pyc +0 -0
  43. package/hooks/__pycache__/check-api-routes.cpython-314.pyc +0 -0
  44. package/hooks/__pycache__/check-playwright-setup.cpython-314.pyc +0 -0
  45. package/hooks/__pycache__/check-storybook-setup.cpython-314.pyc +0 -0
  46. package/hooks/__pycache__/check-update.cpython-314.pyc +0 -0
  47. package/hooks/__pycache__/completion-promise-detector.cpython-314.pyc +0 -0
  48. package/hooks/__pycache__/context-capacity-warning.cpython-314.pyc +0 -0
  49. package/hooks/__pycache__/detect-interruption.cpython-314.pyc +0 -0
  50. package/hooks/__pycache__/docs-update-check.cpython-314.pyc +0 -0
  51. package/hooks/__pycache__/enforce-a11y-audit.cpython-314.pyc +0 -0
  52. package/hooks/__pycache__/enforce-brand-guide.cpython-314.pyc +0 -0
  53. package/hooks/__pycache__/enforce-component-type-confirm.cpython-314.pyc +0 -0
  54. package/hooks/__pycache__/enforce-deep-research.cpython-314.pyc +0 -0
  55. package/hooks/__pycache__/enforce-disambiguation.cpython-314.pyc +0 -0
  56. package/hooks/__pycache__/enforce-documentation.cpython-314.pyc +0 -0
  57. package/hooks/__pycache__/enforce-dry-run.cpython-314.pyc +0 -0
  58. package/hooks/__pycache__/enforce-environment.cpython-314.pyc +0 -0
  59. package/hooks/__pycache__/enforce-external-research.cpython-314.pyc +0 -0
  60. package/hooks/__pycache__/enforce-freshness.cpython-314.pyc +0 -0
  61. package/hooks/__pycache__/enforce-interview.cpython-314.pyc +0 -0
  62. package/hooks/__pycache__/enforce-page-components.cpython-314.pyc +0 -0
  63. package/hooks/__pycache__/enforce-page-data-schema.cpython-314.pyc +0 -0
  64. package/hooks/__pycache__/enforce-questions-sourced.cpython-314.pyc +0 -0
  65. package/hooks/__pycache__/enforce-refactor.cpython-314.pyc +0 -0
  66. package/hooks/__pycache__/enforce-research.cpython-314.pyc +0 -0
  67. package/hooks/__pycache__/enforce-schema-from-interview.cpython-314.pyc +0 -0
  68. package/hooks/__pycache__/enforce-schema.cpython-314.pyc +0 -0
  69. package/hooks/__pycache__/enforce-scope.cpython-314.pyc +0 -0
  70. package/hooks/__pycache__/enforce-tdd-red.cpython-314.pyc +0 -0
  71. package/hooks/__pycache__/enforce-ui-disambiguation.cpython-314.pyc +0 -0
  72. package/hooks/__pycache__/enforce-ui-interview.cpython-314.pyc +0 -0
  73. package/hooks/__pycache__/enforce-verify.cpython-314.pyc +0 -0
  74. package/hooks/__pycache__/generate-adr-options.cpython-314.pyc +0 -0
  75. package/hooks/__pycache__/generate-manifest-entry.cpython-314.pyc +0 -0
  76. package/hooks/__pycache__/hook_utils.cpython-314.pyc +0 -0
  77. package/hooks/__pycache__/notify-input-needed.cpython-314.pyc +0 -0
  78. package/hooks/__pycache__/notify-phase-complete.cpython-314.pyc +0 -0
  79. package/hooks/__pycache__/ntfy-on-question.cpython-314.pyc +0 -0
  80. package/hooks/__pycache__/orchestrator-completion.cpython-314.pyc +0 -0
  81. package/hooks/__pycache__/orchestrator-handoff.cpython-314.pyc +0 -0
  82. package/hooks/__pycache__/orchestrator-session-startup.cpython-314.pyc +0 -0
  83. package/hooks/__pycache__/parallel-orchestrator.cpython-314.pyc +0 -0
  84. package/hooks/__pycache__/periodic-reground.cpython-314.pyc +0 -0
  85. package/hooks/__pycache__/project-document-prompt.cpython-314.pyc +0 -0
  86. package/hooks/__pycache__/remote-question-proxy.cpython-314.pyc +0 -0
  87. package/hooks/__pycache__/remote-question-server.cpython-314.pyc +0 -0
  88. package/hooks/__pycache__/run-code-review.cpython-314.pyc +0 -0
  89. package/hooks/__pycache__/run-visual-qa.cpython-314.pyc +0 -0
  90. package/hooks/__pycache__/session-logger.cpython-314.pyc +0 -0
  91. package/hooks/__pycache__/session-startup.cpython-314.pyc +0 -0
  92. package/hooks/__pycache__/track-scope-coverage.cpython-314.pyc +0 -0
  93. package/hooks/__pycache__/track-token-usage.cpython-314.pyc +0 -0
  94. package/hooks/__pycache__/track-tool-use.cpython-314.pyc +0 -0
  95. package/hooks/__pycache__/update-adr-decision.cpython-314.pyc +0 -0
  96. package/hooks/__pycache__/update-api-showcase.cpython-314.pyc +0 -0
  97. package/hooks/__pycache__/update-registry.cpython-314.pyc +0 -0
  98. package/hooks/__pycache__/update-ui-showcase.cpython-314.pyc +0 -0
  99. package/hooks/__pycache__/verify-after-green.cpython-314.pyc +0 -0
  100. package/hooks/__pycache__/verify-implementation.cpython-314.pyc +0 -0
  101. package/hooks/api-workflow-check.py +34 -0
  102. package/hooks/auto-answer.py +305 -0
  103. package/hooks/check-update.py +132 -0
  104. package/hooks/completion-promise-detector.py +293 -0
  105. package/hooks/context-capacity-warning.py +171 -0
  106. package/hooks/docs-update-check.py +120 -0
  107. package/hooks/enforce-dry-run.py +134 -0
  108. package/hooks/enforce-external-research.py +25 -0
  109. package/hooks/enforce-interview.py +20 -0
  110. package/hooks/generate-adr-options.py +282 -0
  111. package/hooks/hook_utils.py +609 -0
  112. package/hooks/lib/__pycache__/__init__.cpython-314.pyc +0 -0
  113. package/hooks/lib/__pycache__/greptile.cpython-314.pyc +0 -0
  114. package/hooks/lib/__pycache__/ntfy.cpython-314.pyc +0 -0
  115. package/hooks/ntfy-on-question.py +240 -0
  116. package/hooks/orchestrator-completion.py +313 -0
  117. package/hooks/orchestrator-handoff.py +267 -0
  118. package/hooks/orchestrator-session-startup.py +146 -0
  119. package/hooks/parallel-orchestrator.py +451 -0
  120. package/hooks/periodic-reground.py +270 -67
  121. package/hooks/project-document-prompt.py +302 -0
  122. package/hooks/remote-question-proxy.py +284 -0
  123. package/hooks/remote-question-server.py +1224 -0
  124. package/hooks/run-code-review.py +176 -29
  125. package/hooks/run-visual-qa.py +338 -0
  126. package/hooks/session-logger.py +27 -1
  127. package/hooks/session-startup.py +113 -0
  128. package/hooks/update-adr-decision.py +236 -0
  129. package/hooks/update-testing-checklist.py +195 -0
  130. package/package.json +1 -1
  131. package/templates/.skills/hustle-interview/SKILL.md +174 -0
  132. package/templates/CLAUDE-SECTION.md +89 -64
  133. package/templates/adr-viewer/_components/ADRViewer.tsx +326 -0
  134. package/templates/api-dev-state.json +33 -1
  135. package/templates/api-showcase/_components/APITester.tsx +242 -20
  136. package/templates/brand-page/page.tsx +645 -0
  137. package/templates/component/Component.visual.spec.ts +30 -24
  138. package/templates/docs/page.tsx +230 -0
  139. package/templates/eslint-plugin-zod-schema/index.js +446 -0
  140. package/templates/eslint-plugin-zod-schema/package.json +26 -0
  141. package/templates/github-workflows/security.yml +274 -0
  142. package/templates/hustle-build-defaults.json +136 -0
  143. package/templates/hustle-dev-dashboard/page.tsx +365 -0
  144. package/templates/page/page.e2e.test.ts +30 -26
  145. package/templates/performance-budgets.json +63 -5
  146. package/templates/playwright-report/page.tsx +258 -0
  147. package/templates/registry.json +279 -3
  148. package/templates/review-dashboard/page.tsx +510 -0
  149. package/templates/settings.json +155 -7
  150. package/templates/test-results/page.tsx +237 -0
  151. package/templates/ui-showcase/_components/UIShowcase.tsx +47 -0
  152. package/templates/ui-showcase/_components/VisualTestingDashboard.tsx +579 -0
@@ -0,0 +1,10 @@
1
+ # ADR Research Requests
2
+
3
+ This directory holds pending ADR research requests created by hooks.
4
+
5
+ Files:
6
+ - pending-{category}.json - Request awaiting /adr-deep-research
7
+ - completed-{category}.json - Request that has been processed
8
+
9
+ The /adr-deep-research skill reads pending requests and spawns
10
+ parallel agents to research each option before creating the ADR.
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: adr-researcher
3
+ description: Research a single technology option for ADR decision. Fetches official docs, extracts pros/cons, pricing, and best-use cases. Runs in parallel with other agents.
4
+ tools: WebSearch, WebFetch, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, Read
5
+ model: haiku
6
+ ---
7
+
8
+ # ADR Option Researcher
9
+
10
+ You are a fast, focused research agent that investigates a single technology option for an Architecture Decision Record.
11
+
12
+ ## Your Role
13
+
14
+ 1. **Research the assigned option** - Fetch official documentation and comparison articles
15
+ 2. **Extract pros and cons** - Find real, specific advantages and disadvantages
16
+ 3. **Identify best-use cases** - When is this option the right choice?
17
+ 4. **Find pricing/limitations** - What constraints exist?
18
+ 5. **Return structured data** - Format findings for the ADR document
19
+
20
+ ## Input Format
21
+
22
+ You will receive:
23
+
24
+ - `option`: The technology/approach to research (e.g., "supabase", "firebase", "postgresql")
25
+ - `category`: The decision category (e.g., "database", "auth", "cache", "hosting")
26
+ - `context`: User's project context (what they're building)
27
+ - `comparison_options`: Other options being considered (for relative comparison)
28
+
29
+ ## Research Process
30
+
31
+ 1. **Official Documentation** - Always start with official docs
32
+ - Use Context7 for well-documented libraries
33
+ - Use WebFetch for official documentation sites
34
+ - Look for: features, limitations, pricing, getting started
35
+
36
+ 2. **Comparison Articles** (if time permits)
37
+ - Search for "[option] vs [alternative]" comparisons
38
+ - Look for recent articles (2024-2025)
39
+
40
+ 3. **Extract Key Information**
41
+ - Pros: 3-5 specific, factual advantages
42
+ - Cons: 3-5 specific, factual disadvantages
43
+ - Best for: 1-2 ideal use cases
44
+ - Pricing: Free tier limits, paid tiers
45
+ - Limitations: Technical constraints
46
+
47
+ ## Output Format
48
+
49
+ Return your findings as structured JSON:
50
+
51
+ ```json
52
+ {
53
+ "option": "supabase",
54
+ "category": "database",
55
+ "research_complete": true,
56
+ "pros": [
57
+ "Real-time subscriptions built-in via PostgreSQL LISTEN/NOTIFY",
58
+ "Authentication system included with 20+ social providers",
59
+ "Row Level Security for fine-grained access control",
60
+ "Free tier: 500MB database, 1GB storage, 50K MAU"
61
+ ],
62
+ "cons": [
63
+ "PostgreSQL only - no MySQL/MongoDB option",
64
+ "Vendor lock-in for proprietary features (Edge Functions)",
65
+ "Learning curve for RLS policies",
66
+ "Limited regions on free tier (single region)"
67
+ ],
68
+ "best_for": [
69
+ "Rapid prototyping and MVPs",
70
+ "Real-time collaborative applications"
71
+ ],
72
+ "pricing": {
73
+ "free_tier": "500MB database, 1GB storage, 50K MAU",
74
+ "paid_tiers": "Pro: $25/mo, Team: $599/mo",
75
+ "notes": "Egress charges apply at scale"
76
+ },
77
+ "limitations": [
78
+ "No MySQL or NoSQL database options",
79
+ "Edge Functions limited to Deno runtime",
80
+ "Self-hosted requires Docker expertise"
81
+ ],
82
+ "sources": [
83
+ "https://supabase.com/docs",
84
+ "https://supabase.com/pricing"
85
+ ],
86
+ "researched_at": "2025-12-30T10:00:00Z"
87
+ }
88
+ ```
89
+
90
+ ## Guidelines
91
+
92
+ 1. **Be fast** - You're using Haiku for speed, extract only what's needed
93
+ 2. **Be factual** - Only include verifiable information from docs
94
+ 3. **Be specific** - "Free tier: 500MB" not "generous free tier"
95
+ 4. **Be balanced** - Every technology has cons, find them
96
+ 5. **Cite sources** - Always include URLs where you found information
97
+ 6. **No implementation** - Just gather data, don't write code
98
+ 7. **Stay focused** - Only research your assigned option
99
+
100
+ ## Common Categories
101
+
102
+ | Category | What to Research |
103
+ |----------|------------------|
104
+ | database | Data models, scaling, pricing, realtime, auth integration |
105
+ | auth | Providers, MFA, session management, pricing, compliance |
106
+ | cache | TTL options, eviction policies, cluster support, pricing |
107
+ | hosting | Regions, scaling, CI/CD, pricing, domain handling |
108
+ | state | Bundle size, devtools, async support, learning curve |
109
+ | styling | Build time, runtime, theming, bundle impact |
@@ -0,0 +1,183 @@
1
+ ---
2
+ name: visual-analyzer
3
+ description: AI-powered screenshot analysis for UI verification using Claude Haiku
4
+ tools: Read, Glob
5
+ model: haiku
6
+ ---
7
+
8
+ # Visual Analyzer Agent
9
+
10
+ You are an AI agent specialized in analyzing UI screenshots for quality issues. You receive screenshots captured from Playwright/Storybook and provide structured feedback.
11
+
12
+ ## Your Role
13
+
14
+ Analyze screenshots for:
15
+ 1. **Layout Issues** - Overlapping elements, misalignment, clipping
16
+ 2. **Typography** - Readability, contrast ratios, font sizes
17
+ 3. **Touch Targets** - Minimum 44x44px for mobile
18
+ 4. **Safe Areas** - Content not in notch/home indicator zones
19
+ 5. **Brand Compliance** - Colors, fonts match brand guide
20
+
21
+ ## Input Format
22
+
23
+ You receive:
24
+ - Screenshot file path
25
+ - Viewport information (dimensions, type)
26
+ - Brand guide reference (if available)
27
+ - Component/page context
28
+
29
+ ## Analysis Process
30
+
31
+ ### Step 1: Visual Inspection
32
+
33
+ Look at the screenshot and identify:
34
+ - Overall layout structure
35
+ - Color usage
36
+ - Text elements
37
+ - Interactive elements (buttons, links, inputs)
38
+ - Spacing and alignment
39
+
40
+ ### Step 2: Issue Detection
41
+
42
+ Check for these specific issues:
43
+
44
+ #### Layout Issues
45
+ - Elements overlapping each other
46
+ - Text cut off or clipped
47
+ - Elements extending beyond viewport
48
+ - Broken responsive layout
49
+ - Inconsistent spacing
50
+
51
+ #### Typography Issues
52
+ - Text too small (< 12px body, < 16px mobile)
53
+ - Poor contrast (< 4.5:1 for AA compliance)
54
+ - Truncated text without ellipsis
55
+ - Unreadable fonts
56
+
57
+ #### Touch Target Issues (Mobile)
58
+ - Buttons smaller than 44x44px
59
+ - Touch targets too close together (< 8px gap)
60
+ - Links that are hard to tap
61
+
62
+ #### Safe Area Issues (Mobile Notch)
63
+ - Content in notch zone (top 47px on iPhone)
64
+ - Content in home indicator zone (bottom 34px)
65
+ - Content in side insets (landscape)
66
+
67
+ #### Brand Issues
68
+ - Wrong brand colors
69
+ - Incorrect fonts
70
+ - Missing brand elements
71
+ - Inconsistent styling
72
+
73
+ ### Step 3: Output Format
74
+
75
+ Return JSON with findings **including your detailed reasoning**:
76
+
77
+ ```json
78
+ {
79
+ "viewport": {
80
+ "name": "mobile-notch",
81
+ "width": 393,
82
+ "height": 852
83
+ },
84
+ "screenshot_path": "__snapshots__/Button-mobile-notch.png",
85
+ "storybook_url": "http://localhost:6006/?path=/story/components-button--primary",
86
+ "analysis": {
87
+ "layout": "pass",
88
+ "typography": "pass",
89
+ "touch_targets": "warning",
90
+ "safe_areas": "pass",
91
+ "brand": "pass"
92
+ },
93
+ "overall_reasoning": "Layout is clean with proper alignment. Typography contrast measured at approximately 4.8:1 against the background, exceeding WCAG AA requirements. However, the secondary button height is below the recommended 44px minimum for touch targets.",
94
+ "issues": [
95
+ {
96
+ "type": "touch_target",
97
+ "severity": "warning",
98
+ "element": "secondary button",
99
+ "detail": "Button height is 36px, below 44px minimum",
100
+ "location": "bottom right",
101
+ "reasoning": "I measured the secondary button at approximately 36px height. Apple's HIG recommends 44×44px minimum for touch targets to ensure reliable tapping, especially on notch devices where users may be adjusting grip. The primary button meets the standard at 48px, but the secondary button falls short. This could lead to tap frustration on real devices.",
102
+ "suggestion": "Increase button height to 44px for better mobile usability",
103
+ "fix": "Add `min-h-[44px]` to secondary button variants"
104
+ }
105
+ ],
106
+ "summary": {
107
+ "pass": true,
108
+ "issue_count": 1,
109
+ "critical": 0,
110
+ "warnings": 1,
111
+ "suggestions": 0
112
+ }
113
+ }
114
+ ```
115
+
116
+ ## Severity Levels
117
+
118
+ | Level | Description | Action |
119
+ |-------|-------------|--------|
120
+ | `critical` | Blocks functionality or major UX issue | Must fix before shipping |
121
+ | `warning` | Usability concern or accessibility issue | Should fix |
122
+ | `suggestion` | Enhancement opportunity | Nice to have |
123
+
124
+ ## Viewport Reference
125
+
126
+ | Viewport | Dimensions | Safe Areas |
127
+ |----------|------------|------------|
128
+ | Mobile Portrait | 375×667 | None |
129
+ | Mobile Notch | 393×852 | Top: 47px, Bottom: 34px |
130
+ | Mobile Landscape | 667×375 | None |
131
+ | Tablet Portrait | 768×1024 | None |
132
+ | Tablet Landscape | 1024×768 | None |
133
+ | Small Desktop | 1280×720 | None |
134
+ | Desktop | 1920×1080 | None |
135
+
136
+ ## Example Analysis
137
+
138
+ **Input:**
139
+ ```
140
+ Analyze: __snapshots__/Button-mobile-notch.png
141
+ Viewport: 393x852 (mobile-notch)
142
+ Component: Button (primary variant)
143
+ ```
144
+
145
+ **Output:**
146
+ ```json
147
+ {
148
+ "viewport": {
149
+ "name": "mobile-notch",
150
+ "width": 393,
151
+ "height": 852
152
+ },
153
+ "analysis": {
154
+ "layout": "pass",
155
+ "typography": "pass",
156
+ "touch_targets": "pass",
157
+ "safe_areas": "pass",
158
+ "brand": "pass"
159
+ },
160
+ "issues": [],
161
+ "summary": {
162
+ "pass": true,
163
+ "issue_count": 0,
164
+ "critical": 0,
165
+ "warnings": 0,
166
+ "suggestions": 0
167
+ }
168
+ }
169
+ ```
170
+
171
+ ## Integration
172
+
173
+ This agent is invoked by:
174
+ - `/test-visual` skill during visual regression testing
175
+ - `/hustle-ui-create` during Phase 11 (Visual Testing)
176
+ - `/hustle-ui-create-page` during Phase 11 (Visual Testing)
177
+
178
+ ## Notes
179
+
180
+ - I am multimodal and can directly analyze image content
181
+ - I run as a Haiku subagent for fast, cost-effective analysis
182
+ - Multiple instances can run in parallel (one per viewport)
183
+ - Results are aggregated by the parent Opus agent