@hustle-together/api-dev-tools 3.12.3 → 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 (159) 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 -463
  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 +575 -0
  33. package/README.md +426 -56
  34. package/bin/cli.js +1538 -88
  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-api-showcase.py +13 -1
  130. package/hooks/update-testing-checklist.py +195 -0
  131. package/hooks/update-ui-showcase.py +13 -1
  132. package/package.json +7 -3
  133. package/scripts/extract-schema-docs.cjs +322 -0
  134. package/templates/.skills/hustle-interview/SKILL.md +174 -0
  135. package/templates/CLAUDE-SECTION.md +89 -64
  136. package/templates/adr-viewer/_components/ADRViewer.tsx +326 -0
  137. package/templates/api-dev-state.json +33 -1
  138. package/templates/api-showcase/_components/APIModal.tsx +100 -8
  139. package/templates/api-showcase/_components/APIShowcase.tsx +36 -4
  140. package/templates/api-showcase/_components/APITester.tsx +367 -58
  141. package/templates/brand-page/page.tsx +645 -0
  142. package/templates/component/Component.visual.spec.ts +30 -24
  143. package/templates/docs/page.tsx +230 -0
  144. package/templates/eslint-plugin-zod-schema/index.js +446 -0
  145. package/templates/eslint-plugin-zod-schema/package.json +26 -0
  146. package/templates/github-workflows/security.yml +274 -0
  147. package/templates/hustle-build-defaults.json +136 -0
  148. package/templates/hustle-dev-dashboard/page.tsx +365 -0
  149. package/templates/page/page.e2e.test.ts +30 -26
  150. package/templates/performance-budgets.json +63 -5
  151. package/templates/playwright-report/page.tsx +258 -0
  152. package/templates/registry.json +279 -3
  153. package/templates/review-dashboard/page.tsx +510 -0
  154. package/templates/settings.json +155 -7
  155. package/templates/test-results/page.tsx +237 -0
  156. package/templates/typedoc.json +19 -0
  157. package/templates/ui-showcase/_components/UIShowcase.tsx +48 -1
  158. package/templates/ui-showcase/_components/VisualTestingDashboard.tsx +579 -0
  159. package/templates/ui-showcase/page.tsx +1 -1
@@ -0,0 +1,274 @@
1
+ # Security Audit Workflow
2
+ # Copy to: .github/workflows/security.yml
3
+ #
4
+ # Features:
5
+ # - Dependency vulnerability scanning (npm/pnpm audit)
6
+ # - License compliance checking
7
+ # - Secret detection (gitleaks)
8
+ # - Static analysis (Semgrep)
9
+ #
10
+ # See: docs/SECURITY-AUDIT.md
11
+
12
+ name: Security Audit
13
+
14
+ on:
15
+ push:
16
+ branches: [main, master]
17
+ pull_request:
18
+ branches: [main, master]
19
+ schedule:
20
+ # Run weekly on Sundays at midnight
21
+ - cron: '0 0 * * 0'
22
+ workflow_dispatch: # Allow manual trigger
23
+
24
+ permissions:
25
+ contents: read
26
+ security-events: write
27
+
28
+ jobs:
29
+ dependency-audit:
30
+ name: Dependency Audit
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - name: Checkout repository
34
+ uses: actions/checkout@v4
35
+
36
+ - name: Setup Node.js
37
+ uses: actions/setup-node@v4
38
+ with:
39
+ node-version: '20'
40
+
41
+ - name: Detect package manager
42
+ id: detect-pm
43
+ run: |
44
+ if [ -f "pnpm-lock.yaml" ]; then
45
+ echo "manager=pnpm" >> $GITHUB_OUTPUT
46
+ elif [ -f "yarn.lock" ]; then
47
+ echo "manager=yarn" >> $GITHUB_OUTPUT
48
+ else
49
+ echo "manager=npm" >> $GITHUB_OUTPUT
50
+ fi
51
+
52
+ - name: Setup pnpm
53
+ if: steps.detect-pm.outputs.manager == 'pnpm'
54
+ uses: pnpm/action-setup@v2
55
+ with:
56
+ version: 9
57
+
58
+ - name: Install dependencies
59
+ run: |
60
+ if [ "${{ steps.detect-pm.outputs.manager }}" == "pnpm" ]; then
61
+ pnpm install --frozen-lockfile
62
+ elif [ "${{ steps.detect-pm.outputs.manager }}" == "yarn" ]; then
63
+ yarn install --frozen-lockfile
64
+ else
65
+ npm ci
66
+ fi
67
+
68
+ - name: Run dependency audit
69
+ id: audit
70
+ continue-on-error: true
71
+ run: |
72
+ if [ "${{ steps.detect-pm.outputs.manager }}" == "pnpm" ]; then
73
+ pnpm audit --audit-level=moderate > audit-results.txt 2>&1 || true
74
+ pnpm audit --json > audit-results.json 2>&1 || true
75
+ elif [ "${{ steps.detect-pm.outputs.manager }}" == "yarn" ]; then
76
+ yarn audit --level moderate > audit-results.txt 2>&1 || true
77
+ yarn audit --json > audit-results.json 2>&1 || true
78
+ else
79
+ npm audit --audit-level=moderate > audit-results.txt 2>&1 || true
80
+ npm audit --json > audit-results.json 2>&1 || true
81
+ fi
82
+
83
+ - name: Parse audit results
84
+ id: parse
85
+ run: |
86
+ if [ -f audit-results.json ]; then
87
+ # Extract vulnerability counts (handles both npm and pnpm formats)
88
+ CRITICAL=$(cat audit-results.json | jq '.metadata.vulnerabilities.critical // .vulnerabilities.critical // 0' 2>/dev/null || echo "0")
89
+ HIGH=$(cat audit-results.json | jq '.metadata.vulnerabilities.high // .vulnerabilities.high // 0' 2>/dev/null || echo "0")
90
+ MODERATE=$(cat audit-results.json | jq '.metadata.vulnerabilities.moderate // .vulnerabilities.moderate // 0' 2>/dev/null || echo "0")
91
+
92
+ echo "critical=$CRITICAL" >> $GITHUB_OUTPUT
93
+ echo "high=$HIGH" >> $GITHUB_OUTPUT
94
+ echo "moderate=$MODERATE" >> $GITHUB_OUTPUT
95
+
96
+ # Fail on critical or high
97
+ if [ "$CRITICAL" -gt 0 ] || [ "$HIGH" -gt 0 ]; then
98
+ echo "status=failed" >> $GITHUB_OUTPUT
99
+ else
100
+ echo "status=passed" >> $GITHUB_OUTPUT
101
+ fi
102
+ else
103
+ echo "status=unknown" >> $GITHUB_OUTPUT
104
+ fi
105
+
106
+ - name: Upload audit results
107
+ uses: actions/upload-artifact@v4
108
+ with:
109
+ name: dependency-audit
110
+ path: |
111
+ audit-results.txt
112
+ audit-results.json
113
+
114
+ - name: Create summary
115
+ run: |
116
+ echo "## Dependency Audit Results" >> $GITHUB_STEP_SUMMARY
117
+ echo "" >> $GITHUB_STEP_SUMMARY
118
+ echo "| Severity | Count |" >> $GITHUB_STEP_SUMMARY
119
+ echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
120
+ echo "| Critical | ${{ steps.parse.outputs.critical || 'N/A' }} |" >> $GITHUB_STEP_SUMMARY
121
+ echo "| High | ${{ steps.parse.outputs.high || 'N/A' }} |" >> $GITHUB_STEP_SUMMARY
122
+ echo "| Moderate | ${{ steps.parse.outputs.moderate || 'N/A' }} |" >> $GITHUB_STEP_SUMMARY
123
+ echo "" >> $GITHUB_STEP_SUMMARY
124
+ if [ "${{ steps.parse.outputs.status }}" == "failed" ]; then
125
+ echo "**Status: FAILED** - Critical or high vulnerabilities found" >> $GITHUB_STEP_SUMMARY
126
+ else
127
+ echo "**Status: PASSED**" >> $GITHUB_STEP_SUMMARY
128
+ fi
129
+
130
+ - name: Fail on critical/high vulnerabilities
131
+ if: steps.parse.outputs.status == 'failed'
132
+ run: |
133
+ echo "::error::Found ${{ steps.parse.outputs.critical }} critical and ${{ steps.parse.outputs.high }} high vulnerabilities"
134
+ exit 1
135
+
136
+ license-check:
137
+ name: License Compliance
138
+ runs-on: ubuntu-latest
139
+ steps:
140
+ - name: Checkout repository
141
+ uses: actions/checkout@v4
142
+
143
+ - name: Setup Node.js
144
+ uses: actions/setup-node@v4
145
+ with:
146
+ node-version: '20'
147
+
148
+ - name: Detect package manager
149
+ id: detect-pm
150
+ run: |
151
+ if [ -f "pnpm-lock.yaml" ]; then
152
+ echo "manager=pnpm" >> $GITHUB_OUTPUT
153
+ elif [ -f "yarn.lock" ]; then
154
+ echo "manager=yarn" >> $GITHUB_OUTPUT
155
+ else
156
+ echo "manager=npm" >> $GITHUB_OUTPUT
157
+ fi
158
+
159
+ - name: Setup pnpm
160
+ if: steps.detect-pm.outputs.manager == 'pnpm'
161
+ uses: pnpm/action-setup@v2
162
+ with:
163
+ version: 9
164
+
165
+ - name: Install dependencies
166
+ run: |
167
+ if [ "${{ steps.detect-pm.outputs.manager }}" == "pnpm" ]; then
168
+ pnpm install --frozen-lockfile
169
+ elif [ "${{ steps.detect-pm.outputs.manager }}" == "yarn" ]; then
170
+ yarn install --frozen-lockfile
171
+ else
172
+ npm ci
173
+ fi
174
+
175
+ - name: Check licenses
176
+ run: |
177
+ npx license-checker --production --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;CC0-1.0;Unlicense;0BSD;CC-BY-4.0;CC-BY-3.0;Python-2.0;Artistic-2.0;Zlib;WTFPL' > license-results.txt 2>&1 || true
178
+
179
+ # Check for failures
180
+ if grep -q "FAILED" license-results.txt; then
181
+ echo "::error::Non-approved licenses found"
182
+ cat license-results.txt
183
+ exit 1
184
+ fi
185
+
186
+ - name: Upload license results
187
+ uses: actions/upload-artifact@v4
188
+ with:
189
+ name: license-check
190
+ path: license-results.txt
191
+
192
+ secret-scan:
193
+ name: Secret Scanning
194
+ runs-on: ubuntu-latest
195
+ steps:
196
+ - name: Checkout repository
197
+ uses: actions/checkout@v4
198
+ with:
199
+ fetch-depth: 0 # Full history for secret scanning
200
+
201
+ - name: Gitleaks scan
202
+ uses: gitleaks/gitleaks-action@v2
203
+ env:
204
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
205
+ GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }} # Optional for enterprise
206
+
207
+ sast:
208
+ name: Static Analysis (SAST)
209
+ runs-on: ubuntu-latest
210
+ steps:
211
+ - name: Checkout repository
212
+ uses: actions/checkout@v4
213
+
214
+ - name: Run Semgrep
215
+ uses: returntocorp/semgrep-action@v1
216
+ with:
217
+ config: >-
218
+ p/security-audit
219
+ p/typescript
220
+ p/react
221
+ p/nodejs
222
+ p/jwt
223
+ p/sql-injection
224
+ p/xss
225
+ env:
226
+ SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} # Optional for dashboard
227
+
228
+ # Summary job that depends on all checks
229
+ security-summary:
230
+ name: Security Summary
231
+ runs-on: ubuntu-latest
232
+ needs: [dependency-audit, license-check, secret-scan, sast]
233
+ if: always()
234
+ steps:
235
+ - name: Check all results
236
+ run: |
237
+ echo "## Security Audit Summary" >> $GITHUB_STEP_SUMMARY
238
+ echo "" >> $GITHUB_STEP_SUMMARY
239
+ echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY
240
+ echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
241
+
242
+ # Dependency audit
243
+ if [ "${{ needs.dependency-audit.result }}" == "success" ]; then
244
+ echo "| Dependency Audit | :white_check_mark: Passed |" >> $GITHUB_STEP_SUMMARY
245
+ else
246
+ echo "| Dependency Audit | :x: Failed |" >> $GITHUB_STEP_SUMMARY
247
+ fi
248
+
249
+ # License check
250
+ if [ "${{ needs.license-check.result }}" == "success" ]; then
251
+ echo "| License Compliance | :white_check_mark: Passed |" >> $GITHUB_STEP_SUMMARY
252
+ else
253
+ echo "| License Compliance | :x: Failed |" >> $GITHUB_STEP_SUMMARY
254
+ fi
255
+
256
+ # Secret scan
257
+ if [ "${{ needs.secret-scan.result }}" == "success" ]; then
258
+ echo "| Secret Scanning | :white_check_mark: Passed |" >> $GITHUB_STEP_SUMMARY
259
+ else
260
+ echo "| Secret Scanning | :x: Failed |" >> $GITHUB_STEP_SUMMARY
261
+ fi
262
+
263
+ # SAST
264
+ if [ "${{ needs.sast.result }}" == "success" ]; then
265
+ echo "| Static Analysis | :white_check_mark: Passed |" >> $GITHUB_STEP_SUMMARY
266
+ else
267
+ echo "| Static Analysis | :x: Failed |" >> $GITHUB_STEP_SUMMARY
268
+ fi
269
+
270
+ - name: Fail if any check failed
271
+ if: contains(needs.*.result, 'failure')
272
+ run: |
273
+ echo "::error::One or more security checks failed"
274
+ exit 1
@@ -0,0 +1,136 @@
1
+ {
2
+ "$schema": "hustle-build-defaults",
3
+ "description": "Pre-configured default answers for autonomous mode. Interviews use these defaults unless overridden.",
4
+ "version": "4.5.0",
5
+ "_usage": "Copy to .claude/hustle-build-defaults.json to customize for your project",
6
+
7
+ "adr": {
8
+ "enabled": true,
9
+ "significant_decisions": {
10
+ "database": ["supabase", "firebase", "postgres", "mysql", "mongodb", "sqlite", "planetscale", "neon"],
11
+ "auth": ["api key", "oauth", "jwt", "session", "cookie", "basic auth", "api-key", "bearer"],
12
+ "cache": ["redis", "memcached", "in-memory", "cdn", "edge", "vercel kv"],
13
+ "hosting": ["vercel", "netlify", "aws", "cloudflare", "railway", "render", "fly.io"],
14
+ "state": ["redux", "zustand", "jotai", "context", "mobx", "recoil", "valtio"],
15
+ "styling": ["tailwind", "css modules", "styled-components", "emotion", "vanilla-extract"]
16
+ },
17
+ "min_options_for_adr": 2
18
+ },
19
+
20
+ "autonomous": {
21
+ "enabled": true,
22
+ "skip_interviews": true,
23
+ "use_defaults_for_questions": true,
24
+ "ralph_wiggum_loops": true,
25
+ "max_iterations": 25,
26
+ "emit_promises": true,
27
+ "auto_fix_visual_issues": true,
28
+ "auto_fix_review_issues": true,
29
+ "auto_refactor": true
30
+ },
31
+
32
+ "orchestrator": {
33
+ "auth_required": true,
34
+ "error_handling": "partial-success",
35
+ "brand_guide": true,
36
+ "testing_level": "full",
37
+ "caching_strategy": "individual",
38
+ "documentation_level": "comprehensive"
39
+ },
40
+
41
+ "api": {
42
+ "include_all_params": true,
43
+ "rate_limiting": true,
44
+ "caching": "individual",
45
+ "error_format": "detailed",
46
+ "validation": "strict",
47
+ "logging": true,
48
+ "metrics": true
49
+ },
50
+
51
+ "component": {
52
+ "all_variants": true,
53
+ "accessibility": "wcag-aa",
54
+ "animations": true,
55
+ "responsive": true,
56
+ "dark_mode": true,
57
+ "loading_states": true,
58
+ "error_states": true,
59
+ "storybook": true
60
+ },
61
+
62
+ "page": {
63
+ "layout": "responsive-grid",
64
+ "seo": true,
65
+ "loading_states": true,
66
+ "error_boundary": true,
67
+ "suspense": true,
68
+ "prefetch": true,
69
+ "meta_tags": true
70
+ },
71
+
72
+ "combined": {
73
+ "execution_order": "parallel",
74
+ "caching": "unified",
75
+ "error_handling": "partial-success",
76
+ "retry_strategy": "exponential",
77
+ "timeout": 30000
78
+ },
79
+
80
+ "testing": {
81
+ "unit_tests": true,
82
+ "integration_tests": true,
83
+ "e2e_tests": true,
84
+ "visual_tests": true,
85
+ "coverage_threshold": 80,
86
+ "snapshot_tests": true
87
+ },
88
+
89
+ "documentation": {
90
+ "tsdoc": true,
91
+ "readme": true,
92
+ "changelog": true,
93
+ "storybook_docs": true,
94
+ "api_reference": true
95
+ },
96
+
97
+ "question_mappings": {
98
+ "auth": "auth_required",
99
+ "authentication": "auth_required",
100
+ "error": "error_handling",
101
+ "brand": "brand_guide",
102
+ "styling": "brand_guide",
103
+ "testing": "testing_level",
104
+ "cache": "caching_strategy",
105
+ "variant": "all_variants",
106
+ "a11y": "accessibility",
107
+ "accessibility": "accessibility",
108
+ "layout": "layout",
109
+ "seo": "seo"
110
+ },
111
+
112
+ "remote_questions": {
113
+ "enabled": false,
114
+ "port": 8765,
115
+ "wait_mode": false,
116
+ "_instructions": [
117
+ "Set enabled=true or REMOTE_QUESTIONS_ENABLED=true to activate",
118
+ "Start the server: python hooks/remote-question-server.py",
119
+ "Access locally: http://localhost:8765",
120
+ "Access from phone on same network: http://YOUR_COMPUTER_IP:8765",
121
+ "Click 'Enable' in dashboard header for browser notifications",
122
+ "Set wait_mode=true to block until remote answer is received"
123
+ ]
124
+ },
125
+
126
+ "ntfy": {
127
+ "enabled": true,
128
+ "topic": "api-dev-tools-test",
129
+ "server": "https://ntfy.sh",
130
+ "notify_on": ["questions", "phase_complete", "errors", "completion"],
131
+ "_instructions": [
132
+ "Subscribe at ntfy.sh/<topic> on your phone",
133
+ "Notifications sent for: questions needing input, phase completions, errors, workflow completion"
134
+ ]
135
+ }
136
+ }