diff --git a/.claude/settings.local.json b/.claude/settings.local.json index eb532d69..e1f3595c 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -19,7 +19,67 @@ "Bash(curl:*)", "Bash(yes:*)", "WebFetch(domain:json.schemastore.org)", - "WebFetch(domain:www.schemastore.org)" + "WebFetch(domain:www.schemastore.org)", + "Bash(scripts/pre-deployment-check.sh)", + "Bash(ssh roodev@146.190.76.204 \"cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp eval ''wp_set_password\\(\"\"TestPass123\"\", 25\\);'' 2>&1\")", + "Bash(wc:*)", + "Bash(php -l:*)", + "Bash(php:*)", + "Bash(./scripts/pre-deployment-check.sh:*)", + "Bash(HEADLESS=true BASE_URL=https://upskill-staging.measurequick.com node test-comprehensive-validation.js:*)", + "Bash(ssh roodev@146.190.76.204 'cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp user get test_master --field=ID 2>&1')", + "Bash(ssh:*)", + "mcp__playwright__browser_wait_for", + "mcp__playwright__browser_console_messages", + "mcp__playwright__browser_snapshot", + "mcp__playwright__browser_navigate_back", + "mcp__playwright__browser_press_key", + "mcp__playwright__browser_network_requests", + "Bash(source:*)", + "Bash(sshpass -p \"$UPSKILL_STAGING_PASS\" ssh -o StrictHostKeyChecking=no \"$UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP\" \"cd $UPSKILL_STAGING_PATH && wp eval ''HVAC_Page_Manager::create_pages\\(\\); echo \"\"Pages created/verified\"\";'' 2>&1\")", + "mcp__playwright__browser_select_option", + "mcp__playwright__browser_hover", + "mcp__playwright__browser_resize", + "Bash(grep:*)", + "Bash(sshpass -p \"$UPSKILL_STAGING_PASS\" ssh -o StrictHostKeyChecking=no \"roodev@146.190.76.204\" \"cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp eval \"\"HVAC_Secure_Storage::store_credential\\(''hvac_google_maps_api_key'', ''AIzaSyD_W0fPmA3wtsQ_o3mdeoaUpxX_cdBvi5g''\\); echo ''API key stored successfully'';\"\" && wp cache flush\")", + "Bash(sshpass -p \"$UPSKILL_PROD_SSH_PASS\" ssh -o StrictHostKeyChecking=no \"$UPSKILL_PROD_SSH_USER@$UPSKILL_PROD_IP\" \"cd $UPSKILL_PROD_PATH && wp eval \"\"HVAC_Secure_Storage::save_credential\\(''hvac_google_maps_api_key'', ''AIzaSyD_W0fPmA3wtsQ_o3mdeoaUpxX_cdBvi5g''\\); echo ''API key saved successfully'';\"\"\")", + "Bash(sshpass -p \"$UPSKILL_PROD_SSH_PASS\" ssh -o StrictHostKeyChecking=no \"$UPSKILL_PROD_SSH_USER@$UPSKILL_PROD_IP\" \"cd $UPSKILL_PROD_PATH && wp eval \"\"HVAC_Secure_Storage::store_credential\\(''hvac_google_maps_api_key'', ''AIzaSyD_W0fPmA3wtsQ_o3mdeoaUpxX_cdBvi5g''\\); echo ''API key saved successfully'';\"\"\")", + "Bash(sshpass -p \"$UPSKILL_PROD_SSH_PASS\" ssh -o StrictHostKeyChecking=no \"$UPSKILL_PROD_SSH_USER@$UPSKILL_PROD_IP\" \"cd $UPSKILL_PROD_PATH && wp cache flush\")", + "Bash(sshpass -f ~/.ssh/cloudways_pass rsync:*)", + "Bash(rsync:*)", + "Bash(if [ -f /home/ben/dev/upskill-event-manager/.env ])", + "Bash(then echo \".env exists\")", + "Bash(else echo \".env not found\")", + "Bash(fi)", + "mcp__wordpress-production__wp_cpt_search", + "mcp__wordpress-production__wp_get_cpt", + "mcp__wordpress-production__wp_update_cpt", + "Bash(find:*)", + "mcp__wordpress-production__wp_users_search", + "mcp__wordpress-production__wp_add_user", + "Bash(node --check:*)", + "mcp__playwright__browser_tab_list", + "Bash(scp:*)", + "Bash(sshpass -p 'uSCO6f1y' scp -o StrictHostKeyChecking=no scripts/setup-approved-labs.php scripts/check-venue-coordinates.php scripts/geocode-approved-labs.php roodev@146.190.76.204:/home/974670.cloudwaysapps.com/uberrxmprk/public_html/wp-content/plugins/hvac-community-events/scripts/)", + "Bash(sshpass -p 'uSCO6f1y' ssh -o StrictHostKeyChecking=no roodev@146.190.76.204 \"ls -la /home/974670.cloudwaysapps.com/uberrxmprk/public_html/wp-content/plugins/hvac-community-events/includes/class-hvac-venue-categories.php 2>/dev/null || echo ''File not found''\")", + "Bash(sshpass -p 'uSCO6f1y' ssh -o StrictHostKeyChecking=no roodev@146.190.76.204 \"grep -n ''venue-categories\\\\|Venue_Categories'' /home/974670.cloudwaysapps.com/uberrxmprk/public_html/wp-content/plugins/hvac-community-events/includes/class-hvac-plugin.php\")", + "Bash(sshpass -p 'uSCO6f1y' ssh -o StrictHostKeyChecking=no roodev@146.190.76.204 \"cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp eval ''if \\(class_exists\\(\"\"HVAC_Venue_Categories\"\"\\)\\) { echo \"\"Class exists\\\\n\"\"; HVAC_Venue_Categories::instance\\(\\)->register_taxonomies\\(\\); echo \"\"Registered\\\\n\"\"; } else { echo \"\"Class not found\\\\n\"\"; } echo \"\"venue_type exists: \"\" . \\(taxonomy_exists\\(\"\"venue_type\"\"\\) ? \"\"yes\"\" : \"\"no\"\"\\) . \"\"\\\\n\"\";''\")", + "Bash(sshpass -p 'uSCO6f1y' scp -o StrictHostKeyChecking=no scripts/check-venue-coordinates.php roodev@146.190.76.204:/home/974670.cloudwaysapps.com/uberrxmprk/public_html/wp-content/plugins/hvac-community-events/scripts/)", + "Bash(sshpass -p 'uSCO6f1y' ssh -o StrictHostKeyChecking=no roodev@146.190.76.204 \"cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp eval-file wp-content/plugins/hvac-community-events/scripts/check-venue-coordinates.php\")", + "Bash(sshpass -p 'uSCO6f1y' ssh -o StrictHostKeyChecking=no roodev@146.190.76.204 \"cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp eval ''\n// Simulate AJAX context - just check what happens without forcing registration\necho \"\"TEC active: \"\" . \\(function_exists\\(\"\"tribe_get_venue\"\"\\) ? \"\"yes\"\" : \"\"no\"\"\\) . \"\"\\\\n\"\";\necho \"\"venue_type taxonomy: \"\" . \\(taxonomy_exists\\(\"\"venue_type\"\"\\) ? \"\"yes\"\" : \"\"no\"\"\\) . \"\"\\\\n\"\";\n\n// Now test the actual method\nif \\(class_exists\\(\"\"HVAC_Training_Map_Data\"\"\\)\\) {\n $data = HVAC_Training_Map_Data::get_instance\\(\\);\n $venues = $data->get_venue_markers\\(\\);\n echo \"\"get_venue_markers\\(\\) returned: \"\" . count\\($venues\\) . \"\" venues\\\\n\"\";\n}\n''\")", + "Bash(sshpass -p 'uSCO6f1y' scp:*)", + "Bash(sshpass -p 'uSCO6f1y' ssh -o StrictHostKeyChecking=no roodev@146.190.76.204 \"cd /home/974670.cloudwaysapps.com/uberrxmprk/public_html && wp eval ''if \\(class_exists\\(\"\"HVAC_Training_Map_Data\"\"\\)\\) { $d = HVAC_Training_Map_Data::get_instance\\(\\); $v = $d->get_venue_markers\\(\\); foreach \\($v as $x\\) { echo $x[\"\"name\"\"] . \"\"\\\\n\"\"; } }''\")", + "Bash(sshpass:*)", + "WebFetch(domain:upskillhvac.com)", + "Bash(pkill:*)", + "Bash(echo:*)", + "WebFetch(domain:upskill-staging.measurequick.com)", + "Bash(bash:*)", + "mcp__playwright__browser_handle_dialog", + "Bash(/home/ben/dev/upskill-event-manager/scripts/pre-deployment-check.sh:*)", + "Bash(/home/ben/dev/upskill-event-manager/scripts/deploy.sh:*)", + "Bash(printf:*)", + "WebFetch(domain:issuetracker.google.com)" ], "deny": [], "ask": [], diff --git a/CLAUDE.md b/CLAUDE.md index 7d6fccd7..66c3339a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -180,3 +180,53 @@ The plugin still relies on "The Events Calendar: Community" (TEC CE) for event c - **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** - System architecture details - **[docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)** - Common issues and solutions - **[docs/TESTING-GUIDE.md](docs/TESTING-GUIDE.md)** - Testing procedures + +## AI Assistant Tools + +### Zen MCP Tools (Use Throughout Every Session) +- **Zen Debug**: Use whenever you encounter an error or unexpected behavior +- **Zen Code Review**: Use whenever you finish a significant piece of code or feature +- **Zen Analyze**: Use before adding new features or making significant changes to existing code +- **Zen Deepthink**: Use when you have a complex problem to solve or need to brainstorm ideas +- **Zen Chat**: Use for general questions, clarifications, or when you need assistance with a task + +**Important Context Reminder**: Remind the Zen tools that this is a small local environment with a single user, so security and scalability are not primary concerns. + +### Clink Multi-Model Workflows (GPT-5, Gemini 3, Kimi K2.5) + +Use `mcp__zen__clink` to get diverse AI perspectives via external CLIs. Available CLIs: +- **codex**: GPT-5 - Fast, precise code understanding +- **gemini**: Gemini 3 - Large context (1M tokens), thorough analysis +- **Kimi K2.5** (via `mcp__zen__chat` with OpenRouter) - Strong reasoning, excellent at complex logic + +**Security Warning:** Files are sent to OpenAI, Google, and Moonshot AI. NEVER use on `.env`, credentials, or regulated data. + +**When to Use Multi-Model:** +- Code reviews (catch different types of issues) +- Complex debugging (multiple hypotheses) +- Architecture decisions (diverse perspectives) +- Planning (compare approaches) + +**Available Skills:** +- `/multi-review ` - Code review from all 3 models +- `/multi-plan ` - Planning perspectives from all 3 models +- `/multi-debug ` - Parallel bug investigation +- `/multi-analyze ` - Comprehensive analysis + +**Quick Usage** (all three calls in one message = parallel execution): +```python +review_prompt = "Review for bugs and security issues" +mcp__zen__clink(prompt=review_prompt, cli_name="codex", role="codereviewer", absolute_file_paths=["/absolute/path/file.py"]) +mcp__zen__clink(prompt=review_prompt, cli_name="gemini", role="codereviewer", absolute_file_paths=["/absolute/path/file.py"]) +mcp__zen__chat(prompt=review_prompt + " Use Kimi K2.5 via OpenRouter for this analysis.", absolute_file_paths=["/absolute/path/file.py"]) +``` + +**Important:** Use absolute paths (not globs). Resolve patterns first: `find src -name "*.py" | xargs realpath` + +**Synthesis Format:** After multi-model analysis, report: +1. **Consensus** - All models agree +2. **Majority** - 2/3 agree (note dissent) +3. **Unique insights** - Model-specific findings +4. **Recommended actions** - Prioritized by consensus + +**Roles:** Each CLI supports `default`, `codereviewer`, `planner`