@hustle-together/api-dev-tools 3.12.16 → 4.5.3
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/adr-requests/.gitkeep +10 -0
- package/.claude/agents/adr-researcher.md +109 -0
- package/.claude/agents/visual-analyzer.md +183 -0
- package/.claude/api-dev-state.json +10 -0
- package/.claude/documentation-audit.json +114 -0
- package/.claude/registry.json +289 -0
- package/.claude/settings.json +45 -1
- package/.claude/settings.local.json +1 -7
- package/.claude/workflow-logs/None.json +49 -0
- package/.claude/workflow-logs/session-20251230-143727.json +106 -0
- package/.skills/adr-deep-research/SKILL.md +351 -0
- package/.skills/api-create/SKILL.md +34 -20
- package/.skills/api-research/SKILL.md +130 -0
- package/.skills/docs-update/SKILL.md +205 -0
- package/.skills/hustle-brand/SKILL.md +368 -0
- package/.skills/hustle-build/SKILL.md +365 -38
- package/.skills/parallel-spawn/SKILL.md +212 -0
- package/.skills/ralph-continue/SKILL.md +151 -0
- package/.skills/ralph-loop/SKILL.md +341 -0
- package/.skills/ralph-status/SKILL.md +87 -0
- package/.skills/refactor/SKILL.md +59 -0
- package/.skills/shadcn/SKILL.md +522 -0
- package/.skills/test-all/SKILL.md +210 -0
- package/.skills/test-builds/SKILL.md +208 -0
- package/.skills/test-debug/SKILL.md +212 -0
- package/.skills/test-e2e/SKILL.md +168 -0
- package/.skills/test-review/SKILL.md +707 -0
- package/.skills/test-unit/SKILL.md +143 -0
- package/.skills/test-visual/SKILL.md +301 -0
- package/.skills/token-report/SKILL.md +132 -0
- package/CHANGELOG.md +488 -0
- package/README.md +346 -53
- package/bin/cli.js +359 -123
- package/hooks/__pycache__/api-workflow-check.cpython-314.pyc +0 -0
- package/hooks/__pycache__/auto-answer.cpython-314.pyc +0 -0
- package/hooks/__pycache__/cache-research.cpython-314.pyc +0 -0
- package/hooks/__pycache__/check-api-routes.cpython-314.pyc +0 -0
- package/hooks/__pycache__/check-playwright-setup.cpython-314.pyc +0 -0
- package/hooks/__pycache__/check-storybook-setup.cpython-314.pyc +0 -0
- package/hooks/__pycache__/check-update.cpython-314.pyc +0 -0
- package/hooks/__pycache__/completion-promise-detector.cpython-314.pyc +0 -0
- package/hooks/__pycache__/context-capacity-warning.cpython-314.pyc +0 -0
- package/hooks/__pycache__/detect-interruption.cpython-314.pyc +0 -0
- package/hooks/__pycache__/docs-update-check.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-a11y-audit.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-brand-guide.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-component-type-confirm.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-deep-research.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-disambiguation.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-documentation.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-dry-run.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-environment.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-external-research.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-freshness.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-interview.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-page-components.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-page-data-schema.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-questions-sourced.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-refactor.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-research.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-schema-from-interview.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-schema.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-scope.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-tdd-red.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-ui-disambiguation.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-ui-interview.cpython-314.pyc +0 -0
- package/hooks/__pycache__/enforce-verify.cpython-314.pyc +0 -0
- package/hooks/__pycache__/generate-adr-options.cpython-314.pyc +0 -0
- package/hooks/__pycache__/generate-manifest-entry.cpython-314.pyc +0 -0
- package/hooks/__pycache__/hook_utils.cpython-314.pyc +0 -0
- package/hooks/__pycache__/notify-input-needed.cpython-314.pyc +0 -0
- package/hooks/__pycache__/notify-phase-complete.cpython-314.pyc +0 -0
- package/hooks/__pycache__/ntfy-on-question.cpython-314.pyc +0 -0
- package/hooks/__pycache__/orchestrator-completion.cpython-314.pyc +0 -0
- package/hooks/__pycache__/orchestrator-handoff.cpython-314.pyc +0 -0
- package/hooks/__pycache__/orchestrator-session-startup.cpython-314.pyc +0 -0
- package/hooks/__pycache__/parallel-orchestrator.cpython-314.pyc +0 -0
- package/hooks/__pycache__/periodic-reground.cpython-314.pyc +0 -0
- package/hooks/__pycache__/project-document-prompt.cpython-314.pyc +0 -0
- package/hooks/__pycache__/remote-question-proxy.cpython-314.pyc +0 -0
- package/hooks/__pycache__/remote-question-server.cpython-314.pyc +0 -0
- package/hooks/__pycache__/run-code-review.cpython-314.pyc +0 -0
- package/hooks/__pycache__/run-visual-qa.cpython-314.pyc +0 -0
- package/hooks/__pycache__/session-logger.cpython-314.pyc +0 -0
- package/hooks/__pycache__/session-startup.cpython-314.pyc +0 -0
- package/hooks/__pycache__/track-scope-coverage.cpython-314.pyc +0 -0
- package/hooks/__pycache__/track-token-usage.cpython-314.pyc +0 -0
- package/hooks/__pycache__/track-tool-use.cpython-314.pyc +0 -0
- package/hooks/__pycache__/update-adr-decision.cpython-314.pyc +0 -0
- package/hooks/__pycache__/update-api-showcase.cpython-314.pyc +0 -0
- package/hooks/__pycache__/update-registry.cpython-314.pyc +0 -0
- package/hooks/__pycache__/update-ui-showcase.cpython-314.pyc +0 -0
- package/hooks/__pycache__/verify-after-green.cpython-314.pyc +0 -0
- package/hooks/__pycache__/verify-implementation.cpython-314.pyc +0 -0
- package/hooks/api-workflow-check.py +34 -0
- package/hooks/auto-answer.py +97 -20
- package/{.claude/hooks → hooks}/completion-promise-detector.py +0 -0
- package/{.claude/hooks → hooks}/context-capacity-warning.py +0 -0
- package/{.claude/hooks → hooks}/docs-update-check.py +0 -0
- package/{.claude/hooks → hooks}/enforce-dry-run.py +0 -0
- package/hooks/enforce-external-research.py +25 -0
- package/hooks/enforce-interview.py +20 -0
- package/{.claude/hooks → hooks}/generate-adr-options.py +0 -0
- package/{.claude/hooks → hooks}/hook_utils.py +0 -0
- package/hooks/ntfy-on-question.py +15 -2
- package/hooks/orchestrator-handoff.py +81 -3
- package/{.claude/hooks → hooks}/parallel-orchestrator.py +0 -0
- package/hooks/periodic-reground.py +40 -0
- package/{.claude/hooks → hooks}/remote-question-server.py +0 -0
- package/hooks/run-code-review.py +176 -29
- package/{.claude/hooks → hooks}/run-visual-qa.py +0 -0
- package/hooks/session-logger.py +27 -1
- package/hooks/session-startup.py +113 -0
- package/{.claude/hooks → hooks}/update-adr-decision.py +0 -0
- package/package.json +1 -1
- package/templates/.skills/hustle-interview/SKILL.md +174 -0
- package/templates/adr-viewer/_components/ADRViewer.tsx +326 -0
- package/templates/api-dev-state.json +33 -1
- package/templates/brand-page/page.tsx +645 -0
- package/templates/component/Component.visual.spec.ts +30 -24
- package/templates/eslint-plugin-zod-schema/index.js +446 -0
- package/templates/eslint-plugin-zod-schema/package.json +26 -0
- package/templates/github-workflows/security.yml +274 -0
- package/templates/hustle-build-defaults.json +53 -1
- package/templates/page/page.e2e.test.ts +30 -26
- package/templates/performance-budgets.json +63 -5
- package/templates/registry.json +279 -3
- package/templates/review-dashboard/page.tsx +510 -0
- package/templates/settings.json +74 -7
- package/templates/ui-showcase/_components/UIShowcase.tsx +47 -0
- package/templates/ui-showcase/_components/VisualTestingDashboard.tsx +579 -0
- package/.claude/commands/hustle-combine.md +0 -1089
- package/.claude/commands/hustle-ui-create-page.md +0 -1078
- package/.claude/commands/hustle-ui-create.md +0 -1058
- package/.claude/hooks/auto-answer.py +0 -305
- package/.claude/hooks/cache-research.py +0 -337
- package/.claude/hooks/check-api-routes.py +0 -168
- package/.claude/hooks/check-playwright-setup.py +0 -103
- package/.claude/hooks/check-storybook-setup.py +0 -81
- package/.claude/hooks/check-update.py +0 -132
- package/.claude/hooks/detect-interruption.py +0 -165
- package/.claude/hooks/enforce-a11y-audit.py +0 -202
- package/.claude/hooks/enforce-brand-guide.py +0 -241
- package/.claude/hooks/enforce-component-type-confirm.py +0 -97
- package/.claude/hooks/enforce-freshness.py +0 -184
- package/.claude/hooks/enforce-page-components.py +0 -186
- package/.claude/hooks/enforce-page-data-schema.py +0 -155
- package/.claude/hooks/enforce-questions-sourced.py +0 -146
- package/.claude/hooks/enforce-schema-from-interview.py +0 -248
- package/.claude/hooks/enforce-ui-disambiguation.py +0 -108
- package/.claude/hooks/enforce-ui-interview.py +0 -130
- package/.claude/hooks/generate-manifest-entry.py +0 -1161
- package/.claude/hooks/lib/__init__.py +0 -1
- package/.claude/hooks/lib/greptile.py +0 -355
- package/.claude/hooks/lib/ntfy.py +0 -209
- package/.claude/hooks/notify-input-needed.py +0 -73
- package/.claude/hooks/notify-phase-complete.py +0 -90
- package/.claude/hooks/ntfy-on-question.py +0 -240
- package/.claude/hooks/orchestrator-completion.py +0 -313
- package/.claude/hooks/orchestrator-handoff.py +0 -267
- package/.claude/hooks/orchestrator-session-startup.py +0 -146
- package/.claude/hooks/run-code-review.py +0 -393
- package/.claude/hooks/session-logger.py +0 -323
- package/.claude/hooks/test-orchestrator-reground.py +0 -248
- package/.claude/hooks/track-scope-coverage.py +0 -220
- package/.claude/hooks/track-token-usage.py +0 -121
- package/.claude/hooks/update-api-showcase.py +0 -161
- package/.claude/hooks/update-registry.py +0 -352
- package/.claude/hooks/update-ui-showcase.py +0 -224
- package/.claude/test-auto-answer-bot.py +0 -183
- package/.claude/test-completion-detector.py +0 -263
- package/.claude/test-orchestrator-state.json +0 -20
- package/.claude/test-orchestrator.sh +0 -271
- /package/{.claude/commands → commands}/hustle-build.md +0 -0
- /package/{.claude/hooks → hooks}/lib/__pycache__/__init__.cpython-314.pyc +0 -0
- /package/{.claude/hooks → hooks}/lib/__pycache__/greptile.cpython-314.pyc +0 -0
- /package/{.claude/hooks → hooks}/lib/__pycache__/ntfy.cpython-314.pyc +0 -0
- /package/{.claude/hooks → hooks}/project-document-prompt.py +0 -0
- /package/{.claude/hooks → hooks}/remote-question-proxy.py +0 -0
- /package/{.claude/hooks → hooks}/update-testing-checklist.py +0 -0
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# Test Orchestrator - Master test runner for all 5 commands
|
|
4
|
-
#
|
|
5
|
-
# This script:
|
|
6
|
-
# 1. Creates isolated test directory
|
|
7
|
-
# 2. Installs api-dev-tools package
|
|
8
|
-
# 3. Copies .env.example for API keys
|
|
9
|
-
# 4. Runs each command with auto-answer bot
|
|
10
|
-
# 5. Validates completion with completion-detector
|
|
11
|
-
# 6. Retries on failure (with research for solutions)
|
|
12
|
-
# 7. Updates WORKFLOW_CHECKLIST.md with results
|
|
13
|
-
#
|
|
14
|
-
# Usage:
|
|
15
|
-
# ./test-orchestrator.sh
|
|
16
|
-
#
|
|
17
|
-
# Version: 1.0.0
|
|
18
|
-
|
|
19
|
-
set -e # Exit on error
|
|
20
|
-
|
|
21
|
-
# Configuration
|
|
22
|
-
TEST_DIR="$HOME/test-api-dev-tools-auto"
|
|
23
|
-
SOURCE_DIR="/Users/alfonso/Documents/GitHub/api-dev-tools"
|
|
24
|
-
ENV_EXAMPLE="$SOURCE_DIR/.env.example"
|
|
25
|
-
NTFY_TOPIC="test_api_devtools_alerts"
|
|
26
|
-
MAX_RETRIES=5
|
|
27
|
-
PYTHON3="python3"
|
|
28
|
-
|
|
29
|
-
# Colors for output
|
|
30
|
-
RED='\033[0;31m'
|
|
31
|
-
GREEN='\033[0;32m'
|
|
32
|
-
YELLOW='\033[1;33m'
|
|
33
|
-
BLUE='\033[0;34m'
|
|
34
|
-
NC='\033[0m' # No Color
|
|
35
|
-
|
|
36
|
-
# Logging
|
|
37
|
-
log() {
|
|
38
|
-
echo -e "${BLUE}[$(date +'%H:%M:%S')]${NC} $1"
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
log_success() {
|
|
42
|
-
echo -e "${GREEN}[$(date +'%H:%M:%S')]${NC} ✅ $1"
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
log_error() {
|
|
46
|
-
echo -e "${RED}[$(date +'%H:%M:%S')]${NC} ❌ $1"
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
log_warning() {
|
|
50
|
-
echo -e "${YELLOW}[$(date +'%H:%M:%S')]${NC} ⚠️ $1"
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
# NTFY notification
|
|
54
|
-
send_ntfy() {
|
|
55
|
-
local message="$1"
|
|
56
|
-
local title="${2:-Test Orchestrator}"
|
|
57
|
-
local priority="${3:-3}"
|
|
58
|
-
|
|
59
|
-
curl -s \
|
|
60
|
-
-H "Title: $title" \
|
|
61
|
-
-H "Priority: $priority" \
|
|
62
|
-
-d "$message" \
|
|
63
|
-
"https://ntfy.sh/$NTFY_TOPIC" > /dev/null 2>&1 || true
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
# Setup test environment
|
|
67
|
-
setup_test_environment() {
|
|
68
|
-
log "Setting up test environment at $TEST_DIR..."
|
|
69
|
-
|
|
70
|
-
# Remove old test directory if exists
|
|
71
|
-
if [ -d "$TEST_DIR" ]; then
|
|
72
|
-
log_warning "Removing old test directory..."
|
|
73
|
-
rm -rf "$TEST_DIR"
|
|
74
|
-
fi
|
|
75
|
-
|
|
76
|
-
# Create new test directory
|
|
77
|
-
mkdir -p "$TEST_DIR"
|
|
78
|
-
cd "$TEST_DIR"
|
|
79
|
-
|
|
80
|
-
# Initialize git (required for api-dev-tools)
|
|
81
|
-
git init
|
|
82
|
-
git config user.email "test@example.com"
|
|
83
|
-
git config user.name "Test Orchestrator"
|
|
84
|
-
|
|
85
|
-
# Create basic Next.js structure
|
|
86
|
-
log "Creating Next.js project structure..."
|
|
87
|
-
npm init -y > /dev/null 2>&1
|
|
88
|
-
|
|
89
|
-
# Copy .env.example
|
|
90
|
-
if [ -f "$ENV_EXAMPLE" ]; then
|
|
91
|
-
log "Copying .env.example..."
|
|
92
|
-
cp "$ENV_EXAMPLE" "$TEST_DIR/.env"
|
|
93
|
-
log_success ".env file copied"
|
|
94
|
-
else
|
|
95
|
-
log_error ".env.example not found at $ENV_EXAMPLE"
|
|
96
|
-
log_warning "Continuing without .env file - some features may not work"
|
|
97
|
-
fi
|
|
98
|
-
|
|
99
|
-
# Install api-dev-tools (from local source for now)
|
|
100
|
-
log "Installing api-dev-tools from local source..."
|
|
101
|
-
|
|
102
|
-
# Build the package first
|
|
103
|
-
cd "$SOURCE_DIR"
|
|
104
|
-
npm run build > /dev/null 2>&1 || log_warning "Build may have warnings"
|
|
105
|
-
|
|
106
|
-
cd "$TEST_DIR"
|
|
107
|
-
|
|
108
|
-
# Install dependencies
|
|
109
|
-
npm install --save-dev "$SOURCE_DIR" > /dev/null 2>&1 || {
|
|
110
|
-
log_error "Failed to install api-dev-tools"
|
|
111
|
-
exit 1
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
log_success "Test environment setup complete"
|
|
115
|
-
|
|
116
|
-
send_ntfy "Test environment created at $TEST_DIR" "🔧 Setup Complete" 3
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
# Run auto-answer bot in background
|
|
120
|
-
start_auto_answer_bot() {
|
|
121
|
-
log "Starting auto-answer bot..."
|
|
122
|
-
|
|
123
|
-
$PYTHON3 "$SOURCE_DIR/.claude/test-auto-answer-bot.py" "$TEST_DIR" > /dev/null 2>&1 &
|
|
124
|
-
AUTO_ANSWER_PID=$!
|
|
125
|
-
|
|
126
|
-
log_success "Auto-answer bot started (PID: $AUTO_ANSWER_PID)"
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
# Stop auto-answer bot
|
|
130
|
-
stop_auto_answer_bot() {
|
|
131
|
-
if [ ! -z "$AUTO_ANSWER_PID" ]; then
|
|
132
|
-
log "Stopping auto-answer bot..."
|
|
133
|
-
kill $AUTO_ANSWER_PID 2>/dev/null || true
|
|
134
|
-
log_success "Auto-answer bot stopped"
|
|
135
|
-
fi
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
# Test a single command
|
|
139
|
-
test_command() {
|
|
140
|
-
local command="$1"
|
|
141
|
-
local endpoint="$2"
|
|
142
|
-
local command_type="$3"
|
|
143
|
-
local retry=0
|
|
144
|
-
|
|
145
|
-
log "Testing command: $command $endpoint"
|
|
146
|
-
|
|
147
|
-
while [ $retry -lt $MAX_RETRIES ]; do
|
|
148
|
-
log "Attempt $((retry + 1))/$MAX_RETRIES..."
|
|
149
|
-
|
|
150
|
-
# Start auto-answer bot
|
|
151
|
-
start_auto_answer_bot
|
|
152
|
-
|
|
153
|
-
# Run the command (this will be done via Claude Code in actual implementation)
|
|
154
|
-
# For now, we'll log what would happen
|
|
155
|
-
log_warning "TODO: Implement command execution via Claude Code"
|
|
156
|
-
|
|
157
|
-
# Check completion
|
|
158
|
-
$PYTHON3 "$SOURCE_DIR/.claude/test-completion-detector.py" "$TEST_DIR" "$command_type" > /tmp/completion-result.json
|
|
159
|
-
|
|
160
|
-
if [ $? -eq 0 ]; then
|
|
161
|
-
log_success "$command completed successfully!"
|
|
162
|
-
stop_auto_answer_bot
|
|
163
|
-
|
|
164
|
-
send_ntfy "✅ $command PASSED on attempt $((retry + 1))" "Test Success" 4
|
|
165
|
-
|
|
166
|
-
return 0
|
|
167
|
-
else
|
|
168
|
-
log_error "$command failed. Analyzing..."
|
|
169
|
-
|
|
170
|
-
# Show completion status
|
|
171
|
-
cat /tmp/completion-result.json
|
|
172
|
-
|
|
173
|
-
retry=$((retry + 1))
|
|
174
|
-
|
|
175
|
-
if [ $retry -lt $MAX_RETRIES ]; then
|
|
176
|
-
log_warning "Retrying..."
|
|
177
|
-
fi
|
|
178
|
-
|
|
179
|
-
stop_auto_answer_bot
|
|
180
|
-
fi
|
|
181
|
-
done
|
|
182
|
-
|
|
183
|
-
log_error "$command failed after $MAX_RETRIES attempts"
|
|
184
|
-
send_ntfy "❌ $command FAILED after $MAX_RETRIES attempts" "Test Failure" 5
|
|
185
|
-
|
|
186
|
-
return 1
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
# Main test suite
|
|
190
|
-
run_full_test_suite() {
|
|
191
|
-
log "Starting full test suite..."
|
|
192
|
-
send_ntfy "Starting full test suite (5 commands)" "🚀 Test Suite Started" 4
|
|
193
|
-
|
|
194
|
-
local commands_passed=0
|
|
195
|
-
local commands_failed=0
|
|
196
|
-
|
|
197
|
-
# Test 1: /api-create
|
|
198
|
-
if test_command "/api-create" "test-weather-api" "api-create"; then
|
|
199
|
-
commands_passed=$((commands_passed + 1))
|
|
200
|
-
else
|
|
201
|
-
commands_failed=$((commands_failed + 1))
|
|
202
|
-
fi
|
|
203
|
-
|
|
204
|
-
# Test 2: /hustle-ui-create
|
|
205
|
-
if test_command "/hustle-ui-create" "TestCard" "hustle-ui-create"; then
|
|
206
|
-
commands_passed=$((commands_passed + 1))
|
|
207
|
-
else
|
|
208
|
-
commands_failed=$((commands_failed + 1))
|
|
209
|
-
fi
|
|
210
|
-
|
|
211
|
-
# Test 3: /hustle-ui-create-page
|
|
212
|
-
if test_command "/hustle-ui-create-page" "test-dashboard" "hustle-ui-create-page"; then
|
|
213
|
-
commands_passed=$((commands_passed + 1))
|
|
214
|
-
else
|
|
215
|
-
commands_failed=$((commands_failed + 1))
|
|
216
|
-
fi
|
|
217
|
-
|
|
218
|
-
# Test 4: /hustle-combine
|
|
219
|
-
if test_command "/hustle-combine" "test-combined" "hustle-combine"; then
|
|
220
|
-
commands_passed=$((commands_passed + 1))
|
|
221
|
-
else
|
|
222
|
-
commands_failed=$((commands_failed + 1))
|
|
223
|
-
fi
|
|
224
|
-
|
|
225
|
-
# Test 5: /hustle-build
|
|
226
|
-
if test_command "/hustle-build" "simple dashboard" "hustle-build"; then
|
|
227
|
-
commands_passed=$((commands_passed + 1))
|
|
228
|
-
else
|
|
229
|
-
commands_failed=$((commands_failed + 1))
|
|
230
|
-
fi
|
|
231
|
-
|
|
232
|
-
# Final summary
|
|
233
|
-
log ""
|
|
234
|
-
log "=========================================="
|
|
235
|
-
log " TEST SUITE COMPLETE"
|
|
236
|
-
log "=========================================="
|
|
237
|
-
log_success "Passed: $commands_passed/5"
|
|
238
|
-
log_error "Failed: $commands_failed/5"
|
|
239
|
-
log "=========================================="
|
|
240
|
-
|
|
241
|
-
send_ntfy "Test Suite Complete: $commands_passed/5 passed, $commands_failed/5 failed" "🏁 Tests Done" 5
|
|
242
|
-
|
|
243
|
-
if [ $commands_failed -eq 0 ]; then
|
|
244
|
-
return 0
|
|
245
|
-
else
|
|
246
|
-
return 1
|
|
247
|
-
fi
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
# Cleanup on exit
|
|
251
|
-
cleanup() {
|
|
252
|
-
log "Cleaning up..."
|
|
253
|
-
stop_auto_answer_bot
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
trap cleanup EXIT
|
|
257
|
-
|
|
258
|
-
# Main execution
|
|
259
|
-
main() {
|
|
260
|
-
log "=========================================="
|
|
261
|
-
log " API Dev Tools - Test Orchestrator"
|
|
262
|
-
log "=========================================="
|
|
263
|
-
log ""
|
|
264
|
-
|
|
265
|
-
setup_test_environment
|
|
266
|
-
run_full_test_suite
|
|
267
|
-
|
|
268
|
-
exit $?
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
main "$@"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|